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

 Adafruitから入手した温湿度センサSHT40を利用します。

 SHT40は、Sensirionから販売されていたSHT3xシリーズの次世代シリーズの製品です。SHT3xシリーズとSHT4xシリーズの違いを明快に示した文書は見つかっていません。TI社の新しい温湿度センサは、最近の汚れた空気の環境でも長期にわたって動作するなどという特徴が書いてあったので、同様な機能アップなのかもしれません(あくまでも推定)。

 AdafruitのSHT4xは、執筆時点で3種類あります。

 

  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で制御する場合、特に、ジャンパ線をつなぐなどは不要です。

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

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

 SHT40のデータシート

  • 電源電圧  1.08~3.6V
  • 平均供給電流 0.4 µA
  • 湿度 確度;±1.8%RH、分解能;0.01%RH 応答速度;4秒
  • 温度 確度;±0.2℃、分解能;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ライブラリをインストールします。

 インストールを始めると次のパネルが出ました。
 全てをインストールを選びました。

サンプル・スケッチ①

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

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

サンプル・スケッチ②

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

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

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

 loop{}は、そのまま使いました。

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


// #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);
}

 実行例です。loop{}内で型番をSHT41と記述しているので、使っているセンサはSHT40ですが、OLEDにはSHT41と表示されています。

前へ

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

次へ

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