3,205 views
この記事は最終更新から 1818日 が経過しています。
1. やってみたいこと
時報とは、職場などで
毎時0分に音楽が鳴る
のように使われるあれである。
Raspberry Pi を使えばこれが簡単に作れてしまう
と思ったのでやってみる。
2. 実現手段
(1) 音楽再生の手段
音楽再生の手段は (17) 電池要らずの無限再生オルゴール と同じサウンド ICを使った方法とする。
すなわち…
ブレッドボード上に実装したサウンド ICから出た信号を、
ブレッドボード上の圧電スピーカーで音にする。
ラズパイにはスピーカー出力端子が実装されていて MP3再生もできるが、今回はそうしない。
(2) 周期起動の手段
Pythonプログラムで周期起動ハンドラを実装してもよいのだが、今回はラズパイの大きな特徴である
Linuxベースの OSが動いている
ことを利用する。
すなわち…
crond を使って 1時間に 1回、毎時 0分に音楽再生プログラムを実行させる。
このように…
Linuxの豊富且つ高機能な既存リソースを自由に組み合わせて利用できるのが、ラズパイの大きな魅力だと思う。
3. ブレッドボード上に音楽再生回路を実装
(16) 音楽再生回路でコンデンサのありがたさを知る の回路をそのまま使用する。
4. ラズパイとブレッドボードを接続
前回の (23) 【1-3】マイコンで電子工作入門:LED点滅 とまったく同じ理由により GNDと GPIO17 を使用する。
ジャンパー線(オス-メス)x 2本を使い、ラズパイとブレッドボードを繋ぐ。
・1本目(赤色): Pin#11(GPIO17)- ブレッドボード(電源ライン)
・2本目(黒色): Pin#6(GND) - ブレッドボード(グラウンドライン)
5. 音楽再生プログラムを書く。
I/Oポートに繋いであるサウンド ICを駆動するだけだ。
これも前回 (23) 【1-3】マイコンで電子工作入門:LED点滅 と同様に Pythonで書く。
今回使用する ICは「Home Sweet Home」なる曲で 3.3Vの電源だと 1コーラス 23秒間で再生が完了する。
よって、この ICの VDD と繋げている GPIO17をアサートする時間は 23秒間とする。
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.HIGH) time.sleep(23) GPIO.output(17, GPIO.LOW) GPIO.cleanup()
このプログラムを test24.py の名前でファイル保存し、単発で実行してみる。
Terminalを起動し、以下のコマンドを入力する。
python3 test24.py
ちょうど 1コーラスを終えたところでピッタリ止まった!
すばらしい!
6. crondで周期実行させる。
上で作成したプログラムを試しに短周期(3分間隔)で実行させてみる。
crontabコマンドを実行する。
crontab -e
3分ごとに実行させるには、以下のように記述する。(コメントは不要)
なお、上で作成したプログラムファイルを以下の場所に置いた。
/home/pi/MyWork/test24.py
# +---------- 分: 0 - 59 # | +-------- 時: 0 - 23 # | | +------ 日: 1 - 31 # | | | +---- 月: 1 - 12 # | | | | +-- 曜: 0 - 6 (日-土) # | | | | | */3 * * * * python3 /home/pi/MyWork/test24.py
動作確認はOK!
毎時 0分に実行するように書き換える。
0 * * * * python3 /home/pi/MyWork/test24.py
これにより…
時報(=毎時 0分にラズパイ横のブレッドボードで音楽再生)
が実現できた。
7. 応用
(1) 時間ごとに違う曲を鳴らす。
GPIOのピンはまだまだたくさん余っている。
別のピンに別のサウンド ICを繋げれば、別の曲を再生できる。
例えば、
毎時 0分は GPIO17をアサートして○○の曲、
毎時30分は GPIO18をアサートして△△の曲
など…
あんまり応用ではないが、いつか気が向いたらやってみよう。
(2) 時報と装飾を組み合わせる。
別のピンに LEDを繋げれば、再生中に Lチカもできる。
これもあんまり応用ではないが、いつか気が向いたらやってみよう。
8. 所感
やっぱりラズパイの大きな魅力は「Linuxの豊富な資源を使えること」だと改めて実感した。
アイディアさえ思いつけば、次々と面白いものが作れそうな気がする。
アイディアさえ思いつけば…
なんだけどなぁ
なかなか面白いものが思いつかず、ネット上を徘徊して面白そうなものを見つけてはマネするばかりになりそう…
でもそれでよいと思う。
マネしているうちに知識が増え、視野が広がり、オリジナリティというものが生まれてくるのだと信じている。
知識がなければ閃きも生まれない!
人生の折り返し地点を過ぎ、しみじみと実感していることだ…
ちょっとだけ負の印象
今日までの過去のブログ投稿で 2回だけ
この回路、気に入ったからユニバーサル基板に実装しておこう!
となったことがある。
今回も
時報ボードを作ろう!
と一瞬思ったのだが…
0.5秒後には
今回はほぼラズパイの機能で実現しており、ボード側はただサウンドICに電気を流すことしかしていない…
と気付いた。
つまり…
実験して気に入った回路をユニバーサル基板上にはんだ付けして作り、大切にコレクションする
というささやかな楽しみができないと気付いた。
どうしよう…
ユニバーサル基板にピンコネクタを付けて、ピン配置を気にせずにラズパイ基板と簡単に接続するようにはできる。
でも…
その後に制御プログラムを動かすという一手間が入ることで幻滅してしまう。
これは電源さえあれば独立して動くことができるボードではないんだ
って思ってしまうと、急に価値のない物に見えてしまう…
プラグインの仕組みを入れ込んで、接続時に対応プログラムにキックがかかるようにするか?
つまり GPIOを使って独自のバスプロトコルを作るか?
これも超ガラパゴスで面白くない。
ユニバーサル基板に実装する度に、安価な Raspberry Pi Zeroと繋げてセットでコレクションすることも考えられるが、小さいとはいえ場所を取るし、ラズパイをたくさん買うことになるのでお金がかかる。
どうしよう…
今は良い着地点がみつからないので、しばらくこの問題は放置してみよう。
連載
Raspberry Piの初期設定から簡単な動作実験まで、以下はマイコン制御入門の連載です。
(21) 【連載1-1】マイコンで電子工作入門:選定
(22) 【連載1-2】マイコンで電子工作入門:ラズパイ初期設定
(23) 【連載1-3】マイコンで電子工作入門:LED点滅
(24) 【連載1-4】マイコンで電子工作入門:時報を作る
(26) 【連載1-5】マイコンで電子工作入門:サーボモーターを廻す ←次回
(27) 【連載1-6】マイコンで電子工作入門:合成音声で時報