Podłączenie do Raspberry Pi czujnik opadów deszczu YL-83
- VCC czujnika (czerwony) do zasilania 5V Raspberry Pi (lub szyna + na płytce)
- GND czujnika (czarny) do GND Raspberry Pi (lub szyna – na płytce)
- DO z czujnika (zielony) do Raspberry Pi GPIO 21 (pin 40)
- AO obecnie nie podłączone w przyszłości będzie do układu Przetwornik A/C MCP3008 10-bitowy 8-kanałowy SPI – DIP
Opis czujnika YL-83
Czujnik służy do wykrywania opadów atmosferycznych. Zasilany jest napięciem 5 V. Posiada 1 wyjście cyfrowe oraz 1 analogowe.
Urządzenie składa się z trzech części: sondy pomiarowej, modułu detektora oraz przewodów. Sondę należy połączyć z modułem głównym przy pomocy przewodów. Umieszczony w module potencjometr umożliwia regulacje czułości sensora. Czujnik posiada wyjście cyfrowe D0 sygnalizujące wystąpienie opadów oraz analogowe A0 umożliwiające pomiar siły deszczu. Na płytce znajdują się także dwie diody LED: zielona – sygnalizująca poprawne podłączenie zasilania oraz czerwona informująca o pojawieniu się opadów.
Wyjście cyfrowe D0 .Po wykryciu opadów, wyjście D0 przechodzi ze stanu wysokiego w stan niski. Czułość, czyli próg napięciowy, można regulować przy pomocy potencjometru. Wyprowadzenie D0 można połączyć bezpośrednio z mikrokontrolerem bądź zestawem uruchomieniowym lub np. z modułem buzzera, który będzie sygnalizował wystąpienie opadów.
Przygotowanie systemu
Instalacja serwera i klienta MySQL oraz obsługi w php:
1 2 3 4 |
sudo apt-get install mysql-server mysql-client php5-mysql sudo aptitude install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-json |
Instalacja pythona:
1 2 3 |
sudo apt-get install python-dev sudo apt-get install python-mysqldb sudo apt-get install python-rpi.gpio |
Przygotowanie bazy MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sudo mysql -u root -p CREATE DATABASE pi_base; GRANT ALL ON pi_base.* to 'pi_user'@'localhost' IDENTIFIED BY 'HasloUsera'; FLUSH PRIVILEGES; select host, user, password from mysql.user; USE pi_base; CREATE TABLE rain_monitor ( date DATETIME NOT NULL, rain INT NULL); |
YL-83InsertRainMetherMysql.py
skrypt sprawdza czy wystąpiły opady (stan wysoki na pinie 40) i zapisuje co godzinę do bazy danych godzinną statystykę opadów
- w zmiennej conn ustawiamy parametry połączenia z bazą danych MySQL
- zmienna pin oznacza pin wg. numeracji BCM
- write cycle definiuje co ile sekund zapisywać wynik do bazy danych domyślnie co godzinę.Możemy zmienić cykl zapisu np. na 10 minut czyli wpisać 360
- wyświetlając zawartość tabeli rain_monitor możemy przekonać się czy były opady w danej godzinie i jak długo % trwały
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#!/usr/bin/python from __future__ import division import RPi.GPIO as GPIO from time import sleep from datetime import datetime import math import MySQLdb """YL-83InsertRainMetherMysql.py: Insert measuring the amount of rainfall to MySQL database """ __author__ = "zbiros" __copyright__ = "Copyright 2015, Malinowo.net.pl" __credits__ = ["maros"] __license__ = "GPL" __version__ = "1.0.1" __maintainer__ = "zbiros" __email__ = "zbiros@malinowo.secu.com.pl" __status__ = "Development" pin = 21 GPIO.setmode(GPIO.BCM) # set up BCM GPIO numbering GPIO.setup(pin, GPIO.IN) # set GPIO21 = PIN 40 as input count_tot_rain = 0 count_tot_norain = 0 counter_total = 0 write_cycle = 3600 # 3600 seconds = 1 hour # adds a record to the database def insert_rain_reading (rain_value): conn = MySQLdb.connect("localhost","pi_user","HaslaUsera","pi_base" ) cursor = conn.cursor() params = [rain_value] try: cursor.execute("INSERT INTO rain_monitor (date,rain) VALUE (NOW(),%s)",params) conn.commit() except MySQLdb.Error, e: print "An error has occurred. %s" %e finally: cursor.close() conn.close() try: while True: # this will carry on until you hit CTRL+C if GPIO.input(pin): count_tot_norain = count_tot_norain + 1 event = "no rain" else: count_tot_rain = count_tot_rain + 1 event = "rain" count_tot = count_tot_norain + count_tot_rain print datetime.now().strftime('%Y-%m-%d [ %H ]') + "|" + event + "|" + `count_tot` if count_tot == write_cycle: # 1 hour if count_tot_norain == 0: perc_rain = 100 perc_norain = 0 elif count_tot_rain == 0: perc_rain = 0 perc_norain = 100 else: if count_tot_norain > count_tot_rain: perc_norain = int(math.floor((100 * count_tot_norain) / write_cycle)) perc_rain = 100 - perc_norain else: perc_rain = int(math.floor((100 * count_tot_rain) / write_cycle)) perc_norain = 100 - perc_rain count_tot_norain = 0 count_tot_rain = 0 print "--------------------------------------" print "Rain:" + `perc_rain` + "%|No Rain:" + `perc_norain` + "%" print "--------------------------------------" #add to mysql insert_rain_reading(perc_rain) sleep(1) # wait 1 seconds finally: # this block will run no matter how the try block exits GPIO.cleanup() # clean up after yourself |
wynik działania skryptu :
Skrypt YL-83InsertRainMetherMysql.py jako demon
1 |
sudo nano -c /etc/init.d/YL-83InsertRainMetherMysql |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#! /bin/sh # /etc/init.d/YL-83InsertRainMetherMysql case "$1" in start) echo "Starting script YL-83InsertRainMetherMysql.py..." nohup python /scripts_py/YL-83InsertRainMetherMysql.py >/dev/null 2>&1 & ;; stop) echo "Stopping script YL-83InsertRainMetherMysql.py..." kill $(ps aux|grep -v grep|grep "python /scripts_py/YL-83InsertRainMetherMysql.py" | /usr/bin/awk '{print $2}') ;; *) echo "Usage: /etc/init.d/YL-83InsertRainMetherMysql {start|stop}" exit 1 ;; esac exit 0 |
Uruchomienie demona
1 |
/etc/init.d/YL-83InsertRainMetherMysql start |
Zatrzymanie demona
1 |
/etc/init.d/YL-83InsertRainMetherMysql stop |
Dopisanie do autostartu
1 |
sudo update-rc.d YL-83InsertRainMetherMysql defaults |
Sprawdzenie jakie demony są uruchamiane i czy jest nasz demon
1 2 3 |
sudo apt-get install chkconfig sudo chkconfig --list|grep "YL-83InsertRainMetherMysql" |
Usunięcie z autostartu
1 |
sudo update-rc.d YL-83InsertRainMetherMysql stop 2 3 4 5 |
Czujnik do kupienia w:
http://botland.com.pl/czujniki-wilgotnosci/1732-czujnik-opadow-deszczu-yl-83.html