Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

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

Ü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:

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Benötigte Bauteile für den Wecker

Verdrahten Sie die Komponenten wie folgt:

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Verdrahtungsplan auf Steckbrett

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

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
HC-SR501 auf retriggerbaren Modus einstellen

Stellen Sie den HC-SR501 auf retriggerbaren Modus ein, indem Sie den Trigger-Selektor-Jumper entsprechend platzieren.

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Verzögerung und Empfindlichkeit feinjustieren

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.

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Optimale Einstellung für zuverlässige Erkennung

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.

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Direkt auf Arduino Nano Every gelötet

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.

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Gehäuse-Frontansicht
Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Gehäuse-Seitenansicht
Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Gehäuse-Rückansicht
Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Gehäuse-Innenansicht

Endprodukt:

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Fertiger Wecker - Vorderseite
Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Fertiger Wecker - Seite
Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen
Fertiger Wecker - Rückseite

Code

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.

Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen Intelligenter bewegungsaktivierter Wecker: Endlich aufstehen

Herstellungsprozess

  1. NEVS revolutionäres Carsharing in Trollhättan: Eine neue Ära der Mobilität
  2. Zuverlässigen Wecker mit DS1302 RTC und Arduino UNO bauen
  3. Industry 4.0 starten: IO-Link an SPS meistern mit SICK Training
  4. Wesentliche Faktoren für erfolgreiche und sichere Stanzoperationen
  5. Kritische Faktoren für die Oberflächenschleif-Leistung
  6. CNC-Drehmaschinen: Ihr All-in-One-Präzisionswerkzeug
  7. Unverzichtbare Horizontalbearbeitungszentren für hochpräzise Fertigung
  8. Kurze Stangenlader (Short Bar Feeder) für Drehmaschinen: Auswahlkriterien
  9. Top-Vorteile von Bohrwerken für die Präzisionsbearbeitung
  10. Auswirkungen von Direktwasserpumpen auf Zirkulationssysteme