エントリー

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

追加のため安価なBMP280を購入

BMP280を追加で購入しようとAmazonを閲覧していたら(¥210/個)があったので2個注文(前回は(¥368/個)で購入)

IMG_20190415_175449883.jpg

1週遅れて先週届いていたが仕事で休みもなかったので本日ようやく検証することにした

ところがBMP280はArduinoで動作させてなかったので先に検証環境を3.3V版で作る

IMG_20190414_200542920.jpg

結果は以下のとおりで残念ながら2個とも不良品

BMP280-11_2.png

BMP280-12_2.png

正常だと20.31℃,1002.92hPa位となる

(2019.4.17-18)販売店から返金するとのことで了解した

(2019.4.17)他から再度購入処理(詳細は到着予定の5/2以降で)

なんちゃって百葉箱の改善2と計画

単純なシステムだが多くの要素があり結構楽しめる

太陽電池

バッテリ充電のための太陽電池出力が不十分なため,秋月で購入した太陽電池モジュール1.15WSY-M1.15Wを使うことにした(おそらくオーバースペックとなると思うが余裕無しよりは良いかと考え採用)

IMG_20181104_134342286.jpgIMG_20181104_134335044.jpg

この太陽電池モジュールは最大で約200mAを5Vで出力することができる

使用しているリポバッテリを充電すると電流が181mAとなるのでバッテリの損傷がない程度の電流であることを確認

IMG_20181104_125033205.jpg

太陽電池モジュールの面積が現状の100均で集合した物より大きいため付替えという訳にはいかない

一体型より分離型にしたほうが融通が利きそうなので取付を分けることにし

IMG_20181104_134400445.jpgIMG_20181104_134427632.jpg

写真立てと棚の金具を利用して組み上げた

IMG_20181111_213155507.jpgIMG_20181111_213136720.jpg

水が入らないようにコーキング処理して取付

IMG_20181117_123136040.jpgIMG_20181118_155233790_HDR.jpg

(没案)

太陽電池パネルを太陽追跡で動かせば効率がアップするのではないかと考えてみた

追跡方法案1:影を追って太陽追跡する

追跡方法案2:日時で太陽の向きを計算して追跡する

上下左右の可動はステッピングモータを使用

等を考えてみたが実際に太陽電池を傾けてみても差ほど発電量が変わらなかったので今回は没とした

このくらいのサイズの太陽電池では経度(時間)に対する追跡は有効だが,緯度(日付)に対する追跡は効果が薄いようだ

尚,時間に対する追跡については,楽にメンテ可能な設置場所で日の出から日の入りまで日照のある場所が無かったので断念した

(運用結果)

日照があれば1時間で一日分の電力が補充できている

少々の曇り空でも問題ないようだ

消費電力結果

低消費に変更したスケッチで実験した結果

BT1028-1117.png

20日間(10/28~11/17)だった

35mAh×20で700mAhとなりバッテリー容量の830mAh位なので自己放電分を合わせて想定内と考えて良いだろう

強制通風筒型への改良

鉢皿の幅を広げて通気性を良くしたが,晴れの日はアメダスとの温度差は変わらなかった

百葉箱は空気の変動が自然によるためもともと気温が高くなるのだが,鉢皿によるなんちゃって百葉箱は内部の空間が狭いため熱が籠り気温の上昇が大きいようだ

流石に4℃は無視できる差ではないので強制通風筒型に新調する方向で考えることにした

しかし問題となるのが強制通風を実装するためのFANの電力である

最小であろうFANでも80mA,最小回転として30mAまで下げられたが初期動作は50mA必要

IMG_20181125_165320271.jpg

案1:24H動作は厳しいので50mAをPWMで減らす工夫が必要(PIN不足とスリープするので別コントロールとなる)

案2:計測前のみ動作させる

FANを動作させる時間の模索が必要となるが案2の方向で考えている

日照時間を追加したい

日照の定義は影ができる光力であるかどうかのことで光センサの出力値を実際に測定して模索することになる

日照0の時は雨センサで雨天かどうかの判定もできそうだ

なんちゃって百葉箱の改善

しばらく運用したところ問題点が浮上したので改善する

消費電力

実際の運用での消費電力量確認のため秋月のニッケル水素電池パック3.6V830mAh(パナソニック製)で室内試行

消費電力を20mAh/日と見積もっていたので40日は厳しくてもひと月は持つかなと思っていたら10日で停止し予想外の結果となる

