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

Slides:



Advertisements
Apresentações semelhantes
Componentes de Um Computador
Advertisements

Aula 5 – Anatomia da Placa-Mãe
Tecnologia de Comando Numérico
Unidades de disco Capítulo 5
Sensor de Carga de Bateria de Automóvel utilizando o CI “LM3914”
INTRODUÇÃO À LÓGICA DIGITAL
Kit Alfa Marcello Cláudio de Gouvêa Duarte.
Barramentos Introdução.
Técnicas para operações E/S
Meu primeiro programa em ARDUINO
professor Victory Fernandes
VISÃO GERAL Profa. Fernanda Denardin Walker
Prof. Msc. Jeferson José Gomes UTFPR-PG - COELE
Prof. Fagner Marques Robótica Prof. Fagner Marques.
Maria Aparecida Castro Livi
Maria Aparecida Castro Livi
Bruno Souza de Oliveira e Rodrigo Nardi
Sistemas Operacionais
Professor: Carlos Roberto da Silva Filho, M. Eng.
Sistemas Digitais Microprocessados
Gabriela Werner Gabriel
Professor Victor Sotero
Professor Victor Sotero
Professor Victor Sotero
ROB 553.
Interfaces de entrada e saída discreta
Curso Técnico de Informática Disciplina: Hardware
Professor Robson Campos
Arquitetura de Computadores
HARDWARE do CLP Os controladores lógicos programáveis são equipamentos com uma aplicação muito vasta dentro dos diversos processos de automação. Desta.
Revisão de Conceitos Básicos Hardware (Parte 1)
Sistemas Operacionais
Professor Felipe Monteiro Lima
Discos SCSI Fonte de alimentação Controlador SCSI Disco SAS
Aula 3 – Usando o multímetro digital
Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP PIC16F877A - Parte III Jadsonlee da Silva Sá
Sistemas Operacionais
Oficina de Sistemas Embarcados Apresentação do LAB.
Sistemas de Controle Processo Controle Medição Atuação prof. d'Avila.
Introdução aos Sistemas Microcontrolados
Iniciação ao Arduino uno
1 Open Hardware & Arduino Jeronimo Avelar Filho
Fundamentos de Informatica
Fonte de Alimentação Curso Técnico em Informática
Capítulo 5 Entrada/Saída 5.1 Princípios do hardware de E/S
Introdução à INFORMÁTICA
PIC Peripheral Interface Controller
Montagem e Manutenção de Computador I Curso Técnico em Rede de Computadores Aula 05.
Sistemas Operacionais
Programação de PIC em C Exposição das funções básicas para
e suas funcionalidades
Microcontroladores PIC
Escolha da Placa. Porta Serial / COM Port Partes do Código.
Entrada e Saída (E/S).
Workshop de automação de mini helicópteros
Microprocesadores x Microcontroladores
Protocolo MODBUS [ Slide de Abertura com a presença de outras logomarcas ] A segunda opção é a mais apropriada para a presença de mais de duas marcas.
WIKIPÉDIA. Relé - Wikipédia, a enciclopédia livre. Disponível em:. Acesso em: 03 fev LINAK. O que é um atuador linear? Segurança, Silêncio e Movimento.
Por Cássio Mello e André Luis.  É a parte inteligente do circuito, onde sinais de controle serão recebidos e enviados e o processamento será efetuado.
ECA-703 AUTOMAÇÃO DE SISTEMAS ELÉTRICOS
CONCURSO LEVE SEU ROBO PARA A CAMPUS PARTY Coordenador da Equipe: Francisco Roberto N. Lima Fone: (81)
Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED
O controle de comandos via Twitter
Aula 04: Aprendendo sobre o PWM do arduíno e Ponte H
Prof. Gustavo Fernandes de Lima
Aula 05: Sensores do robô e Bibliotecas. Aula 05: Sensores do robô  O que vamos aprender? 1.Funcionamento e aplicações dos sensores 2.Utilidade das Bibliotecas.
Prof. Me. Gustavo Fernandes de Lima
Projeto Física Experimental II Por: Diego M. Pinho, Eduardo Damasceno, Hugo Hennies, Rafael M. Lopes.
Clique para editar o título Arduino seu primeiro microcontrolador PMR
Clique para editar o título Sensores PMR
Transcrição da apresentação:

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… Javaneiros Edition Organizado pelo Jeff - empresa Jera Agradecimentos ao apoio da faculdade e prof. Bob

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

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 Referência analógica Padrão 5 volts Portas digitais 0 a 13 0 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 GND

Portas analógicas 4 e 5 São as portas utilizadas para conexões via I2C / TWI. Portas analógicas de 0 a 5 Podem funcionar como digitais de 14 a 19 GND Reset 5 volts VIN Alimentação de entrada sem regulagem 3.3 volts

Shields: arquitetura modular inteligente Arduino estabeleceu um padrão de pinagem que é respeitado por diversas placas shield:

Por dentro do MCU

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

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

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;

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

Ping – Sensor de distância ultrasonico

Bússula Bússola

Shield LCD Touch screen

SIM Reader SIM Reader

Wave Shield

XBee

Lojas de componentes www.parallax.com www.sparkfun.com www.makershed.com www.liquidware.com www.ladyada.net www.adafruit.com

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” 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 “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

LDR no Arduino sem 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);

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

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

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

Mapa de portas Vs. componentes Código Porta Componente Q2 Digital 7 Led Q3 Digital 6 Q4 Digital 18 Q5 Digital 17 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

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

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

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.

Lab 4: hummm... Ligue e desligue a porta 12 com diferentes intervalos de tempo...

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

Tomadas com Arduino

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!

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

Como funciona um Relé

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

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

Placa Tomad@

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@

Ligando a placa na tomada 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);

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

response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { byte[] dados = new byte[1]; dados[0] = Byte.parseByte(request.getParameter("rele")); 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? 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

Motores com Arduino

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)

Motor DC (com redução) 71

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

Motor DC com Arduino em Protoboard

Motor DC no Program-ME Podemos usar o transistor Q3 (porta digital PWM 6) Ligamos o + no 12v e o – no borne do transistor

Motor DC no Program-ME

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

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

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

No Program-ME temos duas entradas

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.

Program-ME & Servo

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

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

Robótica com Arduino

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. 85

Sentidos - > Sensores Pensamentos - > Processamento 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. 86

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. 87

Manipuladores ou braços robóticos; Robôs móveis com rodas; 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 88

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: 89

Robô cartesiano ou gantry 90

Robôs móveis com rodas 91

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

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

Exemplos de robôs com papelão e PCI 94

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. 95

Exemplos de robôs com madeira 96

Exemplos de robôs com plástico 97

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

Visão do circuito integrado

Conexão motores

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

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

Vamos praticar? DOJO? Ponte H? 3-shield?