Horloge Météo Arduino Temps Réel : Affichage OLED pour Heure, Date et Température
Composants et fournitures
| Arduino UNO | × | 1 |
| Module RTC DS3231 (Adafruit) | × | 1 |
| Écran OLED Pmod (Digilent) | × | 1 |
| Capteur de Température LM35 (Texas Instruments) | × | 1 |
| Fils de connexion (générique) | × | 1 |
| Plaque d'essai (générique) | × | 1 |
À propos de ce projet
Nous allons réaliser une horloge météo Arduino qui nous donnera l'heure, la date et la température. Le capteur LM35 nous donnera la température, le DS3231 nous donnera la date et l'heure, et nous utiliserons l'OLED pour afficher la température, la date et l'heure.
Composants requis
Les composants requis pour ce projet sont les suivants :
- Arduino
- DS3231 (Module horloge temps réel)
- Écran OLED (un SSD1306 a été utilisé ici)
- Fiche technique SSD1306.pdf
- LM35
- Fils de connexion
- Plaque d'essai
lm35.pdf
Schéma de câblage
Tout d'abord, connectez l'OLED à l'Arduino. L'OLED fonctionne avec l'Arduino via la communication SPI ainsi que I2C, mais nous l'avons connecté en utilisant la communication SPI. Les broches SPI sur l'Arduino sont les broches 8, 9, 10, 11 et 13. Les connexions de l'OLED avec l'Arduino sont les suivantes :
- Connecter CS de l'OLED à la broche 10 de l'Arduino.
- Connecter DC de l'OLED à la broche 9 de l'Arduino.
- Connecter RES de l'OLED à la broche 8 de l'Arduino.
- Connecter D1 de l'OLED à la broche 11 de l'Arduino.
- Connecter D0 de l'OLED à la broche 13 de l'Arduino.
- Connecter VCC de l'OLED à la broche 5V de l'Arduino.
- Connecter GND de l'OLED à la broche GND de l'Arduino.
Ensuite, connectez le module DS3231 à l'Arduino. Le module DS3231 fonctionne avec l'Arduino via la communication I2C. Les broches pour la communication I2C sur l'Arduino sont SDA et SCL. Connectez le module DS3231 à l'Arduino comme suit :
- Connecter GND du DS3231 à la broche GND de l'Arduino.
- Connecter VCC du DS3231 à la broche 5V de l'Arduino.
- Connecter SDA du DS3231 à A4 sur l'Arduino.
- Connecter SCL du DS3231 à la broche A5 sur l'Arduino.
Enfin, connectez le capteur LM35 à l'Arduino. Connectez la broche gauche du LM35 au 5V sur l'Arduino, la broche du milieu à A0 sur l'Arduino et la broche gauche à la masse sur l'Arduino.
Vous pouvez trouver un schéma complet ici
Explication du code
Tout d'abord, nous avons ajouté les bibliothèques pour le module DS3231 et l'OLED. La bibliothèque Adafruit pour l'OLED a plus de fonctions comparée aux autres bibliothèques utilisées pour les OLEDs.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DS3231.h>
Ensuite, nous avons défini les broches où nous avons connecté le module DS3231 et l'OLED. Le module DS3231 fonctionne avec l'Arduino via la communication I2C donc nous avons utilisé les broches SDA et SCL de l'Arduino. L'OLED fonctionne avec l'Arduino via la communication SPI. Par conséquent, nous avons initialisé les broches 8, 9, 10, 11, 13 qui sont pour les communications SPI. Après cela, nous avons initialisé la broche du capteur LM35 et d'autres variables.
DS3231 rtc(SDA, SCL);
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const int sensor_pin = A0;
float temp;
float output;
Dans la fonction setup, nous avons déclaré la broche du capteur LM35 comme entrée car l'Arduino prendra l'entrée du capteur. Puis nous avons donné la commande au DS3231 et à l'OLED pour commencer à communiquer avec l'Arduino.
pinMode(sensor_pin, INPUT);
rtc.begin();
display.begin(SSD1306_SWITCHCAPVCC);
Les lignes ci-dessous sont commentées dans le code mais si vous utilisez le module DS3231 pour la première fois et que vous voulez régler le jour, la date et l'heure, décommentez ces lignes et réglez-les.
// rtc.setDOW(WEDNESDAY); // Régler jour de semaine à DIMANCHE
// rtc.setTime(19, 02, 0); // Régler l'heure à 12:00:00 (format 24h)
// rtc.setDate(7, 12, 2017); // Régler la date au 6 juin 2017
Puis nous avons affiché « Weather Clock » sur l'OLED pendant 5 secondes.
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print(" Weather ");
display.setCursor(0,17);
display.print(" Clock ");
display.display();
delay(5000);
Dans la fonction loop, nous lisons depuis le LM35 et calculons la température. Puis nous obtenons l'heure et la date et l'affichons sur l'OLED.
output = analogRead(sensor_pin);
temp = (output * 500) / 1023;
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,0);
display.print(rtc.getTimeStr());
display.setTextSize(1);
display.setCursor(0,15);
display.print(rtc.getDateStr());
display.setTextSize(1);
display.setCursor(70,15);
display.print(rtc.getDOWStr());
Code Arduino Complet
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DS3231.h>
DS3231 rtc(SDA, SCL);
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const int sensor_pin = A0;
float temp;
float output;
void setup() {
pinMode(sensor_pin, INPUT);
rtc.begin();
display.begin(SSD1306_SWITCHCAPVCC);
// rtc.setDOW(WEDNESDAY); // Régler jour de semaine à DIMANCHE
// rtc.setTime(19, 02, 0); // Régler l'heure à 12:00:00 (format 24h)
// rtc.setDate(7, 12, 2017); // Régler la date au 6 juin 2017
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print(" Weather ");
display.setCursor(0,17);
display.print(" Clock ");
display.display();
delay(5000);
}
void loop() {
output = analogRead(sensor_pin);
temp = (output * 500) / 1023;
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,0);
display.print(rtc.getTimeStr());
display.setTextSize(1);
display.setCursor(0,15);
display.print(rtc.getDateStr());
display.setTextSize(1);
display.setCursor(70,15);
display.print(rtc.getDOWStr());
display.setTextSize(1);
display.setCursor(20,25);
display.print("Temp: ");
display.print(temp);
display.print("C");
display.display();
delay(1000);
}
Code
Extrait de code #4
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print(" Weather ");
display.setCursor(0,17);
display.print(" Clock ");
display.display();
delay(5000);
Extrait de code #5
output = analogRead(sensor_pin);
temp = (output * 500) / 1023;
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,0);
display.print(rtc.getTimeStr());
display.setTextSize(1);
display.setCursor(0,15);
display.print(rtc.getDateStr());
display.setTextSize(1);
display.setCursor(70,15);
display.print(rtc.getDOWStr());
Extrait de code #6 (Code complet)
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DS3231.h>
DS3231 rtc(SDA, SCL);
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const int sensor_pin = A0;
float temp;
float output;
void setup() {
pinMode(sensor_pin, INPUT);
rtc.begin();
display.begin(SSD1306_SWITCHCAPVCC);
// rtc.setDOW(WEDNESDAY); // Régler jour de semaine à DIMANCHE
// rtc.setTime(19, 02, 0); // Régler l'heure à 12:00:00 (format 24h)
// rtc.setDate(7, 12, 2017); // Régler la date au 6 juin 2017
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print(" Weather ");
display.setCursor(0,17);
display.print(" Clock ");
display.display();
delay(5000);
}
void loop() {
output = analogRead(sensor_pin);
temp = (output * 500) / 1023;
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,0);
display.print(rtc.getTimeStr());
display.setTextSize(1);
display.setCursor(0,15);
display.print(rtc.getDateStr());
display.setTextSize(1);
display.setCursor(70,15);
display.print(rtc.getDOWStr());
display.setTextSize(1);
display.setCursor(20,25);
display.print("Temp: ");
display.print(temp);
display.print("C");
display.display();
delay(1000);
}
Schémas
Processus de fabrication
- Créer des effets audio pilotés par capteurs avec le kit Satellite CCRMA
- Construire une horloge Numitron rétro avec Arduino : simple, fiable et économe en énergie
- Horloge Arduino temps réel pour les heures de prière islamiques
- Créer un jeu Pong classique sur Arduino UNO avec écran OLED – Tutoriel étape par étape
- Horloge à mots précise : affichage de l'heure en mots à la minute près
- Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
- Moniteur de Température et Horloge Temps Réel Arduino avec Écran TFT 3.2"
- Construire une Horloge de Berlin avec Arduino UNO – Horloge à Matrice LED DIY
- Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO