エントリー

カテゴリー「電子工作」の検索結果は以下のとおりです。

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

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

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

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

設置型運用

気象観測(温・湿・圧)

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

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

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

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

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

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

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

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

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

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

arduinoの開発環境の再セットアップ

Windows10にした時,Windows10にarduinoの開発環境をセットアップしたが,IDEを使っていると再々アップデートのメッセージがでてくるのでボードマネジャー関係をアップデートすると,追加したUncompatinoと秋月Arduinoマイコンキットの項目が表示されなくなり選択不可になってしまった

「boards.txt」は変更されてないようで,他のファイルを調べてみたが原因が解らない

仕方がないので開発環境の再セットアップしようと再度開発環境をダウンロード・・・そういえばArduinoチームが内部分裂して2つのIDEがあることを思い出した

調べてみると前回セットアップしたのはarduino.ccのIDEで現時点で1.6.8(既に1つマイナーアップ),もう1つはarduino.orgのIDEで1.7.8だった

今回は,IDEのアップデートメッセージで悩まされるのが嫌なので,arduino.org版のIDEをセットアップすることにして,また元の「boards.txt」は変更しないでローカル用ボードを増やすことにした

(具体的には)

①「(セットアップフォルダ)\hardware\arduino\avr」を全部コピーして「avr.local」にする

②「avr.local」の「boards.txt」を追加するボードのみの記述にする,「platform.txt」のボード名を編集(ボード切り替えメニューのセパレーターとして表示される)

とりあえず開発環境は復活

 

コンパイルすると実害はないが

「WARNING: library Wire claims to run on [avr] architecture(s) and may be incompatible with your current board which runs on [avr.local] architecture(s).」

と表示されるので(例はWireライブラリを使用した場合),消したい場合は各ライブラリの「avr.local/libraries/*/library.properties」を編集する

architectures=avr.local

IDEを再起動しないと反映されない

大気圧センサ(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

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

ページ移動

ユーティリティ

検索

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

過去ログ

Feed