電子工作 ラズベリーパイで部屋の温度・湿度を測ってみよう!

0
14213

ラズベリーパイ+温湿度センサーで温度・湿度の測定

今回はラズベリーパイに温湿度センサーを搭載して部屋の温度と湿度を計測できる回路を製作します。
この記事では温度・湿度を測定して画面上に表示させるところまでを紹介します。
温度・湿度を測定することができれば「温度により機器をON/OFFする回路」、「温度・湿度により動作パターンを制御する」使用する部品点数も少なく、難易度も高くないのでぜひチャレンジしてみてください。

用意するもの

Raspberry Pi4

3B+、3でも構いません。

SDカード

今回は32GBのものを用意しました。

温湿度センサー(AM2320)

汎用性のあるものを用意しました。

ブレッドボード(ミニ)

リード線(オスーメス)

今回は4本使用します。

電源アダプター

ラズベリーパイは消費電力が大きいので2.5A以上のものを使用してください。

マウス

キーボード

注意点

今回のラズベリーパイはOSのインストール、初期セットアップが済んだ状態での作業になります。
OSインストールや初期セットアップが終わっていない方は下記の記事を参考に進めてください。

ラズベリーパイ用SDカードを作る! -新しくなったラズベリーパイOSインストーラ

【 速報 】最新Raspbianの初期設定手順は、こんなに変わった!

作業工程

ブレッドボードに温度センサーの差し込み

温度・湿度センサーの詳しい動作原理や種類については下記の記事で解説してます。

温度・湿度・気圧センサー

ブレッドボードに温湿度センサーを差し込みます。

温湿度センサーとラズパイを接続

温湿度センサーからリード線を使ってラズベリーパイに接続します。
センサーの刻印が書いてある面からみて、左から順にVDD・SDA・GND・SCLと書いてあります。この後ろにリード線を差し込みます。

VDDは2ピンの5Vに差し込みます。
SDAは3ピンのGPIO2(SDA)に差し込みます。
GNDは9ピンのGroundに差し込みます。
SCLは5ピンのGPIO3(SCL)に差し込みます。

以下の写真では

黒色のコードはVVDから1ピンの3.3V
緑色のコードはSDAから3ピンのGPIO2(SDA)
白色のコードはGNDから9ピンのGround
青色のコードはSCLからSCLは5ピンのGPIO3(SCL)

に接続されています。

GPIOピン配置
https://www.raspberrypi.org/documentation/usage/gpio/

これで温湿度センサーの接続は完了です。

I2C通信の有効

今回の温湿度センサーはI2C通信を用いて通信するためこの機能をオンにする必要があります。

下記のコードを入力します。

sudo raspi-config

入力すると下の写真の画面に切り替わります。

ここで3.Interface Optionsを選択します。

P5 I2Cを選択します。

はいを選択してI2C通信を有効にします。

これでI2C通信の有効化ができました。

温湿度センサーの動作確認

次はラズベリーパイを起動し、温湿度センサーが正しく認識されているかの確認をします。

画面左上にあるLXTeninalを起動します。
起動したら以下のコマンドを入力します。

i2cdetect -y -r 1

今回のセンサ(AM2320)の公式のデータシート見てみると、アドレスが0x5cとなっているので正しく認識されていることがわかります。

このセンサーは自身の発熱で温湿度に誤差を出さないようにスリープに入ってしまいます。
上記のコマンドを実行した後にもう一度コマンドを実行すると認識されます。
なので何かしらセンサーに対して信号を送るとスリープが解除されます。

温度・湿度検知のプログラム入力

次に検知した温湿度を画面上に出力するプログラムを書き込みます。
内容は検知した温湿度を毎秒更新し、画面上に表示させるプログラムです。

左上にあるラズベリーパイのロゴマークをクリックします。

クリックすると、このように目次が出てきます。

この中のプログラミングをクリックし、中にあるThonny python IDEを起動します。

起動出来たら下記のプログラムを打ち込みます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import time
import smbus

i2c = smbus.SMBus(1)
address = 0x5c
 
if __name__ == '__main__':
        try:
                while 1:
                        # センサsleep解除
                        try:
                            i2c.write_i2c_block_data(address,0x00,[])
                        except:
                            pass

                        # 読み取り命令
                        time.sleep(0.003)
                        i2c.write_i2c_block_data(address,0x03,[0x00,0x04])

                        # データ受取
                        time.sleep(0.015)
                        block = i2c.read_i2c_block_data(address,0,6)
                        humidity = float(block[2] << 8 | block[3])/10
                        temperature = float(block[4] << 8 | block[5])/10
 
                        print('温度={0:0.1f}℃ 湿度={1:0.1f}%'.format(temperature, humidity))
                        time.sleep(1)

        except KeyboardInterrupt:
                sys.exit(0)

プログラムが入力できたら一度データの保存を行います。

左上にあるSaveを押してデータの保存をします。

今回はデスクトップに保存しました。

これでプログラムの入力は完了です。

実際にプログラムを実行する

入力したプログラムを実行させる場合は、画面やや左上にあるRunをクリックします。

すると毎秒の温度と湿度が画面上に表示されました。

これで部屋の温度と湿度が計測できました。

温湿度センサーの活用

温湿度センサーを利用すると温度・湿度測定で測定結果を使用しての制御などができるようになります。
例えば、ある一定の温度に達したらモーターでファンを回転させる回路や、測定した湿度により条件ごとに警告を表示させる回路など、応用が利きます。

皆さんもぜひご活用ください。