quinta-feira, março 01, 2018

Franzininho: Temporizador

Vamos usar o módulo de relê que vimos recentemente para fazer um temporizador simples com o Franzininho. Um potenciômetro é usado para selecionar o tempo de acionamento, que é disparado por um botão.


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).
  1. /* 
  2.  * Temporizador 
  3.  * DQ - 18/02/18 
  4.  */  
  5.   
  6.  // Pinos utilizados  
  7. const int pinTecla = 3;  
  8. const int pinRele = 0;  
  9. const int pinPot = A1;  
  10.   
  11. void setup() {  
  12.   // Iniciação do relê  
  13.   // Nível alto no pino = relê desligado  
  14.   pinMode (pinRele, OUTPUT);  
  15.   digitalWrite(pinRele, HIGH);  
  16.   
  17.   // Iniciação do botão  
  18.   pinMode (pinTecla, INPUT_PULLUP);  
  19.   
  20.   // Iniciação do potenciômetro  
  21.   analogReference(DEFAULT);  
  22. }  
  23.   
  24. void loop() {  
  25.   
  26.   // Espera apertar o botão  
  27.   while (digitalRead(pinTecla) == HIGH) {  
  28.     delay(10);  
  29.   }  
  30.   
  31.   // Lê o potenciômetro  
  32.   int pot = analogRead(pinPot);  
  33.   
  34.   // Espera soltar o botão  
  35.   while (digitalRead(pinTecla) == LOW) {  
  36.     delay(10);  
  37.   }  
  38.   
  39.   // Aciona o relê por um tempo proporcional à leitura  
  40.   long tempo = 10L*60L*pot + 1000L;   
  41.   digitalWrite(pinRele, LOW);  
  42.   delay (tempo);    
  43.   digitalWrite(pinRele, HIGH);  
  44. }  

Vídeo

 O vídeo abaixo mostra a montagem funcionando.




Nenhum comentário: