Baixe o app para aproveitar ainda mais
Prévia do material em texto
Curso introdutório de microcontroladores - Plataforma Arduino Prof. Fábio Rodrigues de la Rocha FLISOL - UTFPR-PR - Abril/2011 (UTFPR) FLISOL - UTFPR-PR - Abril/2011 1 / 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. (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. (UTFPR) FLISOL - UTFPR-PR - Abril/2011 3 / 37 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 Figura: Arduino Severino Figura: Arduino UNO Figura: Mega 2560 (UTFPR) FLISOL - UTFPR-PR - Abril/2011 5 / 37 Introdução Kits x microcontroladores (UTFPR) FLISOL - UTFPR-PR - Abril/2011 6 / 37 Introdução: Características dos microcontroladores (UTFPR) FLISOL - UTFPR-PR - Abril/2011 7 / 37 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; Possibilidade de expandir a sua capacidade através da utilização de shields (UTFPR) FLISOL - UTFPR-PR - Abril/2011 9 / 37 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 11 / 37 Hardware:Como um microcontrolador é programado ? (UTFPR) FLISOL - UTFPR-PR - Abril/2011 12 / 37 Hardware: Bootloader (UTFPR) FLISOL - UTFPR-PR - Abril/2011 13 / 37 Hardware: Bootloader (UTFPR) FLISOL - UTFPR-PR - Abril/2011 14 / 37 Hardware: Shield para o Arduino (UTFPR) FLISOL - UTFPR-PR - Abril/2011 15 / 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. (UTFPR) FLISOL - UTFPR-PR - Abril/2011 17 / 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. (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. Figura: Ambiente de desenvolvimento Arduino (UTFPR) FLISOL - UTFPR-PR - Abril/2011 19 / 37 Software (UTFPR) FLISOL - UTFPR-PR - Abril/2011 20 / 37 Software (UTFPR) FLISOL - UTFPR-PR - Abril/2011 21 / 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 microcontrolador 18 delay (1000); // Espera 1 segundo 19 digitalWrite(ledPin , LOW); // Desliga o LED colocando nivel baixo no 20 // pino do microcontrolador 21 delay (1000); // Espera 1 segundo 22 }� � (UTFPR) FLISOL - UTFPR-PR - Abril/2011 22 / 37 Software: Pisca LED (UTFPR) FLISOL - UTFPR-PR - Abril/2011 23 / 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 Software: Liga LED usando botão (UTFPR) FLISOL - UTFPR-PR - Abril/2011 25 / 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 }� � (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 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 27 / 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 unsigned char valor_a ,valor_b; 3 4 analogValue = analogRead (0); 5 valor_a = (byte)analogValue; 6 valor_b = (byte)(analogValue >>8);� � (UTFPR) FLISOL - UTFPR-PR - Abril/2011 28 / 37 Software: Lê um potenciometro (UTFPR) FLISOL - UTFPR-PR - Abril/2011 29 / 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 potenciometro :"); 14 Serial.println(sensorValue ,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 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 }� � (UTFPR) FLISOL - UTFPR-PR - Abril/2011 31 / 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 }� � (UTFPR) FLISOL - UTFPR-PR - Abril/2011 32 / 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 }� � (UTFPR) FLISOL - UTFPR-PR - Abril/2011 33 / 37 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 (); 10 freq = 16 ; // frequencia em hertz 11 Timer1.initialize (1000000/ freq); 12 Timer1.attachInterrupt(Estouro_de_Tempo); 13 Timer1.start(); 14 } 15 16 void Estouro_de_Tempo () 17 { 18 //Faz alguma coisa 19 }� � (UTFPR) FLISOL - UTFPR-PR - Abril/2011 34 / 37 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 delayMicroseconds (50); // pauses for 50 microseconds 11 digitalWrite(outPin , LOW); // sets the pin off 12 delayMicroseconds (50); // pauses for 50 microseconds 13 14 }� � (UTFPR) FLISOL - UTFPR-PR - Abril/2011 35 / 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 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 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 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. (UTFPR) FLISOL - UTFPR-PR - Abril/2011 37 / 37
Compartilhar