• 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

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

現在の場所:ホーム / Arduino / Arduino基礎編 / ArduinoでSTEM教育​ 基礎編:温湿度センサとサーミスタ

ArduinoでSTEM教育​ 基礎編:温湿度センサとサーミスタ

2019年10月14日 by STEMSHIP コメントを書く

今回は、Arduinoで温度と湿度をLCDに表示する方法を紹介します。測定方法は、温湿度センサとサーミスタによる2通りの方法について説明します。LCDの使用方法については、以前の記事(ArduinoでSTEM教育​-基礎編:LCD)を参照してください。

目次

  • 使用する部品一覧
  • DHT11温度湿度センサの特徴や取り扱い方法
  • サーミスタの特徴や取り扱い方法
  • 回路図
  • 配線図
  • 組立完成写真
  • プログラム
  • 動かしてみよう
  • 今回学んだポイント
  • 改造してみよう

使用する部品一覧

使用する部品は図のとおりです。これらの部品は、すべて「ELEGOO Arduino用のMega2560スタータキット」に含まれています。

  • Arduino MEGA2560 R3 …1個​
  • 830穴 ブレッドボード …1個​
  • LCD1602モジュール …1個​
  • ポテンショメータ(10kΩ) …1個
  • 温湿度センサDHT11 …1個​
  • サーミスタ …1個​
  • 10kΩ抵抗 …1個
  • ジャンパワイヤ(オス-オス) …18個​
  • ジャンパワイヤ(オス-メス) …3個​

DHT11温度湿度センサの特徴や取り扱い方法

今回は、DHT11という温度湿度センサを使用します。​このモジュールは、温度と湿度をデジタル信号で出力します。​​モジュールの端子は3本あります。左から順に、通信・電源・GNDという構成です。​このセンサー用のライブラリを使用することで、プログラムコードを短く簡単に作成できるという利点があります。​

サーミスタの特徴や取り扱い方法

サーミスタは、温度で抵抗が大きく変化する抵抗です。​NTC(負の温度係数)とPTC(正の温度係数)の2種類あります。一般的に、温度測定にはNTCセンサが使用されます。​サーミスタを使用して得られる情報は電圧値なので、サーミスタの温度特性をデータシートから読み取って、演算するプログラムを書く必要があります。​モジュールと比較すると、演算コードを自作する必要があるため、手間がかかりますが、安価で小さな回路を作成できるという利点があります。​

回路図

まず、DHT11センサの接続について説明します。​V端子は5V、G端子はGND、S端子はD2端子に接続します。​

​次に、サーミスタの接続について説明します。​サーミスタは、片方を5Vに接続し、もう片方は10kΩ抵抗に接続します。​10kΩ抵抗のもう片方は、GNDに接続します。​そして、サーミスタと抵抗の中間部(抵抗分圧値)をA0端子に接続します。​

このような構成にすることで、温度が高くなるとサーミスタ抵抗が小さくなるため、​抵抗分圧値が大きくなります。温度が低い場合はその逆となります。​

配線図

ブレッドボードを使用した配線は図のとおりになります。

組立完成写真

実際に組み立てた写真です。同じようにできましたか?​

プログラム

最初に、DHT11用のライブラリ(dht_nonblocking.h)を#includeで読み込みます。​また、センサーのタイプを#defineで定義します。​​次に、センサーで使用する通信ピンとサーミスタで使用するピンの番号を定義します。​​読み込んだセンサのライブラリのDHT_nonblockingクラスを使用するための準備をします。​​mesure_enviroment関数は、DHTセンサの測定結果を取得できる場合はTrueを返し、そうでない場合はFalseを返します。​

メインループの冒頭で、サーミスタの電圧値を温度変換する計算方法を記述します。analogRead()でサーミスタの電圧値をアナログ入力端子から読み取ります。​そして、その結果をもとに、絶対温度に変換したあと、セルシウス温度に変換します。​​

次に、LCDに表示する文字を記述します。​if文でDHTセンサの測定結果が利用できるかどうかを判別し、利用できる場合は温度と湿度をLCDに表示します。​そうでない場合は、サーミスタで測定した温度を表示します。​

//www.stemship.com
//2019.10.12

#include <LiquidCrystal.h>
#include <dht_nonblocking.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11

static const int DHT_SENSOR_PIN = 2;
static const int THERM_PIN = 0;

//                BS  E  D4 D5  D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );


void setup( )
{
  lcd.begin(16, 2);
}

static bool measure_environment( float *temperature, float *humidity )
{
  static unsigned long measurement_timestamp = millis( );

  /* Measure once every four seconds. */
  if( millis( ) - measurement_timestamp > 3000ul )
  {
    if( dht_sensor.measure( temperature, humidity ) == true )
    {
      measurement_timestamp = millis( );
      return( true );
    }
  }

  return( false );
}

void loop( )
{
  //DHT-sensor
  float temperature;
  float humidity;

  //Thermistor
  int tempReading = analogRead(THERM_PIN);
  double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
  tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK );       //  Temp Kelvin
  float tempC = tempK - 273.15;            // Convert Kelvin to Celcius

  /* Measure temperature and humidity.  If the functions returns
     true, then a measurement is available. */
  if( measure_environment( &temperature, &humidity ) == true )
  {
    // Display Temperature in C
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp         C  ");
    lcd.setCursor(6, 0);
    lcd.print(temperature);
    // Display Humidity in %
    lcd.setCursor(0, 1);
    lcd.print("Humid        %  ");
    lcd.setCursor(6, 1);
    lcd.print(humidity);
    delay(2000);
  }
  else
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("By Thermistor");
    lcd.setCursor(0, 1);
    lcd.print("Temp         C  ");
    lcd.setCursor(6, 1);
    lcd.print(tempC);
    delay(10);
  }

}

動かしてみよう

プログラムを書き込んで、実際に動かしてみてください。

今回学んだポイント

  • HTCモジュールは、ライブラリを使用することで、温度と湿度をプログラム上で簡単に扱うことができる。​
  • HTCモジュールとArduinoの通信は、デジタル線1本のみのため、I/Fを簡素化できる。​
  • サーミスタを温度計として使用するには、サーミスタの温度特性を理解して、取得電圧値から温度に変換する必要がある。​
  • サーミスタの電圧値は、analogRead()関数を使用することで読み取ることができる。

改造してみよう

もう少し理解を深めるために、自分で改造してみてください。​

  • HTCセンサとサーミスタの測定温度差をLCDに表示してみよう。​
  • 測定温度や湿度が前回測定値と変わらないときは、LCD表示は更新せず、変わったときだけ更新するようにしてみよう。

Filed Under: Arduino基礎編 関連タグ:温度センサ

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