SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
ARDUINO
PRIMEIROS PASSOS
EL66J
1
2014/1
Computador
2
• Um computador é um sistema digital que possui uma CPU
(central processing unit), memória e portas de entrada e
saída (I/O). Estes três módulos comunicam-se através dos
barramentos de dados, endereços e controle.
CPU I/O
Memória
Barramento de endereços (address bus)
Barramento de dados (data bus)
Barramento de controle (control bus)
Computador
3
• Exemplo de um computador específico.
ROM:
Memória
de
programa
RAM:
Memória
de
dados
Memória
ROM
32K bytes
Memória
RAM
32K bytes
UART
(para
comunicação
serial)
Microprocessador
Motorola 68000
Oscilador
(onda quadrada
para geração
do clock)
Microprocessador
4
http://ferretronix.com/tech/sbc/njit_68k_lab_board_54.jpg
Mp 68000
(é a CPU)
32k ROM
32k RAM
UART
Oscilador
• Se construído com um
Microprocessador, o
computador do exemplo
necessitaria CIs externos
de RAM, ROM, UART e
Oscilador.
Microcontrolador (Mc)
5
http://www.d8apro.com/NewKits.html
ROM
RAM
UART
Oscilador
Mc ATMEGA32
• Um Mc possui
RAM, ROM,
UART e
Oscilador
embutidos.
• Por isso, um
Mc também é
chamado de
single-chip
computer.
CPU
• Há muitas opções de recursos embutidos,
também chamados de periféricos embutidos
ou periféricos integrados.
Sistemas embarcados
6
• São sistemas digitais
microcontrolados para
aplicações específicas.
Mc
Tem microcontrolador pra todo lado!
Principal critério de classificação dos
microcontroladores (segmentos de mercado)
7
• Quanto ao número de bits de dados
• 4 bits
• 8 bits
• 16 bits
• 32 bits
Exemplos de fabricantes
8
http://microcontroller.com/Microcontrollers/
Desenvolvimento - principais passos e ferramentas
9
código
fonte
IDE
PC
Integrated
Development
Environment
(Ambiente de
Desenvolvimento
Integrado)
Arquivo texto com o
código fonte
(programa do
usuário)
Principais funcionalidades da IDE:
- Tradução de programas em
linguagem assembly e C
para código de máquina
- Simulação
Código fonte
traduzido para
código de
máquina, no
formato hexa
Intel
Comunica-se
com o
microcontrolador
e faz a gravação
na memória de
programa
Mc
Arquivo
HEXA
INTEL
PROGRAMA
PARA
GRAVAÇÃO
A
B
C
D
Target
(harware
do usuário)
Desenvolvimento - exemplo específico
10
PC
Target
Placa P51 USB
Flip (para gravar os
programas no Mc)
Keil ou outra IDE
(para desenvolver os
programas)
USB
Arquivo .hex
A
B
C
D
Microcontrolador
AT89C5131
Desenvolvimento - programação
11
• Em geral, é necessário conhecer detalhadamente a arquitetura interna do microcontrolador, o
que costuma ser muito trabalhoso!
• Por exemplo, para programar os timers/counters do microcontrolador 8051:
• Slide 1 de 4 (Philips Semiconductor, Datasheet, 80C51 family hardware description, 1997)
Desenvolvimento - programação
12
• Em geral, é necessário conhecer detalhadamente a arquitetura interna do microcontrolador, o
que costuma ser muito trabalhoso!
• Por exemplo, para programar os timers/counters do microcontrolador 8051:
• Slide 2 de 4 (Philips Semiconductor, Datasheet, 80C51 family hardware description, 1997)
Desenvolvimento - programação
13
• Em geral, é necessário conhecer detalhadamente a arquitetura interna do microcontrolador, o
que costuma ser muito trabalhoso!
• Por exemplo, para programar os timers/counters do microcontrolador 8051:
• Slide 3 de 4 (Philips Semiconductor, Datasheet, 80C51 family hardware description, 1997)
Desenvolvimento - programação
14
• Em geral, é necessário conhecer detalhadamente a arquitetura interna do microcontrolador, o
que costuma ser muito trabalhoso!
• Por exemplo, para programar os timers/counters do microcontrolador 8051:
• Slide 4 de 4 (Philips Semiconductor, Datasheet, 80C51 family hardware description, 1997)
Arduino e similares
15
• “Computação física (physical computing): conjunto de ferramentas e
métodos para construir sistemas digitais capazes sensorear e atuar
no mundo físico, mais efetivamente que um computador
convencional.”
• “O Arduino é uma plataforma open-sorce de computação física
baseada em uma placa simples com um microcontrolador e um
ambiente de desenvolvimento para escrever programas para a
placa.”
• “Exemplos de outras plataformas: Parallax Basic Stamp, Netmedia's
BX-24, Phidgets, MIT's Handyboard, Texas Instrument’s Energia.”
• “Estas plataformas transformam todos os detalhes complicados da
programação de microcontroladores em um pacote fácil de usar.”
http://arduino.cc/en/Guide/Introduction
Arduino
16
http://arduino.cc/en/Main/ArduinoBoardUno
http://arduino.cc/en/Tutorial/HomePage
http://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Dstripbooks&field-
keywords=arduino&sprefix=ardui%2Cstripbooks&rh=i%3Astripbooks%2Ck%3Aarduino
https://www.youtube.com/watch?v=09zfRaLEasY&index=2&list=PLYutciIGBqC34bfijBdYch49oyU-B_ttH
Placa + IDE + muitos recursos
Arduino – exemplos de projetos
17
http://www.instructables.com/id/Tweet-a-Pot-Twitter-Enabled-Coffee-Pot/
Mande um tweet para a sua cafeteira
Arduino – exemplos de projetos
18
http://www.instructables.com/id/Tweet-a-Pot-Twitter-Enabled-Coffee-Pot/
http://www.robotshop.com/en/dfrobotshop-rover-20-arduino-mecanum-robot-basic.html
http://www.instructables.com/file/FL5YH1ZGLE1MKLC
http://www.roboticmagazine.com/toys-fun/n8-kit-build-all-the-robots-you-can-imagine
http://duino4projects.com/beginners-guide-to-building-arduino-robots-with-bluetooth-and-android/
http://arduino.cc/en/Main/Robot
Robozinhos de todos os sabores
Arduino – exemplos de projetos
19
http://www.instructables.com/file/FRCII3VFHY0I8RW/
Pedale por aí em segurança
Arduino – exemplos de projetos
20
http://www.instructables.com/file/FJI64OAG1XBRNEO
Cortador de grama por controle remoto
Arduino – exemplos de projetos
21
http://diydrones.com/profiles/blogs/arduimu-quadcopter-part-iii
Quadcopter
Arduino – exemplos de projetos
22
http://vimeo.com/2402904?pg=embed&sec=2402904
Capacete do Daft Punk
Arduino – exemplos de projetos
23
http://www.damonkohler.com/2010/11/android-automated-cat-feeder.html
Dispenser de comida de gato
Arduino – exemplos de projetos
24
http://www.instructables.com/id/Tree-Climbing-Robot/
Robo que sobe em árvores
Arduino – exemplos de projetos
25
http://www.instructables.com/id/Make-a-Fire-Breathing-Animetronic-Pony-from-FurRea/
Cavalinho que cospe fogo
Arduino Uno
26
• O Arduino Uno é baseado no microcontrolador Atmel,
família AVR, modelo ATmega328.
• Principais características do microcontrolador:
• ATmega328P-PU: encapsulamento DIP 28 pinos
• 8 bits
• Clock de até 20 MHz
• Alimentação 1,8 a 5,5 V
• 32 KBybes de memória de programa Flash
• 2 KBytes de memória de dados (RAM)
• 23 pinos de I/O
• Conversor analógico-digital de 6 canais, 10 bits
• PWM de 6 canais
http://arduino.cc/en/Main/ArduinoBoardUno
http://www.atmel.com/Images/doc8161.pdf
Arduino Uno
27
http://arduino.cc/en/Main/ArduinoBoardUno
14 pinos de I/O digital (6 PWM)
[source/sink max 40 mA]
LED no pino 13
Conector USB
[comunicação
serial com o PC e
alimentação 5V]
Conector para
alimentação externa
entre 7 e 12V DC
[caso necessário] 6 entradas analógicas do
conversor analógico-digital
[min: 0V, max: 5V]
Cristal 16 MHz
para gerar clock
GND e 5V
Mc ATmega328P
LED para indicação
de placa energizada
(power)
Reset
LEDs da
comunicação
serial
Instalando o IDE (software do Arduino)
28
1. Download em
http://arduino.cc/en/Main/Software
• Ou link direto da versão para Windows:
http://arduino.googlecode.com/files/arduino-1.0.5-r2-windows.zip
Instalação o IDE (software do Arduino)
29
2. Descompactar [em um lugar que vc ache depois!].
3. Conectar a placa do Arduino ao computador com o cabo USB.
Aguarde...
4. Vai aparecer uma mensagem do Windows de dispositivo não
encontrado. Não mexer!
5. Abrir o Control panel → System → Device manager.
6. Procurar um ‘Unknown device’ ou um ‘Arduino UNO (COMxx)’.
Pode estar em ‘Ports’ ou ‘Other devices’.
7. Clicar com o botão direito → Update driver software → Browse
my computer.
8. Navegar até o folder descompactado e lá dentro → folder
‘Drivers’ (é só deixar este folder selecionado) → Ok [o objetivo
é fazer o Windows enxergar o ‘arduino.inf’. Nesse folder só
tem este arquivo. O Windows vai pegar ele] → Next
9. Clicar em ‘Install’ ou algo parecido na tela de confirmação.
10. Para conferir: no Control Panel → System → Device Manager
→ Ports há agora um ‘Arduino UNO COM3’.
Abrindo o IDE
30
• Para abrir o IDE: executar o arquivo ‘arduino.exe’ dentro
da pasta descompactada. Double click
Configurando
31
1. Tools → Serial Port → COM3 2. Tools → Board→ Arduino Uno
Testando
32
1. File → Examples → 01.Basics → Blink
2. Conectar o Arduino na USB e clicar no
‘Upload’ para gravar o programa no Arduino
Testando
33
Ok!
Blinking :-)
Entendendo o Sketch Blink.ino
34
/* Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain. */
// Pin 13 has an LED connected on most Arduino boards. Give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup()
{
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop()
{
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Vamos montar este circuito no protoboard
para interfacear com o Arduino
35
POTENCIÔ-
METRO
10k
36
Chanfro dos LEDs (-)
Vermelho,Vermelho,Marrom: 220
Marrom,Preto,Marrom: 100
Marrom,Preto,Laranja: 10K
1. Desconecte o Arduino da USB.
2. Conecte o Arduino ao protoboard
por último.
3. Afaste qualquer objeto que possa
causar curto-cuircuito por cima e por
baixo da placa do Arduino.
5. Aguarde o prof. verificar a
montagem antes de conectar na USB.
LED1
LED2
LED3
LED4
PB1
PB2
POTENCIÔMETRO
37
//Sketch01
//Pisca LED1
const int LED1 = 8; //LED1 no pino 8
void setup()
{
pinMode(LED1, OUTPUT); //configura pino como saída
}
void loop()
{
digitalWrite(LED1, HIGH); //liga o led
delay(1000); //espera 1 seg
digitalWrite(LED1, LOW); //desliga o led
delay(1000); //espera 1 seg
}
Sketch01
Com o Sketch01 aberto: Save As... → Sketch02
38
//Sketch02
//Pisca LED1, LED2, LED3, LED4 simultaneamente
Sketch03
39
//Sketch03
//Pisca LED1, LED2, LED3, LED4 simultaneamente
//Usa array e 'for'
const int LEDS[] = {8,9,10,11}; //array de pinos para leds
void setup(){
//'for' para configurar pinos como saída
for(int i=0; i<4; i++){
pinMode(LEDS[i], OUTPUT);
}
}
void loop(){
//'for' para ligar os leds
for(int i=0; i<4; i++){
digitalWrite(LEDS[i], HIGH);
}
delay(1000); //espera 1 seg
//'for' para desligar os leds
for(int i=0; i<4; i++){
digitalWrite(LEDS[i], LOW);
}
delay(1000); //espera 1 seg
}
Com o Sketch03 aberto: Save As... → Sketch04
40
//Sketch04
//Liga os leds sequencialmente indo e voltando:
//LED1->LED2->LED3->LED4->LED3...
Sketch05
41
//Sketch05
//Liga leds sequencialmente.
//Ao segurar PB1 inverte a sequencia.
const int LEDS[] = {8,9,10,11};
//pushbutton 1 no pino 12
const int PB1 = 12;
//para receber valor do pushbutton
int state = 0;
void setup(){
for(int i=0; i<4; i++){
pinMode(LEDS[i], OUTPUT);
}
//pino PB1 como entrada
pinMode(PB1, INPUT);
}
void loop(){
state = digitalRead(PB1); //lê PB1
if(state == HIGH){
//do menor para o maior
for(int i=0; i<4; i++){
digitalWrite(LEDS[i], HIGH);
delay(200); //espera 0,2 seg
digitalWrite(LEDS[i], LOW);
}
}
else{
//do maior para o menor
for(int i=3; i>=0; i--){
digitalWrite(LEDS[i], HIGH);
delay(200); //espera 0,2 seg
digitalWrite(LEDS[i], LOW);
}
}
}
Com o Sketch05 aberto: Save As... → Sketch06
42
//Sketch06
//Liga leds sequencialmente.
//Ao segurar PB1 inverte a sequencia.
//Ao segurar PB2 altera o tempo.
Sketch07
43
//Sketch07
//Um toque em PB1
//inverte o estado do LED1
//(toggle)
const int LED1 = 8;
const int PB1 = 12;
//estado atual do pb
int currState = 0;
//estado anterior do pb
int prevState = 0;
//0->LED off, 1->LED on
int value = 0;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(PB1, INPUT);
}
void loop(){
currState = digitalRead(PB1); // lê
// testa transição
if ((currState == HIGH) && (prevState == LOW)){
value = 1 - value; //inverte estado do LED
delay(20); //debounce
}
//agora o estado atual ficou velho!
prevState = currState;
if (value == 1) {
digitalWrite(LED1, HIGH);
} else {
digitalWrite(LED1, LOW);
}
}
Com o Sketch07 aberto: Save As... → Sketch08
44
//Sketch08
//Cada toque em PB1 desliga led atual e liga próximo.
PWM
45
• Pulse Width Modulation (modulação por largura de pulso)
Getting Started with Arduino, Massimo Banzi, O’Reilly, 2nd ed, 2011, Fig. 5-
3http://www.amazon.com/Getting-Started-Arduino-Massimo-Banzi/dp/1449309879
“The frequency of the PWM signal on most pins is approximately 490 Hz. On the
Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz.”
http://arduino.cc/en/Reference/analogWrite
PWM
46
• Pulse Width Modulation (modulação por largura de pulso)
Arduino Cookbook, Michael Margolis, O’Reilly, 2011, Fig. 7-
http://www.amazon.com/Arduino-Cookbook-Michael-Margolis/dp/1449313876
Sketch09
47
//Sketch09
//Controla a intensidade do LED2 por PWM
//Massimo Banzi, Getting Started with Arduino
//O’Reilly, 2nd ed, 2011, p.57.
const int LED2 = 9; // the pin for the LED
int i = 0; // We’ll use this to count up and down
void setup() {
pinMode(LED2, OUTPUT); // tell Arduino LED is an output
}
void loop(){
for (i = 0; i < 255; i++) { // loop from 0 to 254 (fade in)
analogWrite(LED2, i); // set the led brightness
delay(10); // Wait 10ms because analogWrite
// is instantaneous and we would
// not see any change
}
for (i = 255; i > 0; i--) { // loop from 255 to 1 (fade out)
analogWrite(LED2, i); // set the LED brightness
delay(10); // Wait 10ms
}
}
48
//Sketch10
//PWM crescente no LED2 e decrescente no LED3
Com o Sketch09 aberto: Save As... → Sketch10
Sketch11
49
//Sketch11
//PWM no LED2 usando seno
//Michael Roberts, Beginning Arduino,
//Listing 3-3, p.59.
const int LED2 = 9;
float sinVal;
int ledVal;
void setup() {
pinMode(LED2, OUTPUT);
}
void loop(){
//from 0 to 179 deg in order to get positive values only
for (int x=0; x<180; x++) {
//convert deg to rad then obtain sin value
sinVal = sin(x*(3.1412/180));
//convert to int in order to use in analogWrite
ledVal = int(sinVal*255);
analogWrite(LED2, ledVal);
delay(25);
}
}
50
//Sketch12
//PWM no LED2 usando seno, depois PWM linear no LED3
Com o Sketch11 aberto: Save As... → Sketch12
ADC
51
• Analog-to-digital converter
http://arduino.cc/en/Reference/AnalogRead
• ADC de 6 canais (6 entradas analógicas)
• Resolução de 10 bits
• Faixa de entrada: 0 a 5V
• 5/1024  4,9 mV
analogRead()
0V → 0000000000 = 0
5V → 1111111111 = 1023
Sketch13
52
//Sketch13
//Pisca LED1 em uma taxa especificada pelo
//potenciômetro na entrada analógica 0
//Massimo Banzi, Getting Started with Arduino
//O’Reilly, 2nd ed, 2011, p.64.
const int LED = 8; // the pin for the LED
int val = 0; // variable used to store the value
// coming from the pot
void setup() {
pinMode(LED, OUTPUT); // LED is as an OUTPUT
// Note: Analogue pins are
// automatically set as inputs
}
void loop() {
val = analogRead(0); // read the value from the pot
digitalWrite(LED, HIGH); // turn the LED on
delay(val); // stop the program for some time
digitalWrite(LED, LOW); // turn the LED off
delay(val); // stop the program for some time
}
53
//Sketch14
//O brilho do LED2 é controlado pelo
//potenciômetro na entrada analógica 0.
//Usa a função map().
Com o Sketch13 aberto: Save As... → Sketch14
Use a função map:
http://arduino.cc/en/Reference/map
54
//Sketch15
//O brilho do LED2 é controlado pelo
//potenciômetro na entrada analógica 0.
//Usa a função map().
//Envia valor do brilho do led pela serial a cada 200 ms
const int LED2 = 9;
const int PB1 = 12;
int val = 0;
int newRange = 0;
void setup() {
pinMode(LED2, OUTPUT);
Serial.begin(9600); // 9600 bits/seg
}
void loop() {
val = analogRead(0); // read the value from the pot
newRange = map(val, 0, 1023, 0, 255);
analogWrite(LED2, newRange); // brilho do led
Serial.print("brilho = "); //envia string
Serial.println(newRange); //envia valor e new line
delay(200);
}
Sketch15
55
//Sketch16
//O brilho do LED2 é controlado pelo
//potenciômetro na entrada analógica 0.
//Usa a função map().
//Envia valor do brilho do led pela serial a cada toque em PB1.
Com o Sketch15 aberto: Save As... → Sketch16
56
//Sketch17
//Recebe da serial:
//a,s,d,f -> toggle leds 1,2,3,4
const int LEDS[] = {8,9,10,11};
int byteRead;
int toggle0, toggle1 = 0;
int toggle2, toggle3 = 0;
void toggleLed(int ledIdx, int value){
if (value == HIGH){
digitalWrite(LEDS[ledIdx], HIGH);
}
else{
digitalWrite(LEDS[ledIdx], LOW);
}
}
void setup() {
for(int i=0; i<4;i++){
pinMode(LEDS[i], OUTPUT);
}
Serial.begin(9600); // 9600 bits/seg
}
Sketch17 void loop() {
//Verifica se tem carac no buffer
if(Serial.available() > 0){
//retira um carac do buffer
byteRead = Serial.read();
switch (byteRead){
case 'a':
toggle0 = 1 - toggle0;
toggleLed(0, toggle0);
break;
case 's':
toggle1 = 1 - toggle1;
toggleLed(1, toggle1);
break;
case 'd':
toggle2 = 1 - toggle2;
toggleLed(2, toggle2);
break;
case 'f':
toggle3 = 1 - toggle3;
toggleLed(3, toggle3);
break;
}
}
}
Serial.available(): Get the number of bytes
(characters) available for reading from the serial port.
This is data that's already arrived and stored in the serial
receive buffer. http://arduino.cc/en/Serial/Available
57
//Sketch18
//Recebe da serial: a,s,d,f -> toggle leds 1,2,3,4.
//Envia pela serial o estado do led que acabou de ser “tooglado”.
Com o Sketch17 aberto: Save As... → Sketch18

Mais conteúdo relacionado

Semelhante a Arduino Primeiros Passos

Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduinoRui Alves
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFengelrfs
 
Mini Curso Sistemas Embarcados
Mini Curso Sistemas EmbarcadosMini Curso Sistemas Embarcados
Mini Curso Sistemas EmbarcadosSuzana Viana Mota
 
Ufes erus minicurso arduino
Ufes erus minicurso arduinoUfes erus minicurso arduino
Ufes erus minicurso arduinotamarasalvatori
 
Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12Douglas Esteves
 
Aula 02 introudção a computação
Aula 02 introudção a computaçãoAula 02 introudção a computação
Aula 02 introudção a computaçãoMatheus Brito
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores picAnderson Inácio Morais
 
Mini curso arduino básico pet v2
Mini curso arduino   básico pet v2Mini curso arduino   básico pet v2
Mini curso arduino básico pet v2Felipe Meganha
 
Curso informtica manuten o - inicial
Curso informtica   manuten o - inicialCurso informtica   manuten o - inicial
Curso informtica manuten o - inicialTiago
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerGlobalcode
 
Apostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelApostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelPablo Mariano
 

Semelhante a Arduino Primeiros Passos (20)

Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduino
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDF
 
Erus minicurso arduino
Erus minicurso arduinoErus minicurso arduino
Erus minicurso arduino
 
Mini Curso Sistemas Embarcados
Mini Curso Sistemas EmbarcadosMini Curso Sistemas Embarcados
Mini Curso Sistemas Embarcados
 
Tipos micro p
Tipos micro pTipos micro p
Tipos micro p
 
Ufes erus minicurso arduino
Ufes erus minicurso arduinoUfes erus minicurso arduino
Ufes erus minicurso arduino
 
Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12
 
Aula 1 Introdução
Aula 1   IntroduçãoAula 1   Introdução
Aula 1 Introdução
 
Oficina Arduino
Oficina ArduinoOficina Arduino
Oficina Arduino
 
Aula 02 introudção a computação
Aula 02 introudção a computaçãoAula 02 introudção a computação
Aula 02 introudção a computação
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic
 
Mini curso arduino básico pet v2
Mini curso arduino   básico pet v2Mini curso arduino   básico pet v2
Mini curso arduino básico pet v2
 
Projetos com microcontroladores
Projetos com microcontroladoresProjetos com microcontroladores
Projetos com microcontroladores
 
Microprocessadores
MicroprocessadoresMicroprocessadores
Microprocessadores
 
Curso informtica manuten o - inicial
Curso informtica   manuten o - inicialCurso informtica   manuten o - inicial
Curso informtica manuten o - inicial
 
Unitec processador
Unitec processadorUnitec processador
Unitec processador
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius Senger
 
Introducao informatica
Introducao informaticaIntroducao informatica
Introducao informatica
 
Apostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelApostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgel
 

Arduino Primeiros Passos

  • 2. Computador 2 • Um computador é um sistema digital que possui uma CPU (central processing unit), memória e portas de entrada e saída (I/O). Estes três módulos comunicam-se através dos barramentos de dados, endereços e controle. CPU I/O Memória Barramento de endereços (address bus) Barramento de dados (data bus) Barramento de controle (control bus)
  • 3. Computador 3 • Exemplo de um computador específico. ROM: Memória de programa RAM: Memória de dados Memória ROM 32K bytes Memória RAM 32K bytes UART (para comunicação serial) Microprocessador Motorola 68000 Oscilador (onda quadrada para geração do clock)
  • 4. Microprocessador 4 http://ferretronix.com/tech/sbc/njit_68k_lab_board_54.jpg Mp 68000 (é a CPU) 32k ROM 32k RAM UART Oscilador • Se construído com um Microprocessador, o computador do exemplo necessitaria CIs externos de RAM, ROM, UART e Oscilador.
  • 5. Microcontrolador (Mc) 5 http://www.d8apro.com/NewKits.html ROM RAM UART Oscilador Mc ATMEGA32 • Um Mc possui RAM, ROM, UART e Oscilador embutidos. • Por isso, um Mc também é chamado de single-chip computer. CPU • Há muitas opções de recursos embutidos, também chamados de periféricos embutidos ou periféricos integrados.
  • 6. Sistemas embarcados 6 • São sistemas digitais microcontrolados para aplicações específicas. Mc Tem microcontrolador pra todo lado!
  • 7. Principal critério de classificação dos microcontroladores (segmentos de mercado) 7 • Quanto ao número de bits de dados • 4 bits • 8 bits • 16 bits • 32 bits
  • 9. Desenvolvimento - principais passos e ferramentas 9 código fonte IDE PC Integrated Development Environment (Ambiente de Desenvolvimento Integrado) Arquivo texto com o código fonte (programa do usuário) Principais funcionalidades da IDE: - Tradução de programas em linguagem assembly e C para código de máquina - Simulação Código fonte traduzido para código de máquina, no formato hexa Intel Comunica-se com o microcontrolador e faz a gravação na memória de programa Mc Arquivo HEXA INTEL PROGRAMA PARA GRAVAÇÃO A B C D Target (harware do usuário)
  • 10. Desenvolvimento - exemplo específico 10 PC Target Placa P51 USB Flip (para gravar os programas no Mc) Keil ou outra IDE (para desenvolver os programas) USB Arquivo .hex A B C D Microcontrolador AT89C5131
  • 11. Desenvolvimento - programação 11 • Em geral, é necessário conhecer detalhadamente a arquitetura interna do microcontrolador, o que costuma ser muito trabalhoso! • Por exemplo, para programar os timers/counters do microcontrolador 8051: • Slide 1 de 4 (Philips Semiconductor, Datasheet, 80C51 family hardware description, 1997)
  • 12. Desenvolvimento - programação 12 • Em geral, é necessário conhecer detalhadamente a arquitetura interna do microcontrolador, o que costuma ser muito trabalhoso! • Por exemplo, para programar os timers/counters do microcontrolador 8051: • Slide 2 de 4 (Philips Semiconductor, Datasheet, 80C51 family hardware description, 1997)
  • 13. Desenvolvimento - programação 13 • Em geral, é necessário conhecer detalhadamente a arquitetura interna do microcontrolador, o que costuma ser muito trabalhoso! • Por exemplo, para programar os timers/counters do microcontrolador 8051: • Slide 3 de 4 (Philips Semiconductor, Datasheet, 80C51 family hardware description, 1997)
  • 14. Desenvolvimento - programação 14 • Em geral, é necessário conhecer detalhadamente a arquitetura interna do microcontrolador, o que costuma ser muito trabalhoso! • Por exemplo, para programar os timers/counters do microcontrolador 8051: • Slide 4 de 4 (Philips Semiconductor, Datasheet, 80C51 family hardware description, 1997)
  • 15. Arduino e similares 15 • “Computação física (physical computing): conjunto de ferramentas e métodos para construir sistemas digitais capazes sensorear e atuar no mundo físico, mais efetivamente que um computador convencional.” • “O Arduino é uma plataforma open-sorce de computação física baseada em uma placa simples com um microcontrolador e um ambiente de desenvolvimento para escrever programas para a placa.” • “Exemplos de outras plataformas: Parallax Basic Stamp, Netmedia's BX-24, Phidgets, MIT's Handyboard, Texas Instrument’s Energia.” • “Estas plataformas transformam todos os detalhes complicados da programação de microcontroladores em um pacote fácil de usar.” http://arduino.cc/en/Guide/Introduction
  • 17. Arduino – exemplos de projetos 17 http://www.instructables.com/id/Tweet-a-Pot-Twitter-Enabled-Coffee-Pot/ Mande um tweet para a sua cafeteira
  • 18. Arduino – exemplos de projetos 18 http://www.instructables.com/id/Tweet-a-Pot-Twitter-Enabled-Coffee-Pot/ http://www.robotshop.com/en/dfrobotshop-rover-20-arduino-mecanum-robot-basic.html http://www.instructables.com/file/FL5YH1ZGLE1MKLC http://www.roboticmagazine.com/toys-fun/n8-kit-build-all-the-robots-you-can-imagine http://duino4projects.com/beginners-guide-to-building-arduino-robots-with-bluetooth-and-android/ http://arduino.cc/en/Main/Robot Robozinhos de todos os sabores
  • 19. Arduino – exemplos de projetos 19 http://www.instructables.com/file/FRCII3VFHY0I8RW/ Pedale por aí em segurança
  • 20. Arduino – exemplos de projetos 20 http://www.instructables.com/file/FJI64OAG1XBRNEO Cortador de grama por controle remoto
  • 21. Arduino – exemplos de projetos 21 http://diydrones.com/profiles/blogs/arduimu-quadcopter-part-iii Quadcopter
  • 22. Arduino – exemplos de projetos 22 http://vimeo.com/2402904?pg=embed&sec=2402904 Capacete do Daft Punk
  • 23. Arduino – exemplos de projetos 23 http://www.damonkohler.com/2010/11/android-automated-cat-feeder.html Dispenser de comida de gato
  • 24. Arduino – exemplos de projetos 24 http://www.instructables.com/id/Tree-Climbing-Robot/ Robo que sobe em árvores
  • 25. Arduino – exemplos de projetos 25 http://www.instructables.com/id/Make-a-Fire-Breathing-Animetronic-Pony-from-FurRea/ Cavalinho que cospe fogo
  • 26. Arduino Uno 26 • O Arduino Uno é baseado no microcontrolador Atmel, família AVR, modelo ATmega328. • Principais características do microcontrolador: • ATmega328P-PU: encapsulamento DIP 28 pinos • 8 bits • Clock de até 20 MHz • Alimentação 1,8 a 5,5 V • 32 KBybes de memória de programa Flash • 2 KBytes de memória de dados (RAM) • 23 pinos de I/O • Conversor analógico-digital de 6 canais, 10 bits • PWM de 6 canais http://arduino.cc/en/Main/ArduinoBoardUno http://www.atmel.com/Images/doc8161.pdf
  • 27. Arduino Uno 27 http://arduino.cc/en/Main/ArduinoBoardUno 14 pinos de I/O digital (6 PWM) [source/sink max 40 mA] LED no pino 13 Conector USB [comunicação serial com o PC e alimentação 5V] Conector para alimentação externa entre 7 e 12V DC [caso necessário] 6 entradas analógicas do conversor analógico-digital [min: 0V, max: 5V] Cristal 16 MHz para gerar clock GND e 5V Mc ATmega328P LED para indicação de placa energizada (power) Reset LEDs da comunicação serial
  • 28. Instalando o IDE (software do Arduino) 28 1. Download em http://arduino.cc/en/Main/Software • Ou link direto da versão para Windows: http://arduino.googlecode.com/files/arduino-1.0.5-r2-windows.zip
  • 29. Instalação o IDE (software do Arduino) 29 2. Descompactar [em um lugar que vc ache depois!]. 3. Conectar a placa do Arduino ao computador com o cabo USB. Aguarde... 4. Vai aparecer uma mensagem do Windows de dispositivo não encontrado. Não mexer! 5. Abrir o Control panel → System → Device manager. 6. Procurar um ‘Unknown device’ ou um ‘Arduino UNO (COMxx)’. Pode estar em ‘Ports’ ou ‘Other devices’. 7. Clicar com o botão direito → Update driver software → Browse my computer. 8. Navegar até o folder descompactado e lá dentro → folder ‘Drivers’ (é só deixar este folder selecionado) → Ok [o objetivo é fazer o Windows enxergar o ‘arduino.inf’. Nesse folder só tem este arquivo. O Windows vai pegar ele] → Next 9. Clicar em ‘Install’ ou algo parecido na tela de confirmação. 10. Para conferir: no Control Panel → System → Device Manager → Ports há agora um ‘Arduino UNO COM3’.
  • 30. Abrindo o IDE 30 • Para abrir o IDE: executar o arquivo ‘arduino.exe’ dentro da pasta descompactada. Double click
  • 31. Configurando 31 1. Tools → Serial Port → COM3 2. Tools → Board→ Arduino Uno
  • 32. Testando 32 1. File → Examples → 01.Basics → Blink 2. Conectar o Arduino na USB e clicar no ‘Upload’ para gravar o programa no Arduino
  • 34. Entendendo o Sketch Blink.ino 34 /* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. Give it a name: int led = 13; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
  • 35. Vamos montar este circuito no protoboard para interfacear com o Arduino 35 POTENCIÔ- METRO 10k
  • 36. 36 Chanfro dos LEDs (-) Vermelho,Vermelho,Marrom: 220 Marrom,Preto,Marrom: 100 Marrom,Preto,Laranja: 10K 1. Desconecte o Arduino da USB. 2. Conecte o Arduino ao protoboard por último. 3. Afaste qualquer objeto que possa causar curto-cuircuito por cima e por baixo da placa do Arduino. 5. Aguarde o prof. verificar a montagem antes de conectar na USB. LED1 LED2 LED3 LED4 PB1 PB2 POTENCIÔMETRO
  • 37. 37 //Sketch01 //Pisca LED1 const int LED1 = 8; //LED1 no pino 8 void setup() { pinMode(LED1, OUTPUT); //configura pino como saída } void loop() { digitalWrite(LED1, HIGH); //liga o led delay(1000); //espera 1 seg digitalWrite(LED1, LOW); //desliga o led delay(1000); //espera 1 seg } Sketch01
  • 38. Com o Sketch01 aberto: Save As... → Sketch02 38 //Sketch02 //Pisca LED1, LED2, LED3, LED4 simultaneamente
  • 39. Sketch03 39 //Sketch03 //Pisca LED1, LED2, LED3, LED4 simultaneamente //Usa array e 'for' const int LEDS[] = {8,9,10,11}; //array de pinos para leds void setup(){ //'for' para configurar pinos como saída for(int i=0; i<4; i++){ pinMode(LEDS[i], OUTPUT); } } void loop(){ //'for' para ligar os leds for(int i=0; i<4; i++){ digitalWrite(LEDS[i], HIGH); } delay(1000); //espera 1 seg //'for' para desligar os leds for(int i=0; i<4; i++){ digitalWrite(LEDS[i], LOW); } delay(1000); //espera 1 seg }
  • 40. Com o Sketch03 aberto: Save As... → Sketch04 40 //Sketch04 //Liga os leds sequencialmente indo e voltando: //LED1->LED2->LED3->LED4->LED3...
  • 41. Sketch05 41 //Sketch05 //Liga leds sequencialmente. //Ao segurar PB1 inverte a sequencia. const int LEDS[] = {8,9,10,11}; //pushbutton 1 no pino 12 const int PB1 = 12; //para receber valor do pushbutton int state = 0; void setup(){ for(int i=0; i<4; i++){ pinMode(LEDS[i], OUTPUT); } //pino PB1 como entrada pinMode(PB1, INPUT); } void loop(){ state = digitalRead(PB1); //lê PB1 if(state == HIGH){ //do menor para o maior for(int i=0; i<4; i++){ digitalWrite(LEDS[i], HIGH); delay(200); //espera 0,2 seg digitalWrite(LEDS[i], LOW); } } else{ //do maior para o menor for(int i=3; i>=0; i--){ digitalWrite(LEDS[i], HIGH); delay(200); //espera 0,2 seg digitalWrite(LEDS[i], LOW); } } }
  • 42. Com o Sketch05 aberto: Save As... → Sketch06 42 //Sketch06 //Liga leds sequencialmente. //Ao segurar PB1 inverte a sequencia. //Ao segurar PB2 altera o tempo.
  • 43. Sketch07 43 //Sketch07 //Um toque em PB1 //inverte o estado do LED1 //(toggle) const int LED1 = 8; const int PB1 = 12; //estado atual do pb int currState = 0; //estado anterior do pb int prevState = 0; //0->LED off, 1->LED on int value = 0; void setup() { pinMode(LED1, OUTPUT); pinMode(PB1, INPUT); } void loop(){ currState = digitalRead(PB1); // lê // testa transição if ((currState == HIGH) && (prevState == LOW)){ value = 1 - value; //inverte estado do LED delay(20); //debounce } //agora o estado atual ficou velho! prevState = currState; if (value == 1) { digitalWrite(LED1, HIGH); } else { digitalWrite(LED1, LOW); } }
  • 44. Com o Sketch07 aberto: Save As... → Sketch08 44 //Sketch08 //Cada toque em PB1 desliga led atual e liga próximo.
  • 45. PWM 45 • Pulse Width Modulation (modulação por largura de pulso) Getting Started with Arduino, Massimo Banzi, O’Reilly, 2nd ed, 2011, Fig. 5- 3http://www.amazon.com/Getting-Started-Arduino-Massimo-Banzi/dp/1449309879 “The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz.” http://arduino.cc/en/Reference/analogWrite
  • 46. PWM 46 • Pulse Width Modulation (modulação por largura de pulso) Arduino Cookbook, Michael Margolis, O’Reilly, 2011, Fig. 7- http://www.amazon.com/Arduino-Cookbook-Michael-Margolis/dp/1449313876
  • 47. Sketch09 47 //Sketch09 //Controla a intensidade do LED2 por PWM //Massimo Banzi, Getting Started with Arduino //O’Reilly, 2nd ed, 2011, p.57. const int LED2 = 9; // the pin for the LED int i = 0; // We’ll use this to count up and down void setup() { pinMode(LED2, OUTPUT); // tell Arduino LED is an output } void loop(){ for (i = 0; i < 255; i++) { // loop from 0 to 254 (fade in) analogWrite(LED2, i); // set the led brightness delay(10); // Wait 10ms because analogWrite // is instantaneous and we would // not see any change } for (i = 255; i > 0; i--) { // loop from 255 to 1 (fade out) analogWrite(LED2, i); // set the LED brightness delay(10); // Wait 10ms } }
  • 48. 48 //Sketch10 //PWM crescente no LED2 e decrescente no LED3 Com o Sketch09 aberto: Save As... → Sketch10
  • 49. Sketch11 49 //Sketch11 //PWM no LED2 usando seno //Michael Roberts, Beginning Arduino, //Listing 3-3, p.59. const int LED2 = 9; float sinVal; int ledVal; void setup() { pinMode(LED2, OUTPUT); } void loop(){ //from 0 to 179 deg in order to get positive values only for (int x=0; x<180; x++) { //convert deg to rad then obtain sin value sinVal = sin(x*(3.1412/180)); //convert to int in order to use in analogWrite ledVal = int(sinVal*255); analogWrite(LED2, ledVal); delay(25); } }
  • 50. 50 //Sketch12 //PWM no LED2 usando seno, depois PWM linear no LED3 Com o Sketch11 aberto: Save As... → Sketch12
  • 51. ADC 51 • Analog-to-digital converter http://arduino.cc/en/Reference/AnalogRead • ADC de 6 canais (6 entradas analógicas) • Resolução de 10 bits • Faixa de entrada: 0 a 5V • 5/1024  4,9 mV analogRead() 0V → 0000000000 = 0 5V → 1111111111 = 1023
  • 52. Sketch13 52 //Sketch13 //Pisca LED1 em uma taxa especificada pelo //potenciômetro na entrada analógica 0 //Massimo Banzi, Getting Started with Arduino //O’Reilly, 2nd ed, 2011, p.64. const int LED = 8; // the pin for the LED int val = 0; // variable used to store the value // coming from the pot void setup() { pinMode(LED, OUTPUT); // LED is as an OUTPUT // Note: Analogue pins are // automatically set as inputs } void loop() { val = analogRead(0); // read the value from the pot digitalWrite(LED, HIGH); // turn the LED on delay(val); // stop the program for some time digitalWrite(LED, LOW); // turn the LED off delay(val); // stop the program for some time }
  • 53. 53 //Sketch14 //O brilho do LED2 é controlado pelo //potenciômetro na entrada analógica 0. //Usa a função map(). Com o Sketch13 aberto: Save As... → Sketch14 Use a função map: http://arduino.cc/en/Reference/map
  • 54. 54 //Sketch15 //O brilho do LED2 é controlado pelo //potenciômetro na entrada analógica 0. //Usa a função map(). //Envia valor do brilho do led pela serial a cada 200 ms const int LED2 = 9; const int PB1 = 12; int val = 0; int newRange = 0; void setup() { pinMode(LED2, OUTPUT); Serial.begin(9600); // 9600 bits/seg } void loop() { val = analogRead(0); // read the value from the pot newRange = map(val, 0, 1023, 0, 255); analogWrite(LED2, newRange); // brilho do led Serial.print("brilho = "); //envia string Serial.println(newRange); //envia valor e new line delay(200); } Sketch15
  • 55. 55 //Sketch16 //O brilho do LED2 é controlado pelo //potenciômetro na entrada analógica 0. //Usa a função map(). //Envia valor do brilho do led pela serial a cada toque em PB1. Com o Sketch15 aberto: Save As... → Sketch16
  • 56. 56 //Sketch17 //Recebe da serial: //a,s,d,f -> toggle leds 1,2,3,4 const int LEDS[] = {8,9,10,11}; int byteRead; int toggle0, toggle1 = 0; int toggle2, toggle3 = 0; void toggleLed(int ledIdx, int value){ if (value == HIGH){ digitalWrite(LEDS[ledIdx], HIGH); } else{ digitalWrite(LEDS[ledIdx], LOW); } } void setup() { for(int i=0; i<4;i++){ pinMode(LEDS[i], OUTPUT); } Serial.begin(9600); // 9600 bits/seg } Sketch17 void loop() { //Verifica se tem carac no buffer if(Serial.available() > 0){ //retira um carac do buffer byteRead = Serial.read(); switch (byteRead){ case 'a': toggle0 = 1 - toggle0; toggleLed(0, toggle0); break; case 's': toggle1 = 1 - toggle1; toggleLed(1, toggle1); break; case 'd': toggle2 = 1 - toggle2; toggleLed(2, toggle2); break; case 'f': toggle3 = 1 - toggle3; toggleLed(3, toggle3); break; } } } Serial.available(): Get the number of bytes (characters) available for reading from the serial port. This is data that's already arrived and stored in the serial receive buffer. http://arduino.cc/en/Serial/Available
  • 57. 57 //Sketch18 //Recebe da serial: a,s,d,f -> toggle leds 1,2,3,4. //Envia pela serial o estado do led que acabou de ser “tooglado”. Com o Sketch17 aberto: Save As... → Sketch18