○ AHT21B 温湿度センサー

アマゾンにて購入しました、AHT21B 温湿度センサー
温湿度センサーからArduinoにて値を取得します、センサーの動作電圧は2.2V〜5.5Vなので電圧は問題ないです。
接続はI2c接続ですので、VCCと5V、GNDとGND、SCLとA5、SDAとA4、を接続します。

▼ ライブラリを使用して値を読み出す
スケッチ → ライブラリをインクルード → ライブラリの管理...にて Adafruit AHTX0 を検索しインストールボタンを押して、依存関係のポップアップが出たらInstall all を選択します。
次のコードを走らせると温度と湿度を取得できます。
#include <Adafruit_AHTX0.h>
Adafruit_AHTX0 ahtx0;
void setup() {
Serial.begin(9600);
if (!ahtx0.begin()) {
Serial.println("ERROR");
while (1);
}
}
void loop() {
sensors_event_t humidity, temperature;
ahtx0.getEvent(&humidity, &temperature);
Serial.print(temperature.temperature);
Serial.print("°C " );
Serial.print(humidity.relative_humidity);
Serial.println("%");
delay(1000);
}
■ I2cの他のセンサーも同時接続する
I2cの異なるアドレスを持ったセンサーは識別できますので同時接続できます。
全てのセンサーの VCCと5V、GNDとGND、SCLとA5、SDAとA4、を並列接続します。
今回は、BMP180 大気圧センサーを並列に取り付けました。

#include <Adafruit_BMP085.h>
#include <Adafruit_AHTX0.h>
Adafruit_BMP085 bmp;
Adafruit_AHTX0 ahtx0;
void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("BMP180 ERROR");
while (1);
}
if (!ahtx0.begin()) {
Serial.println("AHT21B ERROR");
while (1);
}
}
void loop() {
sensors_event_t humidity, temperature;
ahtx0.getEvent(&humidity, &temperature);
Serial.print(temperature.temperature);
Serial.print("°C " );
Serial.print(humidity.relative_humidity);
Serial.print("% ");
Serial.print(bmp.readTemperature());
Serial.print("°C ");
Serial.print((double)bmp.readPressure() / 100);
Serial.println("hPa");
delay(1000);
}
赤文字部分が、BMP180 大気圧センサーの部分です。
このプログラムを走らせると気温、湿度、気温、気圧がシリアルモニタに出力されます。
アドレスの同じセンサーを複数接続する場合には、マルチプレクサなどで切り分ける工夫が必要になります。
■ 1602 I2C液晶モジュールも同時接続する
センサーと同様に VCCと5V、GNDとGND、SCLとA5、SDAとA4、を並列接続します。
1602 I2C液晶モジュールのライブラリのインストール方法などはこちら
#include <Adafruit_BMP085.h>
#include <Adafruit_AHTX0.h>
#include <LiquidCrystal_I2C.h>
Adafruit_BMP085 bmp;
Adafruit_AHTX0 ahtx0;
//アドレス0x27 16文字2行の液晶
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
if (!bmp.begin()) {
lcd.print("BMP180 ERROR");
while (1);
}
if (!ahtx0.begin()) {
lcd.print("AHT21B ERROR");
while (1);
}
}
void loop() {
sensors_event_t humidity, temperature;
ahtx0.getEvent(&humidity, &temperature);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(temperature.temperature);
lcd.print(" " );
lcd.print(humidity.relative_humidity);
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print(bmp.readTemperature());
lcd.print(" ");
lcd.print((double)bmp.readPressure() / 100);
lcd.print("hPa");
delay(500);
}

上記のプログラムを走らせると液晶に値が表示されます。
■ 無駄に色々同時接続する
GY-30 照度センサーもI2cでしたので並列に接続してみます。
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_AHTX0.h>
#include <LiquidCrystal_I2C.h>
Adafruit_BMP085 bmp;
Adafruit_AHTX0 ahtx0;
//アドレス0x27 16文字2行の液晶
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define GY30_ADDRESS 0b00100011
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
if (!bmp.begin()) {
lcd.print("BMP180 ERROR");
while (1);
}
if (!ahtx0.begin()) {
lcd.print("AHT21B ERROR");
while (1);
}
gy30_init();
}
void loop() {
sensors_event_t humidity, temperature;
ahtx0.getEvent(&humidity, &temperature);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(temperature.temperature);
lcd.write(0xdf);
lcd.print("C ");
lcd.print(gy30_read());
lcd.print("Lx");
lcd.setCursor(0, 1);
lcd.print(humidity.relative_humidity);
lcd.print("% ");
lcd.print((double)bmp.readPressure() / 100);
lcd.print("hPa");
delay(500);
}
void gy30_init(void) {
Wire.begin();
Wire.beginTransmission(GY30_ADDRESS);
Wire.write(0b00010000);
Wire.endTransmission();
}
unsigned short pos;
unsigned short gy30_read() {
Wire.requestFrom(GY30_ADDRESS, 2); //接続し2byte取得する
if (Wire.available()) {
unsigned char H, L;
H = (unsigned char)Wire.read();
if (Wire.available()) {
L = (unsigned char)Wire.read();
pos = H << 8;
pos = pos + L;
pos = pos / 1.2;
}
}
return pos;
}

各種センサーを取り付けて上記のプログラムを走らせると液晶にルクス値が追加されます。
▲トップページ