You are on page 1of 23

Curso introdutrio de microcontroladores Plataforma Arduino

Prof. Fbio Rodrigues de la Rocha

1 Dezembro 2010

(UTFPR)

1 Dezembro 2010

1 / 23

Introduo
Mas anal, o que Arduino ?
Arduino um nome fantasia que representa uma famlia de placas eletrnicas. Nestas placas temos um microcontrolador, botes, Leds, algum tipo de conexo para ligar no computador.

(UTFPR)

1 Dezembro 2010

2 / 23

Introduo

Microcontrolador
Microcontrolador semelhante a um processador tal como nos computadores desktop/notebooks, mas existem diferenas: muito mais simples e mais barato;
8 bits; 2 KiB de memria RAM; 32 KiB de memria de programa; Custo aproximadamente de 4 dlares.

Possui internamente timers/contadores/protocolos de transmisso de dados, conversores AD, memria RAM/FLASH/EEPROM, etc.

(UTFPR)

1 Dezembro 2010

3 / 23

Introduo

Figura: Arduino 2009

Figura: Arduino Mega

Figura: Arduino Pro

Figura: Arduino Pro Mini


(UTFPR)

Figura: LilyPad

Figura: Freeduino
1 Dezembro 2010 4 / 23

Introduo

Figura: Arduino Severino

Figura: Arduino UNO

Figura: Mega 2560

(UTFPR)

1 Dezembro 2010

5 / 23

Introduo

(UTFPR)

1 Dezembro 2010

6 / 23

Introduo

Mas por que o Arduino popular ?


Kits de microcontroladores existem j a dcadas, mas o Arduino possui algumas caractersticas que o diferencial dos demais. Baixo custo; Possui ambiente de desenvolvimento Assembly/C disponibilizado como SL; No necessita de hardware especial para programao; Algumas verses, usa componentes DIP, que facilita a utilizao em desenvolvimento de prottipos; Possui site com manuais, bibliotecas e exemplos de cdigos.

(UTFPR)

1 Dezembro 2010

7 / 23

Shield para o Arduino

(UTFPR)

1 Dezembro 2010

8 / 23

Shield para o Arduino

(UTFPR)

1 Dezembro 2010

9 / 23

Introduo

Como programar no Arduino ?


Na maioria dos casos os programadores que desenvolvem software para o Arduino no utilizam as linguagens C ou C++, mas a linguagem denominada Process que pode ser considerada a linguagem do Arduino. A linguagem Process similar as linguagens C e C++, contudo possui uma srie de restries.

(UTFPR)

1 Dezembro 2010

10 / 23

Um programa escrito em process denominado sketch e deve ser escrito no ambiente de desenvolvimento Arduino (Figura 10). O ambiente Arduino escrito na linguagem Java e assim est disponvel para diversos sistemas. Quando um sketch compilado, o ambiente Arduino varre o cdigo fonte Process fazendo algumas substituies e transforma o cdigo Process em linguagem C/C++ que compilado efetivamente pelo compilador da GNU.

(UTFPR)

1 Dezembro 2010

11 / 23

(UTFPR)

1 Dezembro 2010

12 / 23

int ledPin =

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 // Na p l a c a e l e t r o n i c a , deves e l i g a r um LED entre o // p i n o 13 e o GND

// S e t u p ( ) eh e x e c u t a d a uma v e z apenas void s e t u p ( ) { // I n i c i a l i z a o p i n o d i g i t a l como sendo p i n o de s a i d a pinMode ( l e d P i n , OUTPUT) ; }

// 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 void l o o p ( ) { d i g i t a l W r i t e ( l e d P i n , HIGH) ; // 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 // do m i c r o c o n t r o l a d o r delay (1000) ; // Espera 1 segundo d i g i t a l W r i t e ( l e d P i n , 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 // p i n o do m i c r o c o n t r o l a d o r delay (1000) ; // Espera 1 segundo }
(UTFPR) 1 Dezembro 2010 13 / 23

Programao

Pinos de Entrada/Sada Digital


Antes de utilizar um pino como entrada/sada devemos congur-lo ou como entrada ou como sada. A congurao feita utilizando-se a funo pinMode(numero_pino,modo) pinMode(3,OUTPUT); ou pinMode(3,INPUT); e depois podemos utilizar a funo x=digitalRead(numero_pino) e digitalWrite(numero_pino, LOW);

(UTFPR)

1 Dezembro 2010

14 / 23

Programao

Pinos de Entrada analgica


Alguns pinos do Arduino esto conectados a um conversor AD. O Arduino pode possuir diversos pinos que so pinos analgicos, mas existe apenas um conversor. Quando desejamos ler um pino analgico do Arduino, usa-se a funo analogRead(pino);
int analogValue ; unsigned char valor_a , valor_b ; a n a l o g V a l u e = analogRead ( 0 ) ; valor_a = ( byte ) analogValue ; valor_b = ( b y t e ) ( a n a l o g V a l u e >>8) ;

(UTFPR)

1 Dezembro 2010

15 / 23

Programao
Pinos de sada analgica
O Arduino possui apenas um conversor AD, ou seja, consegue converter um sinal de tenso em uma representao digital. Mesmo assim, o Arduino possui uma funo
int ledPin = 9 ; int analogPin = 3 ; int val = 0 ; // LED c o n n e c t e d t o d i g i t a l p i n 9 // p o t e n t i o m e t e r c o n n e c t e d t o a n a l o g p i n 3 // v a r i a b l e t o s t o r e t h e r e a d v a l u e

void s e t u p ( ) { pinMode ( l e d P i n , OUTPUT) ; }

// s e t s t h e p i n as o u t p u t

void l o o p ( ) { v a l = analogRead ( a n a l o g P i n ) ; // r e a d t h e i n p u t p i n analogWrite ( ledPin , val / 4) ; // analogRead v a l u e s go from 0 t o 1023 , a n a l o g W r i t e v a l u e s from 0 t o 255 }
(UTFPR) 1 Dezembro 2010 16 / 23

Programao
Transmisso de dados seriais
O Arduino possui uma UART que pode transmitir dados seriais. No software deve-se congurar a taxa de transmisso e enviar bytes ou cadeias de caracteres e ler bytes pela porta serial.
void s e t u p ( ) { S e r i a l . begin (9600) ; S e r i a l . p r i n t l n ( " Ol mundo " ) ; S e r i a l . write (128) ; } void l o o p ( ) { i f ( S e r i a l . a v a i l a b l e ( ) > 0) { // L um byte que tenha sido transmitido // do PC incomingByte = S e r i a l . r e a d ( ) ; }

(UTFPR)

1 Dezembro 2010

17 / 23

Programao
Memria EEPROM
O Arduino possui uma memria EEPROM de 512Bytes que pode ser lida/gravada pelo programador.
#include <EEPROM. h> i n t addr = 0 ; void s e t u p ( ) { } void l o o p ( ) { i n t v a l = analogRead ( 0 ) / 4 ; EEPROM. w r i t e ( addr , v a l ) ; addr = addr + 1 ; i f ( addr == 5 1 2 ) addr = 0 ; delay (100) ; }

(UTFPR)

1 Dezembro 2010

18 / 23

Programao

Funo Map
Converso de valores.
void s e t u p ( ) {} void l o o p ( ) { i n t v a l = analogRead ( 0 ) ; v a l = map( v a l , 0 , 1 0 2 3 , 0 , 2 5 5 ) ; analogWrite (9 , val ) ; }

(UTFPR)

1 Dezembro 2010

19 / 23

Programao
Interrupes
O Arduino pode gerar interrupes
#include <TimerOne . h> 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; unsigned char valor_a , valor_b ; long f r e q ; void s e t u p ( ) { interrupts () ; f r e q = 16 ; // f r e q u e n c i a em h e r t z Timer1 . i n i t i a l i z e ( 1 0 0 0 0 0 0 / f r e q ) ; Timer1 . a t t a c h I n t e r r u p t ( Estouro_de_Tempo ) ; Timer1 . s t a r t ( ) ; } void Estouro_de_Tempo ( ) { // Faz alguma c o i s a }
(UTFPR) 1 Dezembro 2010 20 / 23

Programao
Atraso de tempo
O Arduino possui algumas funes para causar um atraso de tempo, como delay() e delayMicroseconds()
void l o o p ( ) { d i g i t a l W r i t e ( l e d P i n , HIGH) ; delay (1000) ; d i g i t a l W r i t e ( l e d P i n , LOW) ; delay (1000) ;

// // // //

s e t s t h e LED on w a i t s f o r a s e c on d s e t s t h e LED o f f w a i t s f o r a s e c on d

d i g i t a l W r i t e ( outPin , HIGH) ; delayMicroseconds (50) ; d i g i t a l W r i t e ( outPin , LOW) ; delayMicroseconds (50) ; }

// // // //

s e t s t h e p i n on p a u s e s f o r 50 m i c r o s e c o n d s s e t s the pin o f f p a u s e s f o r 50 m i c r o s e c o n d s

(UTFPR)

1 Dezembro 2010

21 / 23

Programao
Contando o tempo
O Arduino possui funes 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. aps 70min. time = millis(); Retorna a quantidade de milisegundos que se passaram desde que o Arduino foi iniciado. Estoura depois de aprox. 50 dias.
unsigned long time ; void s e t u p ( ) { S e r i a l . begin (9600) ; } void l o o p ( ) { S e r i a l . p r i n t ( " Time : " ) ; time = m i c r o s ( ) ; // p r i n t s time s i n c e program s t a r t e d S e r i a l . p r i n t l n ( time ) ; // w a i t a s e con d so as n o t t o send m a s s i v e amounts o f d a t a delay (1000) ; }
(UTFPR) 1 Dezembro 2010 22 / 23

Programao

No site http://arduino.cc pode-se encontrar bibliotecas para controlar diversos dispositivos como displays de LCD, acelermetros, sensores de temperatura.

(UTFPR)

1 Dezembro 2010

23 / 23