Read the statement by Michael Teeuw here.
{HowTo} turn on/off your monitor (Time based, PIR/Button, App)
-
Two minutes if you know what you’re doing…
The problem is I don’t have a button. I did create the relay.py script and run it. It triggers the relay exactly once and then stays like this. I can’t even stop the script anymore once it’s running…Man, I really thought setting up the relay would be as easy as adding one line to the config. Wish I had tried to set it up earlier.
Still need help with this. :-(
-
Ah I see…
I will write u this evening. We will get it working ;) -
Thank you so much!
-
@MadScientist
Alright…Because your relay turns on i think you did everything right. Probably there is a problem with your Module installation… but thats just a guess. Maybe u didn’t give the module the rights to turn on gpio’s?
sudo usermod -a -G gpio pi
(the „pi“ at the end stands for your username)If u did that and it doesn’t work at all you can try to do it with an external script. Follow these steps:
cd
nano monitor_on.sh
put in this:
gpio -g mode 27 out sleep 0.2 gpio -g write 27 1
save with “ctrl+x” and “y”
nano monitor_off.sh
put in this:
gpio -g mode 27 out sleep 0.2 gpio -g write 27 0
save with “ctrl+x” and “y”
chmod +x monitor_on.sh
(to make it executable)
chmod +x monitor_off.sh
nano pir.py
put in this:
#!/usr/bin/env python import sys import time import RPi.GPIO as io import subprocess io.setmode(io.BCM) SHUTOFF_DELAY = 120 # in seconds, how long the monitor will be on until next button press or PIR detection PIR_PIN = 22 # 15 on the board (this needn't to be a PIR. Can be a button also) LED_PIN = 16 # optional def main(): io.setup(PIR_PIN, io.IN) io.setup(LED_PIN, io.OUT) turned_off = False last_motion_time = time.time() while True: if io.input(PIR_PIN): last_motion_time = time.time() io.output(LED_PIN, io.LOW) print ".", sys.stdout.flush() if turned_off: turned_off = False turn_on() else: if not turned_off and time.time() > (last_motion_time + SHUTOFF_DELAY): turned_off = True turn_off() if not turned_off and time.time() > (last_motion_time + 1): io.output(LED_PIN, io.HIGH) time.sleep(.1) def turn_on(): subprocess.call("sh /home/pi/monitor_on.sh", shell=True) def turn_off(): subprocess.call("sh /home/pi/monitor_off.sh", shell=True) if __name__ == '__main__': try: main() except KeyboardInterrupt: io.cleanup()
save with “ctrl+x” and “y”
chmod +x pir.py
You can check if your button works by simply typing python pir.py. Every time u move through the PIR or press the button it will show you several …
End the test with “ctrl+c”The Shutoff delay in the script defines how long the relay will be turned on after detection through the pir.
If that works u can add the script to the rc.local to start it automatically when booting up.
-
Ok, I did all that and I do get the “…” when I run the pir.py, but the relay doesn’t get triggered. Tried the monitor_oX.sh with and without sudo. Maybe I should just start all over new. Everything seems to be a bit messed up. I reverted back to motion detector only and also that isn’t working anymore in MM.
Edit: Started a new thread here.
-
@MadScientist
sorry, did a mistake. I edited my post above. just edit the *.sh files. -
Thanks a lot to cruunnerr, who has the patience of an angel!
I think there were two problems in my case and I write them here in case someone else has trouble getting the PIR+relay to work.
First: By installing the MMM-PIR-sensor module I used the wrong wiring-pi.
npm install wiring-pi
installs an old version (2.25) which - so I’ve read - doesn’t work with the Raspberyy Pi 3. It’s best to install wiringpi according to this site.Second: I used a relay which was supposed to run on 3V to 7V, but apparently that’s not the case. I guess the seller shipped the wrong relay. So I had an old relay lying around which should only run on 5V but it works nicely on my RPi.
Now everything is working, except I get some phantom triggers of the relay every couple of minutes. But I will look into it once everything is set up completely. Maybe I have something around here that can trigger the PIR sensor even if it’s covered by a cloth.
-
that is nice to know… So wiring-pi installs an old version?! Than i need to update my tutorial ^^Thanks mate
And how do you connect the relay? What relay do u use? is it active low or active high? U can try to connect a transistor or an pull up/down resistor to it, so that should disable the trigger from it. If u want to try i can send an image how to connect. It can also be, that your Power supply of the RPi is to small…
-
The is connected to pin 15 (GPIO 27), 17 (3.3V), and 20 (GND). I tried to post a link to the it, but then this post is flagged as spam. It’s just a cheap relay from Aliexpress.
No idea if that relay is active high or low, but does it matter? It just switches between to connections, so if the relay port 1-2 or 2-3 are active shouldn’t matter, right?
I am using a 3.1A power supply for the Pi. Later I will connected it via a 8A buck-boost-module to a 12V/5A power supply that will power the screen. The Pi will get the power from before the relay so it won’t switch itself off ;-)
Please send a picture, I will gladly try, once I have the extra party I might need (transistor or resistor).
-
I am sorry bro, but u did it wrong :(
U need to connect the relay with the 5v pin! Look at my tutorial at around Point 5. There is a picture how to connect. Just leave the button away
Relay Raspberry + Pin 2 or 4 (5V) - Pin 6 or any other GND (GND) in PIN 13 (GPIO 27)