You are on page 1of 62

Arduino Hack Day

Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informaes tcnicas e troca de experincias Eltron Livre apoia a iniciativa emprestando materiais, cedendo direito de uso de slides e ajudando na preparao geral do evento PROMOVA VOC TAMBM UM ARDUINO HACK DAY!

Sobre este Arduino Hack Day


Introduo a Arduino Controlando tomadas pela Internet Controle de motores com Arduino Introduo a robtica Criao de placas e shields

Introduo ao Arduino
Plataforma baseada em Atmel da AVR (ATMega168); Oferece um IDE e bibliotecas de programao de alto nvel; Open-source hardware e software Ampla comunidade Programado em C/C++ Transferncia de firmware via USB MCU com bootloader

Histrico do Arduino
Projeto criado na Itlia pelo Mssimo Banzi no Interaction Design Institute Ivrea; Nasceu para complementar o aprendizado de programao, computao fsica e grfica; Nasceu do Processing e Wiring; Processing um ambiente e linguagem de programao para criar imagens, animao e interao;

Simplicidade no circuito:

Muitas aplicaes prticas


Robs Roupas eletrnicas Mquinas de corte e modelagem 3D de baixo custo; Segway open-source Desenvolvimento de celulares customizados Instrumentos musicais Paredes interativas

Instrumentao humana Circuit bending

Vrios tipos, vrios fabricantes...


Mega Lilypad Nano Uno Pro Arduino BT Freeduino Severino Program-ME

Atmega168 / Atmega328: corao


Caractersticas do Atmega 328: RISC 20 MIPS (20 Milhes de instrues por segundo) 32 KB Flash / 1 KB EEPROM / 2 KB RAM Esttica 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 analgicas

Caractersticas tcnicas
6 6 1 1 1 1 1 canais PWM conversores analgico/digital de 10 bits serial programvel (USART) interface SPI (Serial Peripheral Interface) interface serial a 2 fios (I2C) watch dog timer programvel comparador analgico no chip

Resumo das conexes da placa

AREF Referncia analgica Padro 5 volts

GND

Portas digitais 0 a 13 0 RX 1 TX = usada durante transferncia de sketch e comunicao serial com placa 2,4,7,8,12,13 = portas digitais convncionais 3,5,6,9,10,11 = portas PWM

Portas analgicas 4 e 5 So as portas uFlizadas para conexes via I2C / TWI.

Portas analgicas de 0 a 5 GND Reset Podem funcionar como digitais de 14 a 19 5 volts VIN 3.3 volts Alimentao de entrada sem regulagem

FT232RL Conversor USB-Serial

Conector USB

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

Alimentao externa: At 12 volts

Shields: arquitetura modular inteligente


Arduino estabeleceu um padro 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 mquina virtual 1.5 ou 1.6 instalada Funciona em Windows. Mac OS X e Linux (em alguns windows e mac pode ser necessrio colocar driver) Utiliza GCC + GCC Avr para compilao (voc pode tambm programar diretamente com GCC!) A transferncia para a placa feita via USB pelo IDE; (mas tambm pode ser feita com gravadores ICSP!)

Exemplo pisca led com Arduino

Esta conexo bem simples somente para efeito de teste para piscar o led. O correto ligar um resistor usando uma protoboard.

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); }

Partes bsicas do programa Arduino


Temos que obrigatoriamente programar dois mtodos:
void setup() { } void loop() { }

O setup executado uma s vez assim que a placa for ligada e o loop ter o cdigo de execuo infinita

Portas digitais e analgicas


Na prtica ligamos componentes em portas digitais e analgicas e atravs do cdigo 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 analgica analogWrite(<porta>, <valor>): escreve em uma porta PWM um valor de 0 a 255

DEMO
Apresentao bsica do Arduino IDE:
Compilao; Samples; Upload; Dicas

Demonstrao do cdigo com Arduino convencional Demonstrao do cdigo 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 so uFlizados para ligar ou desligar os componentes on-board Se todos os jumpers forem reFrados, todas as portas so liberadas deixando o Program-ME funcionando como um Arduino. Voc pode escolher o que ligar!

Mapa de portas Vs. componentes


Cdigo L1 L2 L3 L4 L5 L6 L7 L8 L9 C1 Porta 14 (igual analgica 0) 1 2 3 4 5 8 6 13 Analgica 5 Componente Led Led Led Led Led Led Led Led Led LDR

Mapa de portas Vs. componentes


Cdigo Q2 Q3 Q4 Q5 Chv1 Spk Servo-1 Servo-2 JP7 JP6 Porta Digital 9 Digital 6 Digital 18 Digital 17 Digital 0 Digital 12 Digital 10 Digital 11 Analgica 1 Analgica 2 Componente Led Led Led Led Chave microswitch / boto Speaker Entrada servo-1 Entrada servo-2 Entrada analgica / potencimetro Entrada analgica / potencimetro

