Vous êtes sur la page 1sur 53

Arduino MS

Arduino MS
Sobre este Minicurso
Viabilizado pela Organizao do ERI MS;
Apoiado pelo grupo ArduinoMS;
Agradecimentos especiais ao do SENAC e UCDB.
Sobre o Ministrante:
Samuel Cavalcante
Engenheiro de Computao (UNIDERP)- CREA-MS: 12873D
Ps Graduado em Eng. De Sistemas (ESAB)
Analista em Educao profissional no SENAC/MS
Professor UNIDERP e UNAES II
Pai, Esposo, Professor, Empresrio, Consultor, participante
de comunidades, conselheiro entre outros.

Arduino MS
O que veremos

Introduo ao Arduino
Cdigo Pisca LED
Configurando a IDE para transferir o Cdigo
Acionamento de LED com Boto
Pisca Led com Sensor LDR

Obs.: Ao decorrer da oficina sero tratados assuntos sobre


eletrnica e eletricidade bsica.

Arduino MS
Microcontrolador X Microprocessadorr
Qual a principal diferena entre eles?

Arduino MS
Introduo ao Arduino
Plataforma baseada em Atmel da AVR (ATMega168;
ATMega 328);
Oferece um IDE e bibliotecas de programao de alto nvel;

Open-source hardware e software


Ampla comunidade
Programado em C/C++

Transferncia de firmware
via USB
MCU com bootloader

Arduino MS
Histrico do Arduino
Projeto criado na Itlia pelo Mssimo Banzi no Interaction
Design Institute Ivrea;
Nasceu para complementar o aprendizado de programao,
computao fsica e grfica;
Nasceu do Processing e Wiring;
Processing um ambiente e linguagem de programao para
criar imagens, animao e interao;

Arduino MS
Simplicidade no circuito:

Arduino MS
Muitas aplicaes prticas

Robs
Roupas eletrnicas
Mquinas de corte e modelagem 3D de baixo custo;
Desenvolvimento de celulares customizados
Instrumentos musicais
Paredes interativas
Instrumentao humana

Arduino MS
Vrios tipos, vrios fabricantes...

Mega
Lilypad
Nano
Uno
Pro
Arduino BT
Freeduino
Severino
Program-ME

Arduino MS
Atmega168 / Atmega328: corao

Caractersticas do ATmega 168:


RISC Reduced Instruction Set Computer
20 MIPS (20 Milhes de instrues por segundo)
16Kb Flash / 512 b EEPROM / 1Kb RAM Esttica
10.000 ciclos na Flash e 100.000 na EEPROM
2 contadores / temporizadores de 8bits
1 contador / temporizador de 16bits
1 temporizador de tempo real com clock a parte
14 portas digitais
6 portas analgicas

Arduino MS
Caractersticas tcnicas

6 canais PWM
6 conversores analgico/digital de 10 bits
1 serial programvel (USART)
1 interface SPI (Serial Peripheral Interface)
1 interface serial a 2 fios (I2C)
1 watch dog timer programvel
1 comparador analgico no chip
Interrupo ou wake-up na alterao de estado dos pinos

Arduino MS
Resumo das conexes da placa

Arduino MS
FT232RL
Conversor USB-Serial

Conector USB

Regular 7085:
Recebe at 12 volts e
regula para 5 volts

Alimentao externa:
At 12 volts

Arduino MS
Boto de reset

ICSP
Para gravar bootloader
ou programas/firmware

AtMega328 /168/8

Arduino MS
AREF
Referncia analgica
Padro 5 volts

GND

Portas digitais 0 a 13
0 RX 1 TX = usada durante
transferncia de sketch e
comunicao serial com
placa
2,4,7,8,12,13 = portas
digitais convncionais

3,5,6,9,10,11 = portas PWM

Arduino MS

Portas analgicas 4 e 5
So as portas utilizadas
para conexes via I2C /
TWI.

Portas analgicas de 0 a 5
GND
Podem funcionar como digitais de 14 a 19
5 volts
VIN
3.3 volts
Alimentao de entrada sem regulagem

Arduino MS
Shields: arquitetura modular inteligente
Arduino estabeleceu um padro de pinagem que
respeitado por diversas placas shield:

Arduino MS
Por dentro do MCU

Arduino MS
Porta Digital Vs. Analgica
Digital: trabalha com lgica binria, 0 e 1.
No Arduino segue padro TTL onde:
0 a 0,8 volts = 0
2 a 5 volts = 1

Analgica: valor lido anlogo a tenso.


Referncia de analogia 5 volts
0 volts = 0
2.5 volts= 512
5 volts = 1023
Conversor A/D de 10 bits: 0 a 1023
00000000012 = 110 = 0,005v
00000000102 = 210 = 0,010v
00000000112 = 210 = 0,015v
10000000002 = 51210 = 2,50v
....

Arduino MS
Porta Digital Vs. Analgica
Portas analgicas expressam valores de 0 a 1023 mas
no so utilizadas para transferncia de informaes
precisas
Neste caso o dispositivo recebe um valor analgico de 0v 5v,
que ser convertido em um nmero binrio de 10 bits. Cada
bits somado ao circuito equivale a 0,005v.

Portas digitais permitem que dados sejam transferidos


em sequencia atravs de uma lgica ou protocolo binrio
Portas digitais no conseguem comandar potncia

Arduino MS
Porta PWM
Uma porta hbrida:
digital porm com
modularizao de
zeros e uns de forma
que consegue
expressar uma idia
de potncia;

Arduino MS
Na prtica
Ligamos componentes em portas digitais (comuns, PWM)
ou analgica
Fazemos leitura e escrita nestas portas afim de obter um
dado ou um determinado comportamento
Processamos os dados no microcontrolador

Alguns exemplos de componentes...

Arduino MS
Ping Sensor de distncia ultrasonico

Arduino MS
LCD Touch

Shield LCD Touch screen

Arduino MS
SIM Reader

Arduino MS
Lojas de componentes

www.parallax.com
www.sparkfun.com
www.makershed.com
www.liquidware.com
www.ladyada.net
www.adafruit.com
www.rlrobotics.ind.br/ - BRASIL
www.empretecnet.com.br/do/Home - BRASIL

Arduino MS
Programando para Arduino
IDE pode ser baixada de www.arduino.cc
A IDE foi desenvolvida com Java, portanto precisaremos de
um mquina virtual instalada.
Funciona em Windows. Mac OS X e Linux (em alguns
windows e mac pode ser necessrio colocar driver)
Utiliza GCC + GCC Avr para compilao
(voc pode tambm programar diretamente com GCC!)
A transferncia para a placa feita via USB pelo IDE;
(mas tambm pode ser feita com gravadores ICSP!)

Arduino MS
Partes bsicas do programa Arduino
Temos que obrigatoriamente programar dois mtodos:
void setup() {
}
void loop() {
}

O setup executado uma s vez assim que a placa for


ligada e o loop ter o cdigo de execuo infinita

Arduino MS
Portas digitais e analgicas
Na prtica ligamos componentes em portas digitais e
analgicas e atravs do cdigo Arduino, manipulamos as
portas:
pinMode(<porta>, <modo>): configura uma porta digital
para ser lida ou para enviarmos dados;
digitalWrite(<porta>, 0 ou 1): envia 0 ou 1 para porta digital
digitalRead(<porta>): retorna um 0 ou 1 lido da porta
analogRead(<porta>): retorna de 0 a 1023 com o valor da
porta analgica
analogWrite(<porta>, <valor>): escreve em uma porta PWM
um valor de 0 a 255

Arduino MS
Protoboard ou Matriz de contato
um dispositivo usado
para construir circuitos sem
a necessidade de solda. Na
parte central de todos os
pinos alinhados sob um
nmero estiver conectado,
enquanto os nas bordas
superior e inferior normalmente marcado com
linhas pretas e vermelhas so conectados na
horizontal.

Arduino MS
Primeiro contato com Arduino
Ligar sua placa no cabo USB e no PC
Realizar a instalao do Driver com a ajuda do facilitador
Verificar o jumper de alimentao configurando para USB
se necessrio
Digitar o cdigo, a ser passado, no Arduino IDE
Selecionar no software a verso do Arduino e a porta serial
de comunicao.
Clicar no boto de transferncia de sketch

Arduino MS
Exemplo pisca led com Arduino
Esta conexo bem simples
somente para efeito de teste
para piscar o led.
O correto ligar um resistor
usando uma protoboard.

Arduino MS
Exemplo pisca led
void setup() {
pinMode(13, OUTPUT); //porta 13 em output
}
void loop() {
digitalWrite(13, HIGH); //HIGH = 1 = TRUE
delay(500);
digitalWrite(13, LOW); //LOW = 0 = FALSE
delay(500);
}

Arduino MS
Configurando a IDE para transferir o Cdigo

Arduino MS
Configurando a IDE para transferir o Cdigo

Arduino MS
Procurando erros no cdigo

Arduino MS
Fazendo o Upload do Cdigo para o Arduino

Arduino MS
Entrada Digital: Fazendo leitura de um boto
Os pinos do Arduino so extremamente sensveis,
permitindo a leitura de rudo eltrico do ambiente. O
prximo teste utilizaremos o pino 7 como leitura de dados
externos, como uma porta digital ser lido HIGH ou LOW
(1 ou 0). Essa leitura realizada pelo comando
digitalRead(port).

Conecte trs fios placa Arduino. O primeiro de uma perna


do boto atravs de um resistor de pull-up (aqui 10K )
para o fornecimento de 5 volts. A segunda vai da perna
correspondente do boto ao GND. O terceiro se conecta a
um pino digital I/O (pino 7) que l o estado do boto.

Arduino MS
Montando o Circuito

Arduino MS
Cdigo Aciona LED com boto
int val = 0; // varivel para ler o status do pino
void setup() {
pinMode(13, OUTPUT); // declare LED como output
pinMode(7, INPUT); // declare pushbutton como input
}
void loop(){
val = digitalRead(7); // ler a entrada de valor
if (val == HIGH) {// verificar se a entrada alta
digitalWrite(13, LOW); // LED OFF
} else {
digitalWrite(13, HIGH); // LED ON
}
}

Arduino MS
Tempo entre acende e apaga LED usando sensor LDR
Use o mesmo circuito como antes, mudando o boto com o
sensor de luz e trocando a ligao do pino digital 7 para o
pino analgico 2.
A funo permite enviar um valor numrico para o
computador. Variando nmeros digitais no intervalo de 01024 (resoluo de 1 Bit).
Nesta funo usamos a comunicao serial, com isso abra o
monitor serial para ler dados do sensor. Aps o cdigo ser
copiado no Arduino.

Arduino MS
Montando o Circuito

Arduino MS
Cdigo
int val = 0; // varivel para armazenar o valor vindo do sensor
void setup() {
pinMode(13, OUTPUT); // declara o ledPin como uma sada
Serial.begin(9600); // usar a porta serial para comunicao
}
void loop() {
val = analogRead(2); // l o valor do sensor
Serial.println(val); // imprime o valor para a porta serial
digitalWrite(13, HIGH); // ligar o LED
delay(val); // parar o programa por algum tempo
digitalWrite(13, LOW); // desligar o LED
delay(val); // tempo antes do proximo ciclo
}

Arduino MS
Vetor de LEDs
Monte na matriz de contato 5 leds, cada perna maior do
LED (VCC) ser ligada a uma perna do resistor, a outra
perna do resistor ser ligada em cada um dos seguinte
pinos Digital, 12, 11, 10, 9 e 8. A perna menor dos LEDs,
no GND (0v).
A atividade fazer esses LEDs acenderem em sequencia,
acendendo um LED de cada vez, com intervalos de 50
milisegundos por led, aps todos acessos aguardar 1000
milisegundos e comear a apagar os leds, com o mesmo
intervalor de tempo.

Arduino MS
Vetor de LEDs Montando o circuito

Arduino MS
Vetor de LEDs Cdigo
int i;
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
for(i=13;i>=8;i--){
digitalWrite(i, HIGH);

delay(50);

}
delay(1000);
for(i=8;i<=13;i++){
digitalWrite(i, LOW);
delay(50);
}
delay(1000);
}

Arduino MS
Vetor de LEDs com potencimetro

