ミニマムなキッチンタイマー
無印良品の丸いキッチンタイマーを20数年愛用してきたのですがスイッチの接触が悪くなり、数字が入らなかったり連打されたりでストレスを感じるようになってきました。
キッチンタイマーなんてどこでも売ってるものなので買ってこようとしたところで、うちの使い方だといちいち時間設定する必要はなくて、決め打ち4つに追加+1分もあれば十分でその方が使いやすいなと思い付き、作ってみた次第です。

ここで12分は麦茶、7分はスパゲティ、5分はどん兵衛など、3分はラーメンなど、です。スタート/ストップは無く、押すと直ちにスタートし、止めたいときは強制終了(内部的にはリセット)を押します。時間がきたらメロディが鳴ったあと勝手にスリープするので、カップ麺ができてから台所に止めに行くようなことはありません。 カウントダウンを小型の液晶で目一杯表示するために、はじめてグラフィックLCDを使ってみました。自作RPN電卓のキー設計に続いて次のサイトが参考になりました:
ArduinoでグラフィックLCDを動かす(AQM1248A編) - しなぷすのハード製作記
なお、MGLCDライブラリは使っていません。また、AQM1248AはSPI接続で、グラフィックLCDだとフォントをマイコンで持たないといけないことから今回はATtiny85は使えず、ATmega328Pを使うことにしました。電池はAQM1248Aが2.4〜3.6Vで動くのでCR2032x1個にし、ATmega328Pは8MHzの内蔵RC発振にしました。念のためデータシート(リンク先PDF 33MB)のp.615を見ると2.4Vまで落ちても7.9MHz以上あり、1分で1秒もずれませんから、キッチンタイマーには十分な精度です。 スイッチの読み取りは、押した瞬間に設定時間からスタートさせるために、キー割り込みして直ちに値を読みに行くようにします。ATmega328Pならピンチェンジ割り込み(PCINT)がいくつも使えるのでキーごとに端子を当ててもいいのですが、今回は電卓の電源スイッチでも参考にした方法を使ってみることにしました:
ATtiny85/45 ピンチェンジ割込み、アナログ式キー識別、アイドルスリープ | 東京お気楽カメラ
但しATtiny85とATmega328Pでは違うところが色々あり、次のサイトも参考にしました:
Arduinoで外部(ピン変化)割り込み – imo Lab.
特に、A0ピン=PCINT8の含まれるグループPCIE1の割り込み時に呼ばれるISR(interrupt service routine)がPCINT8_vectでもPCIE1_vectでもなくてPCINT1_vectであることをここで知りました(東京お気楽カメラさんの記事のおかげで、割り込み時に意図せずリスタートしてしまうのはISRの間違いだと分かっていて助かりました)。 表示するフォントは、PCに入っているフォントから見栄えの良いImpactを選んで表計算ソフト上で手動デジタイズしてみたところ、RAWデータでは0〜9とコロン(:)だけで1.7kbyteになってしまい、フレームバッファ48*128/8 = 768byteを加えると2kbyteを超えるのでATmega328Pでは扱えません。EEPROMに1kbyteだけ逃がすというのも中途半端なので、とりあえずランレングス圧縮を掛けた上で重複列をリピート化したところ956byteになり、EEPROMに格納できました。これでRAMの余裕ができたので終了時のメッセージも出すようにしました。ついでに、HP 100/200LXのSNDファイルを鳴らした要領で適当な曲のtone()関数列を得て終了メロディも入れ込んでみました。 さらに、電源電圧が落ちてきたときのためにコントラスト調整を入れたり、いざ組んでみたら音が小さかったので昔の防犯ブザーからトランスを抜き出して使うなど、あれこれしていたら結構複雑な回路になってしまいました:

特にトランスのところは、CR2032で駆動するのにトランスを直接負荷にして(大電流で)使うわけにもいかず、少し実験しました。トランスには微分波形が掛かればいいだろうと考えて目の前にあった10μFでC結合したところ、音が大きくなった(なりすぎた)一方でATmega328Pの出力はなまった上に発振気味になっており、圧電サウンダに掛かっている電圧は(自作のオシロスコープは±9Vo-pまでしか測れないのですが明らかに)±12.5Vo-pの定格はオーバーしていそうで、すぐに止めました。

そこでRC結合にしたところ、大体220Ω+10μFぐらいで音量も波形も適当な感じになりました。

…負電圧まで見られるオシロを作っておいてよかったです。こんど、抵抗分圧セットを組んでおこう。
最終的に組み上げたところはこちら:
筐体はダイソーで2個入り110円だった絆創膏ケースで、内寸の短辺が33mmなので主基板は秋月電子さんのFRISK用がちょうどよかったです(圧電サウンダなどを載せている副基板はユニバーサル基板から切り出して使用)。磁石はセリアの「超強力マグネット4P」(φ13mm, 180mT)のうち3つを使いました。
これで、タイマー動作時の消費電流は約4mA、スリープ時は約0.1μAでした。
ソースはGitHubにリポジトリを作ってアップしてあります。 動画も載せておきます(毎度ピンボケですみません):
自分の使い勝手に合わせた日用品が作れて満足です。何かの参考になれば幸いです。 パドラッパ from MacBook Air (2017)

