【初心者OK!】ラズピコで作る!温湿度をLEDとディスプレイでお知らせする快適度モニター

  • URLをコピーしました!

皆さんこんにちは、yossyです。

Raspberry Pi Picoを手に入れたけど、何を作ればいいか迷っていませんか?
そんなふうに思っている人へ、ぜひ試してほしいプロジェクトがあります。

今回作るのは、部屋の温度と湿度をセンサーで測って、LEDとディスプレイに『快適かどうか』をわかりやすく教えてくれる装置です。名付けて『快適度モニター』。

基本的なパーツを使っているので、初心者の方も試しやすくなっていると思います!

yossy

それでは、早速紹介していきます!

目次

今回作る「快適度モニター」とは?

今回作るのは、Raspberry Pi Picoを使った「快適度モニター」という装置です。

この装置は、部屋の温度と湿度を計測して、その温度と湿度が「快適かどうか」をLEDの色やディスプレイの表示で教えてくれます。

温湿度を測定するためのセンサーには、DHT11というセンサーを使用します。このセンサーはマイコンのスターターキットに入っていたりすることが多い有名なセンサーです。

¥620 (2025/03/27 19:53時点 | Amazon調べ)

このセンサーのデータを元に、ディスプレイやLEDの表示を行います。

高性能版のDHT22もあり、コードを少し書き換えれば簡単に使うことができます。


温湿度を表示するためのディスプレイには、LCD1602というディスプレイを使用します。
これも有名なディスプレイの一つで、16×2行の文字を表示する事ができます。

今回は、このディスプレイにセンサーで測定した温度と湿度を表示します。


LEDは温度と湿度に応じて光らせる色を変えて、「快適かどうか」を表示するようにします。
今回は下の表を元にして色を変えます。

LEDの色状態
快適(温度20〜26℃、湿度40〜60%)
寒すぎ or 乾燥気味(温度20℃未満 or 湿度40%未満)
暑すぎ or 湿気が高い(温度26℃超 or 湿度60%超)

このように、一般的なパーツを使って作るので、初心者でも作りやすくなっています。

yossy

作った後も実際に使えるので、生活がちょっと便利になりますね!

次の章からは、実際にこの装置を作るために必要なパーツや配線、プログラムを紹介します!

作り方を解説!

早速作り方を解説していきます。

流れとしては、パーツをラズピコに接続→プログラムを書き込むという2ステップです。

用意するもの

用意するものはこちらです。

  • Raspberry Pi Pico / Pico W
  • 温湿度センサー (DHT11 / DHT22)
  • 1602 LCD(I2C接続タイプ)
  • 単色LED ×3個(赤・青・緑)
  • 抵抗(470Ω)×3個
  • ジャンパーワイヤー、ブレッドボード
yossy

初心者セットに入っていることが多いパーツを使用しているので、すでに持っている人も多いと思います。

まだ持っていない人は、Amazonなどで購入しましょう。

・Raspberry Pi Pico H(ピンヘッダ付きモデル)

¥1,430 (2025/03/11 22:15時点 | Amazon調べ)

・DHT11 温湿度センサー

¥620 (2025/03/27 19:53時点 | Amazon調べ)

・DHT22 温湿度センサー(DHT11の高性能版)

yossy

まだセンサーを持っていない人は、1つあたりの価格が同じなのでDHT22がおすすめです。

・LCD1602 ディスプレイ

・LED

・抵抗

・ジャンパーワイヤー

・ブレッドボード

・LED、抵抗、ブレッドボード、ジャンパーワイヤーが入ったセット

配線

それぞれのパーツとラズピコの配線は次のようになります。
ブレッドボードとジャンパーワイヤーを使って配線しましょう。

DHT11 / 22

  • プラス → 3V3
  • データピン(out) → 21番ピン
  • マイナス → GND

4本足のDHT11 / 22の場合、正面からみて右から次のようになります。

  • プラス → 3V3
  • データピン(out) → 21番ピン
  • 使用しないピン
  • マイナス → GND

また、4本足の場合、「プルアップ抵抗」を挟む必要があります。
10KΩの抵抗を使って、プラスとデータピンをつなぎます。

