そろそろ暑くなり始める季節ですよね。気温が身近に測れない場合、いつ頃エアコンをつければいいかわからないこともあります。
なので、湿度と温度が測れるセンサーを使って、エアコンを付ける基準を作りたいと思います。
少し前に、20このセンサーが入ったセンサーモジュールキットを購入しました。
今回はその中に入っているDHT11センサーを使って温度と湿度を測りたいと思います。
必要なもの
- DHT11センサー
- RaspberryPi
- ジャンパー線
- ブレットボード
ブレットボードを使うと、より電子工作をしやすくすることができます。
なくても、直接GPIOから引き出すことはできます。
ソースコードの準備
今回なぜかこの方法ではうまくいきませんでした。別の方法でやってみたらできたので、回路は変えずに最後までお読みください。
また、今回はosoyooのサンプルコードを使うので、ダウンロードします。
~$ sudo wget http://osoyoo.com/driver/dht11.py
そして、もう一つ、ファイルを作り、書き込みます。
~$ nano dht11-test.py
そして、その中に次のように書き込みます。
# _____ _____ _____ __ __ _____ _____ #| | __| | | | | | #| | |__ | | |_ _| | | | | #|_____|_____|_____| |_| |_____|_____| # # Use Raspberry Pi to get temperature/humidity from DHT11 sensor # import time import dht11 import RPi.GPIO as GPIO #define GPIO 14 as DHT11 data pin Temp_sensor=14 def main(): # Main program block GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers # Initialise display # lcd_init() instance = dht11.DHT11(pin = Temp_sensor) while True: #get DHT11 sensor value result = instance.read() print"Temperature = ",result.temperature,"C"," Humidity = ",result.humidity,"%" time.sleep(1) if __name__ == '__main__': try: main() except KeyboardInterrupt: pass # finally: # lcd_byte(0x01, LCD_CMD)
書き込み終わったら、コントロールキーとXキー(英語の)を同時に押して、保存しますか?と聞かれるので、Yを押し、enterを押すと保存して閉じることができます。先ほどダウンロードしたファイルと同じフォルダー上に置いてください。
センサーの準備
DHT11温度湿度センサーには3本の足があります。右から見て、+5v,データ,GNDです。データ線はGPIOに挿します。
+5Vのところは、3.3Vでも構いません。
今回は、+5V(一番右)は2番に,真ん中のDETA線は、8番のGPIO14に,一番左のGNDは、どこでもいいのですが、今回は14番に挿します。
配線をする時は、必ずRaspberryPiの電源を抜いてから行ってください。
ブログラムの実行
それではプログラムの実行をしてみましょう。dht11-test.pyの方を実行します。まずpythonがインストールされているか確認します。
~$ sudo apt-getinstall python
インストールがされていなかったらインストールをしてください。次に実行します。
~$ sudo python ./dht11-test.py
すると・・・
なぜか、何も表示されません。なんででしょうか?試行錯誤してもできなかったので、githubにプログラムを公開している方がいらっしゃったので、そちらを使わせていただきます。プログラムはControl+Cで止まります。
GitHubからライブラリをクローン
~$ sudo apt-get install git
まず、gitが使えるようにします。そうしたら、GitHubからライブラリをクローンします。
~$ sudo git clone https://github.com/szazo/DHT11_Python.git
すると、DHT11_Pythonというフォルダーができます。実行してみます。
~$ cd DHT11_Python ~$ sudo python example.py
すると、
Last valid input: 2020-05-16 20:33:34.393141 Temperature: 27.0 C Humidity: 17.0 %
しっかり、温度を測ることができました!!
そして、今回の本題、エアコンのつける基準を作りたいと思います。
エアコンのつける基準をPythonでかく
エアコンをつける基準はif文で作ります。インターネットで調べてみると、環境省は夏は室温が28度が推進されています。室温なのでエアコンの設定温度ではないようです。早速作っていきましょう。
こんな感じに作りました。if文を使うだけですが、日本語表示ができるようにUTF-8の文字コードに設定しました。
/*! [Pure Python library for reading DHT11 sensor on Raspberry Pi ] | [MIT license] | [https://github.com/szazo/DHT11_Python/blob/master/LICENSE.md] */ # coding: utf-8 //ここを追加しました import RPi.GPIO as GPIO import dht11 import time import datetime # initialize GPIO GPIO.setwarnings(True) GPIO.setmode(GPIO.BCM) # read data using pin 14 instance = dht11.DHT11(pin=14) try: while True: result = instance.read() if result.is_valid(): print("Last valid input: " + str(datetime.datetime.now())) print("Temperature: %-3.1f C" % result.temperature) print("Humidity: %-3.1f %%" % result.humidity) if result.temperature >= 28: //ここを追加しました print("エアコンをつけましょう!!") //ここを追加しました else: //ここを追加しました print("エアコンは消しても問題ありません!!") //ここを追加しました time.sleep(6) except KeyboardInterrupt: print("Cleanup") GPIO.cleanup()
すると、
しっかり表示することができました!!
しっかりと一番最初にある
# coding: utf-8
を書かないと日本語が表示されないことがあります。
お疲れ様でした。