ここで12分は麦茶、7分はスパゲティ、5分はどん兵衛など、3分はラーメンなど、です。スタート/ストップは無く、押すと直ちにスタートし、止めたいときは強制終了(内部的にはリセット)を押します。時間がきたらメロディが鳴ったあと勝手にスリープするので、カップ麺ができてから台所に止めに行くようなことはありません。 カウントダウンを小型の液晶で目一杯表示するために、はじめてグラフィックLCDを使ってみました。自作RPN電卓のキー設計に続いて次のサイトが参考になりました:
ArduinoでグラフィックLCDを動かす(AQM1248A編) - しなぷすのハード製作記
なお、MGLCDライブラリは使っていません。また、AQM1248AはSPI接続で、グラフィックLCDだとフォントをマイコンで持たないといけないことから今回はATtiny85は使えず、ATmega328Pを使うことにしました。電池はAQM1248Aが2.4〜3.6Vで動くのでCR2032x1個にし、ATmega328Pは8MHzの内蔵RC発振にしました。念のためデータシート(リンク先PDF 33MB)のp.615を見ると2.4Vまで落ちても7.9MHz以上あり、1分で1秒もずれませんから、キッチンタイマーには十分な精度です。 スイッチの読み取りは、押した瞬間に設定時間からスタートさせるために、キー割り込みして直ちに値を読みに行くようにします。ATmega328Pならピンチェンジ割り込み(PCINT)がいくつも使えるのでキーごとに端子を当ててもいいのですが、今回は電卓の電源スイッチでも参考にした方法を使ってみることにしました:
ATtiny85/45 ピンチェンジ割込み、アナログ式キー識別、アイドルスリープ | 東京お気楽カメラ
但しATtiny85とATmega328Pでは違うところが色々あり、次のサイトも参考にしました:
Arduinoで外部(ピン変化)割り込み – imo Lab.
特に、A0ピン=PCINT8の含まれるグループPCIE1の割り込み時に呼ばれるISR(interrupt service routine)がPCINT8_vectでもPCIE1_vectでもなくてPCINT1_vectであることをここで知りました(東京お気楽カメラさんの記事のおかげで、割り込み時に意図せずリスタートしてしまうのはISRの間違いだと分かっていて助かりました)。 表示するフォントは、PCに入っているフォントから見栄えの良いImpactを選んで表計算ソフト上で手動デジタイズしてみたところ、RAWデータでは0〜9とコロン(:)だけで1.7kbyteになってしまい、フレームバッファ48*128/8 = 768byteを加えると2kbyteを超えるのでATmega328Pでは扱えません。EEPROMに1kbyteだけ逃がすというのも中途半端なので、とりあえずランレングス圧縮を掛けた上で重複列をリピート化したところ956byteになり、EEPROMに格納できました。これでRAMの余裕ができたので終了時のメッセージも出すようにしました。ついでに、HP 100/200LXのSNDファイルを鳴らした要領で適当な曲のtone()関数列を得て終了メロディも入れ込んでみました。 さらに、電源電圧が落ちてきたときのためにコントラスト調整を入れたり、いざ組んでみたら音が小さかったので昔の防犯ブザーからトランスを抜き出して使うなど、あれこれしていたら結構複雑な回路になってしまいました:

特にトランスのところは、CR2032で駆動するのにトランスを直接負荷にして(大電流で)使うわけにもいかず、少し実験しました。トランスには微分波形が掛かればいいだろうと考えて目の前にあった10μFでC結合したところ、音が大きくなった(なりすぎた)一方でATmega328Pの出力はなまった上に発振気味になっており、圧電サウンダに掛かっている電圧は(自作のオシロスコープは±9Vo-pまでしか測れないのですが明らかに)±12.5Vo-pの定格はオーバーしていそうで、すぐに止めました。

そこでRC結合にしたところ、大体220Ω+10μFぐらいで音量も波形も適当な感じになりました。

…負電圧まで見られるオシロを作っておいてよかったです。こんど、抵抗分圧セットを組んでおこう。
最終的に組み上げたところはこちら:

これで、タイマー動作時の消費電流は約4mA、スリープ時は約0.1μAでした。
ソースはGitHubにリポジトリを作ってアップしてあります。 動画も載せておきます(毎度ピンボケですみません):
自分の使い勝手に合わせた日用品が作れて満足です。何かの参考になれば幸いです。 パドラッパ from MacBook Air (2017)
最近のコメント