
【20250731追記】
この元記事では、トランスレスでマイコンの電源を確保することをあきらめたが、あとになってうまく実現しているサイトを見つけた。
電子マスカットというサイトのこの記事だ。思いつきでいきなり作ってあきらめるより先に、ネットをよく調べるべきであった。少しのことにも先達はあらまほしきこと也(^-^;
この記事ではトランスレスで5V20mA程度確保できるということなので、フォトトライアックの駆動も十分できる。次回はこのやり方を試してみたい。
ところで、元記事では、規定時間(10時間)経つと自動的にオフし、Deep sleepに入って、翌日の同じ時間にsleepタイマーによって自動的にオンする、というプログラムにしていたが、Deep sleep時のクロックは内部のRCクロックであるため誤差が大きく、実際に使ってみると一日で数分の狂いが生じる。
シングルコアのESP32を、WIFIを使わずにwhileループで止めていても消費電流は微々たるものなので、sleepには入れずに、時間が満ちるまでmillis()で数えながらwhileで回して待って、前回のオンから24時間後にリセットしてまたオンするというプログラムに変更した。millis()はメインクロックを基準としているため高精度で、10日間連続稼働で5秒以内の誤差だった。なので、夏のあいだは完全に手放しにできるが、リキッド切れにはくれぐれも注意したい(^-^;
【変更後のプログラム】
/*
* Earthmat Timer Ver 0.01
* Copyright 2025 Nobutsugu Higo
* 2025/07/17
*
* 20250717 スリープは時間が不正確なので、スリープしないでmillis()で時間待ちに変更
*/
uint32_t duration_ms;
void setup() {
Serial.begin(115200);
pinMode(33,OUTPUT);//HでAC100V オン
pinMode(19,OUTPUT);//Test LED
delay(100);
Serial.println("Hello (^-^)/");
uint16_t on_duration_minutes=600;//アースノーマット稼働時間設定 10時間=600分
//uint16_t on_duration_minutes=1;//テスト用 1分
duration_ms=on_duration_minutes*60*1000;//稼働時間をmsで計算
//esp_sleep_enable_timer_wakeup((1440-on_duration_minutes) * 60 * 1000000LL);//24時間-稼働時間(uS)
digitalWrite(33,1);//アースノーマット(AC100V出力)をオン
}
void loop() {
while(duration_ms > millis()){//目標時間が経過するまでループ
delay(500);
Serial.print("duration=");
Serial.println(duration_ms);
Serial.print("millis()=");
Serial.println(millis());
digitalWrite(19,!digitalRead(19));//動作中はLED点滅
}
digitalWrite(33,0);//目標時間が経過したのでAC100V オフ
digitalWrite(19,0);//LED OFF
while(86400000 > millis()){//24h=86400000ms
//while(120000 > millis()){//test 2min=2000ms
delay(1000);
Serial.print("CountDown");
Serial.println(86400000-millis());
//Serial.println(120000-millis());
digitalWrite(19,!digitalRead(19));
}
ESP.restart();
}
*******************ここまで
【20250716元記事】
去年まで煙の出る渦巻きタイプの蚊取り線香を使っていたが、いろいろと面倒なので、とうとうアースノーマットを導入した。
5月のGWあたりからぼちぼち蚊が出始めたので、60日ボトルと本体のセットをアマゾンで970円で購入して使っていた。
この2ヶ月ほど使ってみて、ときどき朝に切り忘れて一日中焚きっぱなしということがあって、リキッドが1日分無駄になったと思うとちょっとくやしい、ということが何度かあった。家の中に出るイエカは通常夜間のみに出る。いっぽうヤブにいるヤブ蚊は日中も出るが、部屋の中に入ることは、都会ではほとんどない。よって、通常は部屋で蚊の対策をするのは夜間だけで十分なのだ。
なので、ちゃちゃっとマイコンを使ってアースノーマット専用のタイマーが作れないか検討した。マイコンでタイマーを組んで、ACをON/OFFするトライアックを積んでやればよい。
問題となるのはマイコンの電源で、まじめにやろうとするとトランスかスイッチング電源か、あるいはACアダプタを使って供給することになる。
ACアダプタを使うのが簡単だが、ACアダプタとアースノーマット用にコンセントを2口使うのは、どうにもスマートではない。
電池駆動もなくはないが、電池切れのことを考えると、どうも気乗りがしない。
そこで、図1のような超手抜き回路でマイコン用の電源を確保できないか検討した。クラスの学級委員の女子が見たら激怒しそうな不真面目な回路だ(^-^;
図1.超手抜き電源回路
LEDの順方向電圧2つ分でスーパーキャパシタに充電して使う。
これならAC100Vを引き込んでいるので、アースノーマット用の電源もここから引けて、コンセントは1口で済む。
出力電圧は3.6~4V程度で、スーパーキャパシタに貯めておけば、低消費なマイコンなら十分動かせるだろう。
さっそく製作にとりかかったが、いやまてよ、マイコンからトライアックを駆動するためのフォトトライアックの一次側の電流は、たしか10mAくらい必要じゃなかったっけ!?
ここであえなく、超手抜き電源方式は頓挫してしまった……やっぱりまじめに生きないとダメだ……(-_-)
数日間放ったらかしになっていたが、タブレットを眺めながらごろごろしていたら、とてもよさそうな小型電源基板を見つけた。AC100入力で5V700mAが出せて、大きさは切手ほど。これこれ、こういうのでいいんだよ!写真1。

写真1.超小型スイッチング電源 WX-DC12003
アマゾンで5個999円だった。アリエクだと送料を入れても1個130円くらいで買える。
これでいちばんの懸案であったマイコン電源確保の問題が片付いたので、仕切り直して製作に入った。
使う部品は、マイコンにはこのあいだ秋月で10個1000円で投げ売りしていたので20個買ってきたESP32-SOLO-1、フォトトライアックは以前に秋月の福袋に大量に入っていたMOC3021、トライアックは以前中華温調はんだごてに使われていておもしろそうだったのでアリエクで10個106円で買っておいたBT136-600E。
もうほとんど冷蔵庫にあるあり合わせ材料で適当に何か作るというノリだ。
回路は図2のとおり。
図2.アースノーマットタイマー回路図 この回路のAC Outletにアースノーマット本体を接続する。
※1 ESP32のTx、RxにUSB-シリアルを接続してPCと通信してプログラムしますが、この回路では省略しています。
※2 プログラム書き込み時はIO0をLにしてリセットしますが、この回路では省略しています。
実際に作ってみると、スイッチング電源のGNDが高域で安定せず、マイコンが誤動作してまともに動かないので、ノイズとGNDの安定のための対策としてC4(Yコンデンサ)を入れた。今回は部品箱に入っていた0.01uF/3kVの高耐圧セラミックコンデンサを使用したが、通常はもう少し低い容量のもの(1000pF~4700pF)がいいと思う。
※Yコンデンサとは、GNDの高周波基準の安定化やノイズ対策としてACラインと2次のGNDの間に入れるコンデンサのことで、IEC規格でclass Yとして分類されているものです。
あとはプログラムをどうするか、ということになるが、ESP32-SOLO-1はいわずと知れたWIFIマイコンで、WIFIのみならずBluetoothも使える。そうするとたとえば、WIFIに接続しておいてネットワーク経由でNTPを使って正確な時間管理ができたり、WIFI経由でパソコンやタブレットからアースノーマットを制御したり、あるいはオン時間、オフ時間の設定をパソコンやタブレットから行ったり、果てはアレクサに声でON/OFFをお願いするとか、ありとあらゆることができる。
今回のきっかけは、そもそもアースノーマットを切り忘れて、リキッドが無駄になるのが惜しい!ということだったので、ON/OFFの制御だけ夏のあいだ確実にやってもらえればそれでいい。
それなら毎日夜7時に自動的に電源オンして、よくあさ5時に自動的にオフしてくれればいいか?
こうなると、ほとんど手放しになるので、すぐにアースノーマットの存在を忘れそうだ。そうすると2ヶ月後にリキッドが切れているのにも気付かず、ある日の夜中に蚊の猛攻で起こされることになる……(^-^;
そういうわけで、なにもかも自動化するというのも考えものだ。
結局、毎晩自分でボタンを押してオンすると、10時間後に自動的に電源をオフする、という最小限の機能とすることにした。
それならばESP32-SOLO-1である必要はなく、もっと安いCH32V003あたりでもいいかもしれない。なにしろポートをひとつ(LEDも含めると2つ)オン・オフするだけなのだから。
arduinoで書いたコードは次のとおり。
リセットボタンを押すと冒頭からプログラムを開始しアースノーマットをオンして、10時間経過するとアースノーマットをOFFしてスリープに入る。次にまたアースノーマットを動かしたいときはリセットボタンを押す。
/*
* EarthNomat Timer Ver 0.00
* Copyright 2025 Nobutsugu Higo
* 2025/07/15
*/
uint32_t duration_ms;
void setup() {
Serial.begin(115200);
pinMode(33,OUTPUT);//HでAC100V オン
pinMode(19,OUTPUT);//Test LED
delay(100);
Serial.println("Hello (^-^)/");
uint16_t on_duration_minutes=600;//アースノーマット稼働時間設定 10時間=600分
duration_ms=on_duration_minutes*60*1000;//稼働時間をmsで計算
esp_sleep_enable_timer_wakeup((1440-on_duration_minutes) * 60 * 1000000LL);//24時間-稼働時間(uS)
digitalWrite(33,1);//アースノーマット(AC100V出力)をオン
}
void loop() {
while(duration_ms > millis()){//目標時間が経過するまでループ
delay(500);
Serial.print("duration=");
Serial.println(duration_ms);
Serial.print("millis()=");
Serial.println(millis());
digitalWrite(19,!digitalRead(19));//動作中はLED点滅
}
digitalWrite(33,0);//目標時間が経過したのでAC100V オフ
digitalWrite(19,0);//LED OFF
delay(1);
esp_deep_sleep_start();//Deep Sleepに入る
Serial.println("zzz");// ここは実行されない
delay(1000);// ここは実行されない
ESP.restart();// ここは実行されない
}
///////////////////////////////////ここまで////////////////////////////////////////
このコードではアースノーマットの稼働時間を10時間(600分)として設定している。これは必要に応じて変更すればよい。
アースノーマット稼働中は、LEDを1秒ごとに点滅している。
稼働時間が経過したら、アースノーマット用の電源供給を停止して、スリープに入る。スリープ時間は(24時間ー稼働時間)としているので、
放っておいても、翌日の同じ時間にアースノーマットが稼働し始めるが、これはあくまでも保険的機能で、稼働開始時は毎日自分でボタンを押すことにしたい。
また、
esp_deep_sleep_start();
のあとにもコードがあり、最終行で
ESP.restart();
としているが、実際はesp_deep_sleep_start()よりあとのコードはすべて実行されないので意味はない。スリープから目覚めたあとはリセットと同じ扱いとなることがわかるように、あえて書いておいた。
なお、ESP32-SOLO-1はESP32のシングルコア版で、arduinoで使うにはコンパイラを変更する必要がある。
そのあたりは過去記事
ESP32-SOLO-1を使うを参照してほしい。もちろん面倒のない普通のESP32も使えるし、ESP32に限らず、arduinoで使えるマイコンならほとんど使えると思う。arduinoマイコンでDeepsleepがない場合は、代わりにwhile(1)として無限ループで止めておいて、次回はリセットボタンを押して起動ということにするのが最も簡単に済むと思う。
実際の製作は、タッパウェアに適当に詰め込んで、ESP32の基板はビニル袋に入れて絶縁し、そのビニル袋が適度にクッションになって中身が動かないように工作した(写真2~5)。

写真2.配線の様子

写真3.基板をビニル袋でくるんで絶縁する

写真4.ビニルがクッションになるようにして詰め込んでフタを閉める
フタには起動用のリセットスイッチ。

写真5.アースノーマットと今回製作したタイマー
これで今年の夏は快適に過ごせそうだ(^-^)
最近のコメント