USBでの電源供給を定期的にOn/Offする必要がありました。市販品を探したのですが、適当なものを見つけられませんでした。Offだけなら見つけたのですが、なぜない(見つけられない)のでしょう…。
いつまでも探してはいられないので、作ることにしました。
手元にあったもの・すぐに入手できるもので組み上げたので、無駄に大きくなってしまいました。それでも問題なく、指定(コード中で固定)した時間ごとにOn/Offできました。最初の15分間はon、次の45分間はoffという設定になっています。
まだプログラムには改善の余地がありますが、とりあえずこれで目的をどれぐらい満たせるのかを計測してみる予定です。
用いた部品は以下の通りです。
- 制御用マイコン:Arduino Nano
- スイッチ用リレー(1chでOK)
- USBコネクター(基板):USB変換基板CK-41
マイコンの電源自体もUSBから供給していますので、使用する場合には既存のUSBケーブルとアダプターの間に挟み込むだけです。今回は信号線は結線していません。
[2019/09/13追記]
コメントをいただいたので、再現できるように可能な範囲で資料を集め直して、以下に追加します。
Arduinoのプログラムは「ArduinoのCPUをスリープさせて消費電流を減らす関数 delayWDT2」(ラジオペンチさま)を参照して作成したものです。貴重な情報を公開していただき、ありがとうございます。ソースコードはページ下端に表示しています。
行き当たりばったりで作成したので回路図がないのですが、実物が残っていたので、その拡大写真を掲載します。
/*
* USB Timer by N.Amano
*
* SSRを用いてUSBの接続(電源)を自動的にon/offする。使用は各自の責任でお願いします。
*
* 2017/02/28 作成
* 参照:http://radiopench.blog96.fc2.com/blog-entry-830.html (貴重な情報をありがとうございます)
* 2019/09/11 ブログ掲載用に整形
*/
#include <avr/sleep.h>
#include <avr/wdt.h>
int led = 13; // LED用
int ssr = 2; // SSR接続端子
unsigned long nowMillis;
unsigned long prevMillis;
unsigned long diffMillis;
unsigned long firstThread = 1000L * 60L * 15L; // 15min
unsigned long secondThread = 1000L * 60L * 60L; // 60min
void setup() {
Serial.begin(9600);
Serial.print("start\n");
pinMode(led, OUTPUT);
pinMode(ssr, OUTPUT);
prevMillis = millis();
}
void loop() {
nowMillis = millis();
Serial.print("loop ");
Serial.print(nowMillis);
Serial.print("\n");
diffMillis = nowMillis - prevMillis;
if (diffMillis < firstThread) {
// 最初の10分間
digitalWrite(ssr, HIGH);
digitalWrite(led, HIGH);
Serial.print("on");
} else if (diffMillis < secondThread) {
// 残りの60分(50分間)
digitalWrite(ssr, LOW);
digitalWrite(led, LOW);
Serial.print("off");
} else {
// 60分経過。リセット
prevMillis = nowMillis;
}
// delayWDT(6);
delay(10000);
}
// ここから下は参照先のソースコードを使用
void delayWDT(unsigned long t) {
...
}
void delayWDT_setup(unsigned int ii) {
...
}
ISR(WDT_vect) {
...
}
コメント失礼します。
似たようなものを作成したいのですが、詳しい作り方等を教えていただくことは可能でしょうか。
1日に一度オンにする動作を繰り返したいです。
関心を持っていただきありがとうございます。
あいにくと2年以上前のことで、データも記憶もはっきりとしないところも多いのです。
とりあえず、発掘できたところをブログに追記しました。特にソースコードは幾つか種類があって、たぶん、これが一番よい(消費電力の少ない)ものであったと思います。消費電力を考えなければ、もっと単純な処理でも実現可能です。
作成の一助になれば幸いです。