LCD1602

  • SDA → 16番ピン
  • SCL → 17番ピン
  • マイナス(GND) → GND
  • プラス(VCC)→ VBUS

LED

LEDは、足の長い方をラズピコに接続します。また、短い方とGNDの間には470Ωの抵抗を入れましょう。

  • 青→19番ピン
  • 赤→20番ピン
  • 緑→18番ピン

実際に配線してみると、このようになりました。

プログラム

まず、Thonnyをインストールしていない人はインストールしましょう。

詳しいインストール方法は、こちらの記事の後半に記載しています。


Thonnyが導入できたら、必要なライブラリをラズピコにインストールします。下のリンクからライブラリのページにアクセスしましょう。

lcd_api.py(https://raw.githubusercontent.com/dhylands/python_lcd/master/lcd/lcd_api.py)

pico_i2c_lcd.py(https://raw.githubusercontent.com/T-622/RPI-PICO-I2C-LCD/main/pico_i2c_lcd.py)

Thonnyで新規ファイルを作成して、貼り付けます。貼り付けたらそれぞれにlcd_api.pypico_i2c_lcd.py と名前をつけてラズピコに保存しましょう。


ライブラリがインストールできたら、以下のコードをThonnyでラズピコに書き込みましょう。

#モジュールの読み込み
from machine import Pin, I2C
import utime
import dht
from pico_i2c_lcd import I2cLcd

#LEDの初期化
led_red = Pin(20, Pin.OUT)
led_green = Pin(18, Pin.OUT)
led_blue = Pin(19, Pin.OUT)

#ディスプレイの初期化
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=400000)  # i2cの初期化
lcd = I2cLcd(i2c, 0x27, 2, 16)  #lcdオブジェクトを作成

#温湿度センサーの初期化
sensor = dht.DHT11(Pin(21))

#ledをまとめて消す関数
def clear_leds():
    led_red.value(0)
    led_green.value(0)
    led_blue.value(0)


#メインループ
while True:
    try:
        #センサーで温湿度を測定
        sensor.measure()
        temp = sensor.temperature()
        hum = sensor.humidity()
        
        #ディスプレイに温湿度を表示
        lcd.clear()
        lcd.putstr("Temp: {}C\nHum: {}%".format(temp, hum))
        
        #快適度に応じてLEDを点灯
        clear_leds()
        if 20 <= temp <= 26 and 40 <= hum <= 60: #快適
            led_green.value(1)
        elif hum < 40 or temp < 20: #寒い もしくは 乾燥
            led_blue.value(1)
        elif hum > 60 or temp > 26: #暑い もしくは 高湿度
            led_red.value(1)
        
        utime.sleep(5)
    
    #エラー処理
    except:
        lcd.clear()
        lcd.putstr("Sensor Error")
        clear_leds()
        utime.sleep(5)
    
    

DHT22を使用する場合は、

#温湿度センサーの初期化
sensor = dht.DHT11(Pin(21))

の部分を

#温湿度センサーの初期化
sensor = dht.DHT22(Pin(21))

に書き換えてください。

このプログラムを実行すると、温湿度の測定が始まってLEDが光ってディスプレイに温湿度が表示されます。

yossy

ちなみに、main.pyという名前でラズピコに保存すれば、ラズピコを電源に接続すると自動で動作するようになります!


プログラムの解説

簡単にですが、プログラムを解説します。

yossy

「難しいのはちょっと…」と思った人は流し見・すっ飛ばしでもOK!

前半

まずは前半です。

#モジュールの読み込み
from machine import Pin, I2C
import utime
import dht
from pico_i2c_lcd import I2cLcd

#LEDの初期化
led_red = Pin(20, Pin.OUT)
led_green = Pin(18, Pin.OUT)
led_blue = Pin(19, Pin.OUT)

#ディスプレイの初期化
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=400000)  # i2cの初期化
lcd = I2cLcd(i2c, 0x27, 2, 16)  #lcdオブジェクトを作成

#温湿度センサーの初期化
sensor = dht.DHT11(Pin(21))

#ledをまとめて消す関数
def clear_leds():
    led_red.value(0)
    led_green.value(0)
    led_blue.value(0)

前半のプログラムでは、必要なモジュール・ライブラリを読み込んで、使用するパーツの初期化を行っています。また、後半のプログラムで使う、ledをまとめて消すための関数を作成しています。

