Une minuterie Arduino

Accueil/Une minuterie Arduino
Une minuterie Arduino 2016-12-20T11:38:32+00:00

Project Description

Aujourd’hui nous allons faire un petit système qui peut être assez intéressant. Le système est tout simple, nous allons faire un minuteur (pas vraiment en fait puisque l’on va faire les secondes, les minutes et les heures. Ce minuteur va nous permettre d’allumer un relais, une led, un buzzer n’importe quoi au bout d’un certain temps.

Le matériel

Pour réaliser ce tutoriel, vous aurez besoin de tout cela :

  • Une Arduino
  • Un shield Grove, pour simplifier les connexions
  • Un relais Grove, qui se connecte sur le shield Grove
  • Un écran LCD comme celui-ci (avec des boutons)

Bien sur vous êtes libre de modifier le matériel, nous vous montrons simplement avec quoi nous l’avons réalisé, nous pouvez changer le relais pour un autre dispositif, comme un buzzer ou autre.

Les branchements

Le shield Grove nous facilite grandement la tache, voila les trois grandes étapes à suivre :

  • Connectez le shield Grove à l’Arduino
  • Branchez sur le port 6 de ce dernier le relais ou autre dispositif
  • Raccordez par-dessus l’écran LCD

Si vous n’utilisez pas les mêmes éléments, à vous d’adapter ces branchements, et de modifier ensuite le programme. Nous utiliserons le pin 6 comme pin qui s’allumera à la fin de la minuterie.

Le code

Allez on est gentil on vous donne le programme directement, on l’explique juste après pour ceux qui veulent.

#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD
#include <avr/wdt.h> //Inclusion de la librairie pour le reset

// --- Déclaration des constantes utiles ---

int APPUI_1=0;
int APPUI_2=205;
int APPUI_3=422;
int APPUI_4=620;
int APPUI_5=822;

// Constante pour la broche Analogique 0

int Bouton = A0;

// Variables de positionnement sur l'afficheur

int ligne=1, colonne=1;

//Variable du temp choisis par l'utilisateur

float temp=0;

//Initialisation de l'écran LCD

LiquidCrystal lcd(7,6,5,4,3,2);

//Variable pour les boutons

int actif = 1;

void setup() {

//Initialisation des boutons et du relais

pinMode (Bouton,INPUT);

pinMode (9, OUTPUT);

pinMode (0, OUTPUT);

//Initialisation de la connexion série

Serial.begin(9600);

//Affichage LCD

lcd.begin(16,2);

delay(10);

lcd.clear();

lcd.print("LCD OK");

delay(1000);

lcd.setCursor (0,2);
lcd.print("Programme OK");

delay (1000);

lcd.clear();
lcd.clear();

lcd.print("===Minuterie:===");

}

void loop(){

//Si on appuie sur le bouton btn_1, on recule le nombre de chiffres

if (analogRead(Bouton)==APPUI_1) {

temp=temp-0.05;

ligne=2, colonne=5;
lcd.setCursor (colonne-1, ligne-1);
lcd.print(temp,2);

delay(100);

}

//Si on appuie sur le bouton btn_2, on avance le nombre de chiffres

if(analogRead(Bouton)==APPUI_2){

temp=temp+0.05;

ligne=2, colonne=5;
lcd.setCursor (colonne-1, ligne-1);
lcd.print(temp,2);

delay(100);

}

//Si on appuie sur le bouton btn_3 on commence le minuteur en secondes

if(analogRead(Bouton)==APPUI_3&&actif==1){

actif=0;

if(temp<0){

lcd.clear();

lcd.setCursor(1,0);
lcd.print("Nombre negatif");
lcd.setCursor(3,1);
lcd.print("Impossible");

delay(1000);

wdt_enable(WDTO_15MS);

while(1)
{

}

}else{

lcd.clear();
lcd.setCursor(3,0);
lcd.print("EN COURS ...");

float temp_restant = temp * 1000;

delay(temp_restant);

lcd.clear();
lcd.setCursor(2,0);
lcd.print("TEMP TERMINE");

digitalWrite(9, HIGH);

}

}

//Si on appuie sur le bouton btn_4 on commence le minuteur en minutes

if(analogRead(Bouton)==APPUI_4&&actif==1){

if(temp<0){

lcd.clear();

lcd.setCursor(1,0);
lcd.print("Nombre negatif");
lcd.setCursor(3,1);
lcd.print("Impossible");

delay(1000);

wdt_enable(WDTO_15MS);

while(1)
{

}

}else{

actif=0;

lcd.clear();
lcd.setCursor(3,0);
lcd.print("EN COURS ...");

float temp_restant = temp * 60000;

delay(temp_restant);

lcd.clear();
lcd.setCursor(2,0);
lcd.print("TEMP TERMINE");

digitalWrite(9, HIGH);

}

}

//Si on appuie sur le bouton btn_5 on commence le minuteur en heures

if(analogRead(Bouton)==APPUI_5&&actif==1){

actif=0;

if(temp<0){

lcd.clear();

lcd.setCursor(1,0);
lcd.print("Nombre negatif");
lcd.setCursor(3,1);
lcd.print("Impossible");

delay(1000);

wdt_enable(WDTO_15MS);

while(1)
{

}

}else{

lcd.clear();
lcd.setCursor(3,0);
lcd.print("EN COURS ...");

float temp_restant = temp * 3600000;

delay(temp_restant);

lcd.clear();
lcd.setCursor(2,0);
lcd.print("TEMP TERMINE");

digitalWrite(9, HIGH);

}

}

}

Pour vous résumez le programme, la première partie va gérez les variables d’appui, en effet les boutons du Shield LCD sont gérés sur un seul port analogique et chaque bouton correspond à une « valeur précise »

Il est possible que les boutons ne répondent pas super bien si vous changez la source d’alimentation si jamais cela se produit téléchargez ce programme pour voir quel bouton correspond à quel valeur.

Ensuite on détecte quel bouton est appuyer, le premier correspond au -, le deuxième au +, le troisième aux secondes, le quatrième aux minutes et le cinquième aux heures

Si jamais on entre un nombre négatif on prévient qu’un nombre négatif est impossible et on restart le programme

Pour faire la minuterie en elle-même, il suffit de transformer le temps donné en fonction du mode que nous voulons (pour les secondes on le multiplie par 1000 par exemple) puis on rajoute une fonction delay avec le temps transformé

Voilà voilà, vous avez enfin une minuterie pour commander n’importe quel objet que vous voulez

Ce système est assez sympa je trouve, de plus vous pouvez l’améliorer en ajoutant par exemple plusieurs sorties configurables etc…

Si jamais vous avez des questions n’hésitez pas à me les poser

A bientôt

 

 

Merci à Alvin F. qui nous a donné ce tutoriel, ceci est son montage! 

3 Commentaires

  1. redploplop 13 décembre 2016 à 13 h 56 min␣- Répondre

    Bonjour, je suis nouveau et je fais des recherches sur l’Arduino , de fils en aiguille je tombe sur cette article qui commence par :
    Pour réaliser ce tutoriel, vous aurez besoin de tout cela :

    Une Arduino
    Un shield Grove, pour simplifier les connexions
    Un relais Grove, qui se connecte sur le shield Grove
    Un écran LCD comme celui-ci (avec des boutons)

    Je ne sais pas ce qu’est un shield Grove & un relais Grove … Pas de lien cliquable vers une définition ou la fabrication de cette objet ou l’achat de cette objet … Je ne veux pas perdre de temps, je préfére fermer et regarder autre part ..

    Pensez-y

    Plop

    • Kailey 28 janvier 2017 à 3 h 48 min␣- Répondre

      That’s a skillful answer to a diflicuft question

  2. J&T 25 juillet 2017 à 13 h 29 min␣- Répondre

    Bonjour,
    J’aimerais savoir si il est possible de mettre plusieurs minuteurs en même temps, en utilisant la fonction millis, sur une carte arduino uno ?
    Merci !

Laisser un commentaire