Réveil intelligent à détection de mouvement : Se lever pour de bon
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino Nano Every | 1 |
| Module horloge DS3231 | 1 |
| Capteur de mouvement PIR HC-SR501 | 1 |
| Buzzer (piézo 5V) | 1 |
| Bouton poussoir momentané | 1 |
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Se lever du lit peut être un vrai défi. Ce réveil à détection de mouvement vous assure de rester debout en détectant vos mouvements après avoir appuyé sur « snooze ». Si vous retournez au lit, l'alarme se réinitialise, vous forçant à rester éveillé pendant une période définie avant que l'alarme ne s'arrête.
Assemblage
Rassemblez les composants suivants :
- Module horloge temps réel DS3231
- Capteur de mouvement PIR HC-SR501
- Buzzer (piézo 5V)
- Bouton poussoir momentané
- Arduino Nano Every (ou toute carte compatible Arduino)

Câblez les composants comme suit :
- Broche négative du buzzer → GND
- Broche positive du buzzer → D11
- Broche masse du bouton → GND
- Broche signal du bouton → D9
- HC-SR501 VCC → 5V
- HC-SR501 sortie → D7
- HC-SR501 GND → GND
- DS3231 GND → GND
- DS3231 VCC → 5V
- DS3231 SDA → SDA (broche A4 sur Nano)
- DS3231 SCL → SCL (broche A5 sur Nano)

Code
Téléchargez la bibliothèque DS3231 au format ZIP depuis la section Code et ajoutez-la à l'Arduino IDE via Croquis > Inclure une bibliothèque > Ajouter une bibliothèque .ZIP.
Téléversez le sketch ci-dessous. Après le premier téléversement, commentez la ligne qui règle la date et l'heure afin que le RTC conserve l'heure correcte lors des réinitialisations.
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7; // Entrée pour HC-SR501
int pirValue;
//--------------------------------------
int set_hour = 7;
int set_minute = 0;
//--------------------------------------
void setup() {
clock.begin();
pinMode(button, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
//clock.setDateTime(__DATE__, __TIME__); // commenter après le premier téléversement
pinMode(pirPin, INPUT);
}
void alarm(int minute){
bool button_pressed = false;
bool awake = false;
bool movement = false;
while(!button_pressed){
for(int i = 0; i < 4; i++){
tone(11, 523, 100);
delay(100);
tone(11, 784, 50);
for(int i = 0; i < 20; i++){
if(digitalRead(button) == LOW){
button_pressed = true;
awake = true;
dt = clock.getDateTime();
minute = dt.minute;
}
delay(65);
}
}
}
dt = clock.getDateTime();
minute = dt.minute;
while(awake){
movement = false;
dt = clock.getDateTime();
for(int i = 0; i < 30; i++){
if(digitalRead(pirPin)){movement = true;}
}
digitalWrite(LED_BUILTIN, movement);
if(!pirValue){
delay(5000);
for(int i = 0; i < 40; i++){
if(digitalRead(pirPin)){movement = true;}
}
if(!movement){ alarm(minute); }
}
if(abs(dt.minute - minute) >= 1){
tone(11, 698, 50);
delay(100);
tone(11, 698, 50);
digitalWrite(LED_BUILTIN, 0);
awake = false;
}
delay(100);
}
}
void loop() {
dt = clock.getDateTime();
if(set_minute == dt.minute && set_hour == dt.hour){
alarm(set_minute);
}
delay(10000);
}
Réglage du capteur

Mettez le HC-SR501 en mode déclenchement répétable en positionnant le jumper de sélection de déclenchement en conséquence.

Ajustez finement le délai et la sensibilité. Une sensibilité maximale avec un délai minimal fonctionne le mieux : cela garantit que le capteur reste actif assez longtemps pour vous détecter, mais pas si longtemps qu'il ignore un retour au lit.

Construction compacte
Après avoir testé le prototype sur breadboard, soudez les composants directement sur l'Arduino Nano Every pour créer un réveil de poche.

Construisez un boîtier léger en bois de balsa de 3 mm (dimensions 55 mm × 35 mm × 40 mm). Le boîtier comprend une grande ouverture pour le capteur PIR, une fente pour le câble micro-USB et une ouverture pour le buzzer.




Produit final :



Code
- Code Arduino pour réveil
- Bibliothèque horloge (DS3231)
Code Arduino pour réveil
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7;
int pirValue;
int set_hour = 7;
int set_minute = 0;
void setup() {
clock.begin();
pinMode(button, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
//clock.setDateTime(__DATE__, __TIME__); // !!APRÈS LE PREMIER TÉLÉVERSEMENT VOUS DEVEZ COMMENTER CETTE LIGNE. SINON VOUS AUREZ UNE MAUVAISE HEURE!!
pinMode(pirPin, INPUT);
}
void alarm(int minute){
bool button_pressed = false;
bool awake = false;
bool movement = false;
while(!button_pressed){
for(int i = 0; i < 4; i++){
tone(11, 523, 100);
delay(100);
tone(11, 784, 50);
for(int i = 0; i < 20; i++){
if(digitalRead(button) == LOW){
button_pressed = true;
awake = true;
dt = clock.getDateTime();
minute = dt.minute;
}
delay(65);
}
}
}
dt = clock.getDateTime();
minute = dt.minute;
while(awake){
movement = false;
dt = clock.getDateTime();
for(int i = 0; i < 30; i++){
if(digitalRead(pirPin)){movement = true;}
}
digitalWrite(LED_BUILTIN, movement);
if(!pirValue){
delay(5000);
for(int i = 0; i < 40; i++){
if(digitalRead(pirPin)){movement = true;}
}
if(!movement){ alarm(minute); }
}
if(abs(dt.minute - minute) >= 1){
tone(11, 698, 50);
delay(100);
tone(11, 698, 50);
digitalWrite(LED_BUILTIN, 0);
awake = false;
}
delay(100);
}
}
void loop() {
dt = clock.getDateTime();
if(set_minute == dt.minute && set_hour == dt.hour){
alarm(set_minute);
}
delay(10000);
}
Bibliothèque horloge (DS3231)
Il s'agit d'un fichier ZIP pour la bibliothèque DS3231. Téléchargez-le et ajoutez-le à vos bibliothèques via Arduino → Croquis → Inclure une bibliothèque → Ajouter une bibliothèque .ZIP.
Aucune prévisualisation (téléchargement uniquement).
Schémas
Connectez le 5V de l'Arduino au rail positif et le GND au rail négatif sur la breadboard.
Processus de fabrication
- L'initiative révolutionnaire d'autopartage de NEVS à Trollhättan : une nouvelle ère de mobilité
- Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO
- Démarrez votre parcours Industrie 4.0 : Maîtrisez IO-Link sur API avec la formation SICK
- Facteurs essentiels pour des opérations de poinçonnage réussies et sûres
- Facteurs critiques influençant la performance de la rectification de surface
- Tours CNC : votre outil de précision tout-en-un
- Centres d'usinage horizontaux essentiels pour la fabrication de haute précision
- Choisir le Chargeur de Barres Court Idéal pour Votre Tour CNC
- Principaux avantages des machines d'alésage pour l'usinage de précision