エントリー

カテゴリー「気象センサー」の検索結果は以下のとおりです。

気象関係センサーの使い道を考える

温度,湿度,気圧センサーを使って何ができるか(ぼちぼち)考えてみる

もう1つ雷センサーがあるが検証する方法が現状ないので置いてある

この雷センサーも追加して考える

設置型運用

気象観測(温・湿・圧)

  • いわゆるアメダスのような物
  • 時刻取得とログ機能が必要
  • 公開するならWebサーバへデータを送り込む機能が必要
  • サーバへデータを送り込むなら時刻(RTC)は無くてもよい
  • 降水量がわからないとダメか
  • ログから天気予報を出せないか

部屋の温度管理(温・湿)

  • データはWebサーバで収集して全部屋の温湿度を参照できるようにする
  • 外気温も欲しい
  • 火災報知器になるかな?(反応が遅いので不向きだけど)
移動型運用

以下の機能を持ち歩けるようにする

センサー,表示部以外にブザーがいるかな

  • 温度計
  • WBGT(暑さ指数)監視
  • 高度計
  • 相対的な高度計
  • 雷警告
参考

iPhone6には気圧センサーが搭載されており移動時の高度ログを作っている

例えば運動用センサーとして高低差を見てエネルギー消費量の計算を行ったり,現状気圧から天気予報も行うようだ

人がいるところに限定されるけど全スマホから気圧情報をかき集めたら気圧マップができそうだね

設置型でデータ収集(転送)をどうするか?いろいろ調べていたらEPS-WROOM-02が面白そうだ(懸案なのは消費電力かな)

大気圧センサ(LPS25H)を試す

これまでの続きで大気圧センサ(LPS25H)を試してみる

温湿度センサを繋いでいるブレッドボードに追加

FSTN液晶モジュールもそのままにしてあるためSPIで接続しCSを8にする

 (LPS25H)      (arduino)          (ATMEGA328P)
1    VDD        +3.3V
 2    SCL        13                    19                SPI共通
 3    SDA/SDI    11                    17                SPI共通
4    SAO/SDO    12                    18                SPI共通
5    CS          8                    14                SPI別
6    NC
7    INT1
8    GND        GND

こちらからライブラリをいただいてテストプログラムを調整

// 大気圧センサLPS25H(SPI接続)のテスト
//
#include <SPI.h>
#include "skLPSxxSPI.h"

#define LPS25H_CS    8

skLPSxxx LPS(LPS25H,LPS25H_CS);             // デバイスはLPS25Hを指定

void setup() {
    int ans;

    // シリアルモニターの設定
    Serial.begin(9600);
    // SPIの初期化
    SPI.begin();                            // SPIを行う為の初期化
    SPI.setBitOrder(MSBFIRST);              // ビットオーダー
    SPI.setClockDivider(SPI_CLOCK_DIV4);    // クロック(CLK)をシステムクロックの1/4で使用(16MHz/4)
    SPI.setDataMode(SPI_MODE3);             // クロック極性 1(HIGH) クロック位相 1(HIGH)

    pinMode(LPS25H_CS, OUTPUT);             // 気圧センサーのCS

    delay(3000);                            // 3Sしたら開始

    // 気圧センサの初期化を行う(更新速度は1Hz)
    ans = LPS.PressureInit();
    if(ans == 0) {
        Serial.println("Initialization normal");
    } else {
        Serial.print("Initialization abnormal ans=");
        Serial.println(ans);
    }
    delay(1000);
}
void loop() {
    LPS.PressureRead();                     // 圧力と温度を読み出す
    Serial.print("[LPS25H]");
    Serial.print(Press);                    // 気圧値の表示を行う
    Serial.print(" hPa  ");
    Serial.print(Temp);                     // 温度の表示を行う
    Serial.println(" 'C");

    delay(1000);                            // 1秒後に繰り返す
}

 

特に問題なく動作確認完了

 

温湿度をFSTN液晶モジュールで表示

温湿度センサ(DHT11)の続きで,温湿度データをFSTN液晶モジュールで表示してみた

1

フォントをそこそこのサイズにしないと見え難いためu8glibのソースを見ながら適切なフォントを選択

#include "U8glib.h"
#include "DHT.h"

U8GLIB_MINI12864 u8g(10, 9);
DHT dht(2, DHT11);

void draw(float h, float hic) {
    u8g.setFont(u8g_font_helvR24);
    u8g.setPrintPos(4, 28);
    u8g.print(hic);
    u8g.setPrintPos(94, 28);
    u8g.print("'C");
    u8g.setPrintPos(4, 60);
    u8g.print(h);
    u8g.setPrintPos(94, 60);
    u8g.print("%");
}
void setup(void) {
    dht.begin();
    u8g.setContrast(190);
}
void loop(void) {

    // Wait a few seconds between measurements.
    delay(2000);

    float h = dht.readHumidity();
    float t = dht.readTemperature();
    if(isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
    }
    float hic = dht.computeHeatIndex(t, h, false);

    // picture loop
    u8g.firstPage();
    do {
        draw(h, hic);
    } while(u8g.nextPage());
}

ところでデータシートを見ると,この温湿度センサ(DHT11)は,やっぱ廉価版のせいか小数点以下のデータはない(上で表示している小数点以下は補正で出てるだけ)

以下抜粋

Data consists of decimal and integral parts.
A complete data transmission is 40bit, and the sensor sends higher data bit first.
Data format: 8bit integral RH data + 8bit decimal RH data + 8bit integral T data + 8bit
decimal T data + 8bit check sum.
If the data transmission is right, the check-sum should be the last 8bit of "8bit integral
RH data + 8bit decimal RH data + 8bit integral T data + 8bit decimal T data".

要約すると,

データは40ビットでMSBから送られてくる

つまり全体は5バイト,最初の2バイトが湿度,次の2バイトが温度でそれぞれ1バイト目が整数部,2バイト目が小数点以下部となる

最後の1バイトはCRC(チェックサム)で1~4バイトを加算した数(オーバーフロー部は捨てる)

そして温湿度センサ(DHT11)の場合は,温湿度の2バイト目の小数点以下が必ず0になっている

湿度は製品で値がまちまちなようなので小数点以下はいらないかなと思うけど,気温はせめて0.5位までは欲しいかなと思うのでちょっと残念(使い場所を考えないといけないな)

 

次は大気圧センサを追加してみる

LPS25H

大気圧だけでなく温度も取得できるようだ

温湿度センサ(DHT11)を動作させてみた

自宅サーバの外気温をチェックするために購入しておいた温湿度センサを動作させてみた

秋月で購入した「温湿度センサ モジュール DHT11

温湿度センサ

表

裏

どうやって繋いで?データはシリアルで形式は?とデータシートを眺めて簡単ではないなと「DHT11」でググってみたらライブラリがあったので楽勝で動作確認できた(こちらを覚えておくと良さそう)

接続

サンプルプログラム

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2     // what digital pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
}

結果

表示方法を覚えるために,まずはこの出力をFSTN液晶で行ってみようと考えている

(追記)

今後,参考になりそうなサイトなど

arduino温湿度測定ロガー・湿度センサーの比較

aitendoの温度湿度センサー素子

・秋月とaitendoの(製造元が異なるのか)データシートが違い,動作電圧が秋月では3.5-5.5,aitendoでは3-5.5Vなのだが本体(裏)には3.3-5.5と記載されている

・3.3Vで動作させてみた結果

途中で5Vから3.3Vに変更,部屋にある温度計と比べてみると3.3V駆動時の温度のほうが正しいようだ(5Vでは問題あるのか?)

ページ移動

  • 前のページ
  • 次のページ
  • ページ
  • 1

ユーティリティ

タグクラウド

検索

エントリー検索フォーム
キーワード

Feed