音と光と温度と湿度(Grove Beginner Kit For Arduino検証報告)

Grove Beginner Kit For Arduino(以下、Beginner Kit)検証報告の5番目です。前回の記事はこちらです。
hirocom777.hatenadiary.org

Beginner Kitのセンサーモジュール

 前回はLEDモジュールとポテンショメーターを使って、アナログ入出力の基本をご紹介しました。今回は、その他のアナログ入力デバイス(光センサー、音センサー)について書きたいと思います。また、温湿度センサーについてもご紹介します。

f:id:HiroCom777:20200904222425j:plain

アナログ入力センサー

 アナログ入力センサー(光センサー、音センサー)は物理的な入力(光、音)を電気(電圧)に変換する機能を持っています。電圧、ということはCPUボードのアナログ入力機能を使えば入力を数値に変えられるということです。

簡単な使用例

 それでは、簡単な使用例をご紹介します。それぞれの入力をLEDへのアナログ出力で表示してみます。前回同様、CPUボード上でD6と表示のあるGROVEコネクタと、LEDモジュールのGROVEコネクタを添付のGROVEケーブルで接続してください。
まずは音センサーから。

int sound;

void setup() {
  pinMode(4, INPUT);
  pinMode(6, OUTPUT);
  pinMode(A2, INPUT);
  Serial.begin(9600);
}

void loop() {
  sound = analogRead(A2);
  if (200 < sound) {
    analogWrite(6, sound / 4);
  } else {
    analogWrite(6, 0);
  }
  Serial.println(sound);
  delay(500);
}

書き込んで実行すると、音センサーの入力に反応してLEDが光ります。このスケッチは簡単ですね。雑音を拾わないように低い値はカットするようにしています。検出値をシリアルモニターに送信しているので確認してみてください。

続いて光センサーです。

int light;

void setup() {
  pinMode(4, INPUT);
  pinMode(6, OUTPUT);
  pinMode(A6, INPUT);
  Serial.begin(9600);
}

void loop() {
  light = analogRead(A6);
  if (light < 500) {
    analogWrite(6, (1023-light) / 4);
  } else {
    analogWrite(6, 0);
  }
  Serial.println(light);
  delay(500);
}

こちらは音センサーと逆で、光を検出しなくなるとLEDが光ります。周りが暗くなると点灯する照明は、このような仕組みを使っているのだと思います。
こちらも検出される値によって処理を微妙に変えています。

この様に、センサーとアナログ入力を使用して色々な仕組みが作れます。センサーからの値は必ずしもこちらが要求する形になるとは限りませんので、必要に応じて値を加工して使用するのがコツですね。

温湿度センサー

 続いて温湿度センサーです。上で接続したケーブルは、はずしておきましょう。こちらはアナログ入力ではなくシリアル通信で接続しています。温湿度は検出する値の単位が明確に決まっていて(度、%)センサーは正確な値を返すように校正されています。そのためシリアル通信によるデジタル信号で正確な値を取得する必要があるわけです。前出の音センサー、光センサーはある程度調整したセンサーの値を電圧で直接返しているだけなのです。スケッチはこちらになります。

#include "DHT.h"
DHT dht(3, DHT11);
int temp;
int humid;

void setup() {
  Serial.begin(9600);
}

void loop() {
  temp = dht.readTemperature();
  humid = dht.readHumidity();
  Serial.print("Temp:");
  Serial.print(temp);
  Serial.print("℃   ");

  Serial.print("Humidity:");
  Serial.print(humid);
  Serial.println("%");

  delay(1000);
}

一定の時間間隔でシリアルモニターに温度と湿度を返す様になっています。1行目でライブラリのヘッダファイル"DHT.h"を読み込み。次の行でライブラリの関数で3番ピンを温湿度センサーに割り当てています。このライブラリは複数のセンサーに対応しているようで、今回は"DHT11"を選択しています。

ところで、シリアル通信を使用すると述べましたが温湿度センサーに使用しているシリアル通信は独自の規格のもので、一般的にArduinoで使用しているシリアル通信とは異なります。先頭で呼び出しているモジュールは、この独自のシリアル通信を実現するためのものです。このセンサーは比較的安価なのはいいのですが、この様に癖があるのであまりお勧めしません。今回はBeginner Kitに含まれているためご紹介しました。

また、このセンサーを使用するには専用のライブラリをインストールする必要があります。ArduinoIDEのメニュー ファイル⇒環境設定を指定して、”スケッチブックの保存場所”に記述してあるフォルダ名を確認して開く。更にフォルダ下の” libraries”フォルダの下に” Grove_Temperature_And_Humidity_Sensor-master”というフォルダがあることを確認してください。ない場合には以下からZIPファイルをダウンロードして、ArduinoIDEのメニュー スケッチ⇒ライブラリをインクルード⇒.ZIP形式のファイルをインストール と進んでダウンロードしたファイルを開いてください。

https://github.com/SeeedDocument/Grove-Temperature_and_Humidity_Sensor_Pro/raw/master/res/Humidity_Temperature_Sensor_pro.zip

GROVEシステムでは他にも温湿度センサーが売られていて、そちらはI2C通信(次回ご説明します)などの方式で値をやり取りする仕組みになっています。ちょっとお高めになってしまうのですが、ちゃんとしたシステムを組む際にはそちらをご検討ください。

www.switch-science.com

I2C通信

 いかがでしたでしょうか。センサーからいろいろな値が取れるようになると、できることが広がって面白いですよね。次回はI2C通信という規格で接続されているデバイスについて紹介していきます。お楽しみに!!
hirocom777.hatenadiary.org


Arduino Grove Beginner Kit For Arduinoの連載記事はコチラからどうぞ!!