Você está na página 1de 37

Curso introdutrio de microcontroladores Plataforma Arduino

Prof. Fbio Rodrigues de la Rocha

FLISOL - UTFPR-PR - Abril/2011

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

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)

FLISOL - UTFPR-PR - Abril/2011 2 / 37

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)

FLISOL - UTFPR-PR - Abril/2011 3 / 37

Introduo: Kits

Figura: Arduino 2009

Figura: Arduino Mega

Figura: Arduino Pro

Figura: Arduino Pro Mini


(UTFPR)

Figura: LilyPad

Figura: Freeduino

FLISOL - UTFPR-PR - Abril/2011 4 / 37

Introduo: Kits

Figura: Arduino Severino

Figura: Arduino UNO

Figura: Mega 2560

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 5 / 37

Introduo Kits x microcontroladores

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 6 / 37

Introduo: Caractersticas dos microcontroladores

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 7 / 37

Introduo: Pinos

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 8 / 37

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; Possui hardware livre*; 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; Pode operar sem a presena de um computador; Possibilidade de expandir a sua capacidade atravs da utilizao de shields

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 9 / 37

Hardware:Como um microcontrolador programado ?


0011001110000110010010 1110010101010101010101 1110000000000011010101 0101010101010101010101 0101010101010101010110 0101010101010101010101 0101000011110000111000 0101010101010101010101 0101101000111100001111

AVR Compiler

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Hardware:Como um microcontrolador programado ?

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Hardware:Como um microcontrolador programado ?

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Hardware: Bootloader

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Hardware: Bootloader

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Hardware: Shield para o Arduino

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Hardware: Shield para o Arduino

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Software

O arduino possui um ambiente de desenvolvimento disponvel para download em www.arduino.cc; SL e multiplataforma; um editor de texto, compilador e gravador do microcontrolador, tudo numa nica ferramenta.

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Software

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 Wiring que pode ser considerada a linguagem do Arduino. A linguagem Wiring similar as linguagens C e C++, contudo possui algumas diferenas.

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 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 disponvel para diversos sistemas. Quando um sketch compilado, o ambiente Arduino varre o cdigo fonte Wiring fazendo algumas substituies e transforma o cdigo Wiring em linguagem C/C++ que compilado efetivamente pelo compilador da GNU.

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 1 / 37

Software

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37

Software

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37


1 int ledPin = 2 13; // LED esta conectado ao pino 13 do arduino // Na placa eletronica , deve - se ligar um LED entre o // pino 13 e o GND

3 4 5 6 7 8 9 10 11 12 13 14 15 16

// Setup () eh executada uma vez apenas void setup () { // Inicializa o pino digital como sendo pino de saida pinMode ( ledPin , OUTPUT ) ; }

17 18 19

20 21 22

// a funcao loop () executa ciclicamente void loop () { digitalWrite ( ledPin , HIGH ) ; // Liga o LED colocando nivel alto no pino // do m i c r o c o n t r o l ad o r delay (1000) ; // Espera 1 segundo digitalWrite ( ledPin , LOW ) ; // Desliga o LED colocando nivel baixo no // pino do m i c r o c o n t r o l a d o r delay (1000) ; // Espera 1 segundo }
(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37

Software: Pisca LED

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37

Software

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)

FLISOL - UTFPR-PR - Abril/2011 2 / 37

Software: Liga LED usando boto

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37


const int buttonPin = 2; const int ledPin = 13; // botao // LED

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

int buttonState = 0; void setup () { pinMode ( ledPin , OUTPUT ) ; pinMode ( buttonPin , INPUT ) ; }

// Estado do botao

