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.
bonjour je suis intéréssé par votre temporisation , mais je n'ai pas la référence des composants.
RépondreSupprimerJe vous donne mon adresse mail pour me répondre Merci d'avance.
( robin.claudio@orange.fr )
tu me peux aider
RépondreSupprimerbonjour 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