Escolar Documentos
Profissional Documentos
Cultura Documentos
Arduino - Mini Curso Do Microcontrolador Arduino
Arduino - Mini Curso Do Microcontrolador Arduino
Introduo.............................................................................................................................................2
O Programa...........................................................................................................................................3
A sintaxe..........................................................................................................................................3
Colocando a mo na massa...................................................................................................................3
A Protoboard....................................................................................................................................3
Projeto 1: Piscar um LED................................................................................................................4
Converso numrica........................................................................................................................5
lgebra booleana.............................................................................................................................6
Projeto 2: Semforo.........................................................................................................................7
A funo tone..................................................................................................................................9
Comunicao Serial............................................................................................................................10
Entradas e sadas analgicas...............................................................................................................10
Sadas analgicas...........................................................................................................................10
Entradas Analgicas.......................................................................................................................11
Projeto 3: Controle de luminosidade............................................................................................12
Motores DC....................................................................................................................................13
Projeto 4: Verificao de superfcie...............................................................................................13
Projetos extras....................................................................................................................................14
Projeto Extra 1: Semforo..............................................................................................................14
Projeto extra 2: Controle de luminosidade....................................................................................16
Proposta de implementao dos exerccios........................................................................................19
Bibliografia e materiais para consulta................................................................................................20
Introduo
Aprender eletrnica no uma tarefa simples, exige muito tempo e dedicao, conciliar
isso com o resto das nossas atividades dirias acaba sendo um desafio. Tudo isso junto com os
altos custos envolvidos acabam por inviabilizar a criao de dispositivos eletrnicos para muitas
pessoas.
Pensando nisso o co-fundador do Arduino Massimo Banzi
do Interaction Design Institute Ivrea na Itlia mobilizou um grupo
de pessoas a fim de criar uma soluo para este problema mais
barata e fcil de usar do que as j existentes na poca. Eles
decidiram fazer isso como um projeto de cdigo aberto, assim
todos poderiam ajudar e contribuir. Dessa ideia surgiu o Arduino.
Arduino uma plataforma open-source de prototipagem
com software e hardware flexvel e fcil de usar. De uma forma
menos tcnica, Arduino um conjunto de ferramentas que
possibilitam a criao de aparelhos eletrnicos onde a ideia fazer com que as pessoas possam
fazer o que quiser com eletrnica, no necessariamente aprendendo tudo antes. E como querer
fazer a sua camisa piscar, bem difcil fazer se voc quer aprender eletrnica, mas com o Arduino
voc pode fazer isso em poucos minutos.
Para entender melhor como funciona o Arduino vejamos o que um microcontrolador:
Microcontroladorbasicamenteumcircuitointegrado
O Programa
Vamos criar o nosso programa na prpria IDE do Arduino que usa uma linguagem baseada em
C/C++.
A sintaxe
Diferente da linguagem C original, a que usaremos ter algumas diferenas, por exemplo, aqui
no teremos uma funo principal - int main() - mas, basicamente teremos um programa da
forma:
Colocando a mo na massa
A Protoboard
A protoboard uma placa usada para criao de prottipos
ou circuitos experimentais onde os componentes e as
conexes podem variar sem a necessidade de solda. uma
matriz de contato, com furos tendo conexes verticais e
horizontais.
Ela funciona de forma que ao conectarmos um fio no
primeiro furo da coluna vertical, este estar em curto circuito
com qualquer outro fio conectado na coluna, ou seja,
como se conectssemos diretamente todos os fios da
coluna. Com as linhas horizontais o funcionamento o
mesmo.
Vamos agora escrever o nosso primeiro programa, mas como o Arduino no fica somente na tela
do PC, vamos criar um projeto bem simples e trabalhar em cima dele.
void setup(){
pinMode(LED,OUTPUT);
}
void loop(){
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
digitalWrite(pino, valor)
delay(tempo)
Converso numrica
Apesar de que na IDE do Arduino as funes so feitas de forma a facilitar ao mximo o uso dos
nmeros e valores usados, ainda em alguns casos necessrio sabermos fazermos a converso
de base de um numero.
Mas o que a base de um numero? - De uma forma fcil, a base de um numero o total de
smbolos que usamos para escrev-lo, ou seja, a base em que mais usamos, a decimal, temos
10 smbolos(0 a 9) para escrever os nmeros que desejarmos e na base binaria 2 smbolos (0 e
1).
Como os microcontroladores e at mesmo os computadores, internamente s entendem
nmeros na base binaria, importante que saibamos escrever nmeros decimais em pelo menos
mais duas bases, a binaria e a hexadecimal, que tambm e largamente usada nesse meio.
Converso com base decimal para uma base qualquer: podemos fazer isso por meio das
divises sucessivas:
Converso com base hexadecimal e binaria: essa converso fica fcil ao sabermos que, em
ordem, cada 4 algarismos binrios equivalem a um algarismo hexadecimal, e vice e versa.
Valor Numrico
8421
8421
Nmero Binrio
0010
0110
Nmero Hexadecimal
lgebra booleana
Antes de tudo devemos ter em mente:
Sistemasdigitaisusamalogicabinariadeformaqueoszeroseunssoos
nveislgicosnasentradasousadasdos
dispositivos,osquaistrabalhamcombaixastenses,
nocasodosmicrocontroladoresdaAtmel,5V(entre
1.85.5V),portantoumaentradanafaixaprxima
0Ventendidacomonvellogicobaixo(LOW),juma
faixaemtornode5Veentendidacomonvellogico
alto(HIGH).
OR
Ou
AND
NOT
No
NAND
No AND
AND
invertido(barrado)
NOR
No OR
OR
invertido(barrado)
XOR
Exclusive OR
Projeto 2: Semforo
Nosso objetivo aqui fazer um programa que controle o transito de veculos em uma rua.
Teremos um semforo convencional de veculos
com os 3 passos mostrados ao lado. Sendo que
para efeito experimental deixaremos o sinal em
vermelho e verde por 5 segundos e amarelo por
1 segundo.
Tambm teremos um boto que ao pressionarmos
o sinal ira impedir a passagem de veculos, isso ,
caso o sinal esteja verde ele deve ir imediatamente
para amarelo e depois para vermelho.
Para isso usaremos algo chamado interrupo externa, que caso ocorra ela ira desviar o
programa de sua execuo atual, realizar alguma ao( uma funo no nosso caso), e depois
continuar o programa normalmente.
Uma interrupo pode ser atribuda a um pino do Arduino atravs da funo:
attachInterrupt(canal, funo, modo) , onde:
canal : indica o pino a ser usado pela interrupo canal 0 para o pino 2 e 1 para o pino 3.
funo : a funo que sera executada quando ocorre a interrupo.
modo : o tipo da interrupo, que pode ser:
LOW : interrupo dada quando o pino estiver com nvel logico baixo.
CHANGE : interrupo dada quando o pino muda de nvel logico.
RISING : interrupo dada quando o nvel logico vai de 0 para 1.
FALLING : interrupo dada quando o nvel logico vai de 1 para 0.
Vamos ento ao hardware, que sera montado com LEDs e um pushbutton:
int botao = 2;
void setup(){
attachInterrupt(0, irVermelho,FALLING);
pinMode(botao,INPUT);
pinMode(verde,OUTPUT);
pinMode(amarelo,OUTPUT);
pinMode(vermelho,OUTPUT);
}
void irVermelho(){
p1();
passo = 1;
return;
}
void p3(){
digitalWrite(vermelho,LOW);
digitalWrite(amarelo,HIGH);
digitalWrite(verde,LOW);
return;
}
void p2(){
digitalWrite(vermelho,LOW);
digitalWrite(amarelo,LOW);
digitalWrite(verde,HIGH);
return;
}
void p1(){
digitalWrite(vermelho,HIGH);
digitalWrite(amarelo,LOW);
digitalWrite(verde,LOW);
return;
}
void loop(){
if(passo == 1){
p1();
passo = 2;
delay(5000);
}
if(passo == 2){
p2();
passo = 3;
delay(5000);
}
if(passo == 3){
p3();
passo = 1;
delay(1000);
}
}
* Em uma situao normal poderamos executar p1() e esperar 5s na prpria funo de
interrupo e depois ir direto para o passo 2, porem aqui a funo delay() no funciona. Nesse
caso como o tempo pequeno quase no vemos problema, porem quando o boto pressionado
o passo 1 fica por mais tempo ( o tempo que o programa j estava esperando no passo em que
estava mais o tempo de 5 segundos de p1() ). Como exerccio para o minicurso tente resolver este
problema.
No final da apostila temos mais um projeto com semforo mais prximo realidade com esse
problema resolvido.
Esta somente uma forma de fazer o programa, poderamos, por exemplo mudar os estados dos
LEDs na funo loop ao invs de criar funes separadas para isso. A logica de programao
muito importante nesses casos. Podemos resolver um problema aparentemente muito difcil de
uma forma fcil se usarmos a logica certa.
A funo tone
Esta funo gera uma onda quadrada em uma sada do Arduino com uma frequncia
especificada, vejamos como a funo:
tone(pino, frequncia, durao), onde a durao um argumento opcional.
Obs.: Nas placas do Arduino que usam o microcontrolador Atmega8, se usado, o argumento
durao causa um erro no programa. Podemos usar ento a funo noTone(pino).
Com essa funo podemos criar sons, sabendo a frequncia de uma nota musical por exemplo
podemos facilmente toc-la em um auto falante ou um piezo-eltrico ligado ao Arduino.
Comunicao Serial
Alm de funes prontas, o Arduino possui, na sua prpria IDE, o Serial Monitor que uma
interface para fazer o debug de programas, enviar e receber dados de forma serial.
Nas placas do Arduino que possuem conexo USB, essas podem ser usadas para fazer a
comunicao serial com um computador por exemplo. Vejamos ento como fazer isso.
Primeiro devemos fazer a configurao para a comunicao serial, atravs da funo:
Serial.begin(taxa) , onde:
taxa: a taxa de transmisso de dados, em bits por segundo(baud).
Agora podemos enviar dados com as funes Serial.print(), Serial.println() e Serial.write(), e ler os
dados recebidos com Serial.read() e Serial.peek().
Para checar se h dados recebidos podemos usar a funo Serial.available(), que retorna no
numero de bytes disponveis para leitura.
10
Nesse caso, por exemplo temos 75 por cento de potencia transferida, porem no Arduino o perodo
dessas ondas muito baixo, fazendo com que a frequncia seja alta(aproximadamente 490 Hz),
portanto, se estivermos com um LED conectado a esse pino, no o veremos piscar, mas sim com
75% de sua luminosidade total. Em motores DC podemos controlar a velocidade do motor atravs
de PWM.
O Arduino possui alguns pinos que podem ser usados como PWM, e para isso usamos a funo:
analogWrite(pino, valor) , onde:
pino : pino de sada do PWM.
valor : valor entre 0 ( 0%) e 255 ( 100%) que determina a porcentagem em que o sinal
estar ativo.
Obs.: No e preciso declarar o pino como sada(usando pinMode()) para us-lo PWM.
Entradas Analgicas
Um pino de entrada analgica tem a funo de ler a tenso nele colocada e transformar esse valor
em um numero inteiro, no caso do Arduino teremos a preciso de 10 bits, ou seja 1024 valores
possveis, sendo 0 para 0V e 1023 para 5V.
A funo usada para leitura analgica no Arduino e a seguinte:
analogRead(pino) , onde pino indica o pino o qual sera feito a leitura.
Essa funo retorna um valor inteiro de 0 a 1023 correspondente a leitura feita.
Como funciona
11
Boto
LDR
LED
Iluminao.
Esse projeto fica como exerccio para o minicurso. Uma resoluo possvel se encontra no final
desse material.
12
Motores DC
Quando falamos de motores eltricos e Arduino, comum ouvirmos falar nos Servomotores, o
qual temos uma livraria com varias funes prontas para trabalharmos com eles. Esses motores
so encontrados geralmente de forma que funcionam ligados diretamente aos pinos do Arduino.
Porem quando falamos de motores em geral, como o Arduino no fornece uma corrente e
voltagem muito altas, na maioria dos casos, teremos de fazer um circuito auxiliar para fazer o
motor funcionar e no trazer nenhum risco a placa, como queimar algum componente.
Esse circuito pode ser feito com transistores, como na figura abaixo:
Onde o ULN2003 um CI que
possui um conjunto de transistores
Darlington. Simplificadamente um
transistor um componente que
serve para amplificar o nosso
sinal, por exemplo, queremos usar
um motor de 12V e 0,2A, como o
Arduino s pode fornecer 5V e
alguns mA no teremos potencia o
suficiente para fazer o motor funcionar somente com o Arduino, ai que entra o transistor.
Um transistor possui 3 pinos, uma base, um coletor e um emissor, no caso do ULN2003, as
entradas(base) so barradas, ou seja, seu sinal invertido, portanto se o alimentarmos com 12V
(coletor), e tivermos nvel logico 0 na entrada ento teremos 12V na sada(emissor), e no caso de
nvel logico 1 na entrada teremos uma sada de 0V.
Projeto 4: Verificao de superfcie
Voc j deve ter visto aqueles robs que seguem uma linha no cho em
competies ou at mesmo em industrias. Veremos nesse projeto o
principio de uso desses robs.
Na figura a esquerda temos sensores e um emissor de luz infravermelha,
eles so usados, por exemplo, nas TVs, onde o controle remoto o
transmissor e um sensor junto a TV o receptor infravermelho.
Voc tambm j deve ter ouvido falar que a cor preta no reflete os raios de luz, isso tambm
ocorre com o infravermelho, quando temos um arranjo como na figura ao lado, os raios de luz
infravermelha saem do emissor, refletem no obstaculo e chegam at o receptor. Se esse objeto for
de cor preta a reflexo sera bem menor do que se ele for de cor branca, com isso podemos
distinguir, por exemplo, uma linha escura em um cho claro.
O objetivo desse projeto e distinguir um objeto branco de um preto atravs desses sensores.
Este projeto tambm fica como exerccio para o minicurso, uma possvel implementao esta no
final desse material.
13
Projetos extras
Projeto Extra 1: Semforo
Nosso objetivo aqui fazer um programa que controle o transito como no projeto 2 porem agora
teremos um grupo veicular e um de pedestres.
O semforo sera como mostrado abaixo, onde o sinal com 3 cores o veicular e o com 2 cores o
dos pedestres, e obedecendo as regras convencionais de um semforo.
2/3
Porem, alm disso, teremos um boto que quando pressionado reduzira o tempo que o pedestre
tem de esperar para passar.
Vamos ento ao hardware, que sera montado com LEDs e um pushbutton:
14
void reduzTempo(){
if(tempo >= 10 && tempo <=19)tempo = 19;
}
void setup(){
attachInterrupt(0, reduzTempo,FALLING);
}
void p3(){
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,HIGH);
return;
}
// Vermelho
// Amarelo
// Verde
// Pedestre - Seguir
// Pedestre - Parar
void p2(){
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,HIGH);
digitalWrite(9,LOW);
digitalWrite(8,HIGH);
return;
}
void p1(){
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(9,HIGH);
digitalWrite(8,LOW);
return;
}
15
void piscaVermelho(){
for(int x = 0; x<= 3;x++){
digitalWrite(8,HIGH);
delay(500);
digitalWrite(8,LOW);
delay(500);
}
return;
}
void addTempo(){
delay(1000);
tempo++;
if(tempo > 22) tempo = 0;
return;
}
void loop(){
if(tempo == 0)p1();
if(tempo == 10){
digitalWrite(9,LOW);
piscaVermelho();
p2();
}
if(tempo == 20)p3();
addTempo();
}
Esta somente uma forma de fazer o programa, poderamos, por exemplo mudar os estados dos
LEDs na funo loop ao invs de criar funes separadas para isso.
A logica de programao muito importante nesses casos, no programa acima, consideramos
que o tempo do ciclo no sair da faixa citada, e que no haja erro na sua adio, se pulssemos
do segundo 9 para o 11 , por exemplo, no teramos a mudana dos sinais para os segundo
estado.
Projeto extra 2: Controle de luminosidade
Para este projeto queremos controlar a luminosidade em um local, de forma que teremos 2
botes, um deles liga/desliga o sistema de iluminao, e o outro quando pressionado iniciara ou
adicionara tempo um timer que desligara a iluminao quando o tempo terminar.
Quando o sistema estiver ligado usaremos um LDR para verificar a luminosidade no local, quanto
menor, a luz (LED) devera ter uma intensidade maior.
16
Boto 1
Boto 2
LDR
LED
Iluminao.
Cdigo fonte:
}
return;
}
17
void ligar(){
if(millis() > tmpseg+500){
tmpseg = millis();
ligado = !ligado;
tempo = 0;
tempoDecorrido = 0;
}
return;
}
void setup(){
attachInterrupt(0,timer,RISING);
attachInterrupt(1,ligar,FALLING);
}
void loop(){
if(ligado){
Faz a leitura do LDR.
int ldr = analogRead(4);
int luminosidade = map(ldr,320,830,0,255); Ajusta o valor da converso AD para o PWM.
Escreve o valor ajustado para a luminosidade do
analogWrite(11,luminosidade);
LED.
if(tempo > 0){
if(tempoDecorrido < tempo){
delay(100);
tempoDecorrido+=100;
}else{
ligado = false;
}
}
}else{
analogWrite(11,0);
}
}
18
Cdigo fonte:
int receptor = 2;
int claro = 550;
int escuro = 190;
String Cor = "",Verificar = "";
void setup(){
Serial.begin(9600);
}
void loop(){
int x = analogRead(receptor);
if(x > claro)Cor = "Objeto Claro";
if(x < escuro)Cor = "Objeto Escuro";
if(x < claro && x > escuro)
Cor = "Aproxime o Objeto";
if(Cor != Verificar){
Serial.println(Cor);
Verificar = Cor;
}
delay(500);
19
http://www.arduino.cc/
http://vimeo.com/31389230
http://www.tecmundo.com.br/android/10098-arduino-a-plataforma-open-source-quevai-automatizar-a-sua-vida.htm
20