arduino hack day evento promovido por entusiastas, universidades e empresas colaborativo e...

103

Upload: internet

Post on 28-Apr-2015

114 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências
Page 2: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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!

Page 3: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Sobre este Arduino Hack Day…

• Javaneiros Edition• Organizado pelo Jeff - empresa Jera• Agradecimentos ao apoio da faculdade e prof. Bob

Page 4: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Agenda Padrão

• Introdução a Arduino• Controlando tomadas pela Internet• Controle de motores com Arduino• Introdução a robótica

Page 5: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 6: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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;

Page 7: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Simplicidade no circuito:

Page 8: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 9: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Vários tipos, vários fabricantes...

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

Page 10: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 11: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 12: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Resumo das conexões da placa

Page 13: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Conector USB

Alimentação externa:Até 12 volts

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

FT232RLConversor USB-Serial

Page 14: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

ICSPPara gravar bootloader ou programas/firmware

AtMega328 /168/8

Botão de reset

Page 15: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Portas digitais 0 a 130 RX 1 TX = usada durante 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

GNDAREFReferência analógicaPadrão 5 volts

Page 16: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Portas analógicas de 0 a 5Podem funcionar como digitais de 14 a 19

VINAlimentação de entrada sem regulagem

GND5 volts

3.3 volts

Reset

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

Page 17: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Shields: arquitetura modular inteligente

• Arduino estabeleceu um padrão de pinagem que é respeitado por diversas placas shield:

Page 18: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Por dentro do MCU

Page 19: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Porta Digital Vs. Analógica

• Digital: trabalha com 0 e 1 na lógica binária. – Digital do Arduino segue padrão TTL onde:

• 0 a 0,8 volts = 0• 2 a 5 volts = 1

• Analógica: valor lido é análogo a tensão. – Referência de analogia é 5 volts

• 0 volts = 0• 2.5 volts= 512• 5 volts = 1023

– Conversor A/D de 10 bits: 0 a 1023

Page 20: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Porta Digital Vs. Analógica

• Portas analógicas expressam valores de 0 a 1023 mas não são utilizadas para transferência de informações precisas

• As portas digitais permitem que dados sejam tranferidos em sequencia através de uma lógica ou protocolo binário

• Portas digitais não conseguem comandar potência

Page 21: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Porta PWM

• Uma porta híbrida: digital porém com modularização de zeros e uns de forma que consegue expressar uma idéia de potência;

Page 22: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Na prática

• Ligamos componentes em portas digitais comuns, pwm ou analógica

• Fazemos leitura e escrita nestas portas afim de obter um dado ou um determinado comportamento

• Processamos os dados no microcontrolador

• Alguns exemplos de componentes...

Page 23: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Ping – Sensor de distância ultrasonico

Page 24: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

BússulaBússola

Page 25: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

LCD TouchShield LCD Touch screen

Page 26: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

SIM ReaderSIM Reader

Page 27: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Wave Shield

Page 28: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

XBee

Page 29: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Lojas de componentes

www.parallax.comwww.sparkfun.com

• www.makershed.com• www.liquidware.com• www.ladyada.net• www.adafruit.com

Page 30: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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!)

Page 31: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 32: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 33: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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.

Page 34: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 35: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

LDR no Arduino sem protoboard

Page 36: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 37: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

DEMO

• Apresentação básica do Arduino IDE:– Compilação;– Samples;– Upload;– Dicas

Page 38: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Program-ME: Arduino turbinado nacional

Page 39: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Ligando componentes

Jumpers são utilizados para ligar ou desligar os componentes on-board

Se todos os jumpers forem retirados, todas as portas são liberadas deixando o Program-ME funcionando como um Arduino.

Você pode escolher o que ligar!

• Com o mapa de portas documentado a seguir, conseguimos saber qual jumper habilita qual componente e em qual porta

Page 40: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Mapa de portas Vs. componentes

Código Porta Componente

L1 14 (igual analógica 0) Led

L2 Digital 1 Led

L3 Digital 2 Led

L4 Digital 3 Led

L5 Digital 4 Led

L6 Digital 5 Led

L7 Digital 8 Led

L8 Digital 6 Led

L9 Digital 13 Led

C1 Analógica 5 LDR

Page 41: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Mapa de portas Vs. componentes

Código Porta Componente

Q2 Digital 7 Led

Q3 Digital 6 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

Page 42: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 43: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Selecionando alimentação

Jumper SeleçãoExterno ou USB

Page 44: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 45: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 46: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Lab 2 “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);}

Page 47: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Lab 3: desafio - luz ambiente e leds

Os leds de 1 a 9 Program-Me estão ligados nas portas 14,1,2,3,4,5,8,6,13.

Crie um programa que quanto menor a luz do ambiente mais leds ele acende e apaga em sequencia.

Page 48: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Lab 4: hummm...

Ligue e desligue a porta 12 com diferentes intervalos de tempo...

Page 49: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Resumindo...

• Arduino é um projeto simples, popular e acessível• Eletrônica e programação embarcada alto nível• Na prática ligamos componentes nas portas analógicas e

digitais e escrevemos programas que usam as portas• Existem diversas bibliotecas que encapsulam a lógica de

comunicação digital ou analógica: servo, motor de passo, Android, display LCD

• Ter portas digitais analógicas e pmw é um grande valor do microcontrolador utilizado

• A transfêrencia via USB e a ferramenta / IDE para programação funcionam em múltiplas plataformas

• Open-source Hardware e Open-source software

Page 50: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Tomadas com Arduino

Page 51: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Ligando uma tomada no Arduino, como?

• Qualquer mínimo contato de um fio 110 no Arduino seria capaz de um show pirotécnico

• Isso acontece porque as portas digitais do Arduino funcionam com 5v de conta continua e tomadas 110 e 220 trabalham com corrente alternada

• Mas porque tomadas (e a energia de uma residencia) trabalha com corrente alternada e não contina?– A transmissão da energia com corrente continua para longa

distancias é inviável!

Page 52: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Relé como ponte entre Arduino e AC

• O meio de conexão entre seu Arduino e uma tomada pode ser um relé

• Um relé é um interruptor eletromagnético que quando conduzimos corrente o interruptor fecha um determinado contato

• Esses contatos podem estar normalmente abertos (desconectados) ou normalmente fechados (conectados)

• Siglas NO NC em ingles ou NA NF em portugues

Page 53: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Como funciona um Relé

Page 54: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências
Page 55: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Mas... Como ligar um relé no Arduino?

• O Arduino (le-se Atmega) é um controlador de baixo consumo

• Suas portas digitais não fornecem mais de 40ma de corrente

• Para acionar o mecanismo eletromagnético da bobina do relé é necessário mais de 40ma de corrente

• Por este motivo precisamos ligar um transistor entre o Arduino e o relé

• Para ligar um Arduino no relé precisamos de um transistor, a menos que o relé seja muito pequeno

Page 56: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

E é só isso?

• Um fenômeno físico acontece em todo mecanismo eletromagnético quando é desenergizado

• É conhecido como tensão reversa• Assim que tiramos a energia de um algo eletromagnético

recebemos de volta um “choque”• Com Arduino ligado em transistor que aciona o relé, o

choque seria recebido pelo transistor• Isso poderia ser fatal para o transistor!• Usamos um diodo (componente que só deixa a corrente

passar em um sentido) para proteger o transistor• O diodo deve ser colocado em paralelo com o mecanismo

Page 57: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Placa Tomad@

Page 58: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

R1 e R2 = resistor 1k – para os transistoresR3 e R4 = resistor 330R – para os ledsD1 e D2 = diodo IN4007Led1 e Led2 = led on / offFusível 1 e Fusível 2 = proteção T1 e T2 = transistor para acionar bobina do relêRelê 1 e Relê 2Bornes para encaixe dos fios de acionamento da saída do contato do relê

Page 59: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências
Page 60: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Conectando seu Program-Me na placa Tomad@

Page 61: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 62: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 63: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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.

Page 64: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 65: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

Page 66: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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

...

Page 67: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

outputStream = serialPort.getOutputStream(); serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

serialPort.notifyOnOutputEmpty(true);

outputStream.write(bytes); serialPort.close();

Page 68: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Vamos praticar?

• Com base nos slides, conecte a placa tomada no Program-ME e escreva um programa para chavear o relé

• Ao finalizar crie uma lógica com sensor de luz e relé

• Opcional: criar um programa Web usando RXTX

Page 69: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Motores com Arduino

Page 70: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Tipos de motores

• Podemos qualificar motores em:– Velocidade de rotação / RPM– Força– Precisão

• Redutores são utilizados para transformar rotação em força

• 3 principais tipos motores:– Motor DC / CC: velocidade– Servo-motor: precisão (e força!)– Motor de passo: precisão e força (+ difícil)

Page 71: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Motor DC (com redução)

Page 72: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Motor DC

• Motor simples para comandar que pode ter alta velocidade ou torque (conforme redução)

• Não tem precisão angular

• Podemos controlar a potência com PWM

• Assim como relé precisamos ligar em um transistor com diodo de proteção

• Para inverter a direção da rotação temos que inverter a polaridade

• DEMO: motor na bateria e direção

Page 73: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Motor DC com Arduino em Protoboard

Page 74: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Motor DC no Program-ME

• Podemos usar o transistor Q3 (porta digital PWM 6)• Ligamos o + no 12v e o – no borne do transistor

Page 75: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Motor DC no Program-ME

Page 76: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Exemplo de código

#define Q3 6void setup() {}void loop() { for(int x=0;x<255;x++) { analogWrite(Q3, x); delay(20); } for(int x=255;x>0;x--) { analogWrite(Q3, x); delay(20); }}

Page 77: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Vamos praticar?

• Com base nos exemplos fornecidos e modelo de conexão, utilize o motor DC disponível com a placa controladora fornecida

• Nunca faça conexões com a placa ligada!• Revise o circuito!!

Page 78: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Servo

• Motor com precisão angular

• Fácil comando

• É um motor + redução + driver!

• Por padrão virar apenas de 0 a 180 graus

• Podemos hackear ou comprar servos full-rotation

• Conexão super simples: GND 5v sinal digital

Page 79: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

No Program-ME temos duas entradas

Page 80: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

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.

Page 81: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Program-ME & Servo

Page 82: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Servo + LDR com Program-ME

#include <Servo.h>Servo myservo;void setup() { myservo.attach(10); }

void loop() { int val = map(analogRead(5),0,1023,0,179); myservo.write(val); delay(15); }

Page 83: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Vamos praticar?

• Ligar o servo na entada servo-1, o marrom (GND), deve estar para o lado do USB

• Digitar o código apresentado anteriormente

Page 84: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Robótica com Arduino

Page 85: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

A palavra robô vem de robot que foi utilizada em uma peça de teatro de 1920, chamada R.U.R. (Rossum's Universal Robots), do tcheco Karel Capek. Aparentemente a palavra descende de ROBOTA, que em checo significa trabalho servil ou trabalho pesado.

Uma definição mais realista de robô, seria que ele é um manipulador reprogramável e multi-funcional projetado para mover materiais, partes, ferramentas ou dispositivos especializados através de movimentos variáveis programados para desempenhar uma variedade de tarefas.

Page 86: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Podemos fazer um paralelo entre os robôs e os seres humanos baseados em 3 aspectos distintos:

• Sentidos• Pensamentos• Ações

Nos seres humanos, iniciando pelos seus sentidos, temos um caminho que passa pelo tratamento do pensamento e termina ou resulta em ações.

Podemos usar essa mesma linha de análise para os robôs, porém, substituindo a nomenclatura por outra mais adequada:

• Sentidos - > Sensores• Pensamentos - > Processamento• Ações - > Atuadores

Dessa forma, um robô aciona seus atuadores, baseado em seu processamento que teve como entrada os dados vindos de seus sensores.

Page 87: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Todos os robôs têm em comum a realização de algum tipo de movimento sendo que também podemos distinguir os robôs pela sua capacidade de processamento, sendo assim poderíamos classificar os robôs como:

Robô “inteligente” pode se mover de forma autônoma e segura por um ambiente não preparado e atingir um objetivo ou efetivar uma tarefa.

Robô não “inteligente” deve repetir de forma confiável a mesma tarefa para que foi programado, porém sem enfrentar variações no ambiente ou situações. Nesse caso, a definição fica mais próxima de automação e pode distinguir entre um robô e uma máquina de lavar.

Page 88: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

De uma forma geral temos os seguintes tipos de robôs:

• Manipuladores ou braços robóticos;

• Robôs móveis com rodas;

• Robôs móveis com pernas;

• Humanóides

Page 89: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Manipuladores ou braço robótico• Atualmente, a maior aplicação de

robôs é na área industrial, principalmente na produção de bens de consumo.

• Nessa área, o tipo mais popularmente conhecido de robô é o braço robótico:

Page 90: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Robô cartesiano ou gantry

Page 91: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Robôs móveis com rodas

Page 92: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Robôs móveis com pernas• Hexapod: robô baseado em insetos

Page 93: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Robôs humanóides

• Entre os robôs humanóides, o mais conhecido é o da Honda

Page 94: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Exemplos de robôs com papelão e PCI

Page 95: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Madeira

Compensado / MDF: talvez o material mais fácil de trabalhar e muito acessível. É isolante, o que diminui a preocupação com a montagem. Pode ser colada e furada com facilidade. O inconveniente é a sua relação peso / resistência.

Duratex: muito fácil de ser trabalhado, pode ser usado em alguns casos, porém, é muito flexível para ser usado como chassi de robôs maiores.

Page 96: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Exemplos de robôs com madeira

Page 97: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Exemplos de robôs com plástico

Page 98: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Como controlar dois motores?

• Utilizando um circuito integrado auxiliar podemos controlar 2 motores

• O circuito proposto permite o controle de dois motores• O circuito permite a inversão de polaridade, que no caso de

motor DC, nos permite avançar e retroceder• A solução pode ser feita com transistores em ponte H• Podemos usar um circuito de ponte H pronto

Page 99: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Visão do circuito integrado

Page 100: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Conexão motores

Page 101: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Definindo portas

#define MOTOR1_P 12#define MOTOR1_N 11#define MOTOR1_PWM 5#define MOTOR2_P 8#define MOTOR2_N 7#define MOTOR2_PWM 6

Page 102: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Comando para avançar ou retroceder

void andarFrente(int tempo, int intensidade) { sentido = 0; analogWrite(MOTOR1_PWM,intensidade*50); analogWrite(MOTOR2_PWM,intensidade*50); digitalWrite(MOTOR1_P,sentido); digitalWrite(MOTOR1_N,!sentido); digitalWrite(MOTOR2_P,sentido); digitalWrite(MOTOR2_N,!sentido); delay(tempo);}

Page 103: Arduino Hack Day Evento promovido por entusiastas, universidades e empresas Colaborativo e participativo Informações técnicas e troca de experiências

Vamos praticar?

• DOJO?• Ponte H?• 3-shield?