#ディスプレイの初期化
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=400000)  # i2cの初期化
lcd = I2cLcd(i2c, 0x27, 2, 16)  #lcdオブジェクトを作成

ディスプレイで使用しているI2Cは、ラズピコなどのマイコンとディスプレイやセンサーとの間で通信する方法のことです。通信には2本の線を使っていて、SCLが通信のタイミングを調整する線、SDAが実際の通信を行う線です。

今回はSCLを17番ピン、SDAを16番ピンに設定しています。

#温湿度センサーの初期化
sensor = dht.DHT11(Pin(21))

DHT11 / 22は1つの線で通信する独自の通信規格を使っています。今回はラズピコの21番ピンに接続しました。

後半

次に後半です。

#メインループ
while True:
    try:
        #センサーで温湿度を測定
        sensor.measure()
        temp = sensor.temperature()
        hum = sensor.humidity()
        
        #ディスプレイに温湿度を表示
        lcd.clear()
        lcd.putstr("Temp: {}C\nHum: {}%".format(temp, hum))
        
        #快適度に応じてLEDを点灯
        clear_leds()
        if 20 <= temp <= 26 and 40 <= hum <= 60: #快適
            led_green.value(1)
        elif hum < 40 or temp < 20: #寒い もしくは 低湿度
            led_blue.value(1)
        elif hum > 60 or temp > 26: #暑い もしくは 高湿度
            led_red.value(1)
        
        utime.sleep(5)
    
    #エラー処理
    except:
        lcd.clear()
        lcd.putstr("Sensor Error")
        clear_leds()
        utime.sleep(5)

後半のプログラムは、5秒ごとにセンサーを使って温度と湿度を測定し、ディスプレイに温湿度を表示。次に、if文を使って測定した温湿度からどのLEDを光らせるかを判断するという動作を繰り返しています。

#センサーで温湿度を測定
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()

sensor.measure()部分でセンサーを使い温湿度を測定、tempという変数に温度を、humという変数に湿度を代入しています。

#ディスプレイに温湿度を表示
lcd.clear()
lcd.putstr("Temp: {}C\nHum: {}%".format(temp, hum))

lcd.clear()はディスプレイに表示されている内容を消去します。

lcd.putstr()でディスプレイに文字列を表示します。\n の部分で改行しています。後ろについている.format(temp, hum)は、2つある{}の場所にtempとhumを表示する書き方です。

#快適度に応じてLEDを点灯
clear_leds()
if 20 <= temp <= 26 and 40 <= hum <= 60: #快適
    led_green.value(1)
elif hum < 40 or temp < 20: #寒い もしくは 低湿度
    led_blue.value(1)
elif hum > 60 or temp > 26: #暑い もしくは 高湿度
    led_red.value(1)

clear_leds()は前半で作ったLEDをまとめて消す関数ですね。

if文を使って温湿度から快適かどうかを判断して、LEDを光らせています。

utime.sleep(5)

try: except:は、エラーが起きたとき用の処理です。もしエラーが発生したらLEDをすべて消し、ディスプレイにSensor Errorを表示します。

動作の様子

実際に動作させて見ます。

・快適

・暑いもしくは高湿度

・寒いもしくは低湿度

このように、センサーで取得した温度と湿度がディスプレイで確認できて、快適かどうかLEDで知ることができます。

まとめ

今回は、DHT11センサーで温湿度を測定し、LEDとディスプレイを使って部屋の快適度を見える化する装置を作ってみました。

どれも基本的なパーツなので、初心者でも取り組みやすい内容だったと思います。

温湿度の数値を知るだけでなく、「快適かどうか」がパッと見てわかる表示はとても実用的で、日常生活のちょっとした改善にもつながりますね。

この装置を元に、SDカードにデータを記録したりするなど、色々発展させることもできるので、興味がある人は試してみてください!


このブログではRaspberry Pi Picoを使った、電子工作に役立つ記事を発信しています!

yossy

初心者でも取り組める記事をたくさん書いています!

「もっと知りたい!」という方は、ぜひブックマーク&SNSのフォローをお願いします!

📌X(Twitter):@yossy0107

📌初心者におすすめな記事はこちらから!

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次