Professional Documents
Culture Documents
Mdulo Bsico
Financiamento: Execuo:
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
O Arduino uma plataforma utilizada para prototipao de circuitos eletrnicos. O projeto do Arduino teve incio em 2005 na cidade de Ivrea, Itlia. O Arduino composto por uma placa com microcontrolador Atmel AVR e um ambiente de programao baseado em Wiring e C++. Tanto o hardware como o ambiente de programao do Arduino so livres, ou seja, qualquer pessoa pode modific-los e reproduzi-los. O Arduino tambm conhecido de plataforma de computao fsica.
Financiamento:
Execuo:
Tipos de Arduino
Existem vrios tipos de Arduino com especificidades de hardware. O site oficial do Arduino lista os seguintes tipos:
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:
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:
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:
Processamento de dados
Financiamento:
Entrada
Processamento
Sada
Execuo:
Financiamento:
Execuo:
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:
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:
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:
Escrever o cdigo do programa Salvar o cdigo do programa Compilar um programa Transportar o cdigo compilado para a placa do Arduino
Financiamento:
Execuo:
12
do
ambiente
de
Financiamento:
Execuo:
13
Financiamento:
Execuo:
14
Financiamento:
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:
16
O monitor serial utilizado para comunicao entre o Arduino e o computador (PC). O monitor serial pode ser aberto no menu tools opo serial monitor, ou pressionando as teclas CTRL + SHIFT + M. As principais funes do monitor serial so: begin(), read(), write(), print(), println() e available().
Financiamento:
Execuo:
17
Financiamento:
Execuo:
18
O Arduino possui tanto portas digitais como portas analgicas. As portas servem para comunicao entre o Arduino e dispositivos externos, por exemplo: ler um boto, acender um led ou uma lmpada. Conforme j mencionado, o Arduino UNO, possui 14 portas digitais e 6 portas analgicas (que tambm podem ser utilizadas como portas digitais).
Financiamento:
Execuo:
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:
20
Portas Analgicas
As portas analgicas so utilizadas para entrada de dados. Os valores lidos em uma porta analgica variam de 0V a 5V. Para ler uma valor em uma porta analgica basta utilizar a funo analogRead(pin). Os conversores analgicos-digitais (ADC) do Arduino so de 10 bits. Os conversores ADC (do Ingls Analog Digital Converter) permitem uma preciso de 0.005V ou 5mV. Os valores lidos em uma porta analgica variam de 0 a 1023 (10 bits), onde 0 representa 0V e 1023 representa 5V.
Financiamento:
Execuo:
21
Para definir uma porta como entrada ou sada necessrio explicitar essa situao no programa. A funo pinMode(pin, estado) utilizada para definir se a porta ser de entrada ou sada de dados. Exemplo:
Define que a porta 13 ser de sada
pinMode(13, OUTPUT)
pinMode(7, INPUT)
Financiamento:
Execuo:
22
Algoritmo
Sequncia de passos que visa atingir um objetivo bem definido. Exemplo: Receita caseira
Financiamento:
Execuo:
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:
24
Constantes e Variveis
A criao de constantes no Arduino pode ser feita de duas maneiras:
Usando a palavra reservada const
Exemplo:
const int x = 100;
Financiamento:
25
Constantes e Variveis
No Arduino existem algumas constantes previamente definidas e so consideradas palavras reservadas. As constantes definidas so:
Financiamento:
true indica valor lgico verdadeiro false indica valor lgico falso HIGH indica que uma porta est ativada, ou seja, est em 5V. LOW indica que uma porta est desativada, ou seja, est em 0V. INPUT indica que uma porta ser de entrada de dados. OUTPUT indica que uma porta ser de sada de dados.
Execuo:
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:
27
Constantes e Variveis
Financiamento:
ATENO!!!
Um identificador de uma varivel ou constante no pode ser formado por caracteres especiais ou palavras reservadas da linguagem.
Execuo:
28
Execuo:
Armazena nmeros inteiros e ocupa 16 bits de memria ( 2bytes). A faixa de valores de -32.768 a 32.767.
O mesmo que o int, porm a faixa de valores vlidos de 0 a 65.535. O mesmo que um unsigned int.
Laboratrio de Automao e Robtica Mvel
29
30
Execuo:
31
Financiamento:
Execuo:
Ateno!!!
32
Financiamento:
Execuo:
33
Operadores
Em uma linguagem de programao existem vrios operadores que permitem operaes do tipo:
Aritmtica Relacional Lgica Composta
Financiamento:
Execuo:
34
Operadores aritmticos
Financiamento:
Smbolo +
* / %
Funo Adio
Subtrao Multiplicao Diviso Mdulo (resto da diviso inteira)
Execuo:
35
Operadores relacionais
Financiamento:
Smbolo >
< >= <= == !=
Funo Maior
Menor Maior ou igual Menor ou igual Igual Diferente
Execuo:
36
Operadores lgicos
Financiamento:
Smbolo &&
|| !
Funo E (and)
OU (or) No (not)
Execuo:
37
Operadores compostos
Financiamento:
Smbolo ++
-+= -= *= /=
Funo Incremento
Decremento Adio com atribuio Subtrao com atribuio Multiplicao com atribuio Diviso com atribuio
Execuo:
38
Comentrios
Muitas vezes importante comentar alguma parte do cdigo do programa. Existem duas maneiras de adicionar comentrios a um programa em Arduino. A primeira usando //, como no exemplo abaixo:
A segunda usando /* */, como no exemplo abaixo:
/* Este um comentrio de bloco. Permite acrescentar comentrios com mais de uma linha */
Financiamento:
Execuo:
Nota:
Quando o programa compilado os comentrios so automaticamente suprimidos do arquivo executvel, aquele que ser gravado na placa do Arduino.
Laboratrio de Automao e Robtica Mvel
39
Comandos de Seleo
Em vrios momentos em um programa precisamos verificar uma determinada condio afim de selecionar uma ao ou aes que sero executadas. Um comando de seleo tambm conhecido por desvio condicional, ou seja, dada um condio, um parte do programa executada. Os comandos de seleo podem ser do tipo:
Seleo simples Seleo composta Seleo de mltipla escolha
Financiamento:
Execuo:
40
Um comando de seleo simples avalia uma condio, ou expresso, para executar uma ao ou conjunto de aes. No Arduino o comando de seleo simples :
if (expr) { }
cmd
Financiamento:
Execuo:
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
41
Financiamento:
Execuo:
42
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.
43
44
Financiamento:
Execuo:
45
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:
46
Execuo:
47
Execuo:
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:
49
Execuo:
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:
51
Execuo:
52
Execuo:
53
Nota
O Arduino possui resistores pull-up nas portas digitais, e estes variam de 20K a 50K. Para ativar os resistores pull-up de uma porta digital basta defini-la como entrada e coloc-la em nvel alto (HIGH) na funo setup(). pinMode(pin, INPUT) digitalWrite(pin, HIGH) Para desativar os resistores pull-up de uma porta digital basta coloc-la em nvel baixo. digitalWrite(pin, LOW)
Financiamento:
Execuo:
54
Financiamento:
Execuo:
55
Financiamento:
Execuo:
56
Financiamento:
Execuo:
57
Execuo:
58
Execuo:
59
60
Execuo:
61
62
Execuo:
63
Financiamento:
Execuo:
Esta equao utilizada para transformar os valores lidos pelo sensor em temperatura na escala Kelvin. Para encontrar a temperatura em Celsius basta subtrair o valor 273.15 da temperatura em Kelvin.
Laboratrio de Automao e Robtica Mvel
64
Execuo:
65
Financiamento:
Execuo:
66
Execuo:
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:
68
Comandos de Repetio
Baseado em um Contador
Financiamento:
Este tipo de comando de repetio deve ser utilizado quando se sabe a quantidade de vezes que uma determinada instruo deve ser executada. No Arduino o comando de repetio baseado em um contador : for (contador incio; expr; incremento do contador) { cmd;
} onde:
Execuo:
contador = uma varivel do tipo inteiro (int) expr = uma expresso relacional incremento do contador = passo de incremento do contador
69
Comandos de Repetio
Baseado em um Contador
Exemplo: escrevendo uma mensagem x vezes no monitor serial
int vezes = 10; // Quantidade de vezes que a mensagem ser impressa no monitor serial int executado = 0; // Quantidade de mensagens j impressas void setup() { Serial.begin(9600); }
Financiamento:
Execuo:
void loop() { for (executado; executado < vezes; executado++) { Serial.println("Testando o comando de repeticao for()"); } }
70
Financiamento:
Execuo:
71
Comandos de Repetio
Baseado em uma expresso com teste no incio
Exemplo:
const int botao = 6; const int led = 10; void setup() { pinMode(botao, INPUT); pinMode(led, OUTPUT); digitalWrite(botao, HIGH); // Ativa resistor pull-up } void loop() { // Teste do comando while() while (digitalRead(botao)); // Espera at que o boto seja pressionado digitalWrite(led, HIGH); delay(2000); digitalWrite(led, LOW); } Financiamento:
Execuo:
72
Comandos de Repetio
Baseado em uma expresso com teste no final
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 final :
do {
Financiamento:
cmd;
} while (expr) ;
onde:
expr uma expresso que pode ser lgica, relacional ou aritmtica. A permanncia de execuo do lao garantida enquanto a expresso for verdadeira.
Execuo:
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
Exemplo:
const int botao = 6; const int led = 10; void setup() { pinMode(botao, INPUT); pinMode(led, OUTPUT); digitalWrite(botao, HIGH); // Ativa resistor pull-up } 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 }
Financiamento:
Execuo:
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:
75
Vetores e matrizes
Vetor
A declarao de um vetor feita da mesma maneira que uma varivel escalar, entretanto necessrio definir a quantidade de itens do vetor. Vetor Exemplo:
int vetor[4];
7
ndices
0
Financiamento:
Dado armazenado
Execuo:
8
1
1
2
3
3
76
Vetores e matrizes
Vetor
7
0
Financiamento:
8
1
1
2
3
3
Para atribuir um valor a uma determinada posio do vetor, basta usar o ndice, ou seja, a posio onde o valor ser armazenado no vetor. Exemplo:
vetor[0] = 7; Atribui o valor 7 a posio 0 do vetor.
Execuo:
77
Vetores e matrizes
Vetor
7
0
Financiamento:
8
1
1
2
3
3
Para acessar um determinado valor em uma posio do vetor, basta usar o ndice, ou seja, a posio onde o valor est armazenado no vetor. Exemplo: digitalWrite(vetor[0], HIGH);
Ativa a porta cujo nmero est definido na posio 0 do vetor.
Execuo:
78
Vetores e matrizes
Vetor
Exemplo: acendendo e apagando leds cujas portas esto definidas em um vetor
int leds[5] = {2, 3, 4, 5, 6}; // Define as portas onde esto os leds void setup() { int i; for (i = 0; i < 5; i++) { pinMode(leds[i], OUTPUT); // Define as portas como sada } } void loop() { int i; for (i = 0; i < 5; i++) { digitalWrite(leds[i], HIGH); // Acende os leds delay(1000); } for (i = 0; i < 5; i++) { digitalWrite(leds[i], LOW); // Apaga os leds delay(1000); } }
Financiamento:
Execuo:
79
Vetores e matrizes
Matriz
Uma matriz similar a um vetor, entretanto pode ser formada por duas ou mais dimenses. Uma matriz bidimensional possui um determinado nmero de linhas e de colunas. Exemplo:
int matriz[4][6];
Financiamento:
0 1 2 3
10 11 12
Execuo:
ndices
Valor armazenado na posio [3,0]
13 14 15 16 17 18 19 20 21 22 23 24 0 1 2 3 4 5
80
Vetores e matrizes
Matriz
Para atribuir um valor a uma determinada posio da matriz, basta usar o ndice da linha e o ndice da coluna, ou seja, a posio onde o valor ser armazenado na matriz. Exemplo:
matriz[1][2] = 9; Atribui o valor 9 a posio 1 (linha), 2 (coluna) da matriz.
Execuo: Financiamento:
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:
82
Vetores e matrizes
Matriz Exemplo: acendendo e aleatoriamente em uma matriz
int matriz_leds[2][2] = {{2, 3}, {4, 5}}; void setup() { int i, j; for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { // Inicializa portas pinMode(matriz_leds[i][j], OUTPUT); } } randomSeed(analogRead(0)); // Define uma semente a partir da porta ananlgica 0 } 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
Financiamento:
apagando
leds
Execuo:
83
Execuo:
84
Uma funo tem quatro partes fundamentais, que so: um tipo de dado associado a ela (pode ser void);
um nome; uma lista de parmetros (se houver); conjunto de instrues. Exemplo:
int soma(int a, int b) { int resultado= a + b; return resultado; }
Financiamento:
Nome
Parmetros
Execuo:
Tipo de dado
Conjunto de instrues
Laboratrio de Automao e Robtica Mvel
85
Execuo:
void pisca_diagonal_secundaria() // funo para controlar os leds da diagonal secundria { digitalWrite(matriz_leds[0][1], HIGH); digitalWrite(matriz_leds[1][0], HIGH); delay(1000); Laboratrio de Automao e Robtica Mvel digitalWrite(matriz_leds[0][1], LOW); digitalWrite(matriz_leds[1][0], LOW); delay(1000); } UFSC - Oficina de Robtica - @2013 86
Execuo:
87
Financiamento:
Execuo:
88
Financiamento:
Execuo:
89
Financiamento:
Perodo
Pulso
Execuo:
90
Financiamento:
Execuo:
91
Financiamento:
Execuo:
3.906Hz (4kHz)
7.812Hz (8kHz) 31.250Hz (32kHz) 62.500Hz (62kHz)
256 microssegundos
128 microssegundos 32 microssegundos 16 microssegundos
9 e10, 11e 3
5e6 9 e10, 11e 3 5e6
Laboratrio de Automao e Robtica Mvel
92
Financiamento:
Execuo:
93
possvel agregar novas funcionalidades a uma placa do Arduino. As extenses das placas do Arduino so chamadas de shields. Existem shields para as mais diversas funcionalidades, por exemplo:
Comunicao ethernet Comunicao wifi Comunicao bluethooth Ponte H Banco de rels ...
Financiamento:
Execuo:
94
Execuo:
95
Exemplos de shields
Financiamento:
Execuo:
96