6 · Projets complets
Projet : montre connectée
Objectif
Afficher l'heure, les pas et la température sur l'OLED, avec navigation par bouton.
Pourquoi c'est utile
Assemble horloge, IMU, capteur environnemental et interface : un produit complet.
Matériel nécessaire
- Carte Arduino UNO
- Bouton poussoir
- Écran OLED SSD1306 (I²C)
- Centrale inertielle MPU6050
- Capteur BMP280 (pression/température)
- Horloge temps réel DS3231
Aucun achat requis : tous ces composants sont simulés dans le navigateur.
Étapes
- 01Bus I²C partagé : OLED 0x3C, DS3231 0x68, MPU6050 0x69, BMP280 0x76.
- 02Comptez les pas en détectant les pics d'accélération.
- 03Un bouton fait défiler les écrans (heure / pas / météo).
- 04Rafraîchissez l'écran seulement quand une donnée change.
Code de départ
// BMP280 temperature + pressure and DS3231 clock, straight over Wire.
#include <Wire.h>
const uint8_t BMP = 0x76;
const uint8_t RTC = 0x68;
uint16_t calT1; int16_t calT2; uint16_t calP1;
uint8_t readReg8(uint8_t addr, uint8_t reg) {
Wire.beginTransmission(addr);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(addr, (uint8_t)1);
return Wire.read();
}
uint16_t readLE16(uint8_t reg) {
Wire.beginTransmission(BMP);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(BMP, (uint8_t)2);
uint8_t lo = Wire.read();
uint8_t hi = Wire.read();
return (uint16_t)((hi << 8) | lo);
}
long read20(uint8_t reg) {
Wire.beginTransmission(BMP);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(BMP, (uint8_t)3);
long msb = Wire.read();
long lsb = Wire.read();
long xlsb = Wire.read();
return ((msb << 16) | (lsb << 8) | xlsb) >> 4;
}
uint8_t fromBcd(uint8_t v) { return (v >> 4) * 10 + (v & 0x0F); }
void setup() {
Serial.begin(9600);
Wire.begin();
calT1 = readLE16(0x88);
calT2 = (int16_t)readLE16(0x8A);
calP1 = readLE16(0x8E);
Serial.print("BMP280 id 0x");
Serial.println(readReg8(BMP, 0xD0), HEX);
}
void loop() {
long adcT = read20(0xFA);
long adcP = read20(0xF7);
float tFine = ((adcT / 16384.0) - (calT1 / 1024.0)) * calT2;
float tempC = tFine / 5120.0;
float pa = (1048576.0 - adcP) * 6250.0 / calP1;
Serial.print("T ");
Serial.print(tempC);
Serial.print(" C P ");
Serial.print(pa / 100.0);
Serial.println(" hPa");
uint8_t h = fromBcd(readReg8(RTC, 0x02));
uint8_t m = fromBcd(readReg8(RTC, 0x01));
uint8_t s = fromBcd(readReg8(RTC, 0x00));
Serial.print("RTC ");
Serial.print(h); Serial.print(":");
Serial.print(m); Serial.print(":");
Serial.println(s);
delay(1000);
}
Ce tutoriel se réalise dans le simulateur Circuitly : le montage et le code sont vérifiés automatiquement à chaque étape.
Questions fréquentes
- Faut-il acheter du matériel pour suivre ce tutoriel ?
- Non. Tout se fait dans le navigateur : Circuitly simule la carte, les composants et le code. Le matériel réel est optionnel si vous voulez reproduire le montage ensuite.
- Quels composants sont utilisés ?
- Carte Arduino UNO, Bouton poussoir, Écran OLED SSD1306 (I²C), Centrale inertielle MPU6050, Capteur BMP280 (pression/température), Horloge temps réel DS3231. Ils sont déjà disponibles dans la bibliothèque du simulateur.
- Combien de temps faut-il pour le terminer ?
- Environ 50 minutes, niveau expert, en 4 étapes guidées.
- Quelles connaissances faut-il avant de commencer ?
- Le tutoriel précédent de la série, « Projet : robot évitement d'obstacles », suffit comme préparation. Aucune installation de logiciel n'est nécessaire.
- Le code est-il fourni et vérifié ?
- Oui : un sketch de départ est fourni, et le simulateur vérifie automatiquement votre câblage et votre code à chaque étape.
Pour les enseignants
Recevez le pack pédagogique : 6 séances clés en main
Progression complète, objectifs, étapes élève et grille d'évaluation — prêt à imprimer, gratuit.
Une adresse, aucun spam : uniquement le pack et les nouveautés classe.
Dans la même série
- Projet : thermostat
Réguler une température de consigne avec hystérésis et affichage.
- Projet : alarme d'intrusion
Détecter un passage, déclencher la sirène et armer/désarmer par bouton.
- Projet : enregistreur de données
Échantillonner un capteur à intervalle régulier, horodater et sauvegarder.
- Projet : robot évitement d'obstacles
Avancer, détecter un obstacle à moins de 20 cm et contourner.