Vous êtes sur la page 1sur 68

Arduino Hack Day

•  Evento promovido por entusiastas, universidades e


empresas
•  Colaborativo e participativo
•  Informações técnicas e troca de experiências
•  Elétron Livre apoia a iniciativa emprestando materiais,
cedendo direito de uso de slides e ajudando na preparação
geral do evento

•  PROMOVA VOCÊ TAMBÉM UM ARDUINO HACK DAY!


Sobre este Arduino Hack Day…

•  Esse evento é realizado por:

–  Lucas Fragomeni

–  Uaná Tecnologia
Agenda Padrão

•  Introdução a Arduino
•  Controlando tomadas pela Internet
•  Controle de motores com Arduino
•  Programando Robôs
•  Criação de placas e shields
Introdução ao Arduino

•  Plataforma baseada em Atmel da AVR (ATMega168);


•  Oferece um IDE e bibliotecas de programação de alto nível;
•  Open-source hardware e software
•  Ampla comunidade
•  Programado em C/C++
•  Transferência de firmware
via USB
•  MCU com bootloader
Histórico do Arduino

•  Projeto criado na Itália pelo Mássimo Banzi no Interaction


Design Institute Ivrea;
•  Nasceu para complementar o aprendizado de programação,
computação física e gráfica;
•  Nasceu do Processing e Wiring;
•  Processing é um ambiente e linguagem de programação
para criar imagens, animação e interação;
Simplicidade no circuito:
Muitas aplicações práticas

•  Robôs
•  Roupas eletrônicas
•  Máquinas de corte e modelagem 3D de baixo custo;
•  Segway open-source
•  Desenvolvimento de celulares customizados
•  Instrumentos musicais
•  Paredes interativas
•  Instrumentação humana
•  Circuit bending
Vários tipos, vários fabricantes...

•  Mega
•  Lilypad
•  Nano
•  Uno
•  Pro
•  Arduino BT
•  Freeduino
•  Severino
•  Program-ME
Atmega168 / Atmega328: coração

•  Características do ATmega 168:


•  RISC
•  20 MIPS (20 Milhões de instruções por segundo)
•  16Kb Flash / 512 b EEPROM / 1Kb RAM Estática
•  10.000 ciclos na Flash e 100.000 na EEPROM
•  2 contadores / temporizadores de 8bits
•  1 contador / temporizador de 16bits
•  1 temporizador de tempo real com clock a parte
•  14 portas digitais
•  6 portas analógicas
Características técnicas

•  6 canais PWM
•  6 conversores analógico/digital de 10 bits
•  1 serial programável (USART)
•  1 interface SPI (Serial Peripheral Interface)
•  1 interface serial a 2 fios (I2C)
•  1 watch dog timer programável
•  1 comparador analógico no chip
•  Interrupção ou wake-up na alteração de estado dos pinos
Resumo das conexões da placa
FT232RL  
Conversor  USB-­‐Serial  

Conector  USB  

Regular  7085:  
Recebe  até  12  volts  e    
regula  para  5  volts    

Alimentação  externa:  
Até  12  volts  
Botão  de  reset  

ICSP  
Para  gravar  bootloader    
ou  programas/firmware  

AtMega328  /168/8  
AREF   Portas  digitais  0  a  13  
Referência  analógica   GND  
0  RX  1  TX  =  usada  durante  
Padrão  5  volts   transferência  de  sketch  e  
comunicação  serial  com  
placa  

2,4,7,8,12,13  =  portas  
digitais  convêncionais  

3,5,6,9,10,11  =  portas  PWM  


Portas  analógicas  4  e  5  
São  as  portas  uZlizadas  
para  conexões  via  I2C  /  
TWI.  

GND   Portas  analógicas  de  0  a  5  


Reset   5  volts   Podem  funcionar  como  digitais  de  14  a  19  
3.3  volts   VIN  
Alimentação  de  entrada  sem  regulagem  
Shields: arquitetura modular inteligente

•  Arduino estabeleceu um padrão de pinagem que é


respeitado por diversas placas shield:
Por dentro do MCU
Programando para Arduino

•  IDE pode ser baixada de www.arduino.cc


•  A IDE foi desenvolvida com Java, portanto precisaremos de
um máquina virtual 1.5 ou 1.6 instalada
•  Funciona em Windows. Mac OS X e Linux (em alguns
windows e mac pode ser necessário colocar driver)
•  Utiliza GCC + GCC Avr para compilação
(você pode também programar diretamente com GCC!)
•  A transferência para a placa é feita via USB pelo IDE;
(mas também pode ser feita com gravadores ICSP!)
Partes básicas do programa Arduino

•  Temos que obrigatoriamente programar dois métodos:

void setup() {
}
void loop() {
}

•  O setup é executado úma só vez assim que a placa for


ligada e o loop terá o código de execução infinita
Portas digitais e analógicas

•  Na prática ligamos componentes em portas digitais e


analógicas e através do código Arduino, manipulamos as
portas:
–  pinMode(<porta>, <modo>): configura uma porta digital
para ser lida ou para enviarmos dados;
–  digitalWrite(<porta>, 0 ou 1): envia 0 ou 1 para porta digital
–  digitalRead(<porta>): retorna um 0 ou 1 lido da porta
–  analogRead(<porta>): retorna de 0 a 1023 com o valor da
porta analógica
–  analogWrite(<porta>, <valor>): escreve em uma porta PWM
um valor de 0 a 255
Exemplo “pisca led”

void setup() {
pinMode(13, OUTPUT); //porta 13 em output
}

void loop() {
digitalWrite(13, HIGH); //HIGH = 1 = TRUE
delay(500);
digitalWrite(13, LOW); //LOW = 0 = FALSE
delay(500);
}
Exemplo “pisca led” com Arduino

Esta  conexão  é  bem  simples  


somente  para  efeito  de  teste  
para  piscar  o  led.    

O  correto  é  ligar  um  resistor  


usando  uma  protoboard.  
Exemplo “luz ambiente”

void setup() {
//Inicializando conexão com PC via FT232 - cabo
Serial.begin(9600);
}

void loop() {
int luz = analogRead(5); //LDR ligado na 5
//envia informações para o PC
Serial.println(luz);
delay(500);
}
LDR no Arduino sem protoboard
DEMO

•  Apresentação básica do Arduino IDE:


–  Compilação;
–  Samples;
–  Upload;
–  Dicas

•  Demonstração do código com Arduino convencional


•  Demonstração do código com Program-ME
Program-ME: Arduino turbinado nacional
Ligando componentes

•  Com o mapa de portas documentado a seguir, conseguimos


saber qual jumper habilita qual componente e em qual
porta

Jumpers  são  uZlizados  para  ligar  ou  


desligar  os  componentes  on-­‐board  

Se  todos  os  jumpers  forem  reZrados,  


todas  as  portas  são  liberadas  deixando  o  
Program-­‐ME  funcionando  como  um  
Arduino.  

Você  pode  escolher  o  que  ligar!  


Mapa de portas Vs. componentes

Código   Porta   Componente  


L1   14  (igual  analógica  0)   Led  
L2   1   Led  
L3   2   Led  
L4   3   Led  
L5   4   Led  
L6   5   Led  
L7   8   Led  
L8   6   Led  
L9   13   Led  
C1   Analógica  5   LDR  
Mapa de portas Vs. componentes

Código   Porta   Componente  


Q2   Digital  6   Led  
Q3   Digital  9   Led  
Q4   Digital  18   Led  
Q5   Digital  17   Led  
Chv1   Digital  0   Chave  microswitch  /  botão  
Spk   Digital  12   Speaker  
Servo-­‐1   Digital  10   Entrada  servo-­‐1  
Servo-­‐2   Digital  11   Entrada  servo-­‐2  
JP7   Analógica  1   Entrada  analógica  /  potenciômetro  
JP6   Analógica  2   Entrada  analógica  /  potenciômetro  
Selecionando alimentação

•  O Program-ME possui um jumper para seleção de


alimentação USB ou fonte externa

•  Toda vez que ligar componentes que possam consumir mais


que 500ma, devemos alimentar com fonte externa!

•  Durante os laboratórios de motores e relés lembre-se de


mudar este jumper e alimentar com fonte externa
Selecionando alimentação

Jumper  Seleção  
Externo  ou  USB  
Lab 1: primeiro contato com Program-ME / Arduino

•  Ligar sua placa no cabo USB e no PC


•  Verificar o jumper de alimentação configurando para USB
se necessário
•  Digitar o código a seguir no Arduino IDE
•  Clicar no botão de transferência de sketch
Lab 1:Exemplo “pisca led”

void setup() {
pinMode(13, OUTPUT); //porta 13 em output
}

void loop() {
digitalWrite(13, HIGH); //HIGH = 1 = TRUE
delay(500);
digitalWrite(13, LOW); //LOW = 0 = FALSE
delay(500);
}
O que precisamos para controlar uma tomada via
Web
•  Microcontrolador
•  Relê, transistor, diodo e resistor
•  PC ou um shield Ethernet, WiFi ou ZigBee para seu
microcontrolador

Aqui vamos usar...

•  Arduino UNO
•  Placa Tomad@
•  PC e shield XBee para Arduino
Porque é necessário utilizar relés ?

•  As portas de saída do microcontrolador (ATmega), utilizado


