Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Agora clique em Upload para que o programa seja transferido para seu Arduino.
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 modelo Arduino Uno qualquer
pino pode ser utilizado como entrada ou sada digital.
2.1.3. Entendendo o programa
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
receita se assemelha
Passo Essa
11: Desenforme
e saboreie.aos
FIMdefine o que iremos usar, e depois diz passo a passo o que devemos fazer.
Ele
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.
Alm da ordem de passos, voc deve falar em uma lngua que o computador
entenda, no adianta uma receita em grego para um brasileiro. Para o nosso caso usamos
uma linguagem baseada em C++. Tal como qualquer lngua, ela possui suas regras de
como us-la adequadamente.
Despois de traduzido o algoritmo para a linguagem do Arduino, teremos o cdigofonte, cdigo de programa ou simplesmente programa. Muitos gostam de chamar tambm
de sketch.
11
12
Variveis
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
No Apndice 1 voc pode conferir uma tabela com os principais tipos de variveis
e suas particularidades.
Ao criar uma varivel, interessante que ela tenha um nome associado informao que ela
armazena. No exemplo anterior, no lugar x poderamos ter usado o nome soma ou resultado.
Em nosso programa declaramos a varivel do tipo int chamada led que armazena
o nmero 13, que o nmero da porta onde est localizado o LED que pisca com a
execuo do programa. Dessa forma, quando escrevemos led em nosso programa, ele
corresponder a 13, que est escrito dentro da varivel.
int led = 13;
Funo
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.
13
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 incio e } para indicar o final.
14
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
Veja o exemplo do delay(1000), essa instruo pede para que o Arduino pare por
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);
}
15
2.2.
16
1 LED 5mm
1 Resistor 470
Fios Jumpers
1 Protoboard
uma corrente maior que o limite, passe por um pino, este poder ser danificado.
Ao usar um pino como sada tenha cuidado para no drenar mais que o mximo suportado.
Caso uma corrente maior que o limite passe por um pino, este poder ser danificado. No
Arduino esse valor costuma ser de 30mA.
Resistor
Figura 9 - Resistor
LEDs
Figura 10 - LED
18
19
3. Entradas Digitais
No captulo 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 boto de presso, conectado ao pino 2, para ligar e
desligar um LED conectado ao pino digital 13.
*/
// Determinamos constantes para os nmeros dos pinos utilizados
const int buttonPin = 2;
// Numero do pino do boto de presso
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)
23
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
buttonState ==1?
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
25
4. Entrada Analgica
O uso de entradas digitais limita nossas possibilidades, visto que o mundo
analgico. Sendo assim, 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
Caso tenha ocorrido tudo como esperado, conforme voc varie a resistncia do
27
4.2.
Entendendo o Hardware
Potencimetro e trimpot
Figura 17 - Potencimetro
Divisor de tenso
28
4.3.
Entendendo o programa
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.
O duty cycle a razo do tempo em que o sinal permanece na tenso mxima (5V
no Arduino) sobre o tempo total de oscilao, como est ilustrado na figura abaixo:
5.1.
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
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
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