Botão
O botão é ligado a uma entrada digital (P3) do Franzinho, a outra ponta é ligada ao terra. Ativando o "pull-up" interno, a entrada digital será lida em nível alto quando o botão estiver solto e nível baixo quando o botão estiver apertado.
Relê
Vamos usar apenas um dos relês do módulo, conectanto P0 do Franzininho ao IN1 do módulo. O jumper de JD-VCC deve ficar na posição normal (conectando JD-VCC a VCC). O VCC do módulo é ligado ao VCC do Franzininho e o GND do modulo ao GND do Franzininho.
Potenciômetro
Usei um potenciômetro linear de 10K, pode ser usado outro valor ente 1K e 100K. Os extremos do potenciômetro são ligados a VCC e GND. O contato central é ligado à entrada A1 do Franzininho.
Montagem
Juntando em uma figura as instruções acima:
Código
O código é bastante simples. O loop consiste em:
- Esperar o botão ser apertado (entrada digital 3 ficar com nível baixo)
- Ler a entrada analógica A1. O valor lido estará entre 0 e 1023, dependendo da posição do potenciômetro
- Esperar o botão ser solto (entrada digital 3 ficar com nível alto)
- Acionar o rele (nível baixo na saída digital P0)
- Aguardar um tempo proporcional à leitura do potenciômetro. No me código aguardo 10*60*leitura milisegundos+1000. Em extremo (leitura = 0) o tempo será 1 segundo; no outrol (leitura = 1023), o tempo será aproximadamente 10 minutos.
- Desligar o rele (nível alto na saída digital P0).
/* * Temporizador * DQ - 18/02/18 */ // Pinos utilizados const int pinTecla = 3; const int pinRele = 0; const int pinPot = A1; void setup() { // Iniciação do relê // Nível alto no pino = relê desligado pinMode (pinRele, OUTPUT); digitalWrite(pinRele, HIGH); // Iniciação do botão pinMode (pinTecla, INPUT_PULLUP); // Iniciação do potenciômetro analogReference(DEFAULT); } void loop() { // Espera apertar o botão while (digitalRead(pinTecla) == HIGH) { delay(10); } // Lê o potenciômetro int pot = analogRead(pinPot); // Espera soltar o botão while (digitalRead(pinTecla) == LOW) { delay(10); } // Aciona o relê por um tempo proporcional à leitura long tempo = 10L*60L*pot + 1000L; digitalWrite(pinRele, LOW); delay (tempo); digitalWrite(pinRele, HIGH); }
Vídeo
O vídeo abaixo mostra a montagem funcionando.
Nenhum comentário:
Postar um comentário