工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

ソーラーパネルで発電してリチウムイオン電池を充電する

概要

ソーラーパネルで発電してリチウムイオン電池を充電するための回路を作成し、動作を確認した。


背景と目的

最近作成している自動水やり器は、ソーラーパネルで発電した電力を電源として利用すること考えている。そこで、ソーラーパネルで発電し、それを一時的にリチウムイオン電池にためて、利用するところまでの一連の回路を組んでみる。


詳細

1.構成

ソーラーパネルで発電した電力をそのまま使用しようとすると、日照状態によって電圧が変動するのは言うまでもないので、一時的に電池に貯めてそれを取り出す形にしたい。

以前、ソーラーパネル+エネループのシステムでとしてまさにそのようなシステムを試したのだが、残念ながら比較的短い期間(1か月くらい?)でメモリ効果のようなもの?が発生し、充電できなくなってしまった。これは、満充電でも空でもない中途半端な状態を行ったり来たりする毎日の充放電が、ニッケル水素電池の特性に合わない使い方だったということだ。手持ち品のエネループが生かせると思って電池材料費をケチったのが失敗の元だった。

そこで、今回は中途半端な繰り返しの充放電でも問題が起きにくいリチウムイオン電池を用いることにする。ただし、リチウムイオン電池はよく言われるように使い方を間違えると、ニッケル水素電池よりも危険であるため、注意が必要だ。


2.電池の選定

電池は、自動水やり器で想定される消費電力は大雑把に見積もって2,3mAhなので、(数時間に一度、30秒間程度起動して水やりする、という動作を繰り返す)1日放置してもせいぜい60mAh。5日晴れなかったとして300mAなので、その程度があれば十分だろう。いろいろ探したところ、千石電商で、400mAhという手ごろなものが見つかったので、使用することにした。

www.sengoku.co.jp


2.リチウムイオン電池充電制御IC

リチウムイオン電池は過充電してしまうと危険なため、ここでは迷わず専用の充電制御ICを使用する。秋月電子で50円と非常に手ごろなものがあった。マニュアルをざっと読むと、最大電流値は外付け抵抗で決めることができ、リチウムイオン電池の電圧を高精度にモニタして満充電状態を検出し、充電を自動で止めてくれるとのことだ。ネット上にもたくさんの使用例があるので、安心だ。

akizukidenshi.com


3.回路の製作

3.1 MCP73831周りの実装

MCP73831を使った回路をさっそく製作した。ICのマニュアルに従って各定数を設定。PROG端子についている抵抗10kΩは、充電電流を最大100mAに制限するための設定。STATにつないであるLEDは充電中に点灯して知らせてくれる。入力側のENELOOP+/ENELOOP-は、エネループとは関係なく、3.2の回路の出力を繋ぐ関係でこういう名前になっている。

f:id:dekuo-03:20200827003323p:plain

f:id:dekuo-03:20200827003706j:plain


3.2 ソーラーパネルからの供給部

今回使用するソーラーパネルは、以前の記事で使用しているものを流用するのだが、

  • 最大出力時電圧/電流 約9V/約340mA

というスペックなので、上記のMCP73831の最大入力電圧よりも高く、直接つなげない。そのため、以前作成したエネループ充電用の回路がちょうど使えそうなので使う。充電用回路といっても一定以上の電圧/電流が出力されないようにしているだけ。この回路は約5.6V/約100mAに制限しているので、3.1の回路につなぐことができる電圧で、しかも必要な電流が供給できる。回路図は以下。負荷としてエネループではなく、3.1で作成した回路を接続することになる。

f:id:dekuo-03:20190915213343p:plain


4.動作確認

4.1 通常の電源でテスト

ソーラーパネルを繋がず、通常の直流安定化電源を使用して充電してみたところ、最大100mAに制限されて充電された。リチウムイオン電池の電圧が4.2V程度に近づくと徐々に電流が減ってきて、約4.2Vを超えることはなかった。動きが理解できた。

4.2 ソーラーパネルを繋いでテスト

晴れた日に接続してみた。4.1と同様にしばらくはずっと充電ステータスLEDが点灯し、リチウムイオン電池の電圧が4.2V程度になるとLEDが消灯した。ソーラーパネルからでも問題なく充電できている。


まとめと今後の課題

