Escolar Documentos
Profissional Documentos
Cultura Documentos
Programação em Arduino
Programação em Arduino
Mdulo Bsico
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
Financiamento:
Contatos:
Execuo:
http://oficinaderobotica.ufsc.br
Laboratrio de Automao
e Robtica Mvel
Introduo
Microcontroladores
Arduino UNO
Ambiente de desenvolvimento
Funes setup() e loop()
Monitor Serial
Portas digitais e analgicas
Programando em Arduino
Expandindo as funcionalidades
Arduino
Financiamento:
Execuo:
do
Laboratrio de Automao
e Robtica Mvel
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
Tipos de Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
UNO
Leonardo
Due
Esplora
Mega
Mega ADK
Ethernet
Mini
LilyPad
Micro
Nano
ProMini
Pro
Fio
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
Referncias na WEB:
O site oficial do Arduino http://arduino.cc
Um documentrio sobre o Arduino pode ser
assistido
em:
http://arduinothedocumentary.org/
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
Um microcontrolador um CI que
incorpora vrias funcionalidades.
Alguns vezes os microcontroladores so
chamados de computador de um nico
chip.
So utilizados em diversas aplicaes
de sistemas embarcados, tais como:
carros,
eletrodomsticos,
avies,
automao residencial, etc.
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
Processamento de dados
Financiamento:
Entrada
Processamento
Sada
Execuo:
Laboratrio de Automao
e Robtica Mvel
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
Caractersticas
Microcontrolador: ATmega328
Tenso de operao: 5V
Tenso recomendada (entrada): 7-12V
Limite da tenso de entrada: 6-20V
Pinos digitais: 14 (seis pinos com sada PWM)
Entrada analgica: 6 pinos
Corrente contnua por pino de entrada e sada: 40
mA
Corrente para o pino de 3.3 V: 50 mA
Quantidade de memria FLASH: 32 KB (ATmega328)
onde 0.5 KB usado para o bootloader
Quantidade de memria SRAM: 2 KB (ATmega328)
Quantidade
de
memria
EEPROM:
1
KB
(ATmega328)
Velocidade de clock: 16 MHz
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
10
Alimentao
O Arduino UNO pode ser alimentado pela
porta USB ou por uma fonte externa DC.
A recomendao que a fonte externa seja
de 7 V a 12 V e pode ser ligada diretamente
no conector de fonte ou nos pinos Vin e Gnd.
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
11
O ambiente de desenvolvimento do
Arduino (IDE) gratuito e pode ser
baixado
no
seguinte
endereo:
arduino.cc.
As principais funcionalidades do IDE do
Arduino so:
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
12
Interface principal
desenvolvimento
do
ambiente
de
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
13
Financiamento:
Execuo:
14
Financiamento:
void setup()
{
}
void loop()
{
Execuo:
}
Laboratrio de Automao
e Robtica Mvel
15
loop()
Financiamento:
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
16
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
17
Financiamento:
void setup()
{
Serial.begin(9600); // Definio da velocide de transmisso
}
void loop()
{
Serial.println("Ola, seu nome, seja bem vindo ao maravilhoso mundo do Arduino");
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
18
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
19
Portas Digitais
As portas digitais trabalham com valores
bem definidos, ou seja, no caso do Arduino
esses valores so 0V e 5V.
0V indica a ausncia de um sinal e 5V indica
a presena de um sinal.
Para escrever em uma porta digital basta
utilizar a funo digitalWrite(pin, estado).
Para ler um valor em uma porta digital basta
utilizar a funo digitalRead(pin).
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
20
Portas Analgicas
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
21
Financiamento:
Execuo:
pinMode(13, OUTPUT)
Laboratrio de Automao
e Robtica Mvel
22
Algoritmo
Sequncia de passos que visa atingir um
objetivo bem definido.
Exemplo: Receita caseira
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
23
Constantes e Variveis
Um dado constante quando no sofre
nenhuma variao no decorrer do tempo.
Do incio ao fim do programa o valor
permanece inalterado.
Exemplos:
10
Bata antes de entrar!
-0,58
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
24
Constantes e Variveis
A criao de constantes no Arduino pode ser
feita de duas maneiras:
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
25
Constantes e Variveis
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
26
Constantes e Variveis
Variveis so lugares (posies) na memria
principal que servem para armazenar dados.
As variveis so acessadas atravs de um
identificador nico.
O contedo de uma varivel pode variar ao longo
do tempo durante a execuo de um programa.
Uma varivel s pode armazenar um valor a cada
instante.
Um identificador para uma varivel formado por
um ou mais caracteres, obedecendo a seguinte
regra:
o
primeiro
caractere
deve,
obrigatoriamente, ser uma letra.
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
27
Constantes e Variveis
Financiamento:
ATENO!!!
Execuo:
Laboratrio de Automao
e Robtica Mvel
28
Definio
void
boolean
char
unsigned char
byte
int
unsigned int
word
Execuo:
Laboratrio de Automao
e Robtica Mvel
29
Definio
long
unsigned long
short
float
double
Execuo:
Laboratrio de Automao
e Robtica Mvel
30
Financiamento:
Execuo:
}
void loop()
{
int valor_x; // varivel
}
Laboratrio de Automao
e Robtica Mvel
31
Financiamento:
Execuo:
Ateno!!!
32
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
33
Operadores
Em uma linguagem de programao existem
vrios operadores que permitem operaes
do tipo:
Aritmtica
Relacional
Lgica
Composta
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
34
Operadores aritmticos
Financiamento:
Smbolo
Funo
Adio
Subtrao
Multiplicao
Diviso
Execuo:
Laboratrio de Automao
e Robtica Mvel
35
Operadores relacionais
Financiamento:
Smbolo
Funo
>
Maior
<
Menor
>=
Maior ou igual
<=
Menor ou igual
==
Igual
!=
Diferente
Execuo:
Laboratrio de Automao
e Robtica Mvel
36
Operadores lgicos
Financiamento:
Smbolo
Funo
&&
E (and)
||
OU (or)
No (not)
Execuo:
Laboratrio de Automao
e Robtica Mvel
37
Operadores compostos
Financiamento:
Smbolo
Funo
++
Incremento
--
Decremento
+=
-=
*=
/=
Execuo:
Laboratrio de Automao
e Robtica Mvel
38
Comentrios
Financiamento:
Execuo:
Nota:
39
Comandos de Seleo
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
40
Financiamento:
if (expr) {
}
cmd
onde:
expr representa uma expresso a ser avaliada que
Execuo:
41
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
42
Financiamento:
if (expr) {
cmd;
}
else {
cmd;
Execuo:
onde:
expr representa uma expresso a ser avaliada que pode ser
do tipo lgica, relacional ou aritmtica. O resultado da
avaliao de uma expresso sempre um valor lgico.
cmd comando(s) a ser executado.
Laboratrio de Automao
e Robtica Mvel
43
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
44
Financiamento:
void loop()
{
if (Serial.available()) {
led = Serial.read();
Execuo:
Laboratrio de Automao
e Robtica Mvel
45
Financiamento:
switch (valor) {
case x: cmd1;
break;
case y: cmd2;
break;
default: cmd;
}
onde:
valor um dado a ser avaliado. representado por uma varivel de
memria.
cmdx comando a ser executado.
case indica a opo a ser executada.
default comando padro que dever ser executado se nenhuma outra
escolha (case) tiver sido selecionada.
Execuo:
Laboratrio de Automao
e Robtica Mvel
46
Financiamento:
void setup()
{
pinMode(led_vermelho, OUTPUT);
pinMode(led_verde, OUTPUT);
pinMode(led_amarelo, OUTPUT);
Serial.begin(9600);
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
47
Financiamento:
void loop()
{
if (Serial.available()) {
led = Serial.read();
switch (led) {
case 'R': digitalWrite(led_vermelho, HIGH); // Acende led
break;
case 'r': digitalWrite(led_vermelho, LOW); // Apaga led
break;
case 'G': digitalWrite(led_verde, HIGH); // Acende led
break;
case 'g': digitalWrite(led_verde, LOW); // Apaga led
break;
case 'Y': digitalWrite(led_amarelo, HIGH); // Acende led
break;
case 'y': digitalWrite(led_amarelo, LOW); // Apaga led
break;
default: Serial.println("Nenhum led selecionado!!!");
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
48
Lendo um boto
Para ler um boto basta lig-lo em uma
porta digital.
Para que um circuito com boto funcione
adequadamente, ou seja, sem rudos,
necessrio o uso de resistores pull-down ou
pull-up.
Os resistores pull-down e pull-up garantem
que os nveis lgicos estaro prximos s
tenses esperadas.
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
49
Financiamento:
Resistor
pull-down
10K
Execuo:
Laboratrio de Automao
e Robtica Mvel
50
down
Financiamento:
Programa
const int botao = 8;
boolean vlr_btn = false;
void setup()
{
pinMode(botao, INPUT);
Serial.begin(9600);
}
void loop()
{
vlr_btn = digitalRead(botao);
if (vlr_btn == true) {
Serial.println("Botao pressionado!!!");
}
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
51
Financiamento:
Resistor
pull-up
10K
Execuo:
Laboratrio de Automao
e Robtica Mvel
52
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
53
Nota
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
54
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
55
Financiamento:
Execuo:
void loop()
{
int valor = digitalRead(botao);
if (valor == HIGH) {
digitalWrite(led, HIGH); // Acende o led
}
else {
digitalWrite(led, LOW); // Apaga o led
}
Laboratrio de Automao
e Robtica Mvel
56
Financiamento:
Nota:
O Arduino possui uma constante chamada
INPUT_PULLUP que define que a porta ser de
entrada e o resistor pull-up da mesma ser
ativado.
Define a porta 10 como entrada de
Exemplo:
dados e ativa o resistor pull-up.
void setup()
{
pinMode(10, INPUT_PULLUP);
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
57
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
58
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
59
Financiamento:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int val = analogRead(0);
Serial.println(val);
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
60
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
61
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
62
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
63
Financiamento:
T = temperatura em Kelvin
R = resistncia em ohms
a, b, c: constantes definidas pelo fabricante do sensor
Execuo:
64
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
65
Financiamento:
/*
Programa que utiliza a equao de Steinhart-Hart
1/T = a + b * ln(R) + c * (ln(R))3
*/
#include <math.h>
const int sensor = A0;
Execuo:
return temp;
Laboratrio de Automao
e Robtica Mvel
66
Financiamento:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int valor = analogRead(sensor);
double c = tempCelsius(valor);
Serial.println(valor);
Serial.println(c);
delay(100);
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
67
Comandos de Repetio
Muitas vezes necessrio repetir uma
determinada instruo mais de uma vez.
Os comandos de repetio mantm em um
lao uma instruo ou conjunto de
instrues.
Os comandos de repetio do Arduino so:
Baseado em um contador
Baseado em uma expresso com teste no incio
Baseado em uma expresso com teste no final
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
68
Comandos de Repetio
Baseado em um Contador
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
69
Comandos de Repetio
Baseado em um Contador
Financiamento:
void loop()
{
for (executado; executado < vezes; executado++) {
Serial.println("Testando o comando de repeticao for()");
}
}
Execuo:
Laboratrio de Automao
e Robtica Mvel
70
Comandos de Repetio
Baseado em uma expresso com teste no incio
Este tipo de comando de repetio avalia uma expresso, caso seja
verdadeira, a(s) intruo(es) dentro do lao permanecem
executando.
No Arduino o comando de repetio baseado em uma expresso com
teste no incio :
while (expr) {
cmd;
}
onde:
expr uma expresso que pode ser lgica, relacional ou
aritmtica. A permanncia de execuo do lao garantida
enquanto a expresso for verdadeira.
Nota:
Neste tipo de comando de repetio a avaliao da expresso
realizada no incio do lao, ou seja, pode ser que o cmd no execute
nenhuma vez.
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
71
Comandos de Repetio
Baseado em uma expresso com teste no
incio
Financiamento:
Exemplo:
const int botao = 6;
const int led = 10;
void setup()
{
pinMode(botao, INPUT);
pinMode(led, OUTPUT);
digitalWrite(botao, HIGH); // Ativa resistor pull-up
}
Execuo:
void loop()
{
// Teste do comando while()
while (digitalRead(botao)); // Espera at que o boto seja pressionado
digitalWrite(led, HIGH);
delay(2000);
digitalWrite(led, LOW);
}
Laboratrio de Automao
e Robtica Mvel
72
Comandos de Repetio
Baseado em uma expresso com teste no final
Financiamento:
cmd;
} while (expr) ;
Execuo:
onde:
expr uma expresso que pode ser lgica, relacional ou
aritmtica. A permanncia de execuo do lao garantida
enquanto a expresso for verdadeira.
Nota:
Neste tipo de comando de repetio a avaliao da expresso
realizada no final do lao, ou seja, garatido que pelo menos uma
vez o cmd ser executado.
Laboratrio de Automao
e Robtica Mvel
73
Comandos de Repetio
Baseado em uma expresso com teste no
final
Financiamento:
Exemplo:
const int botao = 6;
const int led = 10;
void setup()
{
pinMode(botao, INPUT);
pinMode(led, OUTPUT);
digitalWrite(botao, HIGH); // Ativa resistor pull-up
}
Execuo:
void loop()
{
// Teste do comando do while()
do {
digitalWrite(led, HIGH);
delay(2000);
digitalWrite(led, LOW);
delay(2000);
} while (digitalRead(botao)); // Enquanto o boto no for pressionado, pisca o led
}
Laboratrio de Automao
e Robtica Mvel
74
Vetores e matrizes
Uma varivel escalar pode armazenar muitos
valores ao longo da execuo do programa,
porm no ao mesmo tempo.
Existem variveis que podem armazenar
mais de um valor ao mesmo tempo. Essas
variveis so conhecidas como variveis
compostas homogneas.
No Arduino possvel trabalhar com dois
tipos de variveis compostas homogneas,
vetores e matrizes.
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
75
Vetores e matrizes
Vetor
Financiamento:
Dado armazenado
int vetor[4];
ndices
Execuo:
Laboratrio de Automao
e Robtica Mvel
76
Vetores e matrizes
Vetor
Financiamento:
Execuo:
vetor[0] = 7;
Atribui o valor 7 a posio 0 do vetor.
Laboratrio de Automao
e Robtica Mvel
77
Vetores e matrizes
Vetor
Financiamento:
Execuo:
78
Vetores e matrizes
Vetor
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
79
Vetores e matrizes
Matriz
ndices
Valor armazenado
na posio [3,0]
10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
0
Financiamento:
Execuo:
80
Vetores e matrizes
Matriz
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
81
Vetores e matrizes
Matriz
Para acessar um determinado valor em uma
posio da matriz, basta usar o ndice da linha
e o da coluna, ou seja, a posio onde o valor
est armazenado na matriz.
Exemplo:
digitalWrite(matriz[0][0], HIGH);
Ativa a porta cujo nmero est definido na
posio 0 (linha), 0 (coluna) da matriz.
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
82
Vetores e matrizes
Matriz
Exemplo:
acendendo
e
aleatoriamente em uma matriz
Financiamento:
apagando
leds
Execuo:
void loop()
{
int linha, coluna;
linha = random(2); // Gera um nmero aleatrio entre 0 e 1
coluna = random(2); // Gera um nmero aleatrio entre 0 e 1
// Acende led
digitalWrite(matriz_leds[linha][coluna], HIGH);
delay(500);
// Apaga led
digitalWrite(matriz_leds[linha][coluna], LOW);
delay(500);
Laboratrio de Automao
e Robtica Mvel
83
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
84
Financiamento:
um nome;
uma lista de parmetros (se houver);
conjunto de instrues.
Exemplo:
Parmetros
Nome
Tipo de dado
Execuo:
Conjunto de
instrues
Laboratrio de Automao
e Robtica Mvel
85
Financiamento:
Execuo:
void loop()
{
pisca_diagonal_principal();
pisca_diagonal_secundaria();
}
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
87
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
88
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
89
Financiamento:
Perodo
Pulso
Execuo:
Laboratrio de Automao
e Robtica Mvel
90
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
91
Pinos
30Hz
32 milissegundos
9 e10, 11e 3
61Hz
16 milissegundos
5e6
122Hz
8 milissegundos
9 e10, 11e 3
244Hz
4 milissegundos
5 e 6, 11e 3
488Hz
2 milissegundos
9 e10, 11e 3
976Hz (1kHz)
1 milissegundos
5 e 6, 11e 3
3.906Hz (4kHz)
256 microssegundos
9 e10, 11e 3
7.812Hz (8kHz)
128 microssegundos
5e6
31.250Hz (32kHz)
32 microssegundos
9 e10, 11e 3
62.500Hz (62kHz)
16 microssegundos
5e6
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
92
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
93
Comunicao ethernet
Comunicao wifi
Comunicao bluethooth
Ponte H
Banco de rels
...
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
94
Execuo:
Laboratrio de Automao
e Robtica Mvel
95
Exemplos de shields
Financiamento:
Execuo:
Laboratrio de Automao
e Robtica Mvel
96