• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / XBee / Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 by STEMSHIP コメントを書く

XBeeモジュールとArduinoを利用した、センサノードの製作にチャレンジしましょう。

今回は、温湿度センサDHT11とArduinoを利用する方法を紹介します。

このDHT11をはじめ、市販されているセンサの中には、XBeeモジュールから直接読みだすことができず、データを取り出すためにマイクロコントローラが必須となるものがあります。

こうしたセンサは、測定値をデジタル信号で出力しており、XBeeモジュールではデータを正しく読み取ることが難しいからです。この後のセクションで、XBeeモジュールに直接接続できる、シンプルなアナログ出力のセンサも紹介します。

この例では、ブレッドボード上でArduinoにDHT11温湿度センサを接続してデータを読み出します。その他に必要な外付け部品は、出力データをArduinoが読み取りやすくするための抵抗1本だけです。

早速、ブレッドボード上に回路を組み立ててみましょう

ハードウェアの作製

この工作に必要な部品は、Arduino UNO、温湿度センサDHT11、ブレッドボード、4.7kΩの抵抗(色帯:「黄・紫・赤・金」もしくは「黄・紫・黒・茶・茶」)、ブレッドボード用のジャンパー線です。

まず、Arduino UNOをブレッドボードの横に置きます。図1に示す通り、DHT11温湿度センサをブレッドボードに差し込みます。

次に、Arduinoからブレッドボードに電源を供給します。Arduinoの「5V」ピンをブレッドボードの赤色の電源レールに、「GND」ピンを黒色の電源レールに、それぞれジャンパー線を使用して接続します。

続いて、温湿度センサDHT11に配線していきます。温湿度センサDHT11には4本のピンがありますが、そのうち3本を使用します。表6-1に接続先を示します。水色のセンサ本体が上を、ピンが下を向くように持った時、左から1、2、3、4ピンの順番です。

図1を参考に、間違いのないように配線してください。

図1 DHT11とArduinoを配線する

ピン接続先
15V、4.7kΩ抵抗(プルアップ抵抗)
2ArduinoのD7ピン、4.7kΩ抵抗
3接続なし
4GND
表1 DHT11のピンの接続先

Arduino IDEの設定

ArduinoでDHT11を使用するには、DHT11用のライブラリが必要です。ライブラリは、Arduino IDEのライブラリマネージャから簡単にインストールできます。

Arduino IDEを開き、メニューから「スケッチ」>「ライブラリをインクルード」>「ライブラリを管理」をクリックすると、図6-22のようなライブラリマネージャが開きます。

図2 ライブラリマネージャ

ライブラリマネージャは起動後すぐにサーバーに接続し、最新のライブラリのカタログをダウンロードします。ここで少し待たされることがあります。

ダウンロードが終わり、ライブラリマネージャが使えるようになったら、右上のテキストボックスに「DHT11」と入力してENTERキーを押します。関連するライブラリがすべて表示されます。

これらの中から、AdafruitのDHTセンサライブラリ「DHT Sensor Library」を選択し、「インストール」をクリックします。図3のような画面が出た場合は、「Install all」をクリックしてください。このライブラリを使うのに関連して必要な別のライブラリを、自動で一緒にインストールしてくれます。

図3 必要な関連するライブラリのインストール

ハードウェアの製作と、DHT11ライブラリの準備が整ったので、早速スケッチを書いてみましょう。

スケッチ(プログラム)の作成

これまでに作成した他のスケッチと同様に、ライブラリをインクルードし、定数を定義します。加えて、メインのloop文の前でDHTオブジェクトのインスタンスを生成します。

ここでは、まずDHTライブラリをインクルードし、センサのデータ読み取りピンをArduinoのD7ピンに設定してDHTクラスのインスタンスを生成します。今回使用しているライブラリはDHTシリーズの様々な温湿度センサに対応しているので、使用するセンサのタイプを定義する必要があります。

これとは別に、センサ読み取りの時間間隔を5秒と定めます。

スケッチの前文は次のようになります。

#include "DHT.h"

#define DHTPIN 7    //DHT11はD7ピンに接続
#define DHTTYPE DHT11   // 使用するセンサ:DHT11

#define read_delay 5000      //センサ読み取り間隔:5秒

続いて、DHTクラスのインスタンスを生成します。前文で指定したピンと使用するセンサのタイプを渡します。

DHT dht(DHTPIN, DHTTYPE);

前述のように、DHT11はデータ通信をするための独自のプロトコル(通信をする上での約束ごと)を持っており、簡単にはデータを取り出すことができません。

そこでライブラリを使用します。ライブラリを使用することで、簡単にセンサデータを取り出せるようになります。表6-2のようなメソッド(命令)を呼び出すだけで、変数に温度や湿度のデータを保存できます。

なお、「摂氏」「華氏」というのは温度を表す数字の種類のことで、通常私たちは「摂氏」と呼ばれる指標を使用しています。体感温度は、温度と湿度の情報を基に計算した値を返してくれます。

表2 DHTライブラリでデータを読み取る方法

メソッド動作
dht.readHumidity()湿度を読み取る
dht.readTemperature()温度を摂氏で読み取る
dht.readTemperature(true)温度を華氏で読み取る
dht.computeHeatIndex(temp_c,humidity)体感温度を摂氏で読み取る
dht.computeHeatIndex(temp_f,humidity,false)体感温度を華氏で読み取る

