Slimme bewegingsgeactiveerde wekker: Wakker worden voor de zekerheid
Onderdelen en benodigdheden
| Arduino Nano Every | × | 1 |
| Klokmodule (DS3231) | × | 1 |
| HC-SR501 PIR bewegingsensor | × | 1 |
| Buzzer | × | 1 |
Apps en online diensten
- Arduino IDE
Over dit project
Uit bed komen kan een echte uitdaging zijn. Deze bewegingsgeactiveerde wekker zorgt ervoor dat je wakker blijft door beweging te detecteren nadat je op snooze hebt gedrukt. Als je teruggaat liggen, reset de alarm, wat je dwingt om voor een ingestelde periode wakker te blijven voordat het alarm stopt.
Montage
Verzamel de volgende componenten:
- DS3231 real-time klokmodule
- HC-SR501 PIR bewegingsensor
- Buzzer (elke 5V piezo)
- Momentane drukknop
- Arduino Nano Every (of elk Arduino-compatibel bord)
Bedraad de componenten als volgt:
- Verbind de buzzer negatieve pin met GND.
- Verbind de buzzer positieve pin met D11.
- Verbind de knop grondpin met GND.
- Verbind de knop signaalpin met D9.
- Verbind HC-SR501 VCC met 5V.
- Verbind HC-SR501 output met D7.
- Verbind HC-SR501 GND met GND.
- Verbind DS3231 GND met GND.
- Verbind DS3231 VCC met 5V.
- Verbind DS3231 SDA met SDA (pin A4 op Nano).
- Verbind DS3231 SCL met SCL (pin A5 op Nano).
Code
Download de DS3231 bibliotheek ZIP uit de Code sectie en voeg het toe aan de Arduino IDE via Sketch > Include Library > Add .ZIP Library.
Upload de volgende sketch. Na de eerste upload, commentaar de regel die de datum en tijd instelt uit, zodat de RTC de juiste tijd behoudt bij resets.
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7; // Input voor HC-SR501
int pirValue; // Plaats om gelezen PIR waarde op te slaan
//--------------------------------------
int set_hour = 7;
int set_minute = 0;
//--------------------------------------
void setup() {
clock.begin();
pinMode(button, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
//clock.setDateTime(__DATE__, __TIME__); // commentaar na eerste upload
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); // als geen beweging gedetecteerd wordt voor te lang, reset het alarm
}
}
if(abs(dt.minute - minute) >= 1){
// stel de tijdsperiode in waarin je voor de sensor moet zijn
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);
}
Sensorinstelling
Stel de HC-SR501 in op herhaalbare triggermodus door de trigger-selectie-jumper dienovereenkomstig te plaatsen.
Stel de vertraging en gevoeligheid fijn. Maximale gevoeligheid met een minimale vertraging werkt het beste: het zorgt ervoor dat de sensor lang genoeg actief blijft om je te detecteren, maar niet zo lang dat het een terugkeer naar bed negeert.
Nu maken we het compact
Na het testen van het breadboard-prototype, soldeer de componenten direct op de Arduino Nano Every om een zakformaat-alarm te maken.
Bouw een lichtgewicht behuizing van 3 mm balsahout (afmetingen 55 mm × 35 mm × 40 mm). De behuizing bevat een grote opening voor de PIR-sensor, een sleuf voor de micro-USB-kabel, en een opening voor de buzzer.
Eindproduct:
Code
- Alarm Clock Arduino Code
- Clock Library (DS3231)
Alarm Clock Arduino Code Arduino
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7; // Input voor HC-SR501
int pirValue; // Plaats om gelezen PIR waarde op te slaan
//--------------------------------------
int set_hour = 7;
int set_minute = 0;
//--------------------------------------
void setup() {
clock.begin();
pinMode(button, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
//clock.setDateTime(__DATE__, __TIME__); // !!NA DE EERSTE UPLOAD MOET JE DEZE REGEL UITCOMMENTARIËREN. ANDERS KRIJG JE EEN VERKEERDE TIJD!!
pinMode(pirPin, INPUT);
}
void alarm(int minute){
bool button_pressed = false;
bool awake = false;
bool movement = false;
while(!button_pressed){
// het alarm blijft aan zolang de knop niet ingedrukt is
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); // als geen beweging gedetecteerd wordt voor te lang, reset het alarm
}
}
if(abs(dt.minute - minute) >= 1){
// stel de tijdsperiode in waarin je voor de sensor moet zijn
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);
}
Clock Library Arduino
Dit is een ZIP-bestand voor de DS3231-bibliotheek. Download het en voeg toe aan je bibliotheken via Arduino → Sketch → Include Library → Add .ZIP Library.
Geen preview (alleen download).
Schema's
Verbind 5V op de Arduino met de positieve rail en GND met de negatieve rail op het breadboard.
Productieproces
- Bouw een betrouwbare wekker met DS1302 RTC en Arduino UNO
- Essentiële Factoren voor Succesvolle en Veilige Ponsoperaties
- Kritieke factoren die oppervlakteslijpprestaties beïnvloeden
- CNC Draaibank Machines: Uw All-In-One Precisie Hulpmiddel
- Essentiële horizontale bearbeitingscentra voor hoogprecisie productie
- De ideale korte staafvoeder kiezen voor uw draaibank
- Belangrijkste Voordelen van Boormachines voor Precisiebewerking
- Impact van directe waterpompen op circulatiesystemen
- Inzet Frezen: Een Uitgebreide Gids voor Efficiëntie en Prestaties
- Start uw Industry 4.0-reis: beheers IO-Link op PLC's met SICK-training
- NEVS' revolutionaire autodeel-initiatief in Trollhättan: Een nieuwe mobiliteitstijdperk