Arduino MS
Vetor de LEDs com potencimetro
int i, port, potenc;
float tensao=0;
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
}
void loop() {
potenc=analogRead(2);
port=13;
for(i=1;i<=5;i++){
if(potenc>((i*2-1)*100)){
digitalWrite(port, HIGH);

}else{
digitalWrite(port, LOW);
}
port--;
}
Serial.print("Valor decimal = ");
Serial.print(potenc);
tensao=potenc*0.004883;
Serial.print(" - Tensao = ");
Serial.print(tensao);
Serial.println(" V");
delay(500);
}

Arduino MS
Motor de Passo com controle de velocidade

Arduino MS
P1 - Cdigo - Motor de Passo com controle de velocidade
// Motor de passo Controlado por boto
/* - Declarando cariaveis globais - */
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int botaoMotorD = 2; //motor direita
int botaoMotorE = 3; //motor esquerda
int botaoVelocA = 4;
int botaoVelocD = 5;
int delayTime = 200;
int movimentoMotorA[] = {1,0,0,0};
int movimentoMotor[] = {0,0,0,0};
/* Configuracao dos pinos*/
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(botaoMotorD, INPUT);
pinMode(botaoMotorE, INPUT);
pinMode(botaoVelocA, INPUT);
pinMode(botaoVelocD, INPUT);

Serial.begin(9600);
botaoEsquerda();
}
void loop() {
int i, motorD, motorE, velocA, velocD;
motorD = digitalRead(botaoMotorD); //le o valor do
pino2
motorE = digitalRead(botaoMotorE); //le o valor do
pino3
velocA = digitalRead(botaoVelocA); //le o valor do pino4
velocD = digitalRead(botaoVelocD); //le o valor do pino5
if (motorD==HIGH){
botaoDireita();
Serial.println(" - rotaciona - Direita");
}
if (motorE==HIGH){
botaoEsquerda();
Serial.println(" - rotaciona - Esquerda");
//Teste para rotaciona por vetor automtico
}

Arduino MS
P2 - Cdigo - Motor de Passo com controle de velocidade
if (velocA==HIGH){
if(delayTime<500)
delayTime=delayTime+50;
Serial.print("O time esta em: ");
Serial.println(delayTime);
}
if (velocD==HIGH){
if(delayTime>50)
delayTime=delayTime-50;
Serial.print("O time esta em: ");
Serial.println(delayTime);
}
delay(delayTime);
}
//-- Rotaciona motor para a Direita
void botaoDireita(){
int k;
for (k=0;k<4;k++){
if(k<3)
movimentoMotor[k+1] = movimentoMotorA[k];
else
movimentoMotor[0] = movimentoMotorA[k];
}
for (k=0;k<4;k++){

movimentoMotorA[k] = movimentoMotor[k];
digitalWrite(k+8, movimentoMotor[k]);
Serial.print(movimentoMotor[k]);
}
}
//-- Rotaciona motor para a esquerda
void botaoEsquerda(){
int k;
for (k=0;k<4;k++){
if(k>0)
movimentoMotor[k-1] = movimentoMotorA[k];
else
movimentoMotor[3] = movimentoMotorA[k];
}
//Transcreve o vetor para o Vertor de Apoio. imprime o
resultado.
for (k=0;k<4;k++){
movimentoMotorA[k] = movimentoMotor[k];
digitalWrite(k+8, movimentoMotor[k]);
Serial.print(movimentoMotor[k]);
}
}

Arduino MS
Resumindo...
Arduino um projeto simples, popular e acessvel
Eletrnica e programao embarcada alto nvel
Na prtica ligamos componentes nas portas analgicas e
digitais e escrevemos programas que usam as portas
Existem diversas bibliotecas que encapsulam a lgica de
comunicao digital ou analgica: servo, motor de passo,
Android, display LCD
Ter portas digitais analgicas e pmw um grande valor do
microcontrolador utilizado
A transfrencia via USB e a ferramenta / IDE para
programao funcionam em mltiplas plataformas
Open-source Hardware e Open-source software

Arduino MS
isso ai pessoal, agora s queimar
alguns componentes.
Contatos:
samuel@ms.senac.br
samuelmbc@gmail.com
Twitter: @samuelmbc
Sites:
www.samuelcavalcante.com (blog Pessoal)
www.ms.senac.br (onde trabalho)
www.e-camisa.com (scio)