Catégories
Arduino Grafcet Projets électroniques

GRAFCET | ARDUINO #42: Système d’Arrosage/Irrigation Autonome – Test du Module RTC III

Objectifs du projet

  • Savoir utiliser le module RTC
  • Savoir mettre à jour l’heure du module RTC
  • Conception du Grafcet
  • Introduction du système de l’arrosage
  • Introduite le schéma synoptique avec Arduino
  • Importance du système de l’arrosage
  • Commande des électrovannes
  • Programmation des heures de l’arrosage
  • Etc.

Le tuto introduit le test du module RTC.  Voir le tuto pour les détails techniques.

Architecture matérielle

Projet Système d'Arrosage-Irrigation Autonome

Grafcet du Système

Projet Système d'Arrosage-Irrigation Autonome - Conception Grafcet du sytème

Programme du Module RTC

#include <Wire.h>
#include "RTClib.h"

#define pinLed 3
bool ledState=false;



// Variables globales RTC
RTC_DS1307 rtc;
word DateHeure[6]={0,0,0,0,0};
char JoursSem[7][12] = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi","Dimanche"};


/*
* DateHeure[0]: Secondes[0-59]
* DateHeure[1]: Minutes [0-59]
* DateHeure[2]: Heures [0-23]
* DateHeure[3]: Jours [1-31]
* DateHeure[4]: Mois [1-12]
* DateHeure[5]: Années

enum Ds1307SqwPinMode {
DS1307_OFF = 0x00, // Low
DS1307_ON = 0x80, // High
DS1307_SquareWave1HZ = 0x10, // 1Hz square wave
DS1307_SquareWave4kHz = 0x11, // 4kHz square wave
DS1307_SquareWave8kHz = 0x12, // 8kHz square wave
DS1307_SquareWave32kHz = 0x13 // 32kHz square wave
};
*/



void setup ()
{
// Init RTC
Serial.begin(115200);
while (!rtc.begin())
Serial.println("Le module RTC non disponible, Attente RESET");

if (rtc.begin()) {
Serial.println("Le module RTC est OK");
rtc.writeSqwPinMode(DS1307_ON);
}

//Update RTC (Manuel)
word dat_heur[6];
dat_heur[0]=0;
dat_heur[1]=0;
dat_heur[2]=0;
dat_heur[3]=0;
dat_heur[4]=4;
dat_heur[5]=2023;
//updateClock(rtc, 1, dat_heur);

//LED
pinMode(pinLed,OUTPUT);
digitalWrite(pinLed,LOW);
}

void loop ()
{

if ((millis()%2000)<100)
{
// Lecture du module RTC
readClock(rtc, DateHeure); delay(150);

// LED/Clock
if (!(DateHeure[1]%2) || !(DateHeure[1]%1))
{
// Affichage de la date
Serial.print(DateHeure[3],DEC);
Serial.print('/');
Serial.print(DateHeure[4],DEC);
Serial.print('/');
Serial.print(DateHeure[5],DEC);

// Le jour de la semaine
Serial.print(", "); Serial.print(JoursSem[getJour(DateHeure)]);Serial.print(" ");

// Affichage de l'heure
Serial.print(DateHeure[2]),DEC;
Serial.print(':');
Serial.print(DateHeure[1],DEC);
Serial.print(':');
Serial.print(DateHeure[0],DEC);
Serial.println();

//LED
digitalWrite(pinLed,ledState);
ledState=!ledState;
}
}
}

void readClock(RTC_DS1307 rtcc, word *datheur)
{
if (!rtcc.begin())Serial.println("Le module RTC non disponible");
else
{
// Lecture du module RTC
DateTime now = rtcc.now();

// Récupération de la date
datheur[5]=now.year(); // Années
datheur[4]=now.month(); // Mois
datheur[3]=now.day(); // Jours

// Récupération de l'heure
datheur[2]=now.hour(); // Heures
datheur[1]=now.minute(); // Minutes
datheur[0]=now.second(); // Secondes
}
}

void updateClock(RTC_DS1307 rtcc, int man_auto, word *datheur)
{
if (!rtcc.begin())Serial.println("Le module RTC non disponible");
else
{
if (man_auto==1) rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
else {
word Sec= datheur[0];
word Min= datheur[1];
word Heu= datheur[2];
word Jou= datheur[3];
word Moi= datheur[4];
word Ann= datheur[5];
rtcc.adjust(DateTime(Ann, Moi, Jou, Heu, Min, Sec));
Serial.println("Le module RTC est à jour");
}
}
}

word getJour(word *datheur)
{
/*
* 1: "Lundi"
* 2: "Mardi"
* 3: "Mercredi"
* 4: "Jeudi"
* 5: "Vendredi"
* 6: "Samedi"
* 7: "Dimanche"
*/
word J=((datheur[3] + 3)) % 7;
if(J==0)return 7;
else return J+1;
}

Obtenir le livre « Codage en C du GRAFCET avec ARDUINO« 

Laisser un commentaire