Selecionando alimentao
O Program-ME possui um jumper para seleo de alimentao USB ou fonte externa Toda vez que ligar componentes que possam consumir mais que 500ma, devemos alimentar com fonte externa! Durante os laboratrios de motores e rels lembre-se de mudar este jumper e alimentar com fonte externa

Selecionando alimentao

Jumper Seleo Externo ou USB

Lab 1: primeiro contato com Program-ME / Arduino


Ligar sua placa no cabo USB e no PC Verificar o jumper de alimentao configurando para USB se necessrio Digitar o cdigo a seguir no Arduino IDE Clicar no boto de transferncia 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 ou wifi para seu microcontrolador Aqui vamos usar... Arduino Placa Tomad@ PC e shield XBee para Arduino

1. Computador conectado na Web com servidor Java recebe request HTTP com solicitao para acionar a tomada 2. Este servidor web ter uma placa Arduino ligada permanentemente. O servlet (ou equiv) vai acionar a placa via comunicao serial RS-232. 3. Para controlar as tomadas, vamos ligar a placa Tomad@ no Arduino. Essa placa possui um par de rels que podem ser ligados em uma tomada e acionados on / o atravs de sinal digital 0 ou 1

4. Vamos ligar uma tomada no rel da nossa placa ou ento um aparelho qualquer.

Placa Tomad@

Porque necessrio utilizar rels ?


As portas de sada do microcontrolador (ATmega), utilizado nas placas Arduino, tem uma capacidade mxima 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 tenso AC, necessrio colocar um transistor e um rel entre o micro-controlador e a carga .

O que um rel ?
Os rels so basicamente interruptores acionados eltricamente. Os rels 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 magnFco que atrai uma alavanca responsvel pelo acionamento dos contatos Para acionar um rel precisamos de transistor e diodo de proteo

rel simples

rel duplo

Porque necessrio uFlizar o transistor ?


Existem rels bem pequenos que poderiam ser acionados diretamente por um microcontrolador, porm na maioria dos casos uFlizamos um transistor entre a porta do micro-controlador e o rel devido a corrente necessria para aFvar a bobina do rel ser maior que 40mA.

Tenso reversa nos rels


Ao desenergizar a bobina de um rel, ocorre um fenmeno que faz com que seja gerada uma tenso reversa pela bobina. Devemos proteger o circuito responsvel pelo acionamento, instalando um diodo em paralelo com a bobina.

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 / o Fusvel 1 e Fusvel 2 = proteo T1 e T2 = transistor para acionar bobina do rel Rel 1 e Rel 2 Bornes para encaixe dos os de acionamento da sada 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 o de uma das fases; Cortamos o o 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); }

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 Cdigo 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?
Laboratrio de uso de Arduino e placa tomad@

Motores CC
Baseados no principio da atrao e repulso entre plos magnFcos os motores CC so uma aplicao inteligente da comutao de circuitos eletromagnFcos. Principio de Funcionamento:

Partes de um Motor DC

CaracterisFcas Gerais dos Motores CC


Um motor cc caracterizado basicamente por: Dimensionamento ysico; Potncia nominal; Tenso nominal; Corrente nominal; Velocidade nominal; Torque nominal; Torque de frenagem;

Potncia (WaUs) = Tenso (Volts) x Corrente (Amperes)

Redutor de rotao.

Circuito de acionamento com um transistor


A maneira mais simples de controlar um motor uFlizando um nico transistor. Com esse mtodo podemos controlar o acionamento e a velocidade do motor. O circuito para esse controle parecido com o circuito de acionamento do solenide, como podemos ver a seguir:

Circuito para controle de 2 motores

Podemos notar que a alimentao do circuito lgico feita com 5V e a alimentao dos motores separada, podendo ser de at 36V.

Principio de funcionamento

Servo Motores

Vista explodida de um servo motor

Controle do Servo Motor

Servos digitais
Possuem uma taxa de atualizao da posio muito maior.

Enquanto os servos analgicos so atualizados 30 vezes por segundo (30Hz) os digitais so atualizados 300 vezes por segundo (300 Hz). O torque pode chegar a ser 3 vezes maior que o do servo analgico. Os servos digitais tambm podem ser programados em relao ao posicionamento, denindo limites e posies para o caso de falhas.

Conexo e Esquema Eltrico

Padres de conexo dos Servos

Outra diferena est na conexo mecnica do eixo do servo, que no Hitec tem 24 dentes e no Futaba 25.

(laboratrio assisFdo, instrutor guia alunos) 1. Laboratrio de Servomotores Obje`vo: PraFcar. Tabela de a`vidades:

Laboratrio de servo

You might also like