そろそろ暑くなり始める季節ですよね。気温が身近に測れない場合、いつ頃エアコンをつければいいかわからないこともあります。
なので、湿度と温度が測れるセンサーを使って、エアコンを付ける基準を作りたいと思います。
少し前に、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
を書かないと日本語が表示されないことがあります。
お疲れ様でした。