Comment faire des tâches quotidiennes avec Arduino

Comment faire des tâches quotidiennes avec Arduino

Dans ce tutoriel, nous allons vous montrer comment effectuer des tâches quotidiennes avec l’Arduino. Nous allons allumer et éteindre une LED à un moment précis de la journée, tous les jours. Vous pouvez alors facilement modifier l’exemple fourni pour effectuer toute autre tâche.

Comment faire des taches quotidiennes avec Arduino

Aperçu du projet

1642224243 545 Comment faire des taches quotidiennes avec Arduino

Pièces nécessaires

Pour cet exemple, vous avez besoin des pièces suivantes (cliquez sur les liens ci-dessous pour trouver le meilleur prix à Conseiller Maker):

Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

Comment faire des taches quotidiennes avec Arduino

Schématique

Câblez le module DS1307 RTC à l’Arduino et à la LED, comme indiqué dans le schéma ci-dessous.

1642224244 471 Comment faire des taches quotidiennes avec ArduinoVous pouvez également vous référer au tableau suivant pour câbler le module DS1307 RTC à l’Arduino.

Broche du module RTC DS1307 Câblage à Arduino Uno
SCL A5
SDA A4
VCC 5V
Terre Terre

Installation de bibliothèques

Pour cet exemple, vous devez installer les bibliothèques suivantes : Temps, Alarmes de temps, et DS1307RTC créé par Michael Margolis et maintenu par Paul Stoffregen :

1642224244 116 Comment faire des taches quotidiennes avec Arduino

Pour installer ces bibliothèques, dans l’IDE Arduino, accédez à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques. Ensuite, entrez le nom des bibliothèques pour les installer.

1642224244 121 Comment faire des taches quotidiennes avec Arduino

Définir l’heure du module DS1307 RTC

Pour définir l’heure du module DS1307 RTC, vous devez télécharger le croquis suivant sur votre carte Arduino et l’exécuter une fois :


/*
SetTime.ino sketch to set the time of DS1307 RTC - created by Paul Stoffregen
github.com/PaulStoffregen/DS1307RTC/blob/master/examples/SetTime/SetTime.ino
 */
 
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>

const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

tmElements_t tm;

