Vous êtes sur la page 1sur 37

Curso introdutório de microcontroladores -

Plataforma Arduino

Prof. Fábio Rodrigues de la Rocha

FLISOL - UTFPR-PR - Abril/2011

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
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.

FLISOL - UTFPR-PR - Abril/2011 2


(UTFPR) / 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.

FLISOL - UTFPR-PR - Abril/2011 3


(UTFPR) / 37
Introdução: Kits

Figura: Arduino 2009 Figura: Arduino Mega Figura: Arduino Pro

Figura: Arduino Pro


Mini Figura: LilyPad Figura: Freeduino
FLISOL - UTFPR-PR - Abril/2011 4
(UTFPR) / 37
Introdução: Kits

Figura: Arduino Severino Figura: Arduino UNO Figura: Mega 2560

FLISOL - UTFPR-PR - Abril/2011 5


(UTFPR) / 37
Introdução Kits x microcontroladores

FLISOL - UTFPR-PR - Abril/2011 6


(UTFPR) / 37
Introdução: Características dos
microcontroladores

FLISOL - UTFPR-PR - Abril/2011 7


(UTFPR) / 37
Introdução: Pinos

FLISOL - UTFPR-PR - Abril/2011 8


(UTFPR) / 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;
Possibilidade de expandir a sua capacidade através da utilização de shields

FLISOL - UTFPR-PR - Abril/2011 9


(UTFPR) / 37
Hardware:Como um microcontrolador é programado ?

0011001110000110010010
1110010101010101010101
1110000000000011010101
0101010101010101010101
0101010101010101010110
AVR Compiler 0101010101010101010101
0101000011110000111000
0101010101010101010101
0101101000111100001111

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
Hardware:Como um microcontrolador é programado ?

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
Hardware:Como um microcontrolador é programado ?

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
Hardware: Bootloader

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
Hardware: Bootloader

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
Hardware: Shield para o Arduino

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
Hardware: Shield para o Arduino

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 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.

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
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.

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 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.

FLISOL - UTFPR-PR - Abril/2011 1


(UTFPR) / 37
Software

FLISOL - UTFPR-PR - Abril/2011 2


(UTFPR) / 37
Software

FLISOL - UTFPR-PR - Abril/2011 2


(UTFPR) / 37

1 int ledPin = 13; // LED esta conectado ao pino 13 do arduino
2 // Na placa eletronica , deve - se ligar um LED
entre o
3 // pino 13 e o GND
4
5
6 // Setup () eh executada uma vez apenas
7 void setup () {
8 // Inicializa o pino digital como sendo pino de saida
9 pinMode ( ledPin , OUTPUT ) ;
10 }
11
12
13 // a funcao loop () executa ciclicamente
14 void loop ()
15 {
16 digitalWrite ( ledPin , HIGH ) ; // Liga o LED colocando nivel alto
no pino
17 // do m i c r o c o n t r o l ad o r
18 delay (1000) ; // Espera 1 segundo
19 digitalWrite ( ledPin , LOW ) ; // Desliga o LED colocando nivel
baixo no
20 // pino do m i c r o c o n t r o l a d o r
21 delay (1000) ; // Espera 1 segundo
22 }
 
FLISOL - UTFPR-PR - Abril/2011 2
(UTFPR) / 37
Software: Pisca LED

FLISOL - UTFPR-PR - Abril/2011 2


(UTFPR) / 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);

FLISOL - UTFPR-PR - Abril/2011 2


(UTFPR) / 37
Software: Liga LED usando botão

FLISOL - UTFPR-PR - Abril/2011 2


(UTFPR) / 37

1 const int buttonPin = 2; // botao
2 const int ledPin = 13; // LED
3
4
5 int buttonState = 0; // Estado do botao
6
7 void setup () {
8 pinMode ( ledPin , OUTPUT ) ;
9 pinMode ( buttonPin , INPUT ) ;
10 }
11
12 void loop () {
13 // Le o estado do botao
14 buttonState = digitalRead ( buttonPin ) ;
15
16 // Botao pressionado ?
17 if ( buttonState == HIGH ) {
18 // Liga o LED
19 digitalWrite ( ledPin , HIGH ) ;
20 }
21 else {
22 // Desliga o LED
23 digitalWrite ( ledPin , LOW ) ;
24 }
25 }
 
FLISOL - UTFPR-PR - Abril/2011 2
(UTFPR) / 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 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 }
 
FLISOL - UTFPR-PR - Abril/2011 2
(UTFPR) / 37
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 int analogValue ;
2 u n s i g n e d char valor_a , valor_b ;
3
4 analogValue = analogRead (0) ;
5 valor_a = ( byte ) analogValue ;
6 valor_b = ( byte ) ( analogValue > >8) ;
 

