Lesson 19

🌡️ LCD温度計を作ろう!
TMP36とLCDで温度を表示

TMP36温度センサーで気温を読み取って、I2C LCDリアルタイムに表示しよう!センサーとディスプレイを組み合わせた本格的な電子工作だよ!

⏱ 55分 🤖 Arduino 🌡️ TMP36 📺 LCD
🌡️

今日の目標

🌡️
TMP36センサーで温度を読み取れる
🔢
アナログ値→電圧→温度の変換ができる
📺
LCDに温度をリアルタイムで表示できる
💡
センサーとディスプレイを組み合わせられる

必要なもの

🔵

Arduino Uno

マイコンボード本体

🌡️

TMP36温度センサー

気温をアナログ電圧で出力

📺

I2C LCD(16×2)

アドレス 0x27 または 0x3F

🔌

ブレッドボード+ジャンパー線

部品をつなぐ

しくみを学ぼう

🌡️ TMP36センサーの仕組み

TMP36は温度によって出力する電圧が変わるセンサーです。

  • 0℃のとき → 0.5V を出力
  • 25℃のとき → 0.75V を出力(0.5 + 25×0.01)
  • 1℃上がるごとに 0.01V(10mV)増える

電圧から温度を計算する式はこれ!

voltage = reading × 5.0 / 1024.0
temp = (voltage − 0.5) × 100.0

🔢 ADC変換(アナログ→デジタル)

analogRead() は 0〜5V の電圧を 0〜1023 の整数値に変換します。

1
analogRead(A0)
センサーの出力を 0〜1023 の値で読む
2
電圧に変換
reading × 5.0 / 1024.0 で 0〜5V に
3
温度に変換
(voltage − 0.5) × 100 で ℃ に
4
LCDに表示
lcd.print(temp, 1) で小数1桁

📺 ちらつかないLCD更新のコツ

温度を連続更新するとき、lcd.clear() を使うと画面がちらつきます。

❌ ちらつく方法
lcd.clear();        // 一瞬消える!
lcd.print(temp);
✅ スムーズな方法
lcd.setCursor(0, 1);
lcd.print(temp, 1);
lcd.print((char)223); // °
lcd.print("C   ");   // スペースで上書き

💡 (char)223 は「°」記号のASCIIコードです!

Arduinoコード

lcd_thermometer.ino
// 必要なライブラリを読み込む
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// LCDオブジェクト(アドレス0x27、16列×2行)
LiquidCrystal_I2C lcd(0x27, 16, 2);

// TMP36センサーのピン
const int TEMP_PIN = A0;

void setup() {
  // LCDを初期化
  lcd.begin();
  lcd.backlight();

  // タイトルを表示
  lcd.setCursor(0, 0);
  lcd.print("LCD Thermometer");
  lcd.setCursor(0, 1);
  lcd.print("Starting...");
  delay(2000);

  // 表示をクリア
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp:");
  lcd.setCursor(0, 1);
  lcd.print("EngiKids  v1.0");
}

void loop() {
  // TMP36の値を読む(0〜1023)
  int reading = analogRead(TEMP_PIN);

  // アナログ値 → 電圧 → 温度に変換
  float voltage = reading * 5.0 / 1024.0;
  float temp    = (voltage - 0.5) * 100.0;

  // 1行目に温度を表示(ちらつかないように上書き)
  lcd.setCursor(6, 0);        // "Temp:" の後ろ
  lcd.print(temp, 1);          // 小数点1桁
  lcd.print((char)223);        // ° 記号
  lcd.print("C  ");             // 余白で古い文字を消す

  delay(500);  // 0.5秒ごとに更新
}
📐
float 型を使う理由
温度は小数になる(例:25.3℃)。intだと小数が切り捨てられるので float を使います。
🔤
(char)223 で°記号
LCDは特殊文字を番号で管理しています。223番が「°」記号です。
delay(500)の意味
0.5秒ごとに温度を更新。速すぎると目に優しくないし、遅すぎると変化が分かりにくい。
✏️
"C " の余分なスペース
例えば「12.3°C」→「9.8°C」に変わったとき、桁が減った分の文字を消すためにスペースで上書きします。

配線図

Arduino Uno 5V GND A0 A4 A5 5V GND TMP36 温度センサー VCC OUT GND I2C LCD 16×2 GND VCC SDA SCL Temp: 25.3°C EngiKids v1.0 5V(電源) GND(アース) A0(センサー出力) SDA/SCL(I2C)
⚠️ TMP36の向きに注意!
TMP36の平らな面を手前にして差し込みます。
左から → VCC(5V)OUT(A0)GND

チェックリスト

チャレンジクイズ!

🌡️ LCD温度計シミュレーター

スライダーで温度を変えると、バーチャルLCDの表示が変わるよ!

50℃
40℃
30℃
20℃
10℃
0℃
🌡️
25.0
°C
analogRead: 614
😊 ちょうど良い気温
25.0℃
reading: 614
voltage: 3.00V
temp: 25.0°C
int reading = analogRead(A0); // → 614
float voltage = reading * 5.0 / 1024.0; // → 3.00V
float temp = (voltage - 0.5) * 100.0; // → 25.0
lcd.setCursor(6, 0);
lcd.print(temp, 1); // "25.0"

まとめ

🌡️
TMP36の変換式
voltage = reading × 5.0 / 1024.0
temp = (voltage − 0.5) × 100
📺
ちらつきなし更新
lcd.clear()より
setCursor()で上書きが◎
🔢
lcd.print(temp, 1)
小数点以下の桁数を
第2引数で指定できる
🔗
センサー+ディスプレイ
部品を組み合わせることで
本格的な計測器が作れる!
🌬️
次のレッスン
Lesson 20: 自動ファンを作ろう!温度でスピード自動調整
温度センサーとDCモーターを組み合わせて、暑くなったら自動で回る扇風機を作ろう!