Arduino UNO R4 Minimaでセンサ・インターフェーシング ④ 温湿度センサSi7021の測定結果を7セグメントLEDに表示

 センサの測定値は、シリアルモニタに表示できました。これを、見やすい形で、外部に知らせるために、4桁の7セグメントLED表示器を利用します。

 AdafruitのStemma QT/Qwiicボードの中に、4桁の7セグメントLED表示器があります。コントローラはHT16K33です。白色をスイッチサイエンスから入手しました。

AdafruitのStemma QT/Qwiic7セグメント4桁ディスプレイ (白色)のおもなスペック

  表示器のスペックなどの解説

  • LEDディスプレイ 文字高:0.56インチ(約14 mm)
  • コントローラ:HT16K33のスレーブ・アドレスはデフォルトが0x70、ボード上にある三つのジャンパの設定で0x70~0x77に設定できる
  • 動作電圧 5Vが望ましいが3.3Vでも動作する

接続

 温湿度センサSi7021の空いているStemma QT/Qwiicコネクタに、Stemma QT/Qwiic 7セグメント4桁ディスプレイ (白色)を専用のケーブル(いろいろな長さが市販されている)でつなぎます。

 電源5Vでi2cScanner.ino(前回のスケッチ)を動かします。3.3Vではどのデバイスも表示されません。

 実際のスケッチは3.3Vで動かします

<スレーブ・アドレスの計算>

A2 A1 A0 アドレス
- - - 0x70
- - ショート 0x71
- ショート - 0x72
- ショート ショート 0x73
ショート - - 0x74
ショート - ショート 0x75
ショート ショート - 0x76
ショート ショート ショート 0x77

ライブラリを導入

 表示器が使っているHT16K33コントローラを利用するには、二つのライブラリが必要です。

 Adafruit LED Backpack を導入します。

 次に、Adafruit GFXライブラリを導入します。途中、BUSなど、別途必要なものが表示されたら、全部インストールしておきます。

サンプル・スケッチを動かす

  ファイル->スケッチ例->Adafruit LED Backpackからsevenseg.inoを読み込みます。

 setup{}を、シリアルモニタに表示が出なかったので、次のように修正します。


void setup() {
#ifndef __AVR_ATtiny85__
  Serial.begin(9600);
  while (!Serial) {
    delay(10);
  }
  Serial.println("7 Segment Backpack Test");
#endif
  matrix.begin(0x70);
}

 デモ表示が始まります。

 表示に必要な部分を残し、整理します。


//  Written by Limor Fried/Ladyada for Adafruit Industries.  

#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"

Adafruit_7segment matrix = Adafruit_7segment();

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    delay(10);
  }
  Serial.println("7 Segment Backpack Test");

  matrix.begin(0x70);
  matrix.setBrightness(0x05);  // default 0x0E
}

void loop() {
  float temperature = 37.99;
  matrix.print(temperature, DEC);
  matrix.writeDisplay();
  delay(2000);

  float humidity = 89.00;
  matrix.print(humidity, DEC);
  matrix.writeDisplay();
  delay(5000);
}

 このスケッチでは、温度の37.99と湿度の89.00を交互に表示します。

 輝度の調整をするmatrix.setBrightness(0x05);は少し暗め、0x1fだと明るめです。

センサの値を 7セグメント4桁ディスプレイ 表示するスケッチ

 温湿度センサSi7021の測定した温度と湿度を、上記のスケッチのloop{}のところで変更します。


//  Written by Limor Fried/Ladyada for Adafruit Industries.  

#include <Wire.h>  // Enable this line if using Arduino Uno, Mega, etc.
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_Si7021.h"

Adafruit_7segment matrix = Adafruit_7segment();
Adafruit_Si7021 sensorSi7021 = Adafruit_Si7021();

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    delay(10);
  }
  Serial.println("\n Si7021 sensor + 7 Segment");

  matrix.begin(0x70);
  matrix.setBrightness(0x05);  // default 0x0E
  sensorSi7021.begin();
}

void loop() {
  Serial.print("Temperature: ");
  Serial.println(sensorSi7021.readTemperature(), 2);
  Serial.print("\tHumidity:    ");
  Serial.println(sensorSi7021.readHumidity(), 2);

  matrix.print(sensorSi7021.readTemperature(), DEC);
  matrix.writeDisplay();
  delay(2000);

  matrix.print(sensorSi7021.readHumidity(), DEC);
  matrix.writeDisplay();
  delay(5000);
}

 実行している様子です。

前へ

Arduino UNO R4 Minimaでセンサ・インターフェーシング ③ 温湿度センサSi7021のi2c信号

次へ

Arduino UNO R4の登場で広がるArduinoの世界(2)Arduino UNO R4 Minimaを動かしてみる