FLISOL - UTFPR-PR - Abril/2011 2


(UTFPR) / 37
Software: Lê um potenciometro

FLISOL - UTFPR-PR - Abril/2011 2


(UTFPR) / 37

1 int sensorPin = A0 ; // Pino onde o potenciometro esta ligado
2 int sensorValue = 0; // valor lido do sensor
3
4 void setup () {
5 // Os pinos analogicos ja sao configurados
6 // como pinos de entrada por padrao
7 Serial . begin (9600) ;
8 }
9
10 void loop () {
11 // le o valor do potenciometro
12 sensorValue = analogRead ( sensorPin ) ;
13 Serial . print ( " Valor do p o t e n c i o m e t r o : " ) ;
14 Serial . println ( sensorValue , DEC ) ;
15 }
 

FLISOL - UTFPR-PR - Abril/2011 3


(UTFPR) / 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 int ledPin = 9; // LED connected to digital pin 9
2 int analogPin = 3; // potentiometer connected to analog pin 3
3 int val = 0; // variable to store the read value
4
5 void setup ()
6 {
7 pinMode ( ledPin , OUTPUT ) ; // sets the pin as output
8 }
9
10 void loop ()
11 {
12 val = analogRead ( analogPin ) ; // read the input pin
13 analogWrite ( ledPin , val / 4) ; // analogRead values go from 0 to
1023 , analogWrite values from 0 to 255
14 }
 
FLISOL - UTFPR-PR - Abril/2011 3
(UTFPR) / 37
Software
Memória EEPROM
O Arduino possui uma memória EEPROM de 512Bytes que pode ser
lida/gravada pelo programador.

1 # include < EEPROM .h >
2 int addr = 0;
3
4 void setup ()
5 {
6 }
7
8 void loop ()
9 {
10 int val = analogRead (0) / 4;
11 EEPROM . write ( addr , val ) ;
12 addr = addr + 1;
13 if ( addr == 512) addr = 0;
14 delay (100) ;
15 }
 

FLISOL - UTFPR-PR - Abril/2011 3


(UTFPR) / 37
Software

Função Map
Conversão 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 }
 

FLISOL - UTFPR-PR - Abril/2011 3


(UTFPR) / 37
Software
Interrupções
O Arduino pode gerar interrupções

1 # include < TimerOne .h >
2
3 v o l a t i l e int valor =0 , contador =0 , n =0;
4 u n s i g n e d char valor_a , valor_b ;
5 long freq ;
6
7 void setup ()
8 {
9 interrupts () ;
10 freq = 16 ; // frequencia em hertz
11 Timer1 . initialize (1000000/ freq ) ;
12 Timer1 . at tachInte rr up t ( E s t ou r o _ d e _ T e m p o ) ;
13 Timer1 . start () ;
14 }
15
16 void E s t o u r o _d e_ Te mp o ()
17 {
18 // Faz alguma coisa
19 }
 (UTFPR)
FLISOL - UTFPR-PR - Abril/2011 
/ 37
3
Software

Atraso de tempo
O Arduino possui algumas funções para causar um atraso de tempo, como
delay() e delayMicroseconds()

1 void loop ()
2 {
3 digitalWrite ( ledPin , HIGH ) ; // sets the LED on
4 delay (1000) ; // waits for a second
5 digitalWrite ( ledPin , LOW ) ; // sets the LED off
6 delay (1000) ; // waits for a second
7
8
9 digitalWrite ( outPin , HIGH ) ; // sets the pin on
10 d e l a y M i c r os e c on ds (50) ; // pauses for 50 microseconds
11 digitalWrite ( outPin , LOW ) ; // sets the pin off
12 d e l a y M i c r os e c on ds (50) ; // pauses for 50 microseconds
13
14 }
 

FLISOL - UTFPR-PR - Abril/2011 3


(UTFPR) / 37
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 long time ;
2
3 void setup () {
4 Serial . begin (9600) ;
5 }
6 void loop () {
7 Serial . print ( " Time : " ) ;
8 time = micros () ;
9 // prints time since program started
10 Serial . println ( time ) ;
11 // wait a second so as not to send massive amounts of data
12 delay (1000) ;
13 }
 (UTFPR)
FLISOL - UTFPR-PR - Abril/2011
/ 373
Software

No site http://arduino.cc pode-se encontrar bibliotecas para controlar


diversos dispositivos como displays de LCD, acelerômetros, sensores de
temperatura.

FLISOL - UTFPR-PR - Abril/2011 3


(UTFPR) / 37

Vous aimerez peut-être aussi