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).
/*
 * 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: