Forum: Mikrocontroller und Digitale Elektronik Pi Pico Motion Sensor SR501 keine Reaktion


von Ray Z. (rayz)


Angehängte Dateien:

Lesenswert?

Hallo,
ich bin ein absoluter Newbie in der Welt der Microcontroller und Coding. 
Als erstes kleines Projekt zum Einstig habe ich einen Pi Pico mit einem 
Bewegungssensor SR501 verdrahtet.

Idee ist, dass bei einer erkannten Bewegung die onboard LED kurz 
aufleuchten soll und in der Shell ein Text wiedergegeben wird.

Der Code müsste eigentlich problemlos funktionieren aber es tut sich 
leider absolut nichts. Habe versucht die Sensitivitäten des Sensors auch 
zu variieren aber ohne Erfolg. Weiß zufällig jemand in diesem Forum ob 
etwas nicht korrekt verdrahtet oder programmiert wurde?
1
from machine import Pin
2
from utime import sleep
3
4
led_onboard = Pin(25, Pin.OUT)
5
sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN)
6
7
def pir_handler(pin):
8
 utime.sleep_ms(100)
9
 if pin.value():
10
    led_onboard.on()
11
    print("ALARM! Motion detected!")
12
# waiting 1 second
13
    sleep(1)
14
# LED switch off
15
    led_onboard.off()

: Verschoben durch Moderator
von Ergo70 (Gast)


Lesenswert?

Äh, muss man pir_handler() nicht auch irgendwo aufrufen? Oder ist das 
nicht der ganze Code?

von Ray Z. (rayz)


Lesenswert?

glaube ich verstehe:
1
from machine import Pin
2
from utime import sleep
3
4
sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN)
5
led_onboard = machine.Pin(25, machine.Pin.OUT)
6
7
def pir_handler(pin):
8
 utime.sleep_ms(100)
9
 if pin.value():
10
    led_onboard.on()
11
    print("ALARM! Motion detected!")
12
    for i in range(5):
13
        led_onboard.toggle()
14
        utime.sleep_ms(100)
15
sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)

immernoch keine Reaktion :'(

von Ray Z. (rayz)


Lesenswert?

ich denke es stimmt etwas mit dem Sensor nicht. Hab am Ende es Codes 
folgendes eingefügt:
1
while True:
2
 led.toggle()
3
 utime.sleep(5)

LED blinkt jetzt 5 s und sobald Motion detektiert wird sollte diese in 
einer höherer Frequenz blinken. Am Naheliegendsten ist doch, dass der 
Sensor "defekt" ist?

Der ganze Code ist jetzt wie folgt:
1
import machine
2
import utime
3
4
sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN)
5
led_onboard = machine.Pin(25, machine.Pin.OUT)
6
7
def pir_handler(pin):
8
 utime.sleep_ms(100)
9
 if pin.value():
10
     print("ALARM! Motion detected!")
11
     for i in range(50):
12
         led_onboard.toggle()
13
         utime.sleep_ms(100)
14
sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)
15
while True:
16
    led_onboard.toggle()
17
    utime.sleep(1)

Naja, vielleicht fällt dem Einen oder Anderen ja noch etwas auf ?
Würde ein Interrupt evtl. Abhilfe verschaffen?

Danke @Ergo70

von Jack V. (jackv)


Lesenswert?

Sieht aus, als wolltest du dir den Umgang damit gerade aneignen? In dem 
Fall: lass den Sensor doch erstmal weg, und setz an dessen Stelle einen 
Taster. Der Sensor macht nichts anderes, als beim Triggern den Ausgang 
für einige Sekunden auf High zu setzen – aber das machen diese Dinger 
nicht reproduzierbar, was beim Lernen äußerst hinderlich ist. Wenn es 
dann mit dem Taster funktioniert, kannst du den Sensor dranhängen.

Um den Sensor separat zu testen kannst du eine LED mit einem 
verhältnismäßig großen Vorwiderstand (so, dass sie noch leuchtet, aber 
der Ausgang nicht sehr belastet wird) am Ausgang des Sensors und an GND 
anschließen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.