void loop () { // Le o estado do botao buttonState = digitalRead ( buttonPin ) ; // Botao pressionado ? if ( buttonState == HIGH ) { // Liga o LED digitalWrite ( ledPin , HIGH ) ; } else { // Desliga o LED digitalWrite ( ledPin , LOW ) ; }

}
(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37

Software
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.

1 2 void setup () { 3 Serial . begin (9600) ; 4 5 Serial . println ( " Ol mundo " ) ; 6 Serial . write (128) ; 7 8 } 9 void loop () { 10 11 if ( Serial . available () > 0) { 12 // L um byte que tenha sido transmitido 13 // do PC 14 incomingByte = Serial . read () ; 15 }

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37

Software

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);
1 2 3 4 5 6 int analogValue ; u n s i g n e d char valor_a , valor_b ; analogValue = analogRead (0) ; valor_a = ( byte ) analogValue ; valor_b = ( byte ) ( analogValue > >8) ;

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37

Software: L um potenciometro

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 2 / 37


int sensorPin = A0 ; // Pino onde o potenciometro esta ligado int sensorValue = 0; // valor lido do sensor void setup () { // Os pinos analogicos ja sao configurados // como pinos de entrada por padrao Serial . begin (9600) ; } void loop () { // le o valor do potenciometro sensorValue = analogRead ( sensorPin ) ; Serial . print ( " Valor do p o t e n c i o m e t r o : " ) ; Serial . println ( sensorValue , DEC ) ; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 3 / 37

Software
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 connected to digital pin 9 // potentiometer connected to analog pin 3 // variable to store the read value

1 2 3 4 5 6 7 8 9 10 11 12 13

void setup () { pinMode ( ledPin , OUTPUT ) ; }

// sets the pin as output

void loop () { val = analogRead ( analogPin ) ; // read the input pin analogWrite ( ledPin , val / 4) ; // analogRead values go from 0 to 1023 , analogWrite values from 0 to 255 14 }

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 3 / 37

Software
Memria EEPROM
O Arduino possui uma memria EEPROM de 512Bytes que pode ser lida/gravada pelo programador.
# include < EEPROM .h > int addr = 0; void setup () { } void loop () { int val = analogRead (0) / 4; EEPROM . write ( addr , val ) ; addr = addr + 1; if ( addr == 512) addr = 0; delay (100) ; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 3 / 37

Software

Funo Map
Converso de valores.
1 void setup () {} 2 3 void loop () 4 { 5 int val = analogRead (0) ; 6 val = map ( val , 0 , 1023 , 0 , 255) ; 7 analogWrite (9 , val ) ; 8 }

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 3 / 37

Software
Interrupes
O Arduino pode gerar interrupes
# include < TimerOne .h > v o l a t i l e int valor =0 , contador =0 , n =0; u n s i g n e d char valor_a , valor_b ; long freq ; void setup () { interrupts () ; freq = 16 ; // frequencia em hertz Timer1 . initialize (1000000/ freq ) ; Timer1 . at tachInte rr up t ( E s t ou r o _ d e _ T e m p o ) ; Timer1 . start () ; } void E s t o u r o _d e_ Te mp o () { // Faz alguma coisa }
(UTFPR)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

FLISOL - UTFPR-PR - Abril/2011 3 / 37

Software
Atraso de tempo
O Arduino possui algumas funes para causar um atraso de tempo, como delay() e delayMicroseconds()
// // // // sets the LED on waits for a second sets the LED off waits for a second

1 void loop () 2 { 3 digitalWrite ( ledPin , HIGH ) ; 4 delay (1000) ; 5 digitalWrite ( ledPin , LOW ) ; 6 delay (1000) ; 7 8 9 digitalWrite ( outPin , HIGH ) ; 10 d e l a y M i c r os e c on ds (50) ; 11 digitalWrite ( outPin , LOW ) ; 12 d e l a y M i c r os e c on ds (50) ; 13 14 }

// // // //

sets the pin on pauses for 50 microseconds sets the pin off pauses for 50 microseconds

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 3 / 37

Software
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.
u n s i g n e d long time ; void setup () { Serial . begin (9600) ; } void loop () { Serial . print ( " Time : " ) ; time = micros () ; // prints time since program started Serial . println ( time ) ; // wait a second so as not to send massive amounts of data delay (1000) ; } FLISOL - UTFPR-PR - Abril/2011
(UTFPR)

1 2 3 4 5 6 7 8 9 10 11 12 13

/ 37

Software

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

(UTFPR)

FLISOL - UTFPR-PR - Abril/2011 3 / 37

Você também pode gostar