t49's blog

電子工作初心者のブログ

【ADT7310】ArduinoでLCDに気温を表示する

実行結果

概要

Arduinoを使用して、温度センサの値をキャラクLCDに表示させました。

部品

  • マイコンボード: Arduino Uno
  • I2C接続小型キャラクLCDモジュール: AQM0802A-FLW-GBW
  • 温度センサモジュール: AE-ADT7310

回路図

arduino-adt7310-lcd

プログラム

ライブラリ「FaBo 213 LCD mini AQM0802A」を使用しているため、Arduino IDEのライブラリマネージャーからインストールします。

ライブラリを事前にインストール

#include <FaBoLCDmini_AQM0802A.h>
#include<SPI.h>
#define SS 10
#define MOSI 11
#define MISO 12
#define SCLK 13

// short: 2byte
short raw_data;
double temperature;

FaBoLCDmini_AQM0802A lcd;

void setup(){
  // シリアル通信を開始
  Serial.begin(9600);
  Serial.println("Serial start");
  
  // 通信を無効
  digitalWrite(SS,HIGH);
  
  delay(300);

  // SPI通信を開始
  SPI.begin();
  Serial.println("SPI start");
  
  // 通信を有効
  digitalWrite(SS,LOW);

  // 連続読み取りモードを終了
  SPI.transfer(0x50);
  
  delay(300);

  // コマンドバイト: 設定レジスタに書き込み
  SPI.transfer(0x0C);
  // 設定レジスタ: 16bit分解能
  SPI.transfer(0x80);
  
  delay(300);
  
  // 温度レジスタに対して連続読み込み
  SPI.transfer(0x54);

  delay(300);

   // set up the LCD:
   lcd.begin();
   lcd.command(0x38);
   lcd.command(0x39);
   lcd.command(0x14);
   lcd.command(0x73);
   lcd.command(0x51);
   lcd.command(0x6c);
   lcd.command(0x38);
   lcd.command(0x01);
   lcd.command(0x0c);
   // Print a message to the LCD.
   lcd.print("hello!");
   
   delay(5000);
}
  
void loop(){
  // 16bitで温度データを取得
  raw_data = SPI.transfer16("");

  Serial.print("BIN DATA: ");
  Serial.println(raw_data,BIN);

  lcd.clear();
  
  // 符号ありの為、32768 = 0b1000_0000_0000_0000からマイナス
  if(raw_data >= 32768){
    // 65535 = 0b1111_1111_1111_1111 = -1と表現
    // 65536を引くことで、65535から-1と表現する
    // 16bit分解能: 0.0078°C ≒ 1/128
    temperature = (double)raw_data-65536/128;
  } else {
    temperature = (double)raw_data/128; 
  }
  
  lcd.print(temperature);
  Serial.print(temperature,4);
  Serial.println("[°C]");
  
  delay(500);
}