防水を考慮したので、スイッチをどうするかに迷った。シェルを3Dプリンタを使ってTPUで印刷し、外から押すことで電源が入るようにした。
モーメンタリーSWは適当なものがないのでタクトスイッチを電源スイッチにした。
この場合、トランジスタやMOS-FETをスイッチに使うことが多いが、回路をシンプルにしたかったこともあり、CPUを常時スリープにすることで対応することにした。
ATtiny13はディープスリープ時消費電流がきわめて少ない。なので、OFFの状態はスリープ状態とし、スイッチ割り込みで起動してLEDを点滅動作させる。
動作中に、割り込みが掛かると、スリープ状態に入って割り込み町になる。
これで、タクトSW1つで制御できた。
CPU基板のタクトSWの位置にゴムのボタンを挿入。
直接スイッチには接触していないが、スイッチ位置の目印になっている。本体はTPUなので、全体を押しつぶすことができる。
背面にはUSBの充電ポート。ここにも防水を兼ねてゴムのキャップを嵌める。
実際にバイクに装着した例。
取付用の部品も3Dプリンターで印刷した。
最近のバイクはリアフォークやシートチューブの直径が太かったり細かったり様々なので、個々の自転車に合わせて、印刷してしまうことにした。
こういう場合には、3Dプリンターが便利だ。
ATtiny13AのPB0にLEDを接続。
PB1(INT0)にタクトSWを接続しただけだ。
割り込みハンドラで、スイッチの押され方を判定している。
短いブッシュは電源OFF、長く(2秒以上)押されると動作開始とした。
CPUは通常はスリープしている。ただし動作開始後はウォッチドッグタイマが起動して、0.5秒毎にタイマー割り込みが掛かる。この割り込みでLEDをトグル(ON/OFF反転)して、テールライトとして動作を行う。
外部割り込みは、前に書いた通り、電源ON/OFFの判断に使っている。
本体内に充電モジュールを搭載しているので、USBで充電することができる。充電時間は数十分程度だった。
使用したバッテリーは、40mAhのLI-P0バッテリ。
電源OFF(=ディープスリープ状態)では、CPUの消費電流は0.1μA程度になるので、数年間寝続けることができる。実際には電池の自然放電があるので、もう少し短いが、殆ど電源断と同じだ。
スイッチの長押しで起動した後は、LEDのON/OFFを繰り返すので消費電流は良く分からないが、ON時に8mA程度になった。
40mAhの小さなバッテリーで動かすと約6時間あまり動作した。日帰りのサイクリングには何とか使えそうだ。