ふくふくHukuhuku Inc.
EP.03Sensor Log対象: 中1以上 11分公開: 2026-05-10

温度センサーで「室温の 24 時間変化」を見る

DS18B20 / DHT22 / BME280 の代表 3 種を比較し、配線図とコードを示す。1 日の気温変化を取って matplotlib でグラフ化、自己発熱・キャリブレーション・はずれ値の落とし穴も。

#温度#[DS18B20](https://www.switch-science.com/search?q=DS18B20)#[DHT22](https://www.switch-science.com/search?q=DHT22)#[BME280](https://www.switch-science.com/search?q=BME280)#micro:bit#M5Stack
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

温度 はセンサー入門の定番。本記事では 3 種類のセンサーを使い分ける考え方と、micro:bit / M5Stack 両方のコードを示します。

1. 温度センサーの仕組み

  • サーミスタ式 (NTC):温度で抵抗値が変わる。安価、応答速い、精度はそこそこ
  • IC デジタル式: チップ内部で温度→デジタル値に変換、配線が楽 (例: DS18B20)
  • 容量式 + IC: 高精度、温湿度・気圧と組合せ可 (例: BME280)

2. 代表 3 種の比較

センサー通信精度価格特徴
DS18B201-Wire±0.5℃300〜500 円防水ケーブル版あり、土中・水中 OK
DHT22専用プロトコル±0.5℃500〜900 円湿度も測れる、応答やや遅い
BME280I2C±1℃500〜800 円湿度・気圧も測れる、小型
M5Stack ENV III UnitI2C (Grove)±0.5℃1,500 円BME280 をユニット化、配線一発

3. 配線:micro:bit + DHT22

  • DHT22 の VCC (赤) → micro:bit の 3V
  • DHT22 の DATA (黄) → micro:bit の P0
  • DHT22 の GND (黒) → micro:bit の GND
  • ワニ口クリップ で各ピンに接続 (はんだ付け不要)
micro:bit v2P0P1P23VGNDDHT22VCCDATANCGND配線中は USB を抜いて電源を切ること
micro:bit + DHT22 配線図 (赤=VCC・黄=DATA・黒=GND)
⚠️ 配線時の注意事項

(1) 配線中は必ず USB を抜く (通電しながら触ると誤接触で破損)。(2) VCC と GND を絶対に直接繋がない (ショート→ 発煙の恐れ)。(3) センサー電源電圧の確認 (DHT22 は 3.3V〜5V 動作、micro:bit は 3V 出力なので OK)。(4) ワニ口クリップが他のピンに触れていないか確認 (P0 を狙ったつもりが P1 に当たっているケース多発)。(5) 静電気対策 (乾燥した日は金属に触れて放電してから作業)。

4. micro:bit MakeCode (ブロックの流れ)

  1. 1拡張機能を追加: MakeCode で「拡張機能 → DHT22」を検索して追加
  2. 2ずっとブロックの中で 「DHT22 から温度を読む (P0)」
  3. 3変数 temp に代入
  4. 4シリアル出力: `serial write line(temp)` で USB ケーブル経由で PC に送る
  5. 55 秒待つ (測定間隔)

5. M5Stack MicroPython (BME280)

M5Stack Core2 + ENV III Unit (BME280)
Python
from m5stack import lcdfrom m5stack_ui import M5Screenimport unitimport time
screen = M5Screen()screen.set_screen_bg_color(0xFFFFFF)env3 = unit.get(unit.ENV3, unit.PORTA)
while True:    temp = env3.temperature    hum = env3.humidity    pres = env3.pressure / 100  # hPa    lcd.clear()    lcd.print(f"Temp: {temp:.1f} C", 10, 30, 0xFF0000)    lcd.print(f"Hum:  {hum:.1f} %", 10, 70, 0x0000FF)    lcd.print(f"Pres: {pres:.1f} hPa", 10, 110, 0x008800)    print(f"{time.time()},{temp:.2f},{hum:.2f},{pres:.2f}")    time.sleep(5)

6. 1 日のデータをグラフ化 (Colab で解析)

シリアル出力か SD 保存で集めた CSV を Google Colab に上げて、matplotlib でグラフ化します。

Colab で 24 時間温度の折れ線グラフを描く
Python
import pandas as pdimport matplotlib.pyplot as plt
df = pd.read_csv('temp_log.csv', names=['ts', 'temp', 'hum', 'pres'])df['time'] = pd.to_datetime(df['ts'], unit='s')
fig, ax = plt.subplots(figsize=(10, 4))ax.plot(df['time'], df['temp'], color='red', label='温度 [°C]')ax.set_xlabel('時刻')ax.set_ylabel('温度 [°C]')ax.set_title('我が家のリビング 24 時間温度変化')ax.grid(True, alpha=0.3)ax.legend()fig.autofmt_xdate()plt.tight_layout()plt.savefig('room_temperature_24h.png', dpi=200)

7. 落とし穴

  • 自己発熱: 1 秒間隔の連続測定だと値が高めに出る → 5〜10 秒間隔
  • 直射日光: 黒い樹脂が熱くなる → 日陰に設置
  • 配線の長さ: 1m 超えると 1-Wire の DS18B20 で誤動作することあり
  • 起動直後: 電源投入から 5〜10 秒は値が安定しない
  • 結露: 寒い場所に持ち出すと水滴が付き電子部品が壊れる → ジップロックに乾燥剤

8. 次の話

EP.04 では 湿度 を扱います。「窓を閉めると湿度はどれくらい上がるか」を 1 日のデータで検証します。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp