http://www.bpnavi.jp/kuji/item/1987/13994
ゼルダのエフェクトーンいいなぁ、欲しいなぁ。
でもくじ運に自信ないなぁ…。
そうだ、僕らには Raspberry Pi がある\(^o^)/
用意するものは Raspberry Pi 一式のほか、以下。
- タクトスイッチ
- ブレッドボード
- 各種ケーブル
本物が何センサーを使っているかはわからないけど、とりあえず手元にあったタクトスイッチを使って実装してみた。
仕組みは簡単で、スイッチがOFFになったら音を鳴らすだけだ。
Pythonスクリプトで組んでみた。
配線
ブレッドボード。fritzingの使い方も電子回路もド素人なんで勘弁。
(先の動画ではスイッチ部分をユニバーサル基板に実装)
回路図のつもり。
RaspberryPi GPIO の 3V からタクトスイッチの片方に入る。
タクトスイッチのもう片方から、GPIOの24と、抵抗をはさんでGNDへ。
大電流が流れないようにする抵抗らしい。よくわかってない。残念。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import RPi.GPIO as GPIO from time import sleep import pygame.mixer import random print 'start' GPIO.setmode(GPIO.BCM) GPIO.setup(24, GPIO.IN) current = GPIO.HIGH prev = GPIO.HIGH pygame.mixer.init() selist = [] selist.append(pygame.mixer.Sound('./nazo.ogg')) try: while True: current = GPIO.input(24) if current != prev: if current == GPIO.HIGH: print 'ON' else: print 'OFF' se = random.choice(selist) se.play() prev = current sleep(0.1) except KeyboardInterrupt: pass GPIO.cleanup() |
コードの解説
今回はドアに設置するので、ドアが閉まっているときはタクトスイッチが押されており、ドアが開くとスイッチがOFFになるようにした。
ということで、初期値は current、prev どちらもON(GPIO.HIGH)だ。
0.1秒間隔でスイッチの状態をチェックし、ON→OFFになったら音を鳴らすようにした。
簡易的ではあるが前回の値(prev)と今回チェック値(current)が不一致のときだけ音を鳴らす。
音は nazo.ogg でスクリプトと同じ階層に準備しておく。
音はひとつだけでは芸がないので、配列にした。
好きなだけ配列に append すれば、ランダムに choice されて再生される。
SUPER+C のキーボード割り込みで終了。
設置
前述の通り、ドアでボタンを押しておき、離れるとOFFになるようにする。
タクトスイッチをこういう使い方すると職人に怒られそうなので、他のセンサーを使ったほうがいいかもしれないw
こんにちは。とある大学で情報系を専攻しています。現在夏休みで何かを作ろうと思い、エフェクトーんを作ろうと考え、このサイトを見つけて参考にさせていただいています。質問なのですが、掲載されている商品でエフェクトーンを作ることは可能なのでしょうか。またその他にも必要な商品はあるのでしょうか。是非回答お願いします。(素人質問ですいません)
ほんまもんは「センサーが離れると音が鳴る」ようなので、正直別物ですね!
回路やpythonコードは応用できると思います。