温度や湿度といったデータを読み取るためには、まずデータを格納するための変数を用意してこれらのメソッドを呼び出します。スケッチを分かりやすくするため、一連のメソッドを「read_data()」という関数として以下にまとめてみました。

■read_data()関数

void read_data(){
  //湿度を読み取る
  float humidity = dht.readHumidity();
  //摂氏で温度を読み取る
  float temp_c = dht.readTemperature();
  //華氏で温度を読み取る
  float temp_f = dht.readTemperature(true);

  //エラーチェック(読み取れていない数値がないか?)
  if (isnan(humidity) || isnan(temp_c) || isnan(temp_f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  //摂氏で体感温度を計算する
  float hi_c = dht.computeHeatIndex(temp_c, humidity, false);
  //華氏で体感温度を計算する
  float hi_f = dht.computeHeatIndex(temp_f, humidity, true);

  //シリアル通信で送信
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.print("% ");
  Serial.print("Temperature: ");
  Serial.print(temp_c);
  Serial.print("C ,");
  Serial.print(temp_f);
  Serial.print("F ");
  Serial.print("Heat index: ");
  Serial.print(hi_c);
  Serial.print("C ,");
  Serial.print(hi_f);
  Serial.println("F");
}

スケッチはとても簡単です。前述のように数値の読み取り・計算を行い、Serial.print()、Serial.println()メソッドでシリアルモニタに書き込んでデータをPC上に表示します。

残るはsetup()とloop()メソッドです。

setup()メソッドではシリアル通信とdhtクラスの初期化を行います。

loop()メソッドはdelay()を使って一定時間おきにread_data()関数を呼び出します。

改正したスケッチを以下に示します。

■完成したスケッチ

#include "DHT.h"
#define DHTPIN 7    //DHT11はD7ピンに接続
#define DHTTYPE DHT11   // 使用するセンサ:DHT11
#define read_delay 5000      //センサ読み取り間隔:5秒

DHT dht(DHTPIN, DHTTYPE);

void read_data(){
  //湿度を読み取る
  float humidity = dht.readHumidity();
  //摂氏で温度を読み取る
  float temp_c = dht.readTemperature();
  //華氏で温度を読み取る
  float temp_f = dht.readTemperature(true);

  //エラーチェック(読み取れていない数値がないか?)
  if (isnan(humidity) || isnan(temp_c) || isnan(temp_f)) {
    Serial.println(F("Failed to read from DHT sensor! "));
    return;
  }

  //摂氏で体感温度を計算する
  float hi_c = dht.computeHeatIndex(temp_c, humidity, false);
  //華氏で体感温度を計算する
  float hi_f = dht.computeHeatIndex(temp_f, humidity, true);

  //シリアル通信で送信
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.print("% ");
  Serial.print("Temperature: ");
  Serial.print(temp_c);
  Serial.print("C ,");
  Serial.print(temp_f);
  Serial.print("F ");
  Serial.print("Heat index: ");
  Serial.print(hi_c);
  Serial.print("C ,");
  Serial.print(hi_f);
  Serial.println("F");
}

void setup(){
  Serial.begin(9600); //シリアル通信開始
  dht.begin();
  delay(1000);
  Serial.println("Welcome to the DHT-11 Arduino example!");
}

void loop(){
  delay(read_delay);
  read_data();
}

動作テスト

早速作成したスケッチをArduinoにアップロードして、動作テストを行ってみましょう。

ArduinoをPCに接続してください。

まずはスケッチをアップロードする前に一度コンパイルしておきましょう。Arduino IDEのツールバー左端のチェックマークをクリックして、画面下部のメッセージ画面を観察します。エラーが出ていれば、修正してコンパイルをやり直します。

よくあるエラーとしては、DHTライブラリや関連するライブラリがインストールできていない・読み込めていない(Arduino IDEを一度閉じて、再立ち上げしてみましょう)、タイピングの間違い、構文エラー(特にカッコの対応が取れていない、行末の「;」の付け忘れ)などが挙げられます。

正しくコンパイル実行できたら、メニューバー「ツール」の「ボード」が「Arduino UNO」に、「シリアルポート」が正しく設定されていることを確認して、ツールバーの「→」のボタンをクリックしてArduinoにアップロードします。

アップロードが終わったらシリアルモニタを開きます。

以下のように出力されていれば成功です。

■DHT11センサのシリアルモニタ出力

Welcome to the DHT-11 Arduino example!

Humidity: 38.00% Temperature: 26.00C ,78.80F Heat index: 25.65C ,78.17F

Humidity: 39.00% Temperature: 26.00C ,78.80F Heat index: 25.67C ,78.21F

Humidity: 37.00% Temperature: 27.00C ,80.60F Heat index: 26.72C ,80.09F

…

Arduinoホストのセンサノードが完成しました。

センサに息を吹きかけたり、手で温めたりすると温度が変わっていくのが観察できるでしょう。

次回は、ここにさらにXBeeモジュールを追加することで、センサとArduinoが離れていてもデータを読み取れるようにしてみましょう。


Filed Under: XBee

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM