Modelagem e Controle de Robôs Móveis e Sistemas Multirrobôs
Mini-curso de Introdução a Eletrônica com Arduino
1. IntroduIntroduççãoão àà Eletrônica comEletrônica com ArduinoArduino
Felipe Nascimento Martins
v. 4 - 2013
VIII Jornada de Iniciação Científica,
Desenvolvimento Tecnológico e
Inovação do Ifes
2. O trabalho Introdução à Eletrônica com
Arduino de Felipe Nascimento Martins foi
licenciado com uma Licença
Creative Commons - Atribuição-
CompartilhaIgual 3.0 Não Adaptada.
5. Conteúdo
• Arduino;
• Microcontrolador;
• Primeiro programa;
• Um pouco de eletrônica (pouco mesmo!);
• Programas mais legais;
• Práticas (montagem e programação);
• Avançando com o Arduino: shields,
comunicação sem fio, aplicações em
robótica...
Felipe Nascimento Martins
7. O que é Arduino?
• Arduino é uma plataforma de prototipagem
eletrônica open-source, baseada nos princípios
de flexibilidade e facilidade de uso para hardware
e software.
• Consiste de uma placa com microcontrolador
programável preparada para receber sinais de
sensores e acionar atuadores.
• Sua linguagem de programação é baseada em
Wiring (baseado em C/C++).
• A placa pode funcionar em conjunto ou de forma
independente do computador.
Felipe Nascimento Martins
11. Arduino é Open Source
• Desenvolvido por: Massimo Banzi, David
Cuartielles, Tom Igoe, Gianluca Martino e David
Mellis, na Itália, em 2005;
• Todo o projeto é aberto: open source hardware
and software;
• 200 placas vendidas em 2005, 5.000 em 2006,
30.000 em 2007 e mais de 300.000 em 2011 e
cerca de 1 milhão até setembro de 2013!
• Site oficial: www.arduino.cc
Felipe Nascimento Martins
15. Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão
disponíveis.
• Quem quiser, pode comprar os componentes e montar a
sua placa!
• O software de programação também é livre e está
disponível para download gratuitamente.
Felipe Nascimento Martins
16. Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão
disponíveis.
• Quem quiser, pode comprar os componentes e montar a
sua placa!
• O software de programação também é livre e está
disponível para download gratuitamente.
• Mas...
Felipe Nascimento Martins
17. Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão
disponíveis.
• Quem quiser, pode comprar os componentes e montar a
sua placa!
• O software de programação também é livre e está
disponível para download gratuitamente.
• Mas...
• O nome ArduinoArduino é marca registrada!
Felipe Nascimento Martins
28. Arduino Uno
• Microcontrolador: ATmega328;
• Tensão de operação: 5V;
• Tensão de entrada (recomendada): 7-12V;
• Pinos digitais de E/S:14 (6 podem ter sinal PWM);
• Pinos com entrada analógica: 6;
• Corrente máxima por pino de E/S: 40 mA;
• Hardware para comunicação serial: 1 porta;
• Memória Flash (de programa): 32 kB, dos quais 0,5 kB
são usados pelo bootloader;
• Memória SRAM: 2 kB; EEPROM: 1 kB;
• Frequência de clock: 16 MHz.
Felipe Nascimento Martins
30. Arduino Mega 2560
• Microcontrolador: ATmega2560;
• Tensão de operação: 5V;
• Tensão de entrada (recomendada): 7-12V;
• Pinos digitais de E/S: 54 (15 podem ter sinal PWM);
• Pinos com entrada analógica: 16;
• Corrente máxima por pino de E/S: 40 mA;
• Hardware para comunicação serial: 4 portas;
• Memória Flash (de programa): 256 kB, dos quais 8 kB
são usados pelo bootloader;
• Memória SRAM: 8 kB; EEPROM: 4 kB;
• Frequência de clock: 16 MHz.
Felipe Nascimento Martins
32. O que é um Microcontrolador?
– Chip;
– CPU de pequeno porte, capaz de executar
um conjunto de instruções;
– Ou seja, possui um microprocessador!
– Instruções simples e rápidas;
– Possui memória(s);
– Possui periféricos;
– Pode se comunicar com outros periféricos;
etc.
Felipe Nascimento Martins
33. Componentes de um Microcontrolador
Conversor
D/A
Conversor
A/D
PWM
CPU
EEPROM
RAM
Porta
Serial
Porta
Paralela
Temporizadores
Microcontrolador
Felipe Nascimento Martins
34. Exemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale)
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Felipe Nascimento Martins
35. Exemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale)
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Cadê o
Arduino??
Felipe Nascimento Martins
36. Exemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale)
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Felipe Nascimento Martins
49. Um pouco de eletrônica
• Ok. Entendi o programa.
• Mas o que acontece nos
pinos do Arduino?
Felipe Nascimento Martins
50. Um pouco de eletrônica
• Ok. Entendi o programa.
• Mas o que acontece nos
pinos do Arduino?
• A função
digitalWrite(12,HIGH);
faz com que o pino 12 vá
para “nível alto”, ou seja,
ele fica com 5V.
Felipe Nascimento Martins
51. Um pouco de eletrônica
• Ok. Entendi o programa.
• Mas o que acontece nos
pinos do Arduino?
• A função
digitalWrite(12,HIGH);
faz com que o pino 12 vá
para “nível alto”, ou seja,
ele fica com 5V.
• Este pino está ligado ao
RESISTOR+LED, e ao pino
GND (0V).
Felipe Nascimento Martins
52. Um pouco de eletrônica
• Ok. Entendi o programa.
• Mas o que acontece nos
pinos do Arduino?
• A função
digitalWrite(12,HIGH);
faz com que o pino 12 vá
para “nível alto”, ou seja,
ele fica com 5V.
• Este pino está ligado ao
RESISTOR+LED, e ao pino
GND (0V).
• É um circuito série, por
onde circula corrente!
Felipe Nascimento Martins
+5V
0V
53. Um pouco de eletrônica
• Em resumo:
• É a circulação de corrente
elétrica (elétrons) que faz
acender o LED;
• Experimente retirar o fio
que liga o LED ao GND,
mantendo o pino 12 em 5V.
• O LED apaga pois a
corrente precisa circular
num circuito fechado!
Felipe Nascimento Martins
+5V
0V
54. Um pouco de eletrônica
• Em resumo:
• É a circulação de corrente
elétrica (elétrons) que faz
acender o LED;
• A corrente só existirá se
houver diferença de
potencial elétrico
(diferença de tensão) entre
pontos do circuito: 5V – 0 =
5V;
• Tensão: volt [V];
• Corrente: ampère [A].
Felipe Nascimento Martins
+5V
0V
55. Um pouco de eletrônica
• A função
digitalWrite(12,LOW);
faz com que o pino 12 vá
para “nível baixo”, ou seja,
ele fica com 0V.
• Logo, como não há
diferença de tensão entre
os pinos 12 e GND, a
corrente é zero => LED
apaga.
Felipe Nascimento Martins
0V
0V
56. Um pouco de eletrônica
• Beleza. Mas, e o resistor?
Serve para quê?
Felipe Nascimento Martins
57. Um pouco de eletrônica
• Beleza. Mas, e o resistor?
Serve para quê?
• O elemento resistor serve
para dificultar a circulação
de corrente elétrica;
• Ele é colocado no circuito
para evitar que a corrente
cresça muito, o que pode
provocar problemas;
• No nosso circuito, o
resistor serve para evitar
que o LED queime devido
a uma corrente muito alta.
Felipe Nascimento Martins
58. Um pouco de eletrônica
• Quanto maior for o valor
da resistência do resistor,
menor será a corrente
(para uma mesma
diferença de tensão).
• O brilho do LED varia com
a corrente.
Felipe Nascimento Martins
59. Um pouco de eletrônica
• Cálculo da corrente:
• Lei de Ohm: V = R * I
• V = 5V, R = 220 .
• I = 5 / 220
• I = 0,0227 A = 22,7 mA
Felipe Nascimento Martins
60. Um pouco de eletrônica
• Cálculo da corrente:
• Lei de Ohm: V = R * I
• V = 5V, R = 220 + 220 .
• I = 5 / 440
• I = 0,0114 A = 11,4 mA
• Podemos calcular a queda de
tensão em cada resistor:
• VR = R * I, R = 220 , I = 11,4 mA.
• VR = 220 * 0,0114 = 2,5 V.
Felipe Nascimento Martins
61. Um pouco de eletrônica
• Cálculo da corrente:
• O LED tem queda de
tensão fixa = ~1,73V. Logo:
• V = 5 – 1,73 = 3,27V.
• V = R * I => I = V / R.
• I = 3,27 / 220 = 0,0149 A
• I = 14,9mA.
Felipe Nascimento Martins
+5V
0V
62. Um pouco de eletrônica
• Note que se a tensão do
pino 12 pudesse ser
alterada, a corrente no
circuito seria diferente.
• Ou seja, poderíamos
controlar o brilho do LED!
Felipe Nascimento Martins
+5V
0V
64. Diodo
• Dispositivo semicondutor que permite a circulação de
corrente apenas em um sentido;
• A tensão em seus terminais deve ter polaridade correta:
mais positiva no terminal A (anodo) e mais negativa no
terminal K (catodo);
• Apresenta queda de tensão aproximadamente fixa
(~0,7V) quando a corrente circula;
• Usado em circuitos retificadores: transforma corrente
alternada para contínua.
Felipe Nascimento Martins
69. Prática 1.1: Não pisca-LED
• LED é um diodo especial
que brilha quando a
corrente circula por ele.
• Experimente inverter a
ligação dos pinos do LED
em nosso circuito e
verifique que ele não vai
mais piscar, mesmo
quando houver diferença
de potencial nos pinos!
Felipe Nascimento Martins
70. Capacitor
• Elemento que armazena energia na forma de campo
elétrico;
• Existem vários tipos: alguns têm polaridade (como os
eletrolíticos), outros não (como os cerâmicos);
• A tensão em seus terminais depende da carga
acumulada, e não varia instantaneamente;
• Em corrente contínua, são usados como filtros ou
“suavizadores” de tensão.
Felipe Nascimento Martins
72. Capacitor – exemplo de aplicação
• Retificador de onda completa com capacitor:
Felipe Nascimento Martins
73. Prática 2: Pisca-LED com Capacitor
• Monte o circuito ao lado.
• Use o mesmo programa
da prática 1, mas altere
o tempo de espera para
5 segundos;
• Rode o programa e
verifique o resultado;
• Depois, retire o
capacitor e rode o
mesmo programa. O
que muda?
Felipe Nascimento Martins
74. Arduino
• Outras funções:
digitalRead(pino);
Retorna 0 (Vpino < 2V) ou 1 (Vpino > 3V).
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no
pino (entre 0 e 5V). Tempo de conversão = 100µs.
while(analogRead(A2) < 950);
Mantém-se em loop até que o valor de retorno da
função analogRead seja maior que 800.
for(int conta = 0; conta < 6; conta++)
Loop: executa o bloco de código até que conta >= 6.
Felipe Nascimento Martins
75. Arduino
• Outras funções:
digitalRead(pino);
Retorna 0 (Vpino < 2V) ou 1 (Vpino > 3V).
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no
pino (entre 0 e 5V). Tempo de conversão = 100µs.
while(analogRead(A2) < 950);
Mantém-se em loop até que o valor de retorno da
função analogRead seja maior que 800.
for(int conta = 0; conta < 6; conta++)
Loop: executa o bloco de código até que conta >= 6.
Felipe Nascimento Martins
76. Arduino
• Outras funções:
digitalRead(pino);
Retorna 0 (Vpino < 2V) ou 1 (Vpino > 3V).
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no
pino (entre 0 e 5V). Tempo de conversão = 100µs.
while(analogRead(A2) < 950);
Mantém-se em loop até que o valor de retorno da
função analogRead seja maior que 950.
for(int conta = 0; conta < 6; conta++)
Loop: executa o bloco de código até que conta >= 6.
Felipe Nascimento Martins
77. Arduino
• Outras funções:
digitalRead(pino);
Retorna 0 (Vpino < 2V) ou 1 (Vpino > 3V).
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no
pino (entre 0 e 5V). Tempo de conversão = 100µs.
while(analogRead(A2) < 950);
Mantém-se em loop até que o valor de retorno da
função analogRead seja maior que 800.
for(int conta = 0; conta < 6; conta++)
Loop: executa o bloco de código até que conta >= 6.
Felipe Nascimento Martins
80. LDR – Resistência variável com a luz
Felipe Nascimento Martins
O pino 13 tem
um resistor
interno!
81. Prática 3: Usando o sensor de luz
• Monte o circuito com o LDR – Light Dependent
Resistor – e execute o seguinte programa:
void setup() {
Serial.begin(9600);
}
void loop() {
int sensor = analogRead(A2);
Serial.println(sensor, DEC);
}
Felipe Nascimento Martins
83. Prática 4: Usando o sensor de luz
• Monte o circuito com LDR – Light Dependent
Resistor (sensor de luz).
• Escreva um programa que acenda o LED do pino
13 quando houver pouca luz e apague o mesmo
LED quando houver muita luz.
void setup() {
...
}
void loop() {
...
}
Felipe Nascimento Martins
84. Comunicação serial
• Bit: menor unidade de informação -> 0 ou 1;
• Informação é enviada bit a bit, em sequência;
• Síncrona: uma linha de dados e outra de clock:
Felipe Nascimento Martins
85. Comunicação serial
• Bit: menor unidade de informação -> 0 ou 1;
• Informação é enviada bit a bit, em sequência;
• Assíncrona: apenas uma linha de dados. A
velocidade deve ser definida:
Felipe Nascimento Martins
86. Comunicação serial
• OK.
• Mas como posso transmitir outras informações
além de “zeros” e “uns”?
Felipe Nascimento Martins
87. Comunicação serial
• OK.
• Mas como posso transmitir outras informações
além de “zeros” e “uns”?
• Existe uma tabela que relaciona caracteres a
sequências de zeros e uns:
• ASCII (American Standard Code for
Information Interchange).
• Esta tabela criou um padrão para troca de
informações em sistemas binários.
Felipe Nascimento Martins
89. Arduino
• Microcontrolador possui hardware para
comunicação serial:
• Pino digital 0 (RX): recepção de dados;
• Pino digital 1 (TX): transmissão de dados;
• Bit 1 = 5V; Bit 0 = 0V;
• A maioria das placas Arduino possui hardware
que converte sinais do padrão serial assíncrono
para USB;
Felipe Nascimento Martins
90. Prática 5: Comunicação bidirecional
• Outro exemplo de comunicação serial: desta vez
o Arduino vai receber um dado do computador,
processá-lo e retornar o resultado pela porta
serial.
• Vamos analisar o programa:
int i, numero;
void setup() {
Serial.begin(9600);
}
void loop() {
while (true) {
Serial.print("Entre com um numero: ");
while (Serial.available()==0);
numero = Serial.read();
Felipe Nascimento Martins
91. if (numero>='0' && numero<='9')
Serial.println(numero, BYTE);
else {
Serial.println("O valor deve ser
numerico!");
continue;
}
numero-='0';
for (i = 0; i <= 10; i++) {
Serial.print(numero);
Serial.print(" x ");
Serial.print(i);
Serial.print(" = ");
Serial.println(numero*i);
}
Serial.println("");
}
}
Felipe Nascimento Martins
92.
93. PWM
• PWM = Pulse Width Modulation;
• Razão cíclica (duty cycle): define a tensão
média aplicada:
T(PWM) T(PWM) T(PWM)
A1 A2 A3
Felipe Nascimento Martins
96. Controle de potência por PWM
analogWrite(11, 200);
cria no pino 11 um sinal
PWM com razão cíclica
igual a 200;
f = 490Hz;
apenas alguns pinos
digitais possuem saída
PWM.
Felipe Nascimento Martins
97. Prática 6: Controle de brilho PWM
int brilho = 0; // brilho do LED
int sensor // valor do LDR
void setup() {
pinMode(A2, INPUT); // pino do LDR: entrada A2
pinMode(11, OUTPUT); // pino do LED: saida 11
Serial.begin(9600);
}
void loop() {
sensor = analogRead(A2); // le do LDR
brilho = map(sensor, 0, 1023, 0, 255);
Serial.println(brilho, DEC); // envia ao PC
analogWrite(11, brilho); // aciona LED
}
Felipe Nascimento Martins
98. Prática 7: Pisca-pisca suave
int brilho = 0; // brilho do LED
int variacao = 5; // quanto varia o brilho
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
analogWrite(11, brilho);
brilho = brilho + variacao;
if (brilho == 0 || brilho == 255) {
variacao = -variacao;
}
delay(30);
}
Felipe Nascimento Martins
99. Motor de Corrente Contínua (CC)
Felipe Nascimento Martins
• Alimentado em corrente contínua;
• Possui ímã e bobinas internamente;
• Velocidade é ajustada pela tensão de
alimentação (pode ser por PWM!);
• Sentido de giro é alterado pela polaridade.
100. Motor de Passo
Felipe Nascimento Martins
• Alimentado com sinais
digitais;
• Alimentação das
bobinas deve ser
sequencial;
• Permite controle preciso
de posição;
• Torque cai muito com o
aumento da velocidade.
102. Servomotor
Felipe Nascimento Martins
• É um motor CC que possui um sistema de
interno de controle:
• angular – controla a posição (giro) do eixo;
• contínuo – controla a velocidade do eixo;
103. Servomotor
Felipe Nascimento Martins
• Normalmente é feito com um motor de
corrente contínua, um circuito eletrônico e
engrenagens para aumentar o torque;
108. #include <Servo.h>
Servo myservo; // create servo object
Servo myservo2;
int potpin = 0; // used to connect the potentiometer
int val; // value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin
myservo2.attach(10);
}
void loop() {
val = analogRead(potpin); // entre 0 e 1023
val = map(val, 0, 1023, 0, 179); // escalona
myservo.write(val);
myservo2.write(179-val);
delay(15);
} Felipe Nascimento Martins
Prática 8: Controle de Servomotores
109. Outros motores com Arduino
• Cada pino do Arduino pode fornecer, no máximo,
40mA de corrente -> pode não ser suficiente para
acionar um motor!
• Solução: usar transistores.
Felipe Nascimento Martins
110. Transistor
• Um transistor pode ser entendido
como uma “válvula” eletrônica: é
capaz de acionar cargas de alta
corrente a partir de um sinal de
controle de baixa corrente.
• Quanto maior for a corrente no pino
de “base” (B), maior será a corrente
entre os pinos “coletor” (C) e “emissor”
(E).
• Por exemplo, se a corrente na base
variar de 0 a 0,01 A, a corrente de
coletor pode variar de 0 a 1A!
Felipe Nascimento Martins
117. Avançando com Arduino: RS-485 e I2C
Detalhes: http://nossosrobos.blogspot.com.br/2011/08/arduino-conversando-com-nxt-via-rs-485.html
http://nossosrobos.blogspot.com.br/2013/03/comunicacao-ic-entre-lego-nxt-e-arduino.html
Felipe Nascimento Martins
119. Avançando com Arduino: Sem fio
Detalhes: http://nossosrobos.blogspot.com.br/2011/12/arduino-wireless.html
Felipe Nascimento Martins
120. Avançando com Arduino: Bluetooth
Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
Felipe Nascimento Martins
121. Avançando com Arduino: LCDs
Detalhes: http://nossosrobos.blogspot.com.br/2012/01/lcd-para-seu-robo-com-arduino.html
Felipe Nascimento Martins
• LCD gráfico 128x128 pixels:
122. Avançando com Arduino: MATLAB
Detalhes: http://nossosrobos.blogspot.com.br/2011/10/arduino-com-matlab.html
Felipe Nascimento Martins
123. Avançando com Arduino: LabVIEW
Detalhes: http://sine.ni.com/nips/cds/view/p/lang/pt/nid/209835
Felipe Nascimento Martins
124. Avançando com Arduino: Robô
Detalhes: http://nossosrobos.blogspot.com.br/2012/09/monte-seu-robo-com-arduino.html
Felipe Nascimento Martins
125. Robôs baseados em Arduino
• DFRobotShop Rover - Arduino
Compatible Tracked Robot
Felipe Nascimento Martins
126. Robôs baseados em Arduino
• DFRobotShop Rover 2.0 – Arduino
Compatible Mecanum
Felipe Nascimento Martins
127. Robô Arduino oficial
• Arduino Robot
Felipe Nascimento Martins
Detalhes: http://nossosrobos.blogspot.com.br/2013/07/arduino-robot-o-primeiro-robo-arduino.html
128. Softwares gratuitos
Felipe Nascimento Martins
• IDE de programação do Arduino:
www.arduino.cc
• Fritzing - para fazer esquemas elétricos, de
proto-board e placas de circuito impresso:
www.fritzing.org
• 123D Circuits.io - para simulação de circuitos
com ou sem Arduino e projeto de placas de
circuito impresso (roda no navegador):
http://123d.circuits.io
129. Referências
Felipe Nascimento Martins
• VALPEREIRO, Filipe. Workshop Arduino, 2008.
• JUSTEN, Álvaro. Curso de Arduino (apostila), 2011.
• FONSECA, Érika e BEPPU, Mathyan. Apostila
Arduino. CT/UFF, 2010.
• ERIKSSON, Fredrik. Industrial Circuits Application
Note - Stepper Motor Basics.
• POMÍLIO, J.A. Eletrônica de Potência. UNICAMP
(apostila para o curso de graduação). Acesso em
AGO/2010.
• Blog: www.nossosrobos.blogspot.com
• Site oficial do Arduino: www.arduino.cc
• http://www.labdegaragem.com.br/wiki