Inter­rupt: Licht schal­ten mit Bewegungsmelder

Lese­zeit: 3 Minu­ten

Lösung
Seite als PDF

Der Bewe­gungs­mel­der soll mit Hil­fe eines Inter­rupts die LED ein­schal­ten, nach einer War­te­zeit wird die LED wie­der ausgeschaltet.

Stel­le durch Dre­hen nach rechts des lin­ken Poten­tio­me­ters ein län­ge­res Aus­gangs­si­gnal ein.

Beach­te bei der Ver­ka­be­lung, dass die bei­den Poten­tio­me­ter nach vorn zei­gen.
Außer­dem wird der Bewe­gungs­mel­der an Pin 2 und Pin 3 angeschlossen.

Benö­tig­te Bauteile:

  • Bewe­gungs­mel­der HC-SR501 
  • Wider­stand 220 Ω
  • Lei­tungs­dräh­te
  • LED

Beach­te die ➨Vor­wi­der­stän­de ver­schie­de­ner LEDs

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Defi­nie­re die bei­den Pins des Bewe­gungs­mel­ders und den Pin der LED und lege im set­up-Teil den pin­Mo­de für die Bau­tei­le fest.

# define BEWEGUNG_EIN 2
# define BEWEGUNG_AUS 3
# define ROT 5

void setup()
{ 
  pinMode(ROT, OUTPUT); 
  pinMode(BEWEGUNG_EIN, INPUT);   
  pinMode(BEWEGUNG_AUS, INPUT);

Außer­dem musst du für die Aus­lö­ser die Inter­rupt-Funk­ti­on festlegen:

  /* 
    wenn eine Bewegung registriert wird 
    Signal ist HIGH -> RISING -> LEDEin 
    wenn die Wartezeit abgelaufen ist 
    Signal ist LOW -> FALLING -> LEDAus 
  */ 
  attachInterrupt(digitalPinToInterrupt(BEWEGUNG_EIN), LEDEin, RISING); 
  attachInterrupt(digitalPinToInterrupt(BEWEGUNG_AUS), LEDAus, FALLING);
}

attach­In­ter­rupt()

Der loop-Teil bleibt leer, weil das Pro­gramm aus­schließ­lich durch die Inter­rupts gesteu­ert wird.

Jetzt feh­len nur noch die Funk­tio­nen LEDEin() und LED­Aus().

void LEDEin() 
{
  digitalWrite(ROT, HIGH);
}

void LEDAus() 
{
  digitalWrite(ROT, LOW);
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 9. Okt 2023 @ 17:41