samedi 8 février 2014

Temporisation LCD de 1s a 99mn 99s

Vous trouverez ici une temporisation LCD réglable par boutons.

Le schéma

Très simple comme la plus part des montages a base de arduino.
L'afficheur est un LCD 1x16 ligne.


Quoi de plus simple!!!! A la fin de la temporisation, le buzzer vibrera pendant 2 secondes.

Le code

/* Temporisation by Jojo Bricolo*/

#include <LiquidCrystal.h>

int Bpdepart = 7; //Bouton start
int Bpplus = 8; //Bouon +
int Bpmoins = 9; //Bouton -
int Relai = 10; //Base du transistor
int buzzer = 11; //buzzer

int upRead1 = 0; //variable Bouton +
int upRead2 = 0; //Variable vitesse bouton +
int downRead1 = 0; //variable Bouton -
int downRead2 = 0; //Variable vitesse bouton -
int startRead1 = 0; //variable Bouton start
int startRead2 = 0;

int timerCount = 0; //variable comptage
int minutesCount = 0; //variable minutes
int secondsCount = 0; //Variable secondes


LiquidCrystal lcd(5, 6, 4, 3, 2, 1); // E, RS, D4, D5, D6, D7


void setup() {
lcd.print("Tempo");
delay(1000);
lcd.clear();
lcd.print("Appui BP");
pinMode(Relai, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(Bpdepart, INPUT);
pinMode(Bpplus, INPUT);
pinMode(Bpmoins, INPUT);
Serial.begin(9600); //open serial port
}


void lcdWrite()
{
   lcd.setCursor(0, 0);
   lcd.print(minutesCount); //Affichage de la valeur des minutes
   lcd.setCursor(3, 0);
   lcd.print("min");
   lcd.setCursor(0, 1);
   lcd.print(secondsCount); //Affichage de la valeur des minutes
   lcd.setCursor(3,1);
   lcd.print("sec");
}


void loop() {

  //Gestion des boutons
  upRead1 = digitalRead(Bpplus);
  downRead1 = digitalRead(Bpmoins);
  startRead1 = digitalRead(Bpdepart);

 
  delay(40);
  upRead2 = digitalRead(Bpplus);
  downRead2 = digitalRead(Bpmoins);
  startRead2 = digitalRead(Bpdepart);


  delay(100);

 
  if(upRead1==upRead2 && upRead1==HIGH)
  {
   lcd.clear();
   secondsCount = secondsCount+5; //Valeur d'incrémentation, ici de 5 en 5 secondes peut être modifié suivant les besoins
   if(secondsCount==60)
   {
    minutesCount++;
    secondsCount=0;
   }
   lcdWrite();
  }

 
    if(downRead1==downRead2 && downRead1==HIGH)
  {
   lcd.clear(); //clear lcd
   secondsCount = secondsCount-5; // Valeur d'incrémentation, ici de 5 en 5 secondes peut être modifié suivant les besoins
   if(minutesCount>0)
   {
    if(secondsCount==-5)
   {
    secondsCount=55;
    minutesCount--;
   }
   else
   {
    if(secondsCount<0)
   {
    secondsCount = 0;
    minutesCount = 0;
   }
   }
   }
   lcdWrite();

   if(secondsCount<0)
   {
     secondsCount=0;
     lcd.clear();
     lcd.print("0");
   }
  }

  if(startRead1==startRead2 && startRead1==HIGH)
  {

    timerCount = (minutesCount*60) + secondsCount;
    int timerCount2 = timerCount;
    Serial.println(timerCount);
    for(int i=timerCount;i>0;i--)
    {
       lcd.clear();

       if(timerCount2>60)
       {
         minutesCount = timerCount2/60;
         secondsCount = timerCount2%60;
       }
       else if(secondsCount==60)
       {
          secondsCount=59;
       }
       else
       {
        minutesCount = 0;
        secondsCount = timerCount2;
       }


   lcdWrite();

       digitalWrite(Relai, HIGH);
       delay(1000);
       timerCount2--;
    }

   lcd.clear();
   lcd.print("Fin");

     digitalWrite(Relai, LOW);

   //turn on piezo buzzer
   analogWrite(buzzer, 255);
   delay(3000);

     analogWrite(buzzer, 0);
   delay(2000);
   lcd.clear();
   lcd.print("Tempo");
   delay(3000);
   lcd.clear();
   lcd.print("BY JOJO"); // vous pouvez ici mettre votre nom

 
   timerCount = 0;
   minutesCount = 0;
   secondsCount = 0;
  }

}


Si cela vous intéresse, je suis en mesure de vous faire un kit ou même vous réaliser ce montage !!!
N'hésitez pas a me contacter.

3 commentaires:

  1. bonjour je suis intéréssé par votre temporisation , mais je n'ai pas la référence des composants.
    Je vous donne mon adresse mail pour me répondre Merci d'avance.
    ( robin.claudio@orange.fr )

    RépondreSupprimer
  2. bonjour je cherche depuis un long moment le moyen de fabriquer ce genre de montage pour un projet d'exposition. J'ai besoin de creer un contact (par le relai j'imagine) d'un dixième de seconde environ toutes les 5mn de manière continue pendant toute une journée. Il faut que ce montage puisse fonctionner de maniere independante (sans ordinateur) et donc qu'il puisse fonctionner directement quand on alimente le montage sans manipulation spéciale pour que les responsables du lieu d'expo aient juste à débrancher en fin de journée et brancher le matin... Pensez vous pouvoir m'aider ? Merci

    RépondreSupprimer