電子工作

RaspberryPiで温度と湿度を測ってみる

そろそろ暑くなり始める季節ですよね。気温が身近に測れない場合、いつ頃エアコンをつければいいかわからないこともあります。

すいか
すいか
暑いんだけど、まだそう言う季節ではないし・・・みたいなことだね。

なので、湿度と温度が測れるセンサーを使って、エアコンを付ける基準を作りたいと思います。

すいか
すいか
そのうちエアコンも自動でつけてくれるようにならないかな?

少し前に、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 exsample.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

を書かないと日本語が表示されないことがあります。

お疲れ様でした。

RaspberryPi

「あったらいいな」というものを実現してみましょう。「RaspberryPi」なら、つくれるかもしれません。RaspberryPiは超小型コンピューターですが、普通のコンピューターを大きく違う点は「電子工作」ということをして、普通のパソコンではできない、電子部品などを動かすことができるということです。「RaspberryPi」をつかって、やりたいことを実現してみましょう。

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です