void setup() {
  bool parse=false;
  bool config=false;

  // get the date and time the compiler was run
  if (getDate(__DATE__) && getTime(__TIME__)) {
    parse = true;
    // and configure the RTC with this info
    if (RTC.write(tm)) {
      config = true;
    }
  }

  Serial.begin(9600);
  while (!Serial) ; // wait for Arduino Serial Monitor
  delay(200);
  if (parse && config) {
    Serial.print("DS1307 configured Time=");
    Serial.print(__TIME__);
    Serial.print(", Date=");
    Serial.println(__DATE__);
  } else if (parse) {
    Serial.println("DS1307 Communication Error :-{");
    Serial.println("Please check your circuitry");
  } else {
    Serial.print("Could not parse info from the compiler, Time="");
    Serial.print(__TIME__);
    Serial.print("", Date="");
    Serial.print(__DATE__);
    Serial.println(""");
  }
}

void loop() {
}

bool getTime(const char *str)
{
  int Hour, Min, Sec;

  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
  tm.Hour = Hour;
  tm.Minute = Min;
  tm.Second = Sec;
  return true;
}

bool getDate(const char *str)
{
  char Month[12];
  int Day, Year;
  uint8_t monthIndex;

  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
  for (monthIndex = 0; monthIndex < 12; monthIndex++) {
    if (strcmp(Month, monthName[monthIndex]) == 0) break;
  }
  if (monthIndex >= 12) return false;
  tm.Day = Day;
  tm.Month = monthIndex + 1;
  tm.Year = CalendarYrToTm(Year);
  return true;
}

Afficher le code brut

Voici ce que vous verrez dans votre moniteur série Arduino IDE :

1642224244 854 Comment faire des taches quotidiennes avec Arduino

Une fois l’heure et la date correctement réglées, vous pouvez continuer ce projet et télécharger l’esquisse finale.

Code

Le code fourni éteint la LED tous les matins à 9h00 et l’allume tous les soirs à 19h00. Copiez le code suivant dans l’IDE Arduino et téléchargez-le sur votre carte Arduino.

/*
 *
 * Complete project details at https://www.raspberryme.com    
 * Based on TimeAlarmExample from TimeAlarms library created by Michael Margolis
 *
 */

#include <TimeLib.h>
#include <TimeAlarms.h>
#include <Wire.h>
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

const int led = 7; 

void setup() {
  // prepare pin as output
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  
  Serial.begin(9600);
  // wait for Arduino Serial Monitor
  while (!Serial) ; 
  
  // get and set the time from the RTC
  setSyncProvider(RTC.get);   
  if (timeStatus() != timeSet) 
     Serial.println("Unable to sync with the RTC");
  else
     Serial.println("RTC has set the system time");     
  
  // to test your project, you can set the time manually 
  //setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011

  // create the alarms, to trigger functions at specific times
  Alarm.alarmRepeat(9,0,0,MorningAlarm);  // 9:00am every day
  Alarm.alarmRepeat(19,0,0,EveningAlarm);  // 19:00 -> 7:00pm every day
}

void loop() {
  digitalClockDisplay();
  // wait one second between each clock display in serial monitor
  Alarm.delay(1000); 
}

// functions to be called when an alarm triggers
void MorningAlarm() {
  // write here the task to perform every morning
  Serial.println("Tturn light off");
  digitalWrite(led, LOW);
}
void EveningAlarm() {
  // write here the task to perform every evening
  Serial.println("Turn light on");
  digitalWrite(led, HIGH);
}

void digitalClockDisplay() {
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}
void printDigits(int digits) {
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

Afficher le code brut

Ce code est simple à comprendre et peut être facilement modifié. Continuez à lire cette page pour savoir comment fonctionne le code.

Importation de bibliothèques

Tout d’abord, vous importez les bibliothèques nécessaires pour créer des alarmes horaires et pour interagir avec le module RTC :

#include <TimeLib.h>
#include <TimeAlarms.h>
#include <Wire.h>
#include <DS1307RTC.h>

Obtenir le temps

Dans le mettre en place(), vous obtenez l’heure du RTC avec la ligne suivante :

setSyncProvider(RTC.get);

Vous affichez également un message sur le moniteur série, afin que vous sachiez si l’heure a été synchronisée avec succès :

if (timeStatus() != timeSet) 
  Serial.println("Unable to sync with the RTC");
else
 Serial.println("RTC has set the system time");

Vous pouvez régler l’heure manuellement – décommentez simplement la ligne suivante. Ceci est particulièrement utile pour tester vos croquis, car vous pouvez facilement modifier l’heure et tester si les alarmes se déclenchent.

//setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011

Réglage des alarmes

La ligne suivante déclenche le Alarme du matin fonction à 9h00 tous les jours. le Alarme du matin est défini après la boucle().

Alarm.alarmRepeat(9,0,0, MorningAlarm); // 9:00am every day

Pour changer l’heure, il suffit de changer les chiffres 9,0,0, avec l’heure souhaitée. Le premier chiffre correspond à l’heure, le deuxième aux minutes et le troisième aux secondes.

le Alarme du soir La fonction est déclenchée à 19h00 tous les jours.

 Alarm.alarmRepeat(19,0,0, EveningAlarm); // 19:00 -> 7:00pm every day

boucler()

Dans le boucler() vous affichez l’heure sur le moniteur série toutes les secondes en appelant le digitalClockDisplay() fonction, définie plus loin dans le code.

void loop() {
  digitalClockDisplay();
  Alarm.delay(1000); // wait one second between clock display
}

Définir les tâches

le AlarmeMatin() et Alarme du soir() les fonctions seront appelées à l’heure que vous avez définie à la mettre en place().

Pour éditer vos tâches, il vous suffit d’écrire vos tâches à l’intérieur du AlarmeMatin() et Alarme du soir() les fonctions.

void MorningAlarm() {
  // write here the task to perform every morning
  Serial.println("Alarm: - turn lights off");
  digitalWrite(led, LOW);
}
void EveningAlarm() {
  // write here the task to perform every evening
  Serial.println("Alarm: - turn lights on");
  digitalWrite(led, HIGH);
}

Ici, nous imprimons simplement un message sur le moniteur série et allumons et éteignons une LED.

L’idée est que vous utilisez cet exemple pour que votre Arduino effectue une tâche utile tous les jours en même temps.

Conclusion

Dans ce tutoriel, nous vous avons montré comment vous pouvez effectuer des tâches quotidiennes avec l’Arduino. L’exemple fourni est simple pour que vous puissiez facilement l’adapter à vos projets. Voici quelques idées de tâches que vous pouvez automatiser à l’aide de cette technique :

  • Allumer/éteindre les lumières à une heure précise
  • Fermez vos volets
  • Nourrissez vos animaux de compagnie

Avez-vous l’intention d’utiliser la tâche quotidienne Arduino dans l’un de vos projets ? Faites-le nous savoir en publiant un commentaire ci-dessous.

Si vous aimez Arduino, vous aimerez peut-être les articles de blog suivants :

Nous espérons que vous avez trouvé cet article utile. Merci d’avoir lu.