Minicurso - Arduino Startup Garagem Prof. da Faculdade de Engenharia/PUCRS Anderson Royes Terroso terroso@pucrs.br Eng. Eletricista/Eletrônico Mestre em Eng. Elétrica Atualmente Coordenador Acadêmico da FENG
Arduino Arduino é uma plataforma de prototipagem eletrônica de hardware livre, projetada com um microcontrolador Atmel AVR de placa única, com suporte de entrada/saída embutido, uma linguagem de programação padrão, na qual tem origem em Wiring, e é essencialmente C/C++. Fonte: wikipedia
Origem do projeto Arduino O projeto teve seu início no Interaction Design Institute localizado na cidade de Ivrea, Itália, em 2005. Objetivo era ter um sistema microcontrolado de baixo custo. O nome Arduino era o nome do bar onde essa turma de professores se reunia.
Bar Arduino
Quem fez o que no projeto?? David Cuartielles desenhou a placa! David Mellis (aluno de Massimo), programou o software para executar na placa. Massimo contratou um engenheiro local, Gianluca Martino, que também trabalhou no Design Institute ajudando alunos com seus projetos. Gianluca concordou em produzir uma tiragem inicial de duzentas placas. Igoe foi um dos primeiros a adotar a plataforma em New York.
Microcontrolador AVR AVR é um microcontrolador RISC de chip único com uma arquitetura Harvard modificada de 8-bit (µc), desenvolvido pela Atmel em 1996. Fonte: wikipedia
Família Arduino
Especificação dos principais kits
Clones do Arduino Freeduino Illuminato Metaboard Seeeduino ejackino Wiseduino Brasuíno... Boarduino Sanguino Stickduino... iduino LEDuino Roboduino Fonte: wikipedia
Arduino foi desenvolvido com o propósito de encaixar uma placa na outra (shields)
Ambiente de programação do Arduino
Estrutura do programa para o Arduino void setup() // configurações em geral { pinmode(led, OUTPUT); } void loop() // função principal - main { digitalwrite(led, HIGH); delay(1000); digitalwrite(led, LOW); delay(1000); }
Arduino MEGA2560
Alguns exemplos de shields e o programa equivalente
Liga LED RGB #define vermelho 5 #define verde 6 #define azul 7 void setup() { pinmode(vermelho, OUTPUT); pinmode(verde, OUTPUT); pinmode(azul, OUTPUT); } void loop() { digitalwrite(vermelho, random(0,2)); digitalwrite(verde, random(0,2)); digitalwrite(azul, random(0,2)); delay(250); }
Esse programa lê o valor do conversor AD e envia via serial (0...1023) int LeituraAD0; void setup() { Serial.begin(19200); } void loop() { LeituraAD0 = analogread(0); Serial.println(LeituraAD0); delay(500); }
HC-SR04 Sensor de Proximidade
Sinais do HC-SR04
A velocidade do som no ar muda conforme a temperatura. 15 C a velocidade é de 340m/s 20 C a velocidade é de 343m/s 25 C a velocidade é de 346m/s Velocidade do som no ar em cm: 34300 cm/s Portanto, o tempo que o som leva para percorrer 1cm em µs pode ser calculado da seguinte forma: 1s = 1000000µs 34300 cm 1000000 µs 1 cm X µs X = 29.15 µs
Logo, para percorrer 1cm o som leva 29.41µs. Tempo de ida e volta. Portanto para saber a distância do ultrassom até o anteparo precisa dividir esse tempo por 2. A função do arduino pulsein determina o tempo que um sinal permanece em HIGH ou LOW. tempo = pulsein(echo, HIGH) Neste caso quando o sinal no pino echo for para HIGH, a função começa a contar tempo (em µs). Quando o sinal do pino retornar a zero (LOW), tem-se o tempo da janela do pulso.
Programa determinar distância de objetos int trigger = 9; int echo = 8; float tempo; float distancia_cm; void setup() { Serial.begin(19200); pinmode(trigger,output); digitalwrite(trigger,low); pinmode(echo,input); } void loop() { digitalwrite(trigger, HIGH); delaymicroseconds(10); digitalwrite(trigger, LOW); // pino TRIG do sensor ultrassônico // pino ECHO do sensor ultrassônico // para armazenar o tempo de ida e volta do sinal em microsegundos // para armazenar a distância em centímetros // inicializa a serial para 19200bps // configura o pino trigger como saída (OUTPUT) pulso de start. // inicializa esse pino com valor 0 (LOW) // configura o pino echo como entrada (janela de tempo). // sobe o sinal de trigger - conforme mostrado no slide Sinais do HC-SR04 // aguarda 10us - conforme mostrado no slide Sinais do HC-SR04 // desce o sinal de trigger - conforme mostrado no slide Sinais do HC-SR04 tempo = pulsein(echo, HIGH); // função pulsein retorna o tempo que o sinal echo (pino) fica em alto janela. distancia_cm = (tempo/29.15)/2; Serial.println(distancia_cm); delaymicroseconds(200); } // cálculo da distância em cm constante 29.15 e o 2 explicado no slide anterior // escreve na serial o valor da distância em cm. // aguarda 200us para nova leitura.
DHT22 Sensor de Temperatura e Umidade
Programa para ler temperatura/umidade #include "DHT.h // adicionar a biblioteca DHT.h -> disponível no moodle #define DHTPIN 2 // pino 2 como entrada de DADOS #define DHTTYPE DHT22 DHT dht(dhtpin, DHTTYPE); // instanciação do componente DHT // passagem dos parâmetros pino do DADO e o tipo DHT22 void setup() { Serial.begin(19200); dht.begin(); } // função para inicializar a comunicação serial a 19200bps // função para inicializar o sensor de temp/umidade DHT22 void loop() { delay(2000); float t = dht.readtemperature(); Serial.println(t); float h = dht.readhumidity(); Serial.println(h); } // intervalo entre cada leitura // dht.readtemperature() é a função para ler temp. // escreve o valor da temperatura na serial // dht.readhumidity() é a função para ler umidade. // escreve o valor da umidade na serial
Sensor de Corrente ACS712 Tensão de alimentação = 5V Tensão de saída varia com o chip. +/- 30A...resolução 66mV/A +/- 20A...resolução 100mV/A +/- 5A...resolução 185mV/A Como o conversor A/D do ATMEGA2560 é 10 bits e a tensão de referência é de 5V, temos o seguinte problema: Resolução_mínima = 5V/1024 = 4,88mV Portanto, para correntes menores que 26,378mA o conversor A/D não consegue ler! 185mV 1A 4,88mV xa x = 26,378mA
Esse programa lê o valor do conversor AD e envia via serial o valor da tensão e corrente float ValorTensao, ValorCorrente; int LeituraAD0; void setup() { Serial.begin(19200); } void loop() { LeituraAD0 = analogread(0); ValorTensao = (LeituraAD0 / 1024.0) * 5000; // Valor em mv.:. Vref = 5V ValorCorrente = ((ValorTensao-2500) / 100); // 100mV/A; 2500 simetria +/- } Serial.println(ValorTensao); Serial.println(ValorCorrente); delay(500);
Bluetooth O HC-05 é um módulo bluetooth que pode funcionar tanto como MASTER ou SLAVE. Já o HC-06 está restrito apenas a operar como SLAVE. AT.:. Comando para ver se o dispositivo está vivo AT+BAUDx.:. configura baudrate Ex.: AT+BAUD4 configura baudrate para 9600 Ex.: AT+BAUD5 Configura baudrate para 19200 resposta: OK resposta: OK9600 resposta: OK19200 AT+NAMEabcd.:. Após AT+NAME coloca-se o nome do dispositivo (o nome vem colado a palavra NAME). EX.: AT+NAMEGrupo7 resposta: OKsetname AT+PINxyzw.:. configura a senha para pareamento EX.: AT+PIN1234 resposta: OKsetPIN
Conexões: BLT => MEGA2560 VCC => 5V GND => GND RX => TX2 TX => RX2
Leitura de 2 canais A/D e envio via bluetooth
ESP8266 O ESP8266 é um módulo que suporta as redes 802.11 bgn, podendo ser usado como um ponto de acesso (AP Access Point) ou como uma estação (Station), enviando e recebendo dados.
Obrigado!!!! Qualquer informação adicional estou a disposição pelo e-mail terroso@pucrs.br