arduino hack day corumbá
DESCRIPTION
Oficina de introdução ao Arduino realizada no SENAC de Corumbá, pelo evento III Escola Regional de Informática do MS (ERI MS). Uma oficina pratica sobre a utilização do Hardware Arduino.TRANSCRIPT
Sobre este Minicurso • Viabilizado pela Organização do ERI MS;• Apoiado pelo grupo ArduinoMS;• Agradecimentos especiais ao do SENAC e UCDB.
Sobre o Ministrante:• Samuel Cavalcante• Engenheiro de Computação (UNIDERP)- CREA-MS: 12873D• Pós Graduado em Eng. De Sistemas (ESAB)• Analista em Educação profissional no SENAC/MS• Professor UNIDERP e UNAES II• Pai, Esposo, Professor, Empresário, Consultor, participante
de comunidades, conselheiro entre outros.
Arduino MS
O que veremos
• Introdução ao Arduino• Código Pisca LED• Configurando a IDE para transferir o Código• Acionamento de LED com Botão• Pisca Led com Sensor LDR• Sensor de Temperatura
Obs.: Ao decorrer da oficina serão tratados assuntos sobre eletrônica e eletricidade básica.
Arduino MS
Introdução ao Arduino
• Plataforma baseada em Atmel da AVR (ATMega168; ATMega 328);
• 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
Arduino MS
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;
Arduino MS
Muitas aplicações práticas
• Robôs• Roupas eletrônicas• Máquinas de corte e modelagem 3D de baixo custo;• Desenvolvimento de celulares customizados• Instrumentos musicais• Paredes interativas• Instrumentação humana
Arduino MS
Vários tipos, vários fabricantes...
• Mega• Lilypad• Nano• Uno• Pro• Arduino BT• Freeduino• Severino• Program-ME
Arduino MS
Atmega168 / Atmega328: coração
• Características do ATmega 168:• RISC –Reduced Instruction Set Computer• 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
Arduino MS
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
Arduino MS
Conector USB
Alimentação externa:Até 12 volts
Regular 7085:Recebe até 12 volts e regula para 5 volts
FT232RLConversor USB-Serial
Arduino MS
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
Arduino MS
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
Portas analógicas 4 e 5São as portas utilizadas para conexões via I2C / TWI.
Arduino MS
Shields: arquitetura modular inteligente
• Arduino estabeleceu um padrão de pinagem que é respeitado por diversas placas shield:
Arduino MS
Porta Digital Vs. Analógica• Digital: trabalha com lógica binária, 0 e 1.
– No 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• 00000000012 = 110 = 0,005v
• 00000000102 = 210 = 0,010v
• 00000000112 = 210 = 0,015v
• 10000000002 = 51210 = 2,50v
• ....
Arduino MS
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– Neste caso o dispositivo recebe um valor analógico de 0v à 5v,
que será convertido em um número binário de 10 bits. Cada bits somado ao circuito equivale a 0,005v.
• Portas digitais permitem que dados sejam transferidos em sequencia através de uma lógica ou protocolo binário– Portas digitais não conseguem comandar potência
Arduino MS
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;
Arduino MS
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...
Arduino MS
Lojas de componentes• www.parallax.com• www.sparkfun.com• www.makershed.com• www.liquidware.com• www.ladyada.net• www.adafruit.com• www.rlrobotics.ind.br/ - BRASIL• www.empretecnet.com.br/do/Home - BRASIL
Arduino MS
Programando para Arduino
• IDE pode ser baixada de www.arduino.cc• A IDE foi desenvolvida com Java, portanto precisaremos de
um máquina virtual 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!)
Arduino MS
Partes básicas do programa Arduino
• Temos que obrigatoriamente programar dois métodos:
void setup() {}void loop() {}
• O setup é executado uma só vez assim que a placa for ligada e o loop terá o código de execução infinita
Arduino MS
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
Arduino MS
Protoboard ou Matriz de contato
É um dispositivo usado para construir circuitos sem a necessidade de solda. Na parte central de todos os pinos alinhados sob um número estiver conectado, enquanto os nas bordas superior e inferior - normalmente marcado com linhas pretas e vermelhas - são conectados na horizontal.
Arduino MS
Primeiro contato com Arduino
• Ligar sua placa no cabo USB e no PC• Realizar a instalação do Driver com a ajuda do facilitador• Verificar o jumper de alimentação configurando para USB
se necessário• Digitar o código, a ser passado, no Arduino IDE• Selecionar no software a versão do Arduino e a porta serial
de comunicação.• Clicar no botão de transferência de sketch
Arduino MS
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.
Arduino MS
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);}
Arduino MS
Entrada Digital: Fazendo leitura de um botão
• Os pinos do Arduino são extremamente sensíveis, permitindo a leitura de ruído elétrico do ambiente. O próximo teste utilizaremos o pino 7 como leitura de dados externos, como é uma porta digital será lido HIGH ou LOW (1 ou 0). Essa leitura é realizada pelo comando digitalRead(port).
• Conecte três fios à placa Arduino. O primeiro de uma perna do botão através de um resistor de pull-up (aqui 10K Ω) para o fornecimento de 5 volts. A segunda vai da perna correspondente do botão ao GND. O terceiro se conecta a um pino digital I/O (pino 7) que lê o estado do botão.
Arduino MS
Código Aciona LED com botão
int val = 0; // variável para ler o status do pino void setup() { pinMode(13, OUTPUT); // declare LED como output pinMode(7, INPUT); // declare pushbutton como input }void loop(){ val = digitalRead(7); // ler a entrada de valor if (val == HIGH) {// verificar se a entrada é alta digitalWrite(13, LOW); // LED OFF } else { digitalWrite(13, HIGH); // LED ON } }
Arduino MS
Tempo entre acende e apaga LED usando sensor LDR
• Use o mesmo circuito como antes, mudando o botão com o sensor de luz e trocando a ligação do pino digital 7 para o pino analógico 2.
• A função permite enviar um valor numérico para o computador. Variando números digitais no intervalo de 0-1024 (resolução de 1 Bit).
• Nesta função usamos a comunicação serial, com isso abra o monitor serial para ler dados do sensor. – Após o código ser copiado no Arduino.
Arduino MS
Código
int val = 0; // variável para armazenar o valor vindo do sensor void setup() { pinMode(13, OUTPUT); // declara o ledPin como uma saída Serial.begin(9600); // usar a porta serial para comunicação } void loop() { val = analogRead(2); // lê o valor do sensor Serial.println(val); // imprime o valor para a porta serial digitalWrite(13, HIGH); // ligar o LED delay(val); // parar o programa por algum tempo digitalWrite(13, LOW); // desligar o LED delay(val); // tempo antes do proximo ciclo }
Arduino MS
Vetor de LEDs
• Monte na matriz de contato 5 leds, cada perna maior do LED (VCC) será ligada a uma perna do resistor, a outra perna do resistor será ligada em cada um dos seguinte pinos Digital, 12, 11, 10, 9 e 8. A perna menor dos LEDs, no GND (0v).
• A atividade é fazer esses LEDs acenderem em sequencia, acendendo um LED de cada vez, com intervalos de 50 milisegundos por led, após todos acessos aguardar 1000 milisegundos e começar a apagar os leds, com o mesmo intervalor de tempo.
Vetor de LEDs Código
int i;void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); }void loop() { for(i=13;i>=8;i--){ digitalWrite(i, HIGH);
delay(50); } delay(1000); for(i=8;i<=13;i++){ digitalWrite(i, LOW); delay(50); } delay(1000);}
Vetor de LEDs com potenciômetroint i, port, potenc;float tensao=0;void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); Serial.begin(9600);}void loop() { potenc=analogRead(2); port=13; for(i=1;i<=5;i++){ if(potenc>((i*2-1)*100)){ digitalWrite(port, HIGH);
}else{ digitalWrite(port, LOW); } port--; } Serial.print("Valor decimal = "); Serial.print(potenc); tensao=potenc*0.004883; Serial.print(" - Tensao = "); Serial.print(tensao); Serial.println(" V"); delay(500);}
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
Arduino MS