Himajin が 2021年02月28日21時33分49秒 に編集
コメント無し
本文の変更
# はじめに コロナの影響で外出自粛要請があり、外出の機会が少なくなっています。 その影響か、もしもに備えて、家庭菜園が見直されているように思います。 私もマンションのベランダにプランターを置いてほうれん草を育てています。そこで気づいたのですが、ベランダは影ができ日が当たらない時間帯があり、成長が遅いように感じます。日が当たらない時間帯は、LEDで補光したほうが育ちがよいのではないかと思いました。 ++お試しで手持ちのRaspberry Pi 3B+ とSense Hatで補光してみたところ、成長に差がありました。しかし、マイコンのスタンバイ動作ができないため消費電流が大きく、バッテリーが1日くらいでなくなってしまう問題がありました。++ ![キャプションを入力できます](https://camo.elchika.com/a0db5c94ddb95ce7d67f09be2747ec92699ac512/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39366135666561352d623934662d343738642d613965622d6534666637656338393331312f30663864343533652d303130342d343964332d626232662d623962666561616335346636/) そこで、省電力動作を意識して、設定した時間だけLEDを光らせるハードウェアを作ってみます(まさにエルチカ)。 プランターでモバイルバッテリーを電源にして長期間動作させることを目標とします。 # 部品 秋月電子通商で以下の部品を購入しました。 | 部品 | 品番 | URL | |:---:|:---:|:---:| | 5mm 赤色LED 660nm | OSR7CA5111P | [https://akizukidenshi.com/catalog/g/gI-15924/](https://akizukidenshi.com/catalog/g/gI-15924/) | | 5mm 青色LED 470nm | OSUB5111A-ST | [https://akizukidenshi.com/catalog/g/gI-01321/](https://akizukidenshi.com/catalog/g/gI-01321/) | | ラッチングリレー | G6BK-1114P-US-P6B DC5 | [https://akizukidenshi.com/catalog/g/gP-15378/](https://akizukidenshi.com/catalog/g/gP-15378/) | 光合成に必要な光の波長は660nm (赤色) と450nm (青色) だそうですので、赤色LEDと青色LEDを使用します。 設定した時間にだけ光るようにするため、リレーを使用します。 リレーを制御するマイコンの消費電流を抑えるため、ラッチングリレーを使用します。通常のリレーはONする間、コイルに電流を流し続ける必要がありますが、ラッチングリレーはONとOFFのタイミングだけ駆動すればよいので、マイコンをスリープさせることができ、コイルの消費電流とマイコンの消費電流を低くできます。 # 回路図 私はハードウェアエンジニアではないので間違っているところがあるかもしれませんが、動作することは確認できましたので公開します。 ![回路図](https://camo.elchika.com/44327669fb81bca47f340c5721e3e114972a1069/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39366135666561352d623934662d343738642d613965622d6534666637656338393331312f61323735396132642d633766622d343161362d383635382d356165623334313037303662/) # レイアウト図 ユニバーサル基板で作成します。 ![レイアウト図](https://camo.elchika.com/541aa099489caf553eeef39c41cee76d8a6abc29/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39366135666561352d623934662d343738642d613965622d6534666637656338393331312f66636564323637352d303130382d346163612d393565372d636637326135363862396435/) # 完成 はんだ付けをしました。左側のコネクタにマイコンのGPIOをつなぎ、SET、RESET端子を制御します。 ![キャプションを入力できます](https://camo.elchika.com/4c5fdd55e6f53a53858a6895ad7c516ae0b6bd0a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39366135666561352d623934662d343738642d613965622d6534666637656338393331312f66316234333661612d633236632d346138342d386535372d336264653231663765343936/) 下に並んでいる12個の端子にLEDを取り付けます。 抵抗は100Ωにしましたので、青色LEDは20mA、赤色LEDは30mA流れると思います。 # マイコンのソフトウェア お試しでM5StackでArduino IDEを使用してプログラムを作成し、LEDを制御してみました。
M5StackのGPIO2をOUTPUTにして、SET端子に接続します。 M5StackのGPIO5をOUTPUTにして、RESET端子に接続します。
## アクティビティ図 Wi-Fi接続してNTPで時刻を取得し、リレーの制御を行い、ディープスリープに戻る。という動作を繰り返します。
16:00から20:00の間はSET端子を200m秒ONにしてリレーをON、それ以外の時間帯はRESET端子を200m秒ONにしてリレーをOFFする動作としています。
:::plantuml:アクティビティ図 @startuml (*) --> "Wi-Fi接続" --> "時刻の同期" If "現在時刻は16:00 から20:00の間 ?" then --> [YES] "リレーをON" --> "スタンバイ" else -->[NO] "リレーをOFF" Endif --> "スタンバイ" -->(*) @enduml ::: M5Stackの仕様で、内蔵バッテリーで動作中にもスタンバイから復帰できるようにするため、スタンバイの時間は30秒とします。(32秒以上ディープスリープすると復帰できなくなる。) マイコン実行中の消費電流が200mAとして、3秒実行。ディープスリープ時のマイコンの消費電流が10mAで30秒と仮定すると、消費電流は (200 * 3 + 10 * 30)/33 =を計算しても止まります。およそ30mA程度です。 ## ソースコード ```arduino:M5Stack Basic #include <M5Stack.h> #include "esp_deep_sleep.h" #include <time.h> #include <WiFi.h> #include <string.h> #define WAKE_INTERVAL 30 //スリープ時間 秒 void setup() { // put your setup code here, to run once: M5.begin(); pinMode(2, OUTPUT); pinMode(5, OUTPUT); delay(100); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF); } void loop() { // put your main code here, to run repeatedly: int retry = 10; struct tm timeInfo = {0}; char str[16]; const uint32_t DEEP_SLEEP_uS = 1000 * 1000 * WAKE_INTERVAL; //n秒後に起動 WiFi.begin("SSID", "passphrase"); while (WiFi.status() != WL_CONNECTED && retry--) { delay(500); M5.Lcd.printf("."); } if (WiFi.status() == WL_CONNECTED) { M5.Lcd.printf("\r\n"); M5.Lcd.printf("WiFi connected.\r\n"); M5.Lcd.printf("IP address: "); M5.Lcd.println(WiFi.localIP()); configTime(9 * 3600, 0, "ntp.nict.jp"); getLocalTime(&timeInfo); sprintf(str, "%02d:%02d", timeInfo.tm_hour, timeInfo.tm_min); M5.Lcd.println(str); if (timeInfo.tm_hour >= 16 && timeInfo.tm_hour < 20) { digitalWrite(2, HIGH); delay(100); digitalWrite(2, LOW); } else { digitalWrite(5, HIGH); delay(100); digitalWrite(5, LOW); } delay(100); } esp_deep_sleep_enable_timer_wakeup(DEEP_SLEEP_uS); esp_deep_sleep_start(); } ``` # 実運用 赤色LED3つと青色LED1つをプランターに取りつけた様子です。16:00になると自動で点灯して、20時になると消灯します。 ![LEDが点灯している様子](https://camo.elchika.com/90f265578864b9c5b3c5a4b6a27be7626b44eba9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39366135666561352d623934662d343738642d613965622d6534666637656338393331312f31623636633239332d353333652d346562312d386638302d613465653932306431313465/) ![M5StackのGPIOでリレーを制御](https://camo.elchika.com/91444b090cf376cd7e59f59c963d72cf700310ba/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39366135666561352d623934662d343738642d613965622d6534666637656338393331312f63326431666230342d366264632d346131362d393066632d633836643366376463306163/) # おわりに ラッチリレーを初めて使ってみたのですが、マイコンがスリープ中でもLEDの点灯状態が維持されることが確認できました。 LEDを4つ点灯させた時の消費電流が150mA程度と思いますので、4時間補光すると600mAh消費することになります。マイコンの消費電流が30mAで24時間でおよそ800mAh。あわせて一日当たり1400mAhを消費。10000mAhのバッテリーであれば、ぎりぎり一週間は動作させることができそうです。 M5Stack よりも消費電流の小さいマイコンボードを使用すれば、さらに長期間動作ができると思います。 (2/28 追記) 一部のほうれん草がトウ立ち(花を咲かせる状態)してしまいました。日照時間を延ばすとトウ立ちしやすいようです。一日の日照時間を延ばさずに、日当たりの悪い時間帯だけ補光する作戦がよさそうです。 ![トウ立ちしたほうれん草](https://camo.elchika.com/6d2e2fe341af0f23bad04edd5aaaa6c77fef5f6b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39366135666561352d623934662d343738642d613965622d6534666637656338393331312f65633832373366632d326666392d343064312d386634652d323962333765343935353163/)