Arduino UNO R4 Minimaでセンサ・インターフェーシング ⑦ 温湿度センサSHT45

 Adafruitの温湿度センサSHT4xは、執筆時点で3種類あります。ここでは、その中の一番確度の高い製品SHT45を利用します。前回、SHT40を利用しました。どちらも使い方は、まったく同じです。

 

  SHT40 SHT41 SHT45
湿度  ±1.8% typ
(25~75%)
 ±1.8% typ
(25~75%)
 ±1% typ
(25~75%)
0 ~ 100% RH での標準確度は ±3% 0 ~ 100% RH での標準確度は ±2%  
温度 ±0.2 °C typ
(0~75 °C)
±0.2 °C typ
(0~75 °C)
±0.1 °C typ
(0~75 °C)

 I2C スレーブ・アドレスとプログラムのコードはすべて同一。アドレスが同じのため、同じバスに複数個をつなぐことはできない。

AdafruitのStemma QT/Qwiicボード

 Stemma QT/Qwiic(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。

 コネクタは、表と裏のどちらも差し込めそうですが、ピンが内部の上部に並んでいるので、差し込める方向は一意です。ロック機構はないですが、すぐに抜けるということはありません。

温湿度センサSHT45のおもなスペック

 SHT4xのデータシート

  • 電源電圧  1.08~3.6V
  • 平均供給電流 0.4 µA
  • 湿度 確度;±1.0%RH、分解能;0.01%RH 応答速度;4秒
  • 温度 確度;±0.1℃、分解能;0.01℃  応答速度;2秒
  • ヒータ内蔵
  • インターフェース I2C(0~400kHz)
  • スレーブ・アドレス 0x44(固定)


使用環境

  • Arduino UNO R4 Minima
  • Arduino IDE 2.1.1
  • Windows10 22H2


接続

 Arduino UNO R4 MinimaのI2C信号とセンサをJSTコネクタでつなぎます(Stemma QT/Qwiicボードの写真の比率は大きい)。電源は3.3Vです。

ライブラリの用意

 SHT4xで検索して、見つかったAdafruit SHT4Xライブラリをインストールします。前回のSHT40でインストールした場合は、不要です。

 インストールを始めると次のパネルが出ました。
 全てをインストールを選びました。前回、インストールしたのであれば、このパネルは出ないと思われます。

サンプル・スケッチ①(前回と同じ)

 ファイル->スケッチ例->SHT4x_LibraryからSHT4test.inoを読み込みます。

 コンパイルし実行します。

サンプル・スケッチ②(前回と同じ)

 ファイル->スケッチ例->SHT4x_LibraryからSHT4_oledemo.inoを読み込みます。

  Arduino UNO R4 Minimaでセンサ・インターフェーシング ⑤ 温湿度センサSi7021の測定結果をグラフィック・ディスプレイに表示

で用いたグラフィック・ディスプレイを接続します。サンプルは、別のグラフィック・ディスプレイを利用しているので、STEMMA QT/Qwiic互換 128x64 OLED モノクロ・ディスプレイを利用するために修正します。

 loop{}は、SHT41と記述されていたところをSHT45に修正しました。

 コンパイルし実行します。


// #include <Adafruit_SH110X.h>
#include <Adafruit_SSD1306.h>
#include "Adafruit_SHT4x.h"
#include <Fonts/FreeSans9pt7b.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Adafruit_SHT4x sht4 = Adafruit_SHT4x();

void setup() {
  Serial.begin(115200);
  while (!Serial)
    delay(10); 

  Serial.println("128x64 OLED FeatherWing test");
  //display.begin(0x3C, true); // Address 0x3C default
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  
  Serial.println("OLED begun");

  // Show image buffer on the display hardware.
  // Since the buffer is intialized with an Adafruit splashscreen
  // internally, this will display the splashscreen.
  display.display();
  // delay(1000);

  // Clear the buffer.
  display.clearDisplay();
  display.display();
  
  Serial.println("Adafruit SHT4x test");
  if (! sht4.begin(&Wire)) {
    Serial.println("Couldn't find SHT4x");
    while (1) delay(1);
  }
  Serial.println("Found SHT4x sensor");
  Serial.print("Serial number 0x");
  Serial.println(sht4.readSerial(), HEX);

  sht4.setPrecision(SHT4X_HIGH_PRECISION);
  sht4.setHeater(SHT4X_NO_HEATER);
  
  display.setRotation(0);
  display.setFont(&FreeSans9pt7b);
  display.setTextColor(SSD1306_WHITE);  
}

void loop() {
  sensors_event_t humidity, temp;
  
  uint32_t timestamp = millis();
  sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
  timestamp = millis() - timestamp;

  Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
  Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");

  display.clearDisplay();
  display.setCursor(0, 20);
  display.println("SHT45 Sensor");
    display.setCursor(0, 40);

  display.print("Temp: "); 
  display.print(temp.temperature,1); 

  display.println(" C");
  display.print("Hum: "); 
  display.print(humidity.relative_humidity,1); 
  display.println(" %");
  display.display();
  yield();
  delay(5000);
}

 実行例です。

前へ

Arduino UNO R4 Minimaでセンサ・インターフェーシング ⑥ 温湿度センサSHT40

次へ

Arduino UNO R4 Minimaでセンサ・インターフェーシング ⑧ 温度センサADT7410