OBONO’s Diary

へっぽこプログラマの戯言

時報

3歳の息子はまだ時計が読めない。それ以前に、時間の概念もまだよく分かってなさそう。なので、彼の理解の一助となればと思い、なんとなく鳩時計みたいな時報を鳴らしてみることにした。
「ラズパイが24時間稼働しているので、そいつにやらせよう」
「でもスピーカーつけっぱなしというのは電力的にどうなんだろう」
「ちょっとした音の鳴る電子部品で実現したら面白いかも」
…と、目的そっちのけで自分の趣味に走っているような気がするが、まぁ、良しとする。


とりあえず Google 先生に聞いてみると、aitendo なる通販サイトを発見。「メロディIC」なるカテゴリがあって、それっぽい部品がいっぱい出てくるので、そんな中から PS91710 なる型番の製品をピックアップ。

●概要
風鈴声、わずかな部品で作成、動作電源:3-4.5V

「風鈴声」ってどんな音なのかしらん。まぁ、きっと大丈夫だろうということで、適当なスピーカユニットとともに購入。


ラズパイとの接続はこんな感じにしてみた。

電子回路についてはあまり詳しくないのだが、タクトスイッチだった部分を直接 GPIO に繋ぐのは危険だという直感が働いたので、ちゃんと計算していないけど200kΩの抵抗を間に入れてみた。
それはそうと、最近は抵抗をこういう風に描くらしいね。ギザギザじゃないんだ。


というわけで、いざはんだ付け。家にピンヘッダが11本分しかなかったが、幸い接続が必要なピンは片方に偏っていたので問題はなし。結果的に、なんだかケチ臭い感じに仕上がってしまった。

実際に音を鳴らしてみたところ、想像していた音とだいぶ違っていたが、時報としては、まぁそんなに悪くは無かったので、このまま作業を進める。


線材3本を適当な長さのピンソケットに繋いで、ラズパイに接続。ラズパイに root でログインして、コマンドで GPIO4 を有効化、方向を「出力」に切り替える。

# echo 4 > /sys/class/gpio/export
# echo out > /sys/class/gpio/gpio4/direction

そして、以下のようなスクリプトを書く。GPIO4 を1秒間 ON → 1秒間 OFF を、引数で渡された回数だけ繰り返すというもの。

#!/bin/bash
if [ $# -lt 1 ]
then
        echo "usage $0 number"
        exit 1
fi
COUNT=$1
GPIO4_DIR=/sys/class/gpio/gpio4
for (( i=1; i<=$COUNT; i++ ))
do
        echo 1 > ${GPIO4_DIR}/value
        sleep 1
        echo 0 > ${GPIO4_DIR}/value
        sleep 1
done
exit 0

あとは、適切なタイミングでこのスクリプトを呼んでやれば良い。crontab を以下にように設定する。

0 7-21 * * * /root/jihou.sh `date +\%l`
30 7-20 * * * /root/jihou.sh 1

毎時0分になったら「時」の数を鳴らして、毎時30分になったら1回だけ鳴らす。寝ている間に鳴るとうるさいので、午前7時から午後9時までとした。


こうして、我が家では時報が鳴るようになった。息子は、一体何の音だと言わんばかりにキョトンとしていたが、この先どうなるか、しばらく様子を見てみよう。