1.
2.
Introduo ............................................................................................................................. 4
1.1.
Arduino ......................................................................................................................... 4
1.2.
1.2.1.
1.2.2.
2.1.1.
Programando ......................................................................................................... 8
2.1.2.
2.1.3.
2.2.
3.
2.2.1.
2.2.2.
2.2.3.
2.2.4.
2.2.5.
2.2.6.
4.
3.1.1.
Ingredientes ......................................................................................................... 20
3.1.2.
3.1.3.
3.1.4.
3.1.5.
3.2.
3.3.
4.1.1.
Ingredientes ......................................................................................................... 26
4.1.2.
4.1.3.
Levando ao Forno................................................................................................ 26
4.1.4.
4.1.5.
4.2.
4.3.
5.
4.3.1.
4.3.2.
Comunicao Serial............................................................................................. 29
PWM ................................................................................................................................... 31
5.1.
5.2.
5.2.1.
Ingredientes ......................................................................................................... 32
5.2.2.
5.2.3.
5.2.4.
5.2.5.
5.3.
6.
7.
6.1.1.
Ingredientes ......................................................................................................... 35
6.1.2.
6.1.3.
6.1.4.
6.1.5.
6.2.
6.3.
1. Introduo
1.1.
Arduino
1.2.
1.2.2.2.
2. Sadas Digitais
Experincia 1 Blink
2.1.
Programando
Se tudo foi feito corretamente, o led do pino 13, presente na placa do Arduino
UNO, ir piscar intermitentemente.
Digital x Analgico
Grandezas digitais so aquelas que no variam continuamente no tempo, mas
sim em saltos entre valores bem definidos. Um exemplo so os relgios digitais: apesar
do tempo em si variar continuamente, o visor do relgio mostra o tempo em saltos de
um em um segundo. Um relgio desse tipo nunca mostrar 12,5 segundos, pois, para
ele, s existem 12 e 13 segundos. Qualquer valor intermedirio no est definido.
Grandezas analgicas so aquelas que, ao contrrio das grandezas digitais,
variam continuamente dentro de uma faixa de valores. O velocmetro de um carro, por
exemplo, pode ser considerado analgico, pois o ponteiro gira continuamente conforme
o automvel acelera ou freia. Se o ponteiro girasse em saltos, o velocmetro seria
considerado digital.
Outra analogia interessante pode ser feita comparando uma escada com uma
rampa: enquanto uma rampa sobe de forma contnua, assumindo todos os valores de
altura entre a base e o topo, a escada sobe em saltos, com apenas alguns valores de
altura definidos entre a base e o topo. A escada representa, portanto, uma grandeza
digital, enquanto a rampa representa uma grandeza analgica. A quantidade de degraus
em uma escada define quais posies podemos escolher. Por exemplo se uma escada
tem um degrau em 1,00 m de altura do solo e o prximo est a 1,50 m ns no podemos
ocultar a posio 1,38 m do solo porque no existe um degrau l. Quanto mais degraus
adicionamos em um intervalo de altura menor mais perto da rampa nos aproximamos.
As placas Arduino possuem uma clara diviso entre os pinos de entrada e sada
digitais/analgicos, porm em algumas placas como o Arduino Uno qualquer pino pode
ser utilizado como entrada ou sada digital.
2.1.3. Entendendo o programa
ser humano ou um animal. Eles so projetados para resolver problemas a partir de uma
lista de tarefas, semelhante a uma receita de bolo.
Dessa forma, para resolver um problema em um computador, tal como fazemos
para resolver problemas cotidianos, fazer um bolo, por exemplo, devemos descrever a
soluo de uma forma clara e precisa, por meio de passos a serem seguidos at que se
atinja um resultado esperado.
O nome dessa lista de passos algoritmo. Um algoritmo um conjunto finito de
regras que fornece uma sequncia de operaes a fim de solucionar um problema.
Veja o exemplo da seguinte receita de bolo:
10
Modo de preparo:
Passo 2: Aquea o forno a 180 graus;
Passo 3: Quebre os ovos e separe as claras da gema;
Passo 4: Bata as claras em neve e as deixe separadas;
Passo 5: Em uma vasilha, bata o acar, a manteiga e as gemas;
Passo 6: Misture a farinha e o leite;
Passo 7: Bata bem, at ficar bem homogneo;
Passo 8: Acrescente o fermento;
Passo 9: Adicione as claras em neve e mexa cuidadosamente;
Passo 10: Unte uma forma com manteiga e farinha de trigo.
Passo 11: Coloque a massa na forma untada
Passo 12: Leve ao forno mdio para assar por aproximadamente 35 minutos ou at que,
ao espetar um palito, esse saia seco;
Passo 13: Aps assado, desligue o forno e deixe o bolo esfriar;
Passo 11: Desenforme e saboreie.
FIM
FIM
apostila.
Ele define o que iremos usar, e depois diz passo a passo o que devemos fazer.
Veja que no podemos fazer o passo 4 sem antes fazer o passo 3, nem o passo 11
sem os passos anteriores. Existe uma ordem a ser seguida para que o bolo fique
conforme esperado.
No diferente para o computador, ele precisa de ordens organizadas e
coerentes, que ao final da receita resulte na soluo de seu problema.
explicando o seu uso, tanto para que outras pessoas entendam quanto para ns mesmo.
Muitas vezes fazemos um programa para uma determinada funo achando que
s iremos us-lo uma nica vez. Quando, depois de muito tempo, nos damos conta de
que precisaremos dele novamente, j tarde. Por mais que voc seja bom de memria,
muito difcil lembrar de tudo que voc pensou durante a confeco de seu programa.
11
Variveis
Quando programamos, precisamos continuamente guardar uma informao para
usarmos posteriormente. Por exemplo, caso voc queira somar dois nmeros, voc ter
que armazenar o resultado em algum lugar. Esse lugar reservado se chama varivel.
Neste exemplo o lugar seria x, que recebe o resultado da soma 1+1.
x = 1 + 1; //x recebe 2, que o resultado da soma 1+1
12
Imagine que a memria do seu Arduino possui muitas gavetas, quando queremos
usar uma, devemos dar um nome a ela e falar qual tipo de contedo ela guardar. Cada
gaveta uma varivel.
Ao declarar uma varivel devemos definir qual tipo de contedo ela receber.
Para isso voc deve saber com qual tipo de dado mexer. Em nosso exemplo, x deve ser
uma varivel do tipo int, isso porque ela receber um valor inteiro.
int x; //x uma varivel do tipo inteiro
x = 1 + 1; //x recebe 2, que o resultado da soma 1+1
13
Funo
Muitas vezes desempenhamos um conjunto de instrues. Por exemplo: pense
Para facilitar nossa vida, podemos chamar esse conjunto de instrues por um
nome para que sempre que quisermos saber a hora, no seja preciso descrever todas as
instrues necessrias para isso.
void lerHora(){
Pegue seu celular;
Ligue a tela;
Leia qual a hora;
Desligue a tela;
Guarde o celular;
}
Toda funo deve ter um nome e um tipo. No caso das duas, o tipo void e o
nome setup e loop, respectivamente. Para sabermos onde comea e termina o bloco de
tarefas de uma funo usamos { para indicar o inicio e } para indicar o final.
14
// Esta rotina "setup" roda uma vez quando a placa e ligada ou resetada
void setup() {
// Configura o pino do led (digital) como sada
pinMode(led, OUTPUT); // led corresponde a 13
}
O segundo o delay. O comando delay cria uma pausa no algoritmo pelo tempo
determinado em milissegundos (1 segundo igual a 1000 milissegundos).
delay(1000);
// Espera um segundo
executando instruo por instruo. Dessa forma, quando escrevemos uma instruo,
devemos informar onde ela comea e acaba. Para isso serve o ponto e vrgula (;).
digitalWrite(led, HIGH); // Liga o LED (HIGH = nivel lgico alto)
delay(1000);
// Espera um segundo
Veja o exemplo do delay(1000), essa instruo pede para que o Arduino pare por
15
1 segundo. Para que o Arduino leia a instruo, entenda e execute, necessrio que ele
saiba onde ela comea e onde ela termina. Nesse caso, ela comea logo aps o ponto e
vrgula da linha anterior e acaba no ponto e vrgula da prpria linha.
Para blocos de instrues usamos chaves, aberta { para comear e fechada }
para terminar. Um exemplo de bloco de instrues so as funes.
void setup() {
pinMode(led, OUTPUT);
}
2.2.
16
1 LED 5mm
1 Resistor 470
Fios Jumpers
1 Protoboard
17
Transistor (EXTRA);
Rel;
Ponte H (EXTRA)
Resistor
Figura 9 - Resistor
18
LEDs
Figura 10 - LED
19
3. Entradas Digitais
No capitulo anterior vimos como controlar uma sada digital e fizemos um LED
piscar intermitentemente. No entanto, na vida real, um sistema interativo trabalha
processando entradas e atuando atravs de sadas.
Nesse capitulo, iremos aprender como acender um LED (sada) a partir de um
boto (entrada).
3.1.
3.1.1. Ingredientes
Boto de presso
Resistor 1k
1 LED 5mm
1 Resistor 470
Fios Jumpers
Protoboard
/*
Button
Utiliza um botao de pressao, conectado ao pino 2, para ligar e
desligar um LED conectado ao pino digital 13.
*/
// Determinanos constantes para os numeros dos pinos utilizados
const int buttonPin = 2;
// Numero do pino do botao de pressao
const int ledPin = 13;
// Numero do pino do led
// Variaveis
int buttonState = 0;
21
3.2.
Entendendo o Hardware
Para evitar esse problema, podemos utilizar um resistor de pull up ou pull down.
Esses resistores faro com que a tenso em nossa entrada esteja bem definida quando o
mesmo no estiver conectado a nada. As figuras mostram trs ligaes de um boto a
um pino do microcontrolador configurado como entrada digital. Para cada caso temos:
Entrada sem pull up ou pull down: O estado do pino no estar bem definido
fazendo com que este esteja suscetvel a rudo.
Pull-up: Neste caso, devido presena do resistor de pull-up, seu estado est
bem definido e ele enxergar +5 V, consequentemente definindo seu estado
como alto.
22
3.3.
Entendendo o Programa
Constantes
Quando definimos uma varivel que no ir mudar ao longo da execuo do
Comando pinMode
Na funo setup podemos encontrar o comando pinMode. Como j dito na
experincia 1, esse comando muito importante no uso das entradas e sadas digitais do
Arduino. Ele responsvel por definir se um pino uma entrada (INPUT) ou uma sada
(OUTPUT).
void setup() {
pinMode(ledPin, OUTPUT); //Inicializa o pino do LED como saida (OUTPUT)
pinMode(buttonPin, INPUT); // Inicializa o pin do botao como entrada
(INPUT)
}
Na primeira linha da funo setup de nosso exemplo, temos o pino 13, definido
pela constante ledpin, sendo configurado como sada digital.
pinMode(ledPin, OUTPUT); //Inicializa o pino do LED como sada (OUTPUT)
Comando digitalRead
Na funo Loop temos o programa que rodar ciclicamente em nosso Arduino.
Bloco IF
Ao resolver um problema, constantemente teremos que tomar decises lgicas a
partir dos resultados coletados. Vamos voltar receita do bolo. Caso esse bolo seja para
uma festa de aniversrio, interessante que se faa uma cobertura, caso contrrio,
podemos deixar o bolo sem cobertura. Veja como ficaria o algoritmo para essa situao:
Funo bolo(){
Faa o bolo;
Se o bolo de aniversrio{
Faa uma cobertura;
}Seno
No faa uma cobertura
}
fim
Se for: Faa
Cobertura
Se no for :
No Faa
cobertura
24
Se for: Ligue o
LED
Se no for :
Desligue o LED
Operadores Lgicos
Para usar blocos lgicos, tal como o bloco IF, usaremos operadores lgicos. Os
Se for: Faa a
cobertura de
brigadeiro
Se no for : no
faa a cobertura
de bigadeiro
4. Entrada Analgica
O uso de entradas digitais limita nossas possibilidades, visto que o mundo
analgico. Dessa forma, a leitura de valores analgicos muitas vezes se faz necessrio.
Nesse captulo, aprenderemos como podemos usar as entradas analgicas das
placas Arduino.
4.1.
4.1.1. Ingredientes
Potencimetro
Fios Jumpers
Protoboard
27
Caso tenha ocorrido tudo como esperado, conforme voc varie a resistncia do
potencimetro, girando seu eixo, aparecer no serial monitor um valor de 0 1023.
4.2.
Entendendo o Hardware
Potencimetro e trimpot
Figura 17 - Potencimetro
Divisor de tenso
28
4.3.
Entendendo o programa
outros dispositivos como mdulos ZigBee, Bluetooth, entre outros. A comunicao com
o computador possvel atravs do conversor serial USB presente nas placas. A
biblioteca padro do Arduino possui algumas funcionalidades para a comunicao serial
de modo a facilitar a utilizao desta funo.
Serial Monitor
Enviando Dados
Na maioria das vezes, o envio de dados pela porta serial pode ser feito atravs
das funes print e println. A funo print imprime os dados na serial utilizando o
cdigo ASCII. Essa funo recebe dois parmetros e retorna a quantidade de bytes que
foram escritos.
Serial.print(var); // Imprime a varivel var
Serial.print(ol);// Imprime o texto ol
30
5. PWM
PWM (Pulse Width Modulation Modulao por Largura de Pulso) uma
tcnica para obter resultados analgicos por meios digitais. Essa tcnica consiste na
gerao de uma onda quadrada em uma frequncia muita alta em que pode ser
controlada a porcentagem do tempo em que a onda permanece em nvel lgico alto.
Esse tempo chamado de Duty Cycle e sua alterao provoca mudana no valor mdio
da onda, indo desde 0V (0% de Duty Cycle) a 5V (100% de Duty Cycle) no caso do
Arduino.
5.1.
recebe como parmetros o pino PWM e o valor do duty cycle, respectivamente. Esse
ltimo parmetro guardado em 8 bits, de modo que esse valor deve estar entre 0 (0%
de duty cycle) e 255 (100% de duty cycle).
analogWrite(9,127);//Escreve no pino 9 um sinal PWM com 50% de duty cycle
//(50% de 255=127)
analogWrite(10,64);//Escreve no pino 10 um sinal PWM com 25% de duty cycle
//(25% de 255=64)
Variando o duty cycle altera-se tambm o valor mdio da onda, de modo que o
efeito prtico obtido com o PWM em algumas aplicaes um sinal com amplitude
constante e de valor igual ao valor mdio da onda. Isso permite que se possa, por
exemplo, controlar a intensidade do brilho de um LED, ou a velocidade de um motor de
corrente contnua.
5.2.
5.2.1. Ingredientes
Potencimetro
LED 5mm
Resistor 470
Fios Jumpers
Protoboard
32
5.3.
Entendendo o programa
Como j explicado no incio do captulo, o PWM pode ser usado para simular
uma sada analgica. Variando um sinal de sada de PWM de 0 a 255, estamos variando
o Duty Cycle, que por sua vez, resulta numa sada de 0V a 5V.
Como a intensidade de luz no LED est diretamente ligada quantidade de
corrente que passa por ele e essa corrente proporcional a tenso do resistor em srie
com o LED, conforme variamos a tenso do pino 13 atravs do PWM, alteramos a
intensidade de luz emitida pelo LED.
valorLido = analogRead(A0); // valor entre 0 e 1024
34
6. [EXTRA] Interrupo
Imagine que voc esteja fazendo seu bolo e no meio da receita seu telefone
toque. Possivelmente voc ir parar o que est fazendo e ir atender o telefone, assim
que encerrar a chamada voc ir retornar ao ponto que parou em sua receita.
Quando estamos executando um tarefa muitas vezes temos que a interromper
para resolver outra tarefa importante para s depois retornar do ponto que se parou. Isso
se chama interrupo e usada com freqncia na programao de microcontroladores.
Uma interrupo tem dois pontos chaves, so eles:
Condio de interrupo
a condio que indica uma interrupo. Ela avisa ao programa que a hora de
executar uma tarefa extraordinria. No nosso exemplo, essa condio o toque do
telefone.
Quando algo indica a interrupo, temos que executar uma lista de instrues
referentes a essa interrupo. No exemplo dado, temos que parar de fazer o bolo e ir
atender ao telefone. A funo atender telefone uma funo extraordinria que s
executada pelo fato de ter ocorrido a condio de interrupo, o toque do telefone.
6.1.
6.1.1. Ingredientes
Boto de presso
LED 5mm
Resistor 1k
Resistor 470
Fios Jumpers
Protoboard
esteja conectado corretamente, com a perna mais longa (Anodo) conectado ao resistor e
a perna menor (catodo) ao GND.
36
Experimentando o prato
Caso tenha ocorrido tudo como esperado, o LED deve piscar intermitentemente.
Quando voc apertar o boto, o LED da protoboard permanecer aceso por 5 segundos.
Caso voc no pressione o boto novamente, ele voltar a piscar.
6.2.
Entendendo o Hardware
As placas Arduino possuem pinos que podem desempenhar a funo de entrada
de sinal para interrupo externa. No Arduino UNO so as portas digitais 2 e 3, que para
tal funo so nomeadas de INT0 e INT1, respectivamente. Veja a tabela a seguir com
os pinos de cada placa Arduino que possuem essa qualidade.
Board
int.0
int.1
int.2
int.3
int.4
int.5
Uno, Ethernet
Mega2560
21
20
19
18
Leonardo
Dessa forma, para que seja possvel o uso da interrupo externa, escolhemos o
pino digital 2 (INT0), no qual conectamos o boto.
6.3.
Entendendo o programa
Com o conhecimento adquirido at agora, voc j pode entender a maioria dos
Configurando a interrupo
Para que o Arduino leia uma interrupo, devemos configur-lo. Para tal
usaremos o comando attachInterrupt().
attachInterrupt(INT,FUNO,MODO); //Configurando a interrupo
As opes so:
Funo interrupcao()
38
anologRead(Pino)
Entradas Analgicas
L entrada analgica 0-5V transformando em 10 bits (resoluo 4,9mV)
Pinos analgicos podem ser usados como porta digitais usando a funo pinMode(), quando usado como porta
analgica no necessitam de configurao.
39
Variveis
Tipo de dado
boolean
int
unsigned int
Word
Char
usigned char
Byte
void keyword
Long
Usigned long
float
Double
string
array (vetor)
tipovar nomeMatriz[n de
posies]
Serial.begin(TAXA)
Serial.end()
Serial.flush()
Serial.available()
Serial.read()
Serial.print(valor,formato)
Serial.println(valor,formato)
RAM
1 byte
2 bytes
2 bytes
2 bytes
1 byte
1 byte
1 byte
N/A
4 bytes
4 byte
4 byte
4 byte
1 byte + x
1byte + x
Intervalo numrico
0 a 1 (false ou true)
-32.768 a 32.767
0 a 65.535
0 a 65.535
-128 a 127
0 a 255
0 a 255
N/A
-2.147.483.648 a 2.147.483.647
0 a 4.294.967.295
-3,4028235e+38 a 3,4028235e+38
-3,4028235e+38 a 3,4028235e+38
Sequncia de caracteres
Sequncia de variveis
Comunicao Serial
Habilita a porta serial e fixa a taxa de transmisso (funo setup)
Desabilita a porta serial para permitir o uso dos pinos digitais
Libera caracteres que esto na linha serial, deixando-a vazia e pronta para entradas
e sadas.
Retorna o nmero de bytes disponveis para leitura no buffer da porta serial.
L o primeiro byte que est no buffer da porta serial
Envia para a porta serial um caractere ASCII
O mesmo que o anterior, porem pula uma linha
Operadores de Comparao
==
!=
<
>
>=
<=
Igual
Diferente
Menor
Maior
Maior ou igual
Menor ou igual
Operadores Lgicos
&&
||
!
AND
OR
NOT
Smbolos Compostos
x++
x-x+=y
x-=y
Incrementa x
Decrementa x
x = x+y
x = x-y
40
x*=y
x/=y
x = x*y
x = x/y
{}
;
//
/* ... */
Smbolos
Entre as chaves fica o contedo da funo
Final de um comando/linha
Linha de comentrio
Comentrio de varias linhas
Funes
If(condio)
{}
else
{}
Funo Se e Se no
if(condio)
{}
else if(condio 2)
{}
Funo Se em cascata
switch(expresso){
case expresso = x: Bloco1;
break;
case expresso = y: Bloco2;
break;
default: bloco3
}
Funo Caso
while(condio){bloco
funes}
Funo Enquanto
do{
bloco de instrues
}
while(condio);
for(var;condio;incremento)
{}
Funo Para
(condio) ? bloco1:bloco2;
Operador ternrio ? caso condio seja verdadeira ele executa o bloco 1, caso
contrario, executa o bloco 2.
Ex.: y = (x >10)? 15:20; // caso x>10 y=15, caso contrario, y = 20
41
J parou pensar o que aconteceria se todos soubessem como criar robs? Todos
compartilhando seus conhecimentos e ajudando outras pessoas em seus projetos, projetos
inovadores sendo criados a todo instante. Tudo isso sendo feito por um nico propsito,
mudar o mundo.
Essa revoluo j vem acontecendo e a internet tem unido as pessoas de forma nunca
vista antes. O conhecimento nunca foi to acessvel como tem sido agora e a pessoas tm cada
vez mais aderido filosofia do Open Source.
O Vida de Silcio quer fazer parte de tudo isso ajudando as outras pessoas a
construrem um mundo melhor. Tem muita coisa para ser criada ou melhorada, como por
exemplo, a robtica de reabilitao, rea que ainda tem muito para evoluir.
Para isso, montamos uma loja onde oferecemos a maior variedade possvel de itens
para confeco de projetos de robtica, eletrnica e automao, com preos amigveis.
Alm disso, temos um blog com tutoriais bacanas e didticos para que todos possam
aprender a usar um Arduino e outras placas de desenvolvimento, de forma simples e prtica.
Conhea nosso site, ficaremos felizes em lhe receber!
Atenciosamente,
Equipe Vida de Silcio
42