Émission de données (RTC)/Réception et affichage des données : Différence entre versions

De Wiki L.A.B
Aller à : navigation, rechercher
(Etape 3 : afficher l'heure et la date sur l'écran)
Ligne 147 : Ligne 147 :
 
== Etape 3 : afficher l'heure et la date sur l'écran ==
 
== Etape 3 : afficher l'heure et la date sur l'écran ==
  
On souhaite réaliser un code pour afficher l’heure et la date sur notre ordinateur à partir d’une horloge RTC avec module i2c branchée à notre carte Arduino UNO.
+
On souhaite réaliser un code pour afficher l’heure et la date, à partir de l’horloge RTC, directement sur notre écran LCD.
Notre modèle de RTC est la DS1307.
+
[[Fichier:ARDUINO_rtc1.PNG]]
+
  
On a donc besoin de 4 fils (mêmes branchements que pour l’afficheur LCD):  
+
[[Fichier:Montage_arduino_rtc_et_lcd.PNG]]
*GND RTC => GND Arduino
+
*VCC RTC => +5V Arduino
+
*SDA RTC => pin analogique A4 Arduino
+
*SCL RTC => pin analogique A5 Arduino
+
  
Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code (les commentaires sont écris en gris et le code en noir). Il faut aussi télécharger la librairie RTClib, disponible sur le github :  
+
On a donc besoin de 12 fils et d’une bread board. Les 3 éléments (RTC, LCD et Arduino UNO) sont branchés en parallèle.
 +
 
 +
Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code (les commentaires sont écris en gris et le code en noir). Les librairies sont les mêmes que celles téléchargées et ajoutées précédemment donc pas besoin de les inclure à nouveau :
  
 
<syntaxhighlight lang="cpp" enclose="div">
 
<syntaxhighlight lang="cpp" enclose="div">
//Heure et date en utilisant un RTC DS1307 connecté via un I2C
+
#include <Wire.h> //librairie déjà sur arduino
#include <Wire.h> //librairie déjà disponible sur Arduino
+
#include <LiquidCrystal_I2C.h> //pour télécharger la librairie: croquis - include library - manage libraries - LiquidCrystal_I2C.h de Frank de Brabander
 
#include <RTClib.h> //librairie à télécharger en ZIP sur https://github.com/jcw/rtclib
 
#include <RTClib.h> //librairie à télécharger en ZIP sur https://github.com/jcw/rtclib
 
+
RTC_DS1307 RTC; //modèle de la clock(RTC)
+
#if defined(ARDUINO) && ARDUINO >= 100
 
+
#define printByte(args)  write(args);
void setup () {
+
#else
    Serial.begin(57600); //nombre de bauds: définir le même nombre sur le moniteur série (Ctrl - Maj - M)
+
#define printByte(args)  print(args,BYTE);
    Wire.begin();
+
#endif
    RTC.begin();
+
   
+
uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
 
+
RTC_DS1307 RTC;
  RTC.adjust(DateTime(__DATE__, __TIME__)); //Ajuster l'heure et la date de la clock avec celles de l'ordinateur
+
LiquidCrystal_I2C lcd(0x27,16,2); // Adresse du LCD 0x27 avec 16 colonnes et 2 lignes
 +
 +
void setup()
 +
{
 +
  lcd.init();  // initialisation du LCD
 +
  lcd.backlight();
 +
  lcd.print("Initialising..."); //afficher un message sur l'afficheur LCD
 +
  lcd.createChar(2, clock);
 +
  Wire.begin();
 +
  RTC.begin();
 +
  RTC.adjust(DateTime(__DATE__, __TIME__)); //Ajuster la clock avec l'heure et la date de l'ordinateur
 
}
 
}
 
+
void loop () {
+
void loop()
    DateTime now = RTC.now();
+
{
   
+
  lcd.clear(); //code pour afficher heure et date de la clock (du RTC) sur l'écran LCD
    Serial.print(now.year(), DEC);
+
  DateTime now = RTC.now();
    Serial.print('/');
+
  lcd.printByte(2);
    Serial.print(now.month(), DEC);
+
  lcd.print(" ");
    Serial.print('/');
+
  lcd.print(now.hour(), DEC);
    Serial.print(now.day(), DEC);
+
     lcd.print(':');
    Serial.print(' ');
+
     lcd.print(now.minute(), DEC);
    Serial.print(now.hour(), DEC);
+
     lcd.print(':');
     Serial.print(':');
+
     lcd.print(now.second(), DEC);
     Serial.print(now.minute(), DEC);
+
  lcd.setCursor(0, 1);
     Serial.print(':');
+
  lcd.print(now.day(), DEC);
     Serial.print(now.second(), DEC);
+
     lcd.print('/');
    Serial.println();
+
     lcd.print(now.month(), DEC);
   
+
     lcd.print('/');
    Serial.print(" since 2000 = ");
+
     lcd.print(now.year(), DEC);
    Serial.print(now.get());
+
     lcd.print(' ');
    Serial.print("s = ");
+
  delay(1000);
    Serial.print(now.get() / 86400L);
+
    Serial.println("d");
+
 
+
    DateTime future (now.get() + 7 * 86400L + 30); //Calculer et afficher une date/heure avec 7 jours et 30 secondes de plus que celles de l'ordinateur
+
   
+
    Serial.print(" now + 7d + 30s: ");
+
    Serial.print(future.year(), DEC);
+
     Serial.print('/');
+
     Serial.print(future.month(), DEC);
+
     Serial.print('/');
+
     Serial.print(future.day(), DEC);
+
     Serial.print(' ');
+
    Serial.print(future.hour(), DEC);
+
    Serial.print(':');
+
    Serial.print(future.minute(), DEC);
+
    Serial.print(':');
+
    Serial.print(future.second(), DEC);
+
    Serial.println();
+
   
+
    Serial.println();
+
    delay(3000);
+
 
}
 
}
  
