Budując inteligenty dom, nie można pominąć kwestii bezpieczeństwa. Informację o otwartych oknach i drzwiach dostarczyć nam mogą różnego rodzaju kontaktrony. W tym przykładzie użyto najprostszego kosztującego niecałe 7 zł kontaktronu dedykowanego do drzwi .
Podłączenie bezpośrednie kontaktronu do Rpi
Połączenie to jest niezwykle proste.
- krótszy przewód wpinamy do GND RPi – niebieska zworka na zdjęciu -> linia GND
- dłuższy np. do PIN 16 (GPIO 23) – zielona zworka na zdjęciu
Dzięki możliwości tworzenia przez RPi wewnętrznych rezystorów pull-up nie musimy dodawać dodatkowego rezystora. Oddalenie magnesów kontaktrona na więcej niż 2,5 cm powoduje powstanie stanu niskiego. Połączenie styków czyli np. zamknięcie drzwi powoduje znowu powstanie stanu wysokiego.
W poniższym skrypcie ustawiono pin 23 do którego podłączony jest drugi przewód kontaktronu w tryb Pull-Up (rezystor podciągający).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/python import time import RPi.GPIO as gpio gpio.setmode(gpio.BCM) door_pin = 23 gpio.setup(door_pin, gpio.IN, pull_up_down=gpio.PUD_UP) # activate input with Pull-Up p while True: if gpio.input(door_pin): print("DOOR OPEN") else: print("DOOR CLOSED") time.sleep(3) |
- możemy do skryptu dołożyć funkcjonalność powiadamiania emailem np. https://malinowo.secu.com.pl/raspberry-pi-hc-sr501-skrypt-w-pythonie-do-wysylania-powiadomien-emailem/
- możemy również uczynić ze skryptu demona i dodatkowo zapisywać zdarzenia o otwarciu drzwi/okien do bazy MySQL https://malinowo.secu.com.pl/raspberry-pi-czujnik-opadow-deszczu-yl-83-skrypt-w-python-demon-mysql/
Podłączenie kontaktronu do układu MCP23017
- układ MCP23017 ma wewnętrzne rezystory Pull-Up.Nie posiada rezystorów Pull-Down. W przypadku podłączenia do szyny I2C zaleca się jednak używania zewnętrznych rezystorów Pull-Up.
- należy pamiętać, że mniejsze rezystory szybciej działają jako Pull-Up ale istnieje niebezpieczeństwo uszkodzenia pinu lub całego układu MCP23017 . Dla napięcia 5V odpowiedni będzie w tym przypadku rezystor 10k ohm dla 3,3V 4,7k Ohm (przy długości kabli +/- 20 cm). Rezystor podciągający używamy aby jednoznacznie określić stan na danym pinie: wysoki/niski.
- krótszy kabel (-) do GND płytki
- dłuższy kabel (+) poprzez rezystor 4,7k Ohm do pinu
- dioda LED czerwona (+) poprzez rezystor (tutaj 75 Ohm) do GPA3 (pin 68) MCP23017
- dioda LED czerwona (-) do GND płytki
- kontaktron krótszy przewód do GND
- kontaktron dłuższy przewód poprzez rezystor 4,7k Ohm do GPA1 (pin 66) MCP23017
W poniższym skrypcie stan niski czyli otwarcie drzwi powoduje zapalenie diody podłączonej również do układu MCP23017.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#!/usr/bin/python import wiringpi2 as wiringpi from time import sleep led_pin = 68 door_pin = 66 i2c_addr = 0x20 wiringpi.wiringPiSetup() wiringpi.mcp23017Setup(65,i2c_addr) wiringpi.pinMode(led_pin,1) #set as output wiringpi.pinMode(door_pin,0) #set as input try: while True: door_status = wiringpi.digitalRead(door_pin) if door_status: print "Drzwi otworzone" wiringpi.digitalWrite(led_pin,1) else: print "Drzwi zamkniete" wiringpi.digitalWrite(led_pin,0) sleep(1) finally: #clean up wiringpi.digitalWrite(68,0) wiringpi.pinMode(68,0) wiringpi.digitalWrite(66,0) wiringpi.pinMode(66,0) |
Warto zobaczyć
https://learn.adafruit.com/adafruits-raspberry-pi-lesson-12-sensing-movement/hardware
http://rocode.com/sensors/
https://learn.sparkfun.com/tutorials/pull-up-resistors/what-is-a-pull-up-resistor
Kontaktron do kupienia w:
http://botland.com.pl/czujniki-magnetyczne/3104-czujnik-otwarcia-drzwiokien-kontaktron.html