ソーラーパネルで発電してリチウムイオン電池を充電するための回路を作成し、動作を確認できた。自動水やり器の電源として使用できそうだ。


tarでアーカイブを作成するときに気を付けること(展開先のパーミッションを変化させてしまわないため)

先日、tarでアーカイブを作成し、あるディレクトリに展開したところ、展開したディレクトリのパーミッションが変わってしまった。このせいで、展開先ディレクトリにある他のファイルを参照していた他のプログラムがエラーを起こしてしまい、ひどい目に遭った。なぜ展開先ディレクトリが影響を受けてしまうのかとイライラしたが、結局tarでアーカイブを作成するときのやり方がまずかった。今後ミスしないようにメモしておく。


アーカイブ

hoge/
  abc.tgz --- 作成されたアーカイブ
  src/
    a.txt
    b.txt
    :

srcディレクトリ内のファイルたちをアーカイブするつもりで、以下コマンドを実行。

cd src
tar czvf ../abc.tgz ./

展開先

dest/
   abc.tgz --- アーカイブファイル
   abc/
     a.txt
     :

destというディレクトリにabc.tgzをコピーし、tarで展開したら、destのパーミッションが755に変わってしまった。

cd dest
tar xzvf abc.tgz .


原因

自分としては、srcディレクトリ中身すべてをアーカイブ対象としたつもりが、srcディレクトリが対象になってしまっていたこと。そのせいで、展開先ディレクトリdestにsrcが展開されてしまうために起こる。


正しい方法