Ligne 225 : Ligne 210 :
 
Notre horloge RTC avec un module i2c fonctionne donc correctement.  
 
Notre horloge RTC avec un module i2c fonctionne donc correctement.  
 
Nous pouvons tester maintenant l’ensemble : l’horloge RTC avec module i2c et l’écran LCD avec module i2c. L’ensemble branché en parallèle sur la carte Arduino UNO.
 
Nous pouvons tester maintenant l’ensemble : l’horloge RTC avec module i2c et l’écran LCD avec module i2c. L’ensemble branché en parallèle sur la carte Arduino UNO.
 
  
 
== Pour aller plus loin ==
 
== Pour aller plus loin ==

Version du 18 juillet 2017 à 09:10

Tout d'abord nous allons mettre en œuvre le breakout Tiny RTC et un afficheur LCD avec une liaison I2C, puis dans un second temps nous allons mettre en œuvre le bus CAN en deux arduinos Uno.le breakout Tiny RTC sera branché sur le premier arduino Uno, l'afficheur RTC sera branché sur un second arduino Uno qui pourra afficher les données émises par le RTC.

Présentation et objectifs

Le but de ce tutoriel est de tester le fonctionnement de l’horloge RTC sur l’écran LCD à l’aide d’une carte Arduino UNO. La manipulation permet de faire communiquer l’horloge avec l’écran LCD afin que ce dernier affiche l’heure et la date. Ce tutoriel nécessite une connaissance minimale de la plateforme Arduino. La page Formation Arduino du wiki contient toutes les ressources nécessaires pour découvrir la programmation avec Arduino.

Le montage utilise donc :

  • une carte Arduino UNO
  • une horloge RTC avec module i2c
  • un écran LCD avec module i2c
  • des fils de liaison
  • une breadboard
  • un câble d’alimentation USB


Arduino RTC.PNG

Etape 1 : tester l’écran LCD avec la carte Arduino

On souhaite réaliser un code pour afficher un texte sur notre écran LCD branché à notre carte Arduino UNO afin de tester l’écran.

Arduino LCD.PNG

On a donc besoin de 4 fils :

  • GND LCD => GND Arduino
  • VCC LCD => 5V Arduino
  • SDA LCD => pin analogique A4 Arduino
  • SCL LCD => pin analogique A5 Arduino

Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code:

#include <Wire.h>
#include <LiquidCrystal_I2C.h> // pour télécharger la librairie: croquis - include library - manage libraries - LiquidCrystal_I2C.h de Frank de Brabander
LiquidCrystal_I2C lcd(0x27,16,2); //écran LCD 0x27 avec 16 colonnes et 2 lignes (ligne 0 et ligne 1)

void setup()
{
lcd.init(); //initialisation de l'écran LCD
lcd.cursor_on();
lcd.blink_on();
lcd.backlight();
lcd.setCursor(5,0); // écriture du texte sur la ligne 1 colonne 5 (centré)
lcd.print("Hello!"); // texte "hello" sur ligne 1 colonne 5
lcd.setCursor(7,1); // écriture du texte sur la ligne 2 colonne 7 (centré)
lcd.print("ok"); // texte "ok" sur ligne 2 colonne 7
delay(1000);
lcd.cursor_off();
lcd.blink_off();
}

void loop()
{
}

Une fois la compilation et le téléversement du code réalisé vers la carte arduino, les textes s’affichent sur l’écran LCD. Pour notre exemple, on obtient :

Arduino LCD1.PNG

Le texte affiché sur l’écran peut être modifié et les effets également comme le défilement du texte par exemple. Ne pas hésiter à regarder les exemples proposés par la librairie LiquidCristal_I2C pour faire évoluer le code. Notre écran LCD avec un module i2c fonctionne donc correctement. Nous pouvons tester maintenant notre second appareil : l’horloge RTC avec module i2c.

Etape 2 : tester l’horloge RTC avec la carte Arduino

On souhaite réaliser un code pour afficher l’heure et la date sur notre ordinateur à partir d’une horloge RTC avec module i2c branchée à notre carte Arduino UNO. Notre modèle de RTC est la DS1307. ARDUINO rtc1.PNG