nas placas Arduino, tem uma capacidade máxima de
corrente de 40mA por porta. Essa corrente é suficiente
apenas para alimentar uns 4 Leds comuns, portanto para
acionar dispositivos que consomem correntes acima de
40mA em 5Volts, dispositivos de voltagens maiores e
dispositivos alimentados com tensão AC, é necessário
colocar um transistor e um relé entre o micro-controlador e
a carga .
O que é um relé ?

Os relés são basicamente interruptores acionados


elétricamente.

Os relés podem possuir um ou mais contatos


(“interruptores”) sendo que esses contatos podem
ser:

•  NA (normalmente aberto) / NO (normal open)


ou
•  NF (normalmente fechados) / NC (normal closed) .
Como  funciona  um  Relé  
•  O  acionamento  dos  contatos  de  um  relé  ocorre  quando  a  sua  bobina  é  
energizada.  Nesse  momento  é  criado  um  campo  magnéZco  que  atrai  uma  
alavanca  responsável  pelo  acionamento  dos  contatos  
•  Para  acionar  um  relé  precisamos  de  transistor  e  diodo  de  proteção  

relé  simples   relé  duplo  


Porque  é  necessário  uZlizar  o  transistor  ?  
•  Existem  relés  bem  pequenos  que  poderiam  ser  acionados  diretamente  por  um  
microcontrolador,  porém  na  maioria  dos  casos  uZlizamos  um  transistor  entre  a  
porta  do  micro-­‐controlador  e  o  relé  devido  a  corrente  necessária  para  aZvar  a  
bobina  do  relé  ser  maior  que  40mA.  
Tensão  reversa  nos  relés  
•  Ao  desenergizar  a  bobina  de  um  relé,  ocorre  um  fenômeno  que  faz  com  que  seja  
gerada  uma  tensão  reversa  pela  bobina.  Devemos  proteger  o  circuito  responsável  
pelo  acionamento,  instalando  um  diodo  em  paralelo  com  a  bobina.  
Placa  Tomad@  
Hacking  Class    
Componentes  da  placa  
 R1  e  R2  =  resistor  1k  –  para  os  transistores  
 R3  e  R4  =  resistor  330R  –  para  os  leds  

 D1  e  D2  =  diodo  IN4007  

 Led1  e  Led2  =  led  on  /  off  

 Fusível  1  e  Fusível  2  =  proteção  

   T1  e  T2  =  transistor  para  acionar  bobina  do  relê  

 Relê  1  e  Relê  2  

 Bornes  para  encaixe  dos  fios  de  acionamento  da  saída  do  

contato  do  relê  


Conectando seu Program-Me na placa Tomad@
Hacking  Class    
Ligando  a  placa  no  Arduino  
Hacking  Class    
Ligando  a  placa  na  tomada  
 Devemos  romper  o  fio  de  uma  das  fases;  
 Cortamos  o  fio  e  vamos  ligar  cada  uma  das  pontas  em  um  

dos  bornes  da  placa  


void  setup()  {  
   pinMode(2,  OUTPUT);  
   pinMode(3,  OUTPUT);  
}  

void  loop()  {  
   digitalWrite(3,  LOW);  
   digitalWrite(2,  HIGH);  
   delay(1000);  
   digitalWrite(2,  LOW);  
   digitalWrite(3,  HIGH);  
   delay(1000);  
}  
1.  Computador  conectado  na  Web  com  servidor  
Java  recebe  request  HTTP  com  solicitação  para  
acionar  a  tomada  

2.  Este  servidor  web  terá  uma  placa  Arduino  


ligada  permanentemente.  O  servlet  (ou  equiv)  vai  
acionar  a  placa  via  comunicação  serial  RS-­‐232.  

3.  Para  controlar  as  tomadas,  vamos  ligar  a  placa  


Tomad@  no  Arduino.  Essa  placa  possui  um  par  de  
relês  que  podem  ser  ligados    em  uma  tomada  e  
acionados  on  /  off  através  de  sinal  digital  0  ou  1  

4.    Vamos  ligar  uma  tomada  no  relê  da  


nossa  placa  ou  então  um  aparelho  
qualquer.  
void  setup()  {  
   Serial.begin(9600);  
   pinMode(2,  OUTPUT);  
   pinMode(3,  OUTPUT);  
}  

void  loop()  {  
   if(Serial.available()  >0)  {  
       int  incoming=Serial.read();  
       Serial.println("Recebendo  dados");  
       Serial.println(incoming,  DEC);  
       acionarRele(incoming);//  seu  protocolo  
   }  
}  
void  acionarRele(int  codigo)  {  
       if(codigo=65)  {  
           Serial.println("HIGH  no  rele  1");  
           digitalWrite(3,  HIGH);  
       }  
       else  if(codigo=66)  {  
           Serial.println("LOW  no  rele  1");  
           digitalWrite(3,  LOW);  
       }  
       else  if(codigo=67)  {  
           Serial.println("HIGH  no  rele  2");  
           digitalWrite(2,  HIGH);  
       }  
       else  if(codigo=68)  {  
           Serial.println("LOW  no  rele  2");  
           digitalWrite(2,  LOW);  
       }  
}  
Hacking  Class    
Código  Servlet    

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
byte[] dados = new byte[1];
dados[0] =
Byte.parseByte(request.getParameter("rele"));
try {
Arduino.enviar(dados);
...
outputStream = serialPort.getOutputStream();
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);

serialPort.notifyOnOutputEmpty(true);

outputStream.write(bytes);
serialPort.close();
Vamos praticar?

•  Laboratório de uso de Arduino e placa tomad@


Motores  CC  
  Baseados  no  principio  da  atração  e  repulsão  entre  pólos  magnéZcos  os  
motores  CC  são  uma  aplicação  inteligente  da  comutação  de  circuitos  
eletromagnéZcos.  
  Principio  de  Funcionamento:    
Regra  da  mão  esquerda  
  O  senZdo  da  rotação  do  motor  dependerá  da  polaridade  da  ligação  da  
fonte  de  alimentação  e  está  vinculada  com  a  regra  da  mão  esquerda,  que  define  
o  senZdo  da  corrente,  do  campo  gerado  e  do  movimento.  E  a  velocidade  de  
rotação  dependerá  da  corrente  que  atravessa  o  circuito  e  consequentemente  
da  tensão  aplicada.  
Partes  de  um  Motor  DC  
CaracterisZcas  Gerais  dos  Motores  CC    
Um  motor  cc  é  caracterizado  basicamente  por:  
•  Dimensionamento  ysico;  
•  Potência  nominal;  
•  Tensão  nominal;    
•  Corrente  nominal;  
•  Velocidade  nominal;  
•  Torque  nominal;  
•  Torque  de  frenagem;  

  Potência  (WaUs)  =  Tensão  (Volts)  x  Corrente  (Amperes)  


Redutor  de  rotação.  
Circuito  de  acionamento  com  um  transistor    
•    A  maneira  mais  simples  de  controlar  um  motor  é  uZlizando  um  único  
transistor.  Com  esse  método  podemos  controlar  o  acionamento  e  a  
velocidade  do  motor.  
•    O  circuito  para  esse  controle  é  parecido  com  o  circuito  de  acionamento  do  
solenóide,  como  podemos  ver  a  seguir:  
Circuito  para  controle  de  2  motores  

Podemos  notar  que  a  alimentação  do  circuito  lógico  é  feita  com  


5V  e  a  alimentação  dos  motores  é  separada,  podendo  ser  de  
até  36V.  
Servo  Motores  
Principio  de  funcionamento  
Vista  explodida  de  um  servomotor  
Controle  do  Servo  Motor  
   
CaracterísZcas  do  Servo  Motor  
Sistema  de  controle:  Largura  de  pulso  com  1,52ms  para  posição  neutra  

Tipo  do  Motor:  3-­‐polos  


Tensão  de  Alimentação:  4.8V  ou  6V  

Consumo  de  potência:  6V  x  8mA  (em  descanso)  

Torque:  
33,3  oz-­‐in  (2,4  kg/cm)  @  4.8V  
42  oz-­‐in  (3,0  kg/cm)  @  6V  
Tempo  de  trânsito:    

0,28  seg/60°  @  4.8V  


0,22  seg/60°  @  6V  
Dimensões:  40  x  20  x  36mm  

Peso:  44g  

Diametro  do  eixo:  5,88mm  


Servos  digitais  

•   Possuem  uma  taxa  de  atualização  da  posição  muito  maior.    

•   Enquanto  os  servos  analógicos  são  atualizados  30  vezes  por  segundo  (30Hz)  
os  digitais  são  atualizados  300  vezes  por  segundo  (300  Hz).  
•   O  torque  pode  chegar  a  ser  3  vezes  maior  que  o  do  servo  analógico.  
•      Os  servos  digitais  também  podem  ser  programados  em  relação  ao  
posicionamento,  definindo  limites  e  posições  para  o  caso  de  falhas.  
Conexão  e  Esquema  Elétrico  
Padrões  de  conexão  dos  Servos  

Outra  diferença  está  na  conexão  mecânica  do  eixo  do  servo,  que  no  Hitec  tem  24  
dentes  e  no  Futaba  25.  
1.  Laboratório
(laboratório   de Servomotores
assisZdo,  instrutor   guia  alunos)  
Obje`vo:  
PraZcar.  
Tabela  de  a`vidades:  

Laboratório  de  servo  

Vous aimerez peut-être aussi