Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLuan Sampaio Alterado mais de 10 anos atrás
2
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!
3
Sobre este Arduino Hack Day…
Javaneiros Edition Organizado pelo Jeff - empresa Jera Agradecimentos ao apoio da faculdade e prof. Bob
4
Agenda Padrão Introdução a Arduino Controlando tomadas pela Internet
Controle de motores com Arduino Introdução a robótica
5
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
6
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;
7
Simplicidade no circuito:
8
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
9
Vários tipos, vários fabricantes...
Mega Lilypad Nano Uno Pro Arduino BT Freeduino Severino Program-ME
10
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 ciclos na Flash e 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
11
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
12
Resumo das conexões da placa
13
FT232RL Conversor USB-Serial Conector USB Regular 7085: Recebe até 12 volts e regula para 5 volts Alimentação externa: Até 12 volts
14
Botão de reset ICSP Para gravar bootloader ou programas/firmware AtMega328 /168/8
15
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
16
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
17
Shields: arquitetura modular inteligente
Arduino estabeleceu um padrão de pinagem que é respeitado por diversas placas shield:
18
Por dentro do MCU
19
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
20
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
21
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;
22
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...
23
Ping – Sensor de distância ultrasonico
24
Bússula Bússola
25
Shield LCD Touch screen
26
SIM Reader SIM Reader
27
Wave Shield
28
XBee
29
Lojas de componentes www.parallax.com www.sparkfun.com
30
Programando para Arduino
IDE pode ser baixada de 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!)
31
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
32
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
33
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.
34
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
35
LDR no Arduino sem protoboard
36
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);
37
DEMO Apresentação básica do Arduino IDE: Compilação; Samples; Upload;
Dicas
38
Program-ME: Arduino turbinado nacional
39
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!
40
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
41
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
42
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
43
Selecionando alimentação
Jumper Seleção Externo ou USB
44
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
45
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
46
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);
47
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.
48
Lab 4: hummm... Ligue e desligue a porta 12 com diferentes intervalos de tempo...
49
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
50
Tomadas com Arduino
51
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!
52
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
53
Como funciona um Relé
55
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
56
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
57
Placa
58
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ê
60
Conectando seu Program-Me na placa Tomad@
61
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
62
void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); } void loop() { digitalWrite(3, LOW); digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); digitalWrite(3, HIGH);
63
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 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.
64
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
65
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);
66
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); ...
67
outputStream = serialPort.getOutputStream();
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); serialPort.notifyOnOutputEmpty(true); outputStream.write(bytes); serialPort.close();
68
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
69
Motores com Arduino
70
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)
71
Motor DC (com redução) 71
72
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
73
Motor DC com Arduino em Protoboard
74
Motor DC no Program-ME Podemos usar o transistor Q3 (porta digital PWM 6) Ligamos o + no 12v e o – no borne do transistor
75
Motor DC no Program-ME
76
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--) {
77
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!!
78
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
79
No Program-ME temos duas entradas
80
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.
81
Program-ME & Servo
82
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);
83
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
84
Robótica com Arduino
85
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
86
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
87
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
88
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
89
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
90
Robô cartesiano ou gantry
90
91
Robôs móveis com rodas 91
92
Robôs móveis com pernas
Hexapod: robô baseado em insetos 92
93
Robôs humanóides Entre os robôs humanóides, o mais conhecido é o da Honda 93
94
Exemplos de robôs com papelão e PCI
94
95
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
96
Exemplos de robôs com madeira
96
97
Exemplos de robôs com plástico
97
98
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
99
Visão do circuito integrado
100
Conexão motores
101
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
102
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); }
103
Vamos praticar? DOJO? Ponte H? 3-shield?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.