Rappel d'anniversaire Arduino : solution fiable sur 50 ans
Composants et fournitures
| Arduino Nano R3 (clones chinois avec ATmega168P-AU) | × | 1 |
| RTC Intersil ISL1208 | × | 1 |
| Pile bouton Renata CR2450N | × | 1 |
| Module USB-série CP2102 | × | 1 |
| Programmeur USBasp | × | 1 |
| Quartz 32,768 kHz | × | 1 |
| Interrupteur SPST | × | 1 |
| LEDs CMS | × | 1 |
| Dôme LED transparent | × | 1 |
| Boîtier interrupteur 4" x 4" (ou boîtier imprimé 3D) | × | 1 |
| Plaque d'essai (perfboard) | × | 1 |
| Connecteurs Berg (M et F) | × | 1 |
| Résistance 4,75 kΩ | × | 3 |
| Résistance 10 kΩ | × | 2 |
Outils et machines nécessaires
- Dremel
- Fer à souder
Applications et services en ligne
- ProgISP (pour programmer les fusibles et le flash)
- Arduino IDE
À propos du projet
Avez-vous déjà oublié votre anniversaire, au point d'avoir besoin de quelqu'un pour vous le rappeler ? Et si vous pouviez offrir à un être cher un appareil qui lui souhaite son anniversaire pendant 50 ans ? Ce n'est pas une blague : ce réveil d'anniversaire alimenté par Arduino fonctionne sur une seule pile bouton CR2450 et peut souhaiter un joyeux anniversaire pendant 50 ans avant que la pile ne s'épuise.
Ce projet a été réalisé dans le cadre du Hackaday Coin Cell Challenge. L'ATmega168P est utilisé comme microcontrôleur (un Arduino Nano modifié en retirant le régulateur de tension, le pont USB, etc.) et l'IDE Arduino pour le firmware. L'heure et la date d'anniversaire sont programmables via le moniteur série USB. Une fois réglés, le MCU passe en mode sommeil. Chaque année, quand l'heure RTC correspond à l'anniversaire, la LED clignote pendant une minute et un message s'affiche sur le moniteur série. La consommation moyenne est d'environ 1,2 µAh (auto-décharge incluse), permettant plus de 50 ans sur une pile CR2450 (540 mAh).
Caractéristiques
- Consommation moyenne ~ 1,22 µAh (auto-décharge incluse) / 608 nA sans auto-décharge (mesuré sur CR2450N).
- Durée de vie réelle : >29 ans sur CR2023 (225 mAh), >50 ans sur CR2450N (540 mAh), >64 ans sur CR2477N (950 mAh).
- Anniversaire programmable et mise à jour via moniteur série USB avec commandes simples.
- Interrupteur dédié pour régler, voir et mettre à jour l'heure à tout moment.
- Réglage logiciel précis de l'heure (logiciel de synchronisation basé sur Processing en développement).
- Open source : tous les fichiers de conception et codes disponibles avec documentation détaillée et images haute résolution.
Étape 1 : Modification de l'Arduino Nano
Utiliser un Arduino Nano ou Mini clone bon marché. Le faire fonctionner à l'oscillateur interne (1 MHz) et sur toute la plage 1,8–5 V. La CR2450 fournit 3 V nominal, donc pas besoin de régulateur. Sur un Nano avec CH340G, retirer :
- Le pont USB-série CH340G.
- La diode Schottky connectée à l'USB 5V.
- Deux résistances 1kΩ sur TX/RX du CH340G.
- Les LEDs RX, TX, PWR (CMS).
- Le régulateur AMS1117 5V.
Ne pas retirer le quartz du MCU avant d'avoir changé les fusibles pour l'oscillateur interne, sinon la programmation ISP devient impossible. Court-circuiter les pads du régulateur après retrait.
Étape 2 : Modification des fusibles de l'ATmega168P
Les puces Arduino ont le bootloader et les fusibles par défaut. Il faut :
- Faire tourner le MCU à 1 MHz (oscillateur interne + diviseur par 8).
- Désactiver la détection de brown-out (BOD).
- Désactiver les modules internes (ADC, timers...) par logiciel.
- Désactiver le watchdog (WDT).
- Mettre toutes les broches E/S en entrée et LOW, sauf broches 13, 2 et 3.
Utiliser un programmateur ISP (USBasp) et le logiciel ProgISP. La signature de l'ATmega168P-AU est 1E940B. Configurer les fusibles comme indiqué dans la documentation (Low: 0x62, High: 0xDF, Extended: 0xF9). Après cela, seul l'ISP peut flasher le MCU.
Étape 3 : Compilation et téléversement
Ajouter une définition de carte personnalisée dans boards.txt (Arduino/hardware/arduino/avr/boards.txt) pour "Arduino Pro Mini (3.3V, 1 MHz) w/ ATmega168". Redémarrer l'IDE, sélectionner cette carte, compiler avec Ctrl+Alt+S (Export compiled binary) pour générer le fichier .hex sans bootloader, puis flasher avec USBasp/ProgISP.
Étape 4 : RTC Intersil ISL1208 I2C
RTC basse consommation avec interface I2C, quartz externe 32,768 kHz. Registres d'alarme mois-date-heure-minute-seconde. Consommation ~400 nA en mode VBAT, max 1,2 µA en VDD. Tension 1,8–5,5 V. L'alarme génère une impulsion LOW de 250 ms sur la broche d'interruption pour réveiller le MCU du sommeil. Fonctionnalités : horloge/calendrier complet, 15 fréquences de sortie sélectionnables, alarme unique (seconde, minute, heure, jour de la semaine, jour, mois), modes événement unique ou impulsion, basculement automatique sur batterie/condensateur, détection de coupure de courant, compensation d'oscillateur intégrée, 2 octets SRAM sauvegardés par batterie, I2C 400 kHz.
Étape 5 : Pile bouton CR2450N
Spécifications : Li/MnO2, 3 V nominal, 540 mAh, courant de décharge standard 0,8 mA, max continu 3 mA, poids 5,9 g, température -40 à +85 °C, auto-décharge <1%/an, durée de vie en stock jusqu'à 10 ans.
Étape 6 : Schéma
Deux résistances 4,7 kΩ pour les pull-ups I2C (valeurs 3,3 kΩ à 5,6 kΩ acceptables). R2 et R3 sont des pull-ups pour les broches d'interruption. Broche numérique 2 (INT0) pour l'alarme RTC, broche 3 (INT1) pour le réveil mise à jour heure. Module CP2102 USB-série connecté aux broches RX/TX du Nano. Ne pas connecter le +5V de l'USB au VCC principal.
Étape 7 : Fonctionnement
Algorithme principal :
- Régler l'heure courante sur le RTC via moniteur série.
- Régler la date et l'heure d'alarme sur le RTC.
- Le MCU passe en mode sommeil après avoir désactivé les périphériques internes (timers, ADC).
- Quand l'heure courante correspond à la date/heure d'alarme, le RTC génère une interruption qui réveille le MCU.
- Au réveil, le MCU réactive les périphériques, affiche "Joyeux anniversaire" sur le moniteur série et fait clignoter la LED dans le dôme selon un motif.
- Après le souhait, le MCU retourne en sommeil jusqu'à l'anniversaire suivant.
- On peut voir et mettre à jour l'heure à tout moment en activant l'interrupteur de mise à jour.
Commandes série :
t: affiche l'heure courante.a: affiche la date/heure d'alarme.c: annule la mise à jour et met en sommeil après 6 s.- Format heure :
TYYMMDDhhmmssp#(T=indicateur, YY=année, MM=mois, DD=jour, hh=heures, mm=minutes, ss=secondes, p=période 0=AM/1=PM, #=délimiteur). Ex:T1801050835120#pour 08:35:12 AM, 05-01-2018. - Format alarme :
AMMDDhhmmssp#(pas d'année). Ex:A08240800000#pour 08:00:00 AM, 28-08.
Une fois tout réglé, désactiver l'interrupteur de mise à jour (broche 3 HIGH via pull-up 10k). Le système s'endort en 6 s.
Étape 8 : Code
Projet open source sous licence MIT sur GitHub : github.com/vishnumaiea/Birthday-Alarm. 13 fonctions principales : setup(), loop(), sleepNow() (désactive périphériques, attache interruptions, sommeil profond), alarmInterrupt() (ISR INT0 broche 2), timeUpdateInterrupt() (ISR INT1 broche 3), fetchTime(), blinkLED(), establishSerial(), endSerial(), bcdToDec(), decToBcd(), printTime(), printAlarmTime().
Étape 9 : Tests et consommation
Prototypage sur breadboard, tests avec batterie Li-Ion 3,6V et multimètre Fluke 87 (précision 0,1 µA). Mode sommeil SLEEP_MODE_PWR_DOWN : consommation MCU ~0,2 µA @ 3,6V. RTC ISL1208 max 1,2 µA. Total ~1,4–1,6 µA mesuré.
Optimisation : Déconnecter VDD du RTC de VBAT (jumper sur breakout). Désactiver le bit LPMOD. Ainsi le RTC consomme 400 nA (datasheet) au lieu de 1,2 µA. Réduire à une seule LED (3 mA au lieu de 6 mA). Temps actif réduit à 85 s/an (60 s réglage + 19 s anniversaire + 6 s avant sommeil).
Nouvelle consommation sommeil : 0,4 µA (RTC) + 0,2 µA (MCU) = 0,6 µA. Durée théorique : 101 ans (608 nA moyenne). En ajoutant l'auto-décharge 1%/an (5,4 mAh/an = 616 nA), consommation moyenne totale ~1,22 µA → 50 ans et 131 jours réels sur CR2450N.
Tableau des durées réelles selon type de pile (avec auto-décharge 1%/an).
Étape 10 : Construction
Soudure sur perfboard selon schéma, connecteurs Berg pour pile, interrupteur, LED. Boîtier : boîtier interrupteur 4"x4" avec trous pour interrupteur et USB, dôme LED récupéré, peinture argentée. Décoration libre.
Étape 11 : Améliorations possibles
- Écran LCD Nokia 5110 (très basse consommation sans rétroéclairage) pour afficher le message et l'âge.
- Logiciel PC (Processing) pour synchronisation automatique de l'heure.
- Clignotement LED indiquant l'âge (ex: 5 clignotements pour 5 ans).
- PCB dédié (Eagle).
- Utiliser l'interruption RTC seule pour déclencher alarme sonore, lumières, etc., sans MCU.
Code
Code source complet sur GitHub : Birthday-Alarm
Schémas
Schéma du clone Arduino.
Processus de fabrication
- Industrie 4.0 et IoT : Tendances clés du marché pour les deux prochaines années
- 10 facteurs clés pour choisir le commutateur parfait pour votre application
- NVIDIA Jetson Nano : ordinateur IA 5 W, 472 GFLOPS pour makers et entreprises
- Kontron lance CP6940 : Commutateur 40 GbE robuste pour environnements extrêmes
- Comment le COVID-19 continue d'alimenter la cybercriminalité : travail à distance, chaînes d'approvisionnement vaccinales et espionnage
- 7 indicateurs clés qu'il est temps de mettre à niveau votre générateur
- Trois signaux d'alarme indiquant que votre moteur a besoin d'un rebobinage
- Maîtriser un assemblage PCB sans faille : pratiques clés
- Des usines aux laboratoires : la puissance polyvalente des robots industriels