Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Komponenten und Zubehör
| Arduino Nano Every | × | 1 |
| Uhr-Modul (DS3231) | × | 1 |
| HC-SR501 PIR-Bewegungssensor | × | 1 |
| Summer (Buzzer) | × | 1 |
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt
Aufstehen kann eine echte Herausforderung sein. Dieser bewegungsaktivierte Wecker stellt sicher, dass Sie wach bleiben, indem er Bewegung nach dem Drücken der Snooze-Taste erkennt. Wenn Sie sich wieder hinlegen, setzt der Alarm zurück und zwingt Sie, für einen festgelegten Zeitraum wach zu bleiben, bevor der Alarm stoppt.
Aufbau
Sammeln Sie folgende Komponenten:
- DS3231 Echtzeit-Uhr-Modul
- HC-SR501 PIR-Bewegungssensor
- Summer (beliebiger 5V Piezo)
- Taster (Momentary Push Button)
- Arduino Nano Every (oder jedes Arduino-kompatible Board)
Verdrahten Sie die Komponenten wie folgt:
- Summer Minus-Pin an GND
- Summer Plus-Pin an D11
- Taster Ground-Pin an GND
- Taster Signal-Pin an D9
- HC-SR501 VCC an 5V
- HC-SR501 Output an D7
- HC-SR501 GND an GND
- DS3231 GND an GND
- DS3231 VCC an 5V
- DS3231 SDA an SDA (Pin A4 am Nano)
- DS3231 SCL an SCL (Pin A5 am Nano)
Code
Laden Sie die DS3231-Bibliothek ZIP aus dem Code-Bereich herunter und fügen Sie sie in der Arduino IDE über Sketch → Bibliothek einbinden → .ZIP Bibliothek hinzufügen hinzu.
Laden Sie den folgenden Sketch hoch. Nach dem ersten Hochladen kommentieren Sie die Zeile aus, die Datum und Uhrzeit setzt, damit die RTC bei Resets die korrekte Zeit behält.
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7; // Eingang für 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__); // nach erstem Upload auskommentieren!
pinMode(pirPin, INPUT);
}
void alarm(int minute){
bool button_pressed = false;
bool awake = false;
bool movement = false;
while(!button_pressed){
// Alarm läuft solange Taste nicht gedrückt
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); // Wenn keine Bewegung erkannt wird, Alarm zurücksetzen
}
}
if(abs(dt.minute - minute) >= 1){
// Zeitperiode festlegen, in der Sie vor dem Sensor sein müssen
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);
}
Sensoreinstellung
Stellen Sie den HC-SR501 auf retriggerbaren Modus ein, indem Sie den Trigger-Selektor-Jumper entsprechend platzieren.
Justieren Sie Verzögerung und Empfindlichkeit fein. Maximale Empfindlichkeit mit minimaler Verzögerung funktioniert am besten: Der Sensor bleibt lange genug aktiv, um Sie zu erkennen, aber nicht so lange, dass er eine Rückkehr ins Bett ignoriert.
Kompakter Bau
Nach dem Testen des Steckbrett-Prototyps löten Sie die Komponenten direkt auf den Arduino Nano Every, um einen taschengroßen Wecker zu erstellen.
Bauen Sie ein leichtes Gehäuse aus 3 mm Balsaholz (Abmessungen 55 mm × 35 mm × 40 mm). Das Gehäuse beinhaltet eine große Öffnung für den PIR-Sensor, einen Schlitz für das Micro-USB-Kabel und eine Öffnung für den Summer.
Endprodukt:
Code
- Alarm Clock Arduino Code
- Clock Library (DS3231)
Alarm Clock Arduino Code
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7; // Eingang für HC-SR501
int pirValue; // Speicher für gelesenen PIR-Wert
//--------------------------------------
int set_hour = 7;
int set_minute = 0;
//--------------------------------------
void setup() {
clock.begin();
pinMode(button, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
// clock.setDateTime(__DATE__, __TIME__); // !!NACH DEM ERSTEN UPLOAD AUSKOMMENTIEREN. SONST FALSCHE ZEIT!!
pinMode(pirPin, INPUT);
}
void alarm(int minute){
bool button_pressed = false;
bool awake = false;
bool movement = false;
while(!button_pressed){
// Alarm läuft solange Taste nicht gedrückt
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); // Wenn keine Bewegung zu lange erkannt wird, Alarm zurücksetzen
}
}
if(abs(dt.minute - minute) >= 1){
// Zeitperiode festlegen, in der Sie vor dem Sensor sein müssen
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 (DS3231)
Dies ist eine ZIP-Datei für die DS3231-Bibliothek. Laden Sie sie herunter und fügen Sie sie zu Ihren Bibliotheken hinzu via Arduino → Sketch → Bibliothek einbinden → .ZIP Bibliothek hinzufügen.
Keine Vorschau (nur Download).
Schaltpläne
Verbinden Sie 5V am Arduino mit der positiven Schiene und GND mit der negativen Schiene auf dem Steckbrett.
Herstellungsprozess
- NEVS revolutionäres Carsharing in Trollhättan: Eine neue Ära der Mobilität
- Zuverlässigen Wecker mit DS1302 RTC und Arduino UNO bauen
- Industry 4.0 starten: IO-Link an SPS meistern mit SICK Training
- Wesentliche Faktoren für erfolgreiche und sichere Stanzoperationen
- Kritische Faktoren für die Oberflächenschleif-Leistung
- CNC-Drehmaschinen: Ihr All-in-One-Präzisionswerkzeug
- Unverzichtbare Horizontalbearbeitungszentren für hochpräzise Fertigung
- Kurze Stangenlader (Short Bar Feeder) für Drehmaschinen: Auswahlkriterien
- Top-Vorteile von Bohrwerken für die Präzisionsbearbeitung
- Auswirkungen von Direktwasserpumpen auf Zirkulationssysteme