On a donc besoin de 4 fils (mêmes branchements que pour l’afficheur LCD):

  • GND RTC => GND Arduino
  • VCC RTC => +5V Arduino
  • SDA RTC => pin analogique A4 Arduino
  • SCL RTC => pin analogique A5 Arduino

Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code (les commentaires sont écris en gris et le code en noir). Il faut aussi télécharger la librairie RTClib, disponible sur le github :

//Heure et date en utilisant un RTC DS1307 connecté via un I2C
#include <Wire.h> //librairie déjà disponible sur Arduino
#include <RTClib.h> //librairie à télécharger en ZIP sur https://github.com/jcw/rtclib

RTC_DS1307 RTC; //modèle de la clock(RTC)

void setup () {
    Serial.begin(57600); //nombre de bauds: définir le même nombre sur le moniteur série (Ctrl - Maj - M)
    Wire.begin();
    RTC.begin();
    

   RTC.adjust(DateTime(__DATE__, __TIME__)); //Ajuster l'heure et la date de la clock avec celles de l'ordinateur
}

void loop () {
    DateTime now = RTC.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" since 2000 = ");
    Serial.print(now.get());
    Serial.print("s = ");
    Serial.print(now.get() / 86400L);
    Serial.println("d");

    DateTime future (now.get() + 7 * 86400L + 30); //Calculer et afficher une date/heure avec 7 jours et 30 secondes de plus que celles de l'ordinateur
    
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(3000);
}

Une fois la compilation et le téléversement du code vers la carte arduino, on ouvre le moniteur série (Ctrl – Maj – M) et notre ordinateur affiche le résultat du code : soit l’heure et la date actuelle. Ne pas oublier de régler le nombre de bauds sur le moniteur série avec celui du code, ici 57600.

Moniteur série arduino rtc.PNG

Notre horloge RTC avec un module i2c fonctionne donc correctement. Nous pouvons tester maintenant l’ensemble : l’horloge RTC avec module i2c et l’écran LCD avec module i2c. L’ensemble branché en parallèle sur la carte Arduino UNO.

Etape 3 : afficher l'heure et la date sur l'écran

On souhaite réaliser un code pour afficher l’heure et la date, à partir de l’horloge RTC, directement sur notre écran LCD.

Montage arduino rtc et lcd.PNG

On a donc besoin de 12 fils et d’une bread board. Les 3 éléments (RTC, LCD et Arduino UNO) sont branchés en parallèle.

Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code (les commentaires sont écris en gris et le code en noir). Les librairies sont les mêmes que celles téléchargées et ajoutées précédemment donc pas besoin de les inclure à nouveau :

#include <Wire.h> //librairie déjà sur arduino
#include <LiquidCrystal_I2C.h> //pour télécharger la librairie: croquis - include library - manage libraries - LiquidCrystal_I2C.h de Frank de Brabander
#include <RTClib.h> //librairie à télécharger en ZIP sur https://github.com/jcw/rtclib
 
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args)  write(args);
#else
#define printByte(args)  print(args,BYTE);
#endif
 
uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0}; 
RTC_DS1307 RTC;
LiquidCrystal_I2C lcd(0x27,16,2); // Adresse du LCD 0x27 avec 16 colonnes et 2 lignes
 
void setup()
{
  lcd.init();  // initialisation du LCD
  lcd.backlight();
  lcd.print("Initialising..."); //afficher un message sur l'afficheur LCD
  lcd.createChar(2, clock);
  Wire.begin();
  RTC.begin();
  RTC.adjust(DateTime(__DATE__, __TIME__)); //Ajuster la clock avec l'heure et la date de l'ordinateur
}
 
void loop()
{
  lcd.clear(); //code pour afficher heure et date de la clock (du RTC) sur l'écran LCD
   DateTime now = RTC.now();
   lcd.printByte(2);
   lcd.print(" ");
  lcd.print(now.hour(), DEC);
    lcd.print(':');
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    lcd.print(now.second(), DEC);
   lcd.setCursor(0, 1);
   lcd.print(now.day(), DEC);
    lcd.print('/');
    lcd.print(now.month(), DEC);
    lcd.print('/');
    lcd.print(now.year(), DEC);
    lcd.print(' ');
  delay(1000);
}

Une fois la compilation et le téléversement du code vers la carte arduino, on ouvre le moniteur série (Ctrl – Maj – M) et notre ordinateur affiche le résultat du code : soit l’heure et la date actuelle. Ne pas oublier de régler le nombre de bauds sur le moniteur série avec celui du code, ici 57600.

Moniteur série arduino rtc.PNG

Notre horloge RTC avec un module i2c fonctionne donc correctement. Nous pouvons tester maintenant l’ensemble : l’horloge RTC avec module i2c et l’écran LCD avec module i2c. L’ensemble branché en parallèle sur la carte Arduino UNO.

Pour aller plus loin

Si vous disposez d'un cable DB-9 Droit, vous pouvez remplacer les straps par ce câble. D'après nos premiers essais, il semblerait que le cablage de la prise sur le shield de Sparkfun soit différent du standard. Les différents signaux sont câblés comme suit :

  • CAN_L : 5
  • CAN_H : 3
  • GND : 2

alors que le câblage standard est le suivant :

  • CAN_L : 2
  • CAN_H : 7
  • GND : 3

Bibliographie