以下がバッテリー電圧の状態推移で外した時のバッテリーは瀕死だった(試行時のグラフ

WS181028.pngIMG_20181025_063850020.jpg

最初の段階で計測したUSBチェッカーの消費電力値を鵜呑みにしたのが失敗だったようで再度見積もってみる

既に回路は出来上がっているので実際に動作させ登録1回分の電流を計測した

IMG_20181025_212716796.jpgIMG_20181025_212722363.jpg

左が動作時(70mA前後)で約13秒,右がディープスリープ時の電流(0.28mA)(ビデオ

(動作時)

通信のあるなしで70mAを前後するようだが70mAとして考える

(ディープスリープ時)

電流は以下のとおりで装置仕様から裏付けられる

ESP8266 10μA Deep-Sleep時
BME280 0.1μA スリープ・モード
DHT22 50μA 待機中
NJM2884 200μA 無負荷時無効電流
電圧測定 6~7μA 分圧抵抗590KΩ(470+120),4~3.5V
合計 0.268mA  

(計測データから)

1時間で 13秒 × 6回 = 78秒間動作,1日で 78秒 × 24時間 = 1872秒間 となり

70mA × 1872秒 ÷ 3600秒 = 36.4mAh

ディープスリープ時が(実際は1872s分削除だが無視して)

0.28mA × 24 = 6.72mAh

トータルで1日分が

36.4 + 6.72 = 43.12mAh

10日間で430mAhとなるがバッテリーは830mAhなので充電が不十分だったのかへたっていたのかもしれない

省電力化

三端子レギュレーターをNJM2884から消費電力30μAのNJU7223F33するとディープスリープ時の合計が0.098mAとなり約4.4mAh減るが使用したいバッテリー電圧の関係でNJM2884を選択したため変更はしない

そこでESP8266の動作時間を減らすことができれば電力消費を抑えることができるのでこちらを参考に改善してみた

対応したのは再コネクションの部分で明示的に再コネクションするより必要な情報を退避させておいて自動的に行った方が処理が早いらしい(接続は一定時間保持されているのでネゴのやり直しを行わない分が短縮されるのだろうと考える)

結果,動作時間が13秒から10秒の28.0mAhで合計34.72mAhとなる(ビデオ

省電力観測モード

通常は1時間に6回(10分毎)の観測を実行する

観測数を減らせば省電力化できるのでバッテリー容量が少なくなってきたら観測数を減らして太陽電池でのバッテリー回復を増大させる仕組みを導入

具体的にはディープスリープ時間を操作すればよく3.5V未満なら30分,3.4V未満になると60分スリープとし,それぞれ1時間に2回と1回の観測にする

アメダスとの温度差

近くにあるアメダスと日別の最高気温と最低気温を比べてみるとプラス方向に差ができている

10/23 曇・雨
    最高気温(℃) 20.1 (自宅)21.6 +1.5
   最低気温(℃) 13.8 (自宅)15.3 +1.5
10/24 晴
   最高気温(℃) 22.5 (自宅)26.6 +4.1
   最低気温(℃) 13.6 (自宅)14.8 +1.2
10/25 晴
   最高気温(℃) 20.6 (自宅)24.3 +3.7
   最低気温(℃) 11.1 (自宅)12.8 +1.7
10/26 晴・曇・雨
   最高気温(℃) 21.7 (自宅)25.7 +4.0
   最低気温(℃) 10.5 (自宅)11.8 +1.3
10/27 晴(風あり)
   最高気温(℃) 20.0 (自宅)23.1 +3.1
   最低気温(℃) 14.8 (自宅)14.5 -0.3

しかも晴の日で最高気温差の幅が大きいので鎧戸箱の空気の流れが悪く熱が籠っているのではないかと想定

鉢皿の高さは39mmで鉢皿間を20mmのスペーサーで隙間を空けていたのを30mmのスペーサーにした

IMG_20181028_172329635.jpg

20mmの時から比べると大きく隙間が空いたように見える

太陽電池

太陽電池の出力が不足しているようで十分に太陽光が当たっている場合でもバッテリー電圧が上昇しない

搭載する前の実験では40mAの充電量があったため十分かと考えていたが再調整が必要

また太陽電池部分に雨水が溜まるようなので改善しなければならない

IMG_20181027_063359639_HDR.jpg

スケッチ

現状のESP8266のスケッチ

#include <ESP8266WiFi.h>
#include "DHT.h"
#include "BME280.h"

#define DHTTYPE         DHT22    //DHT 22 (AM2302), AM2321
#define DHTPIN          14       //what digital pin we're connected to
#define BME280_ADDRESS  0x76

//DHT22インスタンス
DHT dht(DHTPIN, DHTTYPE);
//BME280インスタンス
BME280 bme280(BME280_ADDRESS     //BME280 I2C ADDRESS
    , 0b0001                     //Temperature oversampling : x1
   , 0b0001                     //Humidity oversampling : x1
   , 0b0001                     //Pressure oversampling : x1
   , 0b0000                     //Mode : Sleep mode(0), Normal mode(3)
    , 0b0101                     //Stand-by time : 1000ms
    , 0b0000                     //filter : 0ff
);

//Senser
const int locid      = 11;       //場所ID
//WiFi
const char *ssid     = "ssid";
const char *password = "password";
const char *host     = "server_name";
const char *path     = "regTenki.php";
const int httpPort   = 80;
//Sleep
static int sleepTime = 600; //10分(標準)

void deepSleep() {
//第1引数の時間設定はμ秒なので600秒(10分)後に復帰する設定になる
//+7は(10分での)補正値
ESP.deepSleep((sleepTime + 7) * 1000 * 1000 , WAKE_RF_DEFAULT);

//deepsleepモード移行までのダミー命令
delay(1000);
}

void setup() {
//WiFi接続
if(WiFi.SSID() != ssid) {
//設定が記憶されていないなら接続し記憶させる
WiFi.persistent(true); //ssidとpasswordを保存させる設定
WiFi.mode(WIFI_STA); //STA(子機)モード
WiFi.setAutoConnect(true); //次回起動時に保存内容で接続
WiFi.begin(ssid, password); //初回接続
}
unsigned long timeout = millis();
while(WiFi.status() != WL_CONNECTED) {
if(millis() - timeout > 30000) deepSleep();
delay(500);
}
//DHT22の開始
dht.begin();

//BME280の開始
double dTemperature, dHumidity, dPressure;
bme280.begin();

//DHT22: 温度,湿度
float dhtTemp = dht.readTemperature();
float dhtHumi = dht.readHumidity();

//BME280: 気圧,温度,湿度
bme280.getData(dTemperature, dHumidity, dPressure );

//ADC: バッテリー電圧
float vbat = ((119.0 + 469.0) / 119.0) * system_adc_read() / 1024.0;
if(vbat < 3.4) {
sleepTime = 3600; //3.4V未満になったら60分(最大は71.5分)
} else if(vbat < 3.5) {
sleepTime = 1800; //3.5V未満で30分
} else {
sleepTime = 600; //通常は10分
}

//Requesting POST data
WiFiClient client;
String data = "LOC=" + String(locid) + "&PRES=" + String(dPressure)
+ "&TEMP=" + String(dhtTemp) + "&HUMI=" + String(dhtHumi)
+ "&BVOLT=" + String(vbat);
if(!client.connect(host, httpPort)) {
deepSleep();
}
//Send request to the server
client.println(String("POST ") + path + " HTTP/1.1");
client.println(String("Host: ") + host);
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Length: " + String(data.length()));
client.println();
client.print(data);
timeout = millis();
while(!client.available()) {
if(millis() - timeout > 5000) {
client.stop();
deepSleep();
}
}
//HTTPヘッダを含むデータの読み取り(1文字毎)
String body = "";
while(client.available()) {
body += client.readStringUntil('\r');
}
if(client.connected()) client.stop();
WiFi.persistent(false); //保存したssidとpasswordが消去させないようにする
//trueのままdisconnect()すると消去される
WiFi.disconnect();
deepSleep();
}

void loop() {}

#include "DHT.h" は,一般的に出回っているので検索で手に入る

#include "BME280.h" は,前に記載したとおりこちらからいただいたスケッチの入出力部(SPIからI2C)とコンストラクタを修正したもの(再配布可能か不明なので記載のみ)

なんちゃって百葉箱を作ってみる(完成)

メインの百葉箱が完成

IMG_20181020_130501996.jpgIMG_20181020_130533350.jpg

構成

全7段で一番上には設置のための取っ手を付け2段目にはバッテリーを置く

IMG_20181018_174122683.jpgIMG_20181018_174138807.jpg

2段目の下部にはセンサーを縦置き

IMG_20181018_174614741.jpgIMG_20181018_191600721.jpg

当初はセンサーにホコリが積もらないようボードに置いて横置きを考えていたが,他のパーツやボードにもホコリが積もらないように縦置きに変更した

残りの下段5個は同じで中央に風穴を空ける

IMG_20181018_153452939.jpg

組立

組立に使ったパーツ

IMG_20181020_112425780.jpg

4㎜サイズの丁度良いスペーサーが無かったので5㎜のアルミ菅を使って作製

IMG_20181020_122932709.jpgIMG_20181020_125317175.jpg

最終段は虫が入らないように網で塞いだ

設置

設置場所は芝生の上の1200~1500㎜が理想的ということでポールを設置しようと考えたが,そこまでこだわることも無いのでまずはベランダに設置

IMG_20181020_172004361.jpgIMG_20181020_172139311.jpg

標高95mの場所から2800㎜の高さに設置となる

今後

残りは以下のとおりで更にコツコツやっていく

  • 気象データ閲覧の充実
  • 室内気温の観測
  • バッテリーの残量確認(太陽電池での捕充電に問題ないか)
  • 現在正確な消費電力量計測中

ページ移動

ユーティリティ

検索

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

過去ログ

Feed