src内のファイルたちをちゃんと指定する。つまり、./ではなく、./*。

cd src
tar czvf ../abc.tgz ./*

展開時には、

cd dest
tar xzvf abc.tgz -C ./

とする。

ソーラー発電式自動水やり器を作る(2) --- 電気回路の設計、製作 ---

概要

前回に続き、電気回路の設計と、製作を行った。


背景と目的

前回に続き、電気回路の設計と、製作を行う。


詳細

1. 回路全体

以下。ただし、ソーラーパネル発電とリチウムイオン電池まわりはここには書いていない。別途、描く予定。

f:id:dekuo-03:20200821225154p:plain

1.0 電源まわり

大元は、リチウムイオン電池から4V程度が供給される。これを+BATTとしている。後述のマイコン用電源として3.3V系が必要なので、4VをレギュレータU2で落とす。これを+3V3とする。マイコンとその他消費電流から考えて、NJM2845を選択。


1.1 メインのマイコン

おなじみのESP-WROOM-32を使用。 Wi-Fiが使えて、各種GPIO、アナログ入力があり、3.3V系で動くので、+3V3を供給。


1.2 土壌水分センサ

U3が土壌水分センサ。アナログ入力ポートにつなぐだけ。こちらに書いた通り、電圧は高いほうが電池の終わり際まで動いてくれるはずなので、電源は+BATTから取る。


1.3 ポンプ駆動部

今回使用するポンプM1についてきたリレーモジュールを使用する。2次側のノーマリーOFF(NO)とCOM間にポンプの電源を接続し、一次側のコイルに電流を流した時に2次側が導通してポンプが動く。

厄介だったのが、このリレーモジュールRM1の素性が分からなかったこと。Amazonの商品説明ページには細かいことが書いてないので、自分で動かして調べた限り、

  • VDD=1次側コイルの電源には3.7V以上、55mA程度が必要
  • VINは、VDDにつなぐとOFF、GNDに落とすとコイルに電流が流れる

なので、VDD端子には、3.3Vではなく+BATTを接続。また、VIN端子は、ESP32のGPIO出力だと3.3Vしか出せないので、ちゃんとOFFできていなかった。そのため、簡単なトランジスタスイッチを使って+BATT/GNDでスイッチングできるようにする。ちなみに、VIN端子をGNDに落とすには2mAくらい引いてやる必要がある。まあ、電流的にはGPIOでも引ける。

それと、注意したいのは、こちらに書いた通り、GPIO出力初期状態がポートによって違う問題があるので、LOWになるポートを選んだ。(最初、HIGHになるポートを使っていて、電源を入れると必ずポンプが動いてしまうという問題に見舞われた。)

1.4 水位センサ

水位センサSW1は、水瓶の水切れを検出するために使用する。水位に応じて+3V3/GNDの2値になるように抵抗を介して接続し、ESP32のGPIOで受ける。


1.5 BME280

温度、湿度、気圧を測るセンサU1。3.3Vで駆動。I2C接続なので、ESP32のI2C端子と接続。ラインにはプルアップ抵抗。


1.6 その他

ESP32への書き込み用スイッチやシリアルなど。それと、LEDを1つ。(というか、後述の基板の都合上はじめから付いている。)


2.製作

製作した結果は以下。

f:id:dekuo-03:20200821231820j:plain

  • 薄い木の板をベースボードとして、各回路を固定。大きさは、だいたい12cm×10cmくらいか。
  • ESP32の載る基板は、過去に私が遊びで作ったダッシュボタンの基板が余っていたのでそれを使った。ソフト書き込み用スイッチやシリアル端子、LEDなどが一通り載っているが、GPIOが引き出されていないので、端子に線をはんだ付けしてGPIOなどを引き出してある。通常は、

www.switch-science.com

などを使ったほうが作りやすい。

  • リレーモジュールは、ネジ穴などがないので、仕方なく結束バンドで固定。
  • リチウムイオン電池と充電制御IC基板は、1の回路図には載せていないが、このベースボードに固定。


まとめと今後の課題

電気回路の設計、製作ができた。次回は、筐体を作成する。


ソーラー発電式自動水やり器を作る(1) --- 構想検討 ---

概要

植物の自動水やり器の構想を検討した。


背景と目的

およそ1年半前に、こちらで、同じようなタイトルの記事を書いたが、途中で他の製作が忙しくなりやめてしまっていた。最近、やっと手を付ける余裕ができたので、リスタートする。まずは、改めて構想を練ってどのようなものを作るか決める。


詳細

1.やりたいこと

ざっと列挙すると、以下の感じ。最後の項目は、あいまいな感じではあるが、温度や湿度といった基本的なものでよい。

  • 室内またはベランダに置いた植木鉢に、水やりをができる
  • 水やりの実施有無は、植木鉢の土の湿り気を基に判断する
  • 電力はソーラーパネルで発電して賄う
  • 水やりの実績をスマホ等に通知する
  • 周囲の環境も計測したい


2.システム要素

2.1 水やりを電気的に行うには

最近、このシステムで使うことを想定して、以下の記事で、試している。ちゃんと使えることがわかったので、これを使うことにする。

dekuo-03.hatenablog.jp


2.2 湿り気を判定するには

土の湿り気は、土壌水分センサを使う。前回すでにセンサだけは買っていたが、いよいよ日の目を見る時が来た。

dekuo-03.hatenablog.jp


2.3 ソーラーパネルで電力を賄うには

ソーラーパネルは、昨年秋に検討をした。その際、一時蓄電用にエネループニッケル水素電池を用いたのだが、繰り返し中途半端な充電をしたためか、途中でメモリ効果らしき現象が起き、うまく充放電できなくなってしまったため、頓挫していた。

dekuo-03.hatenablog.jp

今回はどうするかというと、記事には書いていないが、別途、リチウムイオン電池を使った系を検討し他結果うまく稼働しそうな手ごたえを得られたので、ソーラーパネル発電+リチウムイオン電池で蓄電という構成を用いることにする。


2.4 実績をスマホ通知するには

リモート水位センサの定期通知で使用しているおなじみIFTTT+LINE Notify連携でいいだろう。あまりこだわらない。

dekuo-03.hatenablog.jp


2.5 温度や湿度の計測

これは、適宜温度センサや湿度センサを使えばいいだろう。手持ち品でBME280があるのでそれで十分。


3. システム構成

上記のシステム要素を踏まえ、以下のようなシステム構成になる。

  • メインのマイコンは、手持ちのESP-WROOM-32が使う
  • 理想的なシステムは水道直結の給水系だが、室内 or ベランダとなると施工が厳しいので、一定期間分の水がためられるバケツのようなもの(図では水瓶)を用意し、1週間に一度バケツに給水という感じにする。チャンスがあれば、屋外で水道直結の系を実現してみたいが、今回はお預け。
  • 水瓶自体の水切れがわかるように、水位センサも付けることになるだろう

f:id:dekuo-03:20200819011627p:plain


まとめ

植物の自動水やり器の構想を検討し、大まかなシステム構成が描けた。次回から、設計していく。

ESP-WROOM-32 起動直後におけるGPIO出力レベルが、ポートごとに異なることについて調べてみた

概要

ESP-WROOM-32で、起動直後におけるGPIO出力レベルがポートごとに異なることを確認し、対処方法について考察した。


背景と目的

先日、ArduinoでESP-WROOM-32をいじっていたところ、GPIOの起動直後における出力レベルがGPIOポートごとに異なるようにみえる現象に遭遇した。具体的には、以下に示すように、ポートの入出力方向の設定後→出力レベルを設定すると、実際に出力されるまでの間HIGHが出力されるポートと、LOWが出力されるポートがあるように見えた。ポートごとの違いが本当にあるのか、チェックしてみる。

void setup () {
    pinMode(GPIO_NUM, OUTPUT);
    digitalWrite(GPIO_NUM, HIGH);
}


詳細

1. 環境

  • Arudino IDE 1.8.12
  • Arduino-esp バージョン調べ忘れた、2020/05/31時点での最新と思われる
  • ESP-WROOM-32 DevKit-C


2.方法

今回は、現象の確認が主な実施事項なので、あまり細かいところに立ち入らず、以下のように、2つのGPIOポートに対して入出力設定と出力レベル設定を行ったときに、出力レベルがどう遷移するか、オシロスコープによって波形を観測する。時間関係が分かりやすいように、2つのポート間に100msecの時間差をつけて観測しやすくしておく。ここで、

  • IO5: 常に、もう一方に対して100msec後にHIGHを出力する
  • 他のIO: IO5に先行する
  • IO34,35,36,39は入力専用なので除く
  • 負荷は何もつけない
void setup () {
    pinMode(他, OUTPUT);
    pinMode(5, OUTPUT);

    digitalWrite(他, HIGH);
    delay(100);
    digitalWrite(5, HIGH);
}


3. 結果

以下の通り、起動後0.5秒間の出力レベルが、GPIOポートによって異なるということが、明らかになった。 青はIO5の出力、赤はもう一方のGPIOの出力である。横軸0秒の時点でリセットボタンを押し、約0.2秒後にリセットボタンを離し、ESP32が再起動させている。その時点から約0.5秒後、IO5がいったんLOWに落ち、0.1秒後にHIGHになることから、LOWに落ちた時点でpinModeが実行されている。

  • IO5,4,15: HIGHが出力される f:id:dekuo-03:20200816003201p:plain

  • IO0: HIGHが出力される(リセット中) f:id:dekuo-03:20200816003154p:plain

  • それ以外: LOWが出力される f:id:dekuo-03:20200816003157p:plain

なお、リセット前の出力レベルに依存しないか確かめるため、LOWを出力した状態でリセットし、起動後LOWを出力する場合についても調べた(赤=IO15)が、以下のように依存しないことが分かった。

f:id:dekuo-03:20200816003205p:plain


4.考察

Arduino-esp32特有の現象なのか、ESP-IDFでも同じなのかといったところは確認できていないが、ひとまず、ポート設定前の挙動を気にせず、ハードウェアを組むと思わぬ動きをするということが予想できる。実際、私はIO5を出力に設定したプログラムで、起動後勝手にHIGH出力がされて意図しない動きになってしまって困った。 対処方法としては、より望ましいレベルが出力されるポートを選択するべきということだ。具体的には、起動直後LOWであってほしい場合には、IO5,15,4は避けるといった感じに。また、ポートに接続される負荷によって出力電圧が変わる。以下は、10kΩの負荷がGNDとの間にぶら下がっている場合だが、0.7V程度までしか上がらない。細かいことはわからないが出力インピーダンスが大きい状態になっているようだ。負荷を利用してLOWになるようにする手もあるだろう。

f:id:dekuo-03:20200816005409p:plain


まとめと今後の課題

ESP-WROOM-32で、起動直後におけるGPIO出力レベルがポートごとに異なることを確認できた。ハード/ソフトを組む際に参考にしたい。


小型ポンプを試す

概要

自動水やり用の小型ポンプを試し、動作を確認した。


背景と目的

およそ1年数か月前、こちらの記事で、自動水やりシステムを作りたいと書いた直後、リモート水位センサのシステムの製作により、中断してしまっていたのだが、ようやくまた作りたいと思うようになった。そこで、それに向けて、システム要素を集めて動作を確認しながら、システム構築に進んでいきたい。まずは、水やりのためのポンプを試す。


詳細

1.ポンプの調達

ポンプは、Amazonで物色していて見つけた以下のモノを使用する。

www.amazon.co.jp

3-5V程度で動作するポンプと、それを駆動するリレーモジュール、そして土壌水分センサも付いてくるという素晴らしいセットがたったの1000数百円ということで、非常にお買い得に見えるが、当たりはずれがあるのか、使い方がわからないのか、レビューには動くだの、動かないだの書いてあるので、ちゃんと動くのかは少し心配。


2.接続

接続は、システムの電源として想定するリチウムイオン電池を用いた以下の構成。リレーの1次側と2次側は、今回は共通の電源で動かす想定なので、共通のGND、共通のVCCにつないだ。リレーモジュール基板は、全く説明書がないため、この接続にたどり着くまで、少し格闘してしまったが、どうにか正しい配線方法がわかった。ポイントは、IN端子をGNDに落とすと、リレーが動きノーマリーOPEN端子がCOMと導通するというところ。IN端子をふつうはHIGHにしたいところだが、どうやら逆論理らしい。このくらいは、Amazonの商品ページに書いてほしい。このあたりが、レビューで動かないと言っている人たちがハマってしまっている部分なのではないだろうか。

f:id:dekuo-03:20200808225302p:plain


3.動作確認

手持ちのリチウムイオン電池を使って動かしてみたところ、非常にうまく水をくみ上げてくれた。こんな小型ポンプでも、園芸用の鉢程度であれば、全然問題ないと思う。100L/Hの能力があるとのことなので、1分で約1.6L。普段私が水をやっている植物たちも、1日あたり1.6Lはあげていないので、計算上は数10秒動かせば十分な量を上げることができるだろう。


小型ポンプを動かしてみた

ところで、Amazonの商品ページの説明には、水に浸けない状態で使うなと書いてあるが、水につけなくても当然ながら動く。見た感じ、モータの軸についている羽が回っているだけなので、空気中で動かしたからといって何か問題があるとは思えない。


まとめと今後の課題

小型ポンプの動作を確認できた。自動水やり器の構成要素として使えそうだ。


Amazonの激安USBシリアル変換アダプタを試す

概要

激安USBシリアル変換アダプタが使えるか試し、いくつか修正を施すことで動作することを確認した。


背景と目的

最近、USBシリアル変換アダプタをもう1個欲しいなと思って探したところ、Amazonで400円の激安品を見つけた。

www.amazon.co.jp

レビューを見る限り、多少当たりはずれがあるのか、環境差異か、動く場合も動かない場合もあり、私の環境で動くかどうかはそこからは読み取れないので、最悪ダメでもいいと割り切って買ってみた。そこで、私の環境で動くか試す。


詳細

1.環境

  • DELL Insprion 5000シリーズ
  • Windows10 64bit


2.いきなり使ってみる

USB端子にアダプタを指し、Tera Termで新しい接続を選ぶと、シリアルポートとして認識された。ドライバは自動でインストールされた模様。しかし、OKボタンを押したところ、開けないとのエラーが出た。

f:id:dekuo-03:20200808211532p:plain

ちなみに、Arduino IDE上でシリアルモニタとして開こうとすると、port is busyという表示が出る。

f:id:dekuo-03:20200808211802p:plain


3.解決法を探す

以下に参考になる情報があった。

ehbtj.com

どうやら、64bit向けの修正版ドライバを提供しているところがあるという情報があり、

www.ifamilysoftware.com

これが使えるのではないかと思えた。


4.修正し動作確認

上記のサイトから、目的のドライバをダウンロードし、インストール。 USBシリアル変換アダプタを接続せずに、インストールしたアプリケーションを実行し、以下の画面が出たら、シリアル変換アダプタを接続して、Continueを押す。完了後、PCを再起動して、再度シリアル変換アダプタを使ってみると、正しく動作した。Tera Termも、Aruduio IDEもOK。


まとめと今後の課題

激安USBシリアル変換アダプタが動作することを確認できた。激安なので、スペアで持っておきたいという人にはAmazonの買い物ついでに買っておくのもいいだろう。