Curso introdutório de microcontroladores
-Plataforma Arduino
Prof. Fábio Rodrigues de la Rocha
Introdução
Mas afinal, o que é Arduino ?
Arduino é um nome “fantasia” que representa uma família de placas
eletrônicas. Nestas placas temos um microcontrolador, botões, Leds, algum tipo de conexão para ligar no computador.
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 2 / 37
Introdução
Microcontrolador
Microcontrolador é semelhante a um processador tal como nos computadores desktop/notebooks, mas existem diferenças:
É muito mais simples e mais barato; 8 bits;
2 KiB de memória RAM; 32 KiB de memória de programa; Custo aproximadamente de 4 dólares.
Possui internamente timers/contadores/protocolos de transmissão de dados, conversores AD, memória RAM/FLASH/EEPROM, etc.
Introdução: Kits
Figura: Arduino 2009 Figura:Arduino Mega Figura: Arduino Pro
Figura: Arduino Pro
Mini Figura: LilyPad Figura:Freeduino
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 4 / 37
Introdução: Kits
Introdução Kits x microcontroladores
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 6 / 37
Introdução: Características dos
Introdução: Pinos
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 8 / 37
Introdução
Mas por que o Arduino é popular ?
Kits de microcontroladores existem já a décadas, mas o Arduino possui algumas características que o diferencial dos demais.
Baixo custo;
Possui ambiente de desenvolvimento Assembly/C disponibilizado como SL;
Possui hardware livre*;
Não necessita de hardware especial para programação*;
Algumas versões, usa componentes DIP, que facilita a utilização em desenvolvimento de protótipos;
Possui site com manuais, bibliotecas e exemplos de códigos; Pode operar sem a presença de um computador;
Hardware:Como um microcontrolador é programado ?
AVR Compiler 0011001110000110010010 1110010101010101010101 1110000000000011010101 0101010101010101010101 0101010101010101010110 0101010101010101010101 0101000011110000111000 0101010101010101010101 0101101000111100001111 (UTFPR)FLISOL - UTFPR-PR - Abril/2011 10 / 37
Hardware:Como um microcontrolador é programado ?
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 12 / 37
Hardware: Bootloader
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 14 / 37
Hardware: Shield para o Arduino
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 16 / 37
Software
O arduino possui um ambiente de desenvolvimento disponível para download em www.arduino.cc;
É SL e multiplataforma;
É um editor de texto, compilador e gravador do microcontrolador, tudo numa única ferramenta.
Software
Como programar no Arduino ?
Na maioria dos casos os programadores que desenvolvem software para o Arduino não utilizam as linguagens C ou C++, mas a linguagem denominada Wiring que pode ser considerada a linguagem do Arduino. A linguagem Wiring é similar as linguagens C e C++, contudo possui algumas diferenças.
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 18 / 37
Software
Um programa escrito na linguagem do arduino é denominado sketch e deve ser escrito no ambiente de desenvolvimento Arduino (Figura 10). O ambiente Arduino é escrito na linguagem Java e assim está disponível para diversos sistemas. Quando um sketch é compilado, o ambiente Arduino varre o código fonte Wiring fazendo algumas substituições e transforma o código Wiring em linguagem C/C++ que é compilado efetivamente pelo compilador da GNU.
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 19 / 37
Software
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 20 / 37
1 i n t l e d P i n = 13; // LED e s t a c o n e c t a d o ao p i n o 13 do a r d u i n o 2 // Na p l a c a e l e t r o n i c a , deve - se l i g a r um LED e n t r e o 3 // p i n o 13 e o GND 4 5 6 // S e t u p () eh e x e c u t a d a uma vez a p e n a s 7 v o i d s e t u p () { 8 // I n i c i a l i z a o p i n o d i g i t a l c o m o s e n d o p i n o de s a i d a 9 p i n M o d e ( ledPin , O U T P U T ) ; 10 } 11 12 13 // a f u n c a o l o o p () e x e c u t a c i c l i c a m e n t e 14 v o i d l o o p () 15 { 16 d i g i t a l W r i t e ( ledPin , H I G H ) ; // L i g a o LED c o l o c a n d o n i v e l a l t o no p i n o 17 // do m i c r o c o n t r o l a d o r 18 d e l a y ( 1 0 0 0 ) ; // E s p e r a 1 s e g u n d o
19 d i g i t a l W r i t e ( ledPin , LOW ) ; // D e s l i g a o LED c o l o c a n d o n i v e l b a i x o no 20 // p i n o do m i c r o c o n t r o l a d o r 21 d e l a y ( 1 0 0 0 ) ; // E s p e r a 1 s e g u n d o 22 } (UTFPR)
FLISOL - UTFPR-PR - Abril/2011 22 / 37
Software
Pinos de Entrada/Saída Digital
Antes de utilizar um pino como entrada/saída devemos configurá-lo ou como entrada ou como saída. A configuração é feita utilizando-se a função
pinMode(numero_pino,modo)
pinMode(3,OUTPUT); ou pinMode(3,INPUT);
e depois podemos utilizar a função x=digitalRead(numero_pino) e digitalWrite(numero_pino, LOW);
(UTFPR)
FLISOL - UTFPR-PR - Abril/2011 24 / 37
1 c o n s t i n t b u t t o n P i n = 2; // b o t a o 2 c o n s t i n t l e d P i n = 13; // LED 3 4 5 i n t b u t t o n S t a t e = 0; // E s t a d o do b o t a o 6 7 v o i d s e t u p () { 8 p i n M o d e ( ledPin , O U T P U T ) ; 9 p i n M o d e ( b u t t o n P i n , I N P U T ) ; 10 } 11 12 v o i d l o o p () { 13 // Le o e s t a d o do b o t a o 14 b u t t o n S t a t e = d i g i t a l R e a d ( b u t t o n P i n ) ; 15 16 // B o t a o p r e s s i o n a d o ? 17 if ( b u t t o n S t a t e == H I G H ) { 18 // L i g a o LED 19 d i g i t a l W r i t e ( ledPin , H I G H ) ; 20 } 21 e l s e { 22 // D e s l i g a o LED 23 d i g i t a l W r i t e ( ledPin , LOW ) ; 24 } 25 } (UTFPR)
FLISOL - UTFPR-PR - Abril/2011 26 / 37
Software
Transmissão de dados seriais
O Arduino possui uma UART que pode transmitir dados seriais. No software deve-se configurar a taxa de transmissão e enviar bytes ou cadeias de
caracteres e ler bytes pela porta serial. 1 2 v o i d s e t u p () { 3 S e r i a l . b e g i n ( 9 6 0 0 ) ; 4 5 S e r i a l . p r i n t l n ("Olá mundo") ; 6 S e r i a l . w r i t e ( 1 2 8 ) ; 7 8 } 9 v o i d l o o p () { 10 11 if ( S e r i a l . a v a i l a b l e () > 0) {
12 // Lê um byte que tenha sido transmitido 13 // do PC
14 i n c o m i n g B y t e = S e r i a l . r e a d () ; 15 }
Software
Pinos de Entrada analógica
Alguns pinos do Arduino estão conectados a um conversor AD. O Arduino pode possuir diversos pinos que são pinos analógicos, mas existe apenas um conversor. Quando desejamos ler um pino analógico do Arduino, usa-se a função analogRead(pino); 1 i n t a n a l o g V a l u e ; 2 u n s i g n e d c h a r v al or _ a , v a l o r _ b ; 3 4 a n a l o g V a l u e = a n a l o g R e a d (0) ; 5 v a l o r _ a = ( b y t e ) a n a l o g V a l u e ; 6 v a l o r _ b = ( b y t e ) ( a n a l o g V a l u e > >8) ; (UTFPR)
FLISOL - UTFPR-PR - Abril/2011 28 / 37
1 i n t s e n s o r P i n = A0 ; // P i n o o n d e o p o t e n c i o m e t r o e s t a l i g a d o 2 i n t s e n s o r V a l u e = 0; // v a l o r l i d o do s e n s o r 3 4 v o i d s e t u p () { 5 // Os p i n o s a n a l o g i c o s ja sao c o n f i g u r a d o s 6 // c o m o p i n o s de e n t r a d a por p a d r a o 7 S e r i a l . b e g i n ( 9 6 0 0 ) ; 8 } 9 10 v o i d l o o p () { 11 // le o v a l o r do p o t e n c i o m e t r o 12 s e n s o r V a l u e = a n a l o g R e a d ( s e n s o r P i n ) ; 13 S e r i a l . p r i n t (" V a l o r do p o t e n c i o m e t r o : ") ; 14 S e r i a l . p r i n t l n ( s e n s o r V a l u e , DEC ) ; 15 } (UTFPR)
FLISOL - UTFPR-PR - Abril/2011 30 / 37
Software
Pinos de saída analógica
O Arduino possui apenas um conversor AD, ou seja, consegue converter um sinal de tensão em uma representação digital. Mesmo assim, o Arduino possui uma função 1 i n t l e d P i n = 9; // LED c o n n e c t e d to d i g i t a l pin 9 2 i n t a n a l o g P i n = 3; // p o t e n t i o m e t e r c o n n e c t e d to a n a l o g pin 3 3 i n t val = 0; // v a r i a b l e to s t o r e the r e a d v a l u e 4 5 v o i d s e t u p () 6 {
7 p i n M o d e ( ledPin , O U T P U T ) ; // s e t s the pin as o u t p u t 8 }
9
10 v o i d l o o p () 11 {
12 val = a n a l o g R e a d ( a n a l o g P i n ) ; // r e a d the i n p u t pin
13 a n a l o g W r i t e ( ledPin , val / 4) ; // a n a l o g R e a d v a l u e s go f r o m 0 to 1023 , a n a l o g W r i t e v a l u e s f r o m 0 to 255
Software
Memória EEPROM
O Arduino possui uma memória EEPROM de 512Bytes que pode ser lida/gravada pelo programador.
1 # i n c l u d e < E E P R O M . h > 2 i n t a d d r = 0; 3 4 v o i d s e t u p () 5 { 6 } 7 8 v o i d l o o p () 9 { 10 i n t val = a n a l o g R e a d (0) / 4; 11 E E P R O M . w r i t e ( addr , val ) ; 12 a d d r = a d d r + 1; 13 if ( a d d r == 5 1 2 ) a d d r = 0; 14 d e l a y ( 1 0 0 ) ; 15 } (UTFPR)
FLISOL - UTFPR-PR - Abril/2011 32 / 37
Software
Função Map
Conversão de valores. 1 v o i d s e t u p () {} 2 3 v o i d l o o p () 4 { 5 i n t val = a n a l o g R e a d (0) ;6 val = map ( val , 0 , 1023 , 0 , 2 5 5 ) ; 7 a n a l o g W r i t e (9 , val ) ;
8 }
Software
Interrupções
O Arduino pode gerar interrupções 1 # i n c l u d e < T i m e r O n e . h > 2 3 v o l a t i l e i n t v a l o r =0 , c o n t a d o r =0 , n =0; 4 u n s i g n e d c h a r v al or _ a , v a l o r _ b ; 5 l o n g f r e q ; 6 7 v o i d s e t u p () 8 { 9 i n t e r r u p t s () ; 10 f r e q = 16 ; // f r e q u e n c i a em h e r t z 11 T i m e r 1 . i n i t i a l i z e ( 1 0 0 0 0 0 0 / f r e q ) ; 12 T i m e r 1 . a t t a c h I n t e r r u p t ( E s t o u r o _ d e _ T e m p o ) ; 13 T i m e r 1 . s t a r t () ; 14 } 15 16 v o i d E s t o u r o _ d e _ T e m p o () 17 { 18 // Faz a l g u m a c o i s a 19 }
(UTFPR) FLISOL - UTFPR-PR - Abril/2011 34
Software
Atraso de tempo
O Arduino possui algumas funções para causar um atraso de tempo, como delay() e delayMicroseconds()
1 v o i d l o o p () 2 {
3 d i g i t a l W r i t e ( ledPin , H I G H ) ; // s e t s the LED on 4 d e l a y ( 1 0 0 0 ) ; // w a i t s for a s e c o n d 5 d i g i t a l W r i t e ( ledPin , LOW ) ; // s e t s the LED off 6 d e l a y ( 1 0 0 0 ) ; // w a i t s for a s e c o n d 7
8
9 d i g i t a l W r i t e ( outPin , H I G H ) ; // s e t s the pin on
10 d e l a y M i c r o s e c o n d s ( 5 0 ) ; // p a u s e s for 50 m i c r o s e c o n d s 11 d i g i t a l W r i t e ( outPin , LOW ) ; // s e t s the pin off
12 d e l a y M i c r o s e c o n d s ( 5 0 ) ; // p a u s e s for 50 m i c r o s e c o n d s 13
14 }
Software
Contando o tempo
O Arduino possui funções para medir a passagem do tempo desde que o programa comecou a executar.
time = micros(); Retorna a quantidade de microsegundos que se passaram desde que o Arduino foi iniciado. Estoura aprox. após 70min.
time = millis(); Retorna a quantidade de milisegundos que se passaram desde que o Arduino foi iniciado. Estoura depois de aprox. 50 dias.
1 u n s i g n e d l o n g t i m e ; 2 3 v o i d s e t u p () { 4 S e r i a l . b e g i n ( 9 6 0 0 ) ; 5 } 6 v o i d l o o p () { 7 S e r i a l . p r i n t (" T i m e : ") ; 8 t i m e = m i c r o s () ; 9 // p r i n t s t i m e s i n c e p r o g r a m s t a r t e d 10 S e r i a l . p r i n t l n ( t i m e ) ; 11 // w a i t a s e c o n d so as not to s e n d m a s s i v e a m o u n t s of d a t a 12 d e l a y ( 1 0 0 0 ) ; 13 } (UTFPR)
FLISOL - UTFPR-PR - Abril/2011 36 / 37
Software
No site http://arduino.cc pode-se encontrar bibliotecas para controlar diversos dispositivos como displays de LCD, acelerômetros, sensores de temperatura.