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
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
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
Introdução: Kits Figura: Arduino 2009 Figura: Arduino Pro Mini Figura: Arduino Mega Figura: LilyPad Figura: Arduino Pro Figura: Freeduino FLISOL - UTFPR-PR - Abril/2011 4
Introdução: Kits Figura: Arduino Severino Figura: Arduino UNO Figura: Mega 2560 FLISOL - UTFPR-PR - Abril/2011 5
Introdução Kits x microcontroladores FLISOL - UTFPR-PR - Abril/2011 6
Introdução: Características dos microcontroladores FLISOL - UTFPR-PR - Abril/2011 7
Introdução: Pinos FLISOL - UTFPR-PR - Abril/2011 8
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
Hardware:Como um microcontrolador é programado? AVR Compiler 0011001110000110010010 1110010101010101010101 1110000000000011010101 0101010101010101010101 0101010101010101010110 0101010101010101010101 0101000011110000111000 0101010101010101010101 0101101000111100001111 FLISOL - UTFPR-PR - Abril/2011 1
Hardware:Como um microcontrolador é programado? FLISOL - UTFPR-PR - Abril/2011 1
Hardware:Como um microcontrolador é programado? FLISOL - UTFPR-PR - Abril/2011 1
Hardware: Bootloader FLISOL - UTFPR-PR - Abril/2011 1
Hardware: Bootloader FLISOL - UTFPR-PR - Abril/2011 1
Hardware: Shield para o Arduino FLISOL - UTFPR-PR - Abril/2011 1
Hardware: Shield para o Arduino FLISOL - UTFPR-PR - Abril/2011 1
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
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
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
Software FLISOL - UTFPR-PR - Abril/2011 2
Software FLISOL - UTFPR-PR - Abril/2011 2
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 ); 0 } 1 2 3 // a funcao loop () executa ciclicamente 4 void loop () 5 { 6 digitalwrite ( ledpin, HIGH ); // Liga o LED colocando nivel alto no pino 7 // do microcontrolador 8 delay (1000) ; // Espera 1 segundo 9 digitalwrite ( ledpin, LOW ); // Desliga o LED colocando nivel baixo no 0 // pino do microcontrolador 1 delay (1000) ; // Espera 1 segundo 2 } FLISOL - UTFPR-PR - Abril/2011 2
Software: Pisca LED FLISOL - UTFPR-PR - Abril/2011 2
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
Software: Liga LED usando botão FLISOL - UTFPR-PR - Abril/2011 2
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 ); 0 } 1 2 void loop (){ 3 // Le o estado do botao 4 buttonstate = digitalread ( buttonpin ); 5 6 // Botao pressionado? 7 if ( buttonstate == HIGH ) { 8 // Liga o LED 9 digitalwrite ( ledpin, HIGH ); 0 } 1 else { 2 // Desliga o LED 3 digitalwrite ( ledpin, LOW ); 4 } 5 } FLISOL - UTFPR-PR - Abril/2011 2
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 (){ 0 1 if ( Serial. available () > 0) { 2 // Lê um byte que tenha sido transmitido 3 // do PC 4 incomingbyte = Serial. read (); 5 } FLISOL - UTFPR-PR - Abril/2011 2
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 unsigned 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
Software: Lê um potenciometro FLISOL - UTFPR-PR - Abril/2011 2
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 0 void loop () { 1 // le o valor do potenciometro 2 sensorvalue = analogread ( sensorpin ); 3 Serial. print (" Valor do potenciometro :"); 4 Serial. println ( sensorvalue, DEC ); 5 } FLISOL - UTFPR-PR - Abril/2011 3
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 0 void loop () 1 { 2 val = analogread ( analogpin ); // read the input pin 3 analogwrite ( ledpin, val / 4); // analogread values go from 0 to 1023, analogwrite values from 0 to 255 4 } FLISOL - UTFPR-PR - Abril/2011 3
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 { 0 int val = analogread (0) / 4; 1 EEPROM. write (addr, val ); 2 addr = addr + 1; 3 if ( addr == 512) addr = 0; 4 delay (100) ; 5 } FLISOL - UTFPR-PR - Abril/2011 3
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
Software Interrupções O Arduino pode gerar interrupções 1 # include < TimerOne.h> 2 3 volatile int valor =0, contador =0,n =0; 4 unsigned char valor_a, valor_b ; 5 long freq ; 6 7 void setup () 8 { 9 interrupts (); 0 freq = 16 ; // frequencia em hertz 1 Timer1. initialize (1000000/ freq ); 2 Timer1. attachinterrupt ( Estouro_de_Tempo ); 3 Timer1. start (); 4 } 5 6 void Estouro_de_Tempo () 7 { 8 // Faz alguma coisa 9 } FLISOL - UTFPR-PR - Abril/2011 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 0 delaymicroseconds (50) ; // pauses for 50 microseconds 1 digitalwrite ( outpin, LOW ); // sets the pin off 2 delaymicroseconds (50) ; // pauses for 50 microseconds 3 4 } FLISOL - UTFPR-PR - Abril/2011 3
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 unsigned 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 0 Serial. println ( time ); 1 // wait a second so as not to send massive amounts of data 2 delay (1000) ; 3 } FLISOL - UTFPR-PR - Abril/2011 3
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