Arduino+1602LCD+DS18B20で温度計を作ってみた


16桁x2行表示のLCDモジュールと温度センサーDS18B20を使って温度計を作ってみました。

動作例

準備

ブレッドボードのサイズはギリギリなので、Arduino Nanoなどで試す場合はもっと大きいものを使う必要があります。

  • ブレッドボード(400穴)
  • Arduino Pro Mini(5V)
  • DS18B20
  • 16x2 LCDモジュール(HD44780互換)
  • 抵抗 2kΩ, 5.1kΩ, 510Ω
  • ジャンパ線

配線

Arduinoの4から9番ピンをLCDモジュールに接続しています。また、10番ピンをDS18B20に接続しています。

LCDモジュールのコントラスト調整用の可変抵抗が手持ちで無かったので、固定値でそれっぽいものを選びました。また、バックライトの電流制限抵抗も、見た感じ良さそうかなで決めています。

ソースコード

ライブラリを利用するだけなので、ソースコードは非常に短くなりました。LiquidCrystalライブラリはArduino同梱です。残りの2つのライブラリは下記からインストールが必要です。

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Connections:

// rs (LCD pin 4) to Arduino pin 8
// enable (LCD pin 6) to Arduino pin 9
// LCD pins d4, d5, d6, d7 to Arduino pins 4, 5, 6, 7

// DS18B20 Wire to Arduino pin 10
#define ONE_WIRE_BUS 10

#define TEMPERATURE_PRECISION 12

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

void setup()
{
  lcd.begin(16,2);
  lcd.clear();

  sensors.begin();
  sensors.setResolution(TEMPERATURE_PRECISION);
}

void loop()
{
  sensors.requestTemperatures(); // Send the command to get temperatures

  lcd.setCursor(0,0);
  lcd.print(sensors.getTempCByIndex(0));
  lcd.print("\xDF""C    ");
  delay(1000);
}

今回利用した1602LCDモジュールは日本語カタカナフォントが搭載されていたため、「度」を表すのに半濁点(0xDF)を利用しました。別の文字が出てしまうLCDモジュールではLiquidCrystal::createChar()でフォントを自作する必要があるでしょう。