「RaspberryPiで手作り目覚まし時計!ストップボタン編」をやってみた

今年もよろしくお願いします.

こんな記事見つけて唐突にやってみようと思ったのでチャレンジ.

プチ連載「目覚まし時計編」のスタートです!第1回目は、目覚まし時計の必須機能、ストップボタンの実装です。カチッとボタンを押すとアラームが止まる、とても単純な仕組みですが、電子工作となるとなかなか難しい!?

ハードウェア

配線

今回はGPIOは25番使用してます.

配線がちゃんとしてるかチェック.

GPIOポートの使用開始を宣言.

$ echo 25 > /sys/class/gpio/export

$ echo in > /sys/class/gpio/gpio25/direction

GPIOポートの値を取得しましょ.

$ cat  /sys/class/gpio/gpio25/value

スイッチ押してない時コマンド実行で0,押しながら実行で1が出たらOK.

今回音を鳴らすのでスピーカー準備します.

前の自分の記事参考にして設定しました.

Raspberry Pi2から音を出すにはヘッドホン端子だけかと思ってましたがどうやらUSBスピーカーが使えるらしいです. ノイズが入らないんじゃないかと期待してUSBスピーカーから音を出すため試行錯誤しました. Raspberry Pi2から音をだして見ようと思いとりあえずヘッドホン端子にイヤホンさしてそこから出すよ...

調べたら使ってるUSBスピーカーが廃盤になってるっぽいですね.

こちら後継機っぽいですが動作どうなんでしょう...

確実な方法はイヤホンジャックにスピーカーですね.

プログラム

ただ音鳴らすのもひねりがないので音声流します.

使うソフトはAquesTalkPiというRaspberryPi用ゆっくり.

公式からDLします.

AquesTalk Pi – Raspberry Pi用の音声合成

詳しい使い方はこちらが非常に参考になりました.

 AquesTalk Piとは、Raspberry Pi上で軽快に動作する音声合成コマンド(プログラム)です。インストールから基本的な使い方、オプションの使い方を簡単にまとめました。Raspberry Pi Type B■音が出る

とりあえず音を出してみますか.

解答したファイル内にAquesTalkPiというファイルがあるので

実行プログラムのあるフォルダ内に設置しておきます.

main.py

#coding:utf-8

import os

import sys

#メイン処理

if __name__ == “__main__”:

try:

message = “hello”

os.system(‘./AquesTalkPi’ + message + ‘ | aplay”)

except Exception , e:

print e , “error”

これで実行したらゆっくりボイスでへろーと喋ってくれるはず.

$ python main.py

再生中 WAVE ‘stdin’ : Signed 16 bit Little Endian, レート 8000Hz, モノラル

mesageを変えれば喋る言葉変えられます.

ストップスイッチ

スイッチ押したら音声が止まるようにしたいっすね.

元記事だと再生用と停止用の2つのプログラム作っていましたが1つでも行けるんじゃないかと思ってチャレンジ.

とりあえずこんな感じでどーよと.

20回再生するうちにスイッチ押されたら終了するイメージ.

main.py

#coding:utf-8
import os
import sys

#メイン処理

if __name__ == “__main__”:

try:

message = “hello”
sum = 0

os.system(‘echo 25 > /sys/class/gpio/export’)
os.system(‘echo in > /sys/class/gpio/gpio25/direction’)

for num in range(1,20):

os.system(‘./AquesTalkPi’ + message + ‘ | aplay”)

sum += num

if os.system(‘cat /sys/class/gpio/gpio25/value’) == 1 :

break

except Exception , e:

print e , “error”

実行したけどうまく止まってくれないっす.

gpioポートのvalueの値を取得できてないっぽいですね.

ここで小1時間悩んで「これPythonじゃなくてshellやんけ」という結論に.

PythonにGPIOポートの値取得するものあるのになぜかPyhon内にshell記述してました.

PythonでGPIOポートの値取得できるので書き直します.

配線

正しい配線はこちら

見にくいかもしれませんが24番ポートを使ってます.

ソース

Python使いました.

#coding:utf-8
import os
import sys

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(24,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)

#メイン処理
if __name__ == “__main__”:

try:
message = “hello”

#USBスピーカーの設定 必要に応じて
#os.system(‘lsusb’)
#os.system(‘sudo alsa unload’)
#os.system(‘sudo modprobe snd_usb_audio’)

while GPIO.input(24) == 0 :
os.system(‘./Voice/aquestalkpi/AquesTalkPi ‘+ message + ‘ | aplay’)

else :
print “end”

sleep(0.01)

except KeybordInterrupt:
pass

GPIO.cleanup()

GPIOポート使うので sudo つけて実行.

うまくいったっぽいですぞ.

Pythonで書いたらスッキリした感.

他のやつもPythonで実装してみよ.

こちらの本がGPIO周りで非常に参考にさせていただきました.

スポンサーリンク
レクタングル大
レクタングル大

シェアする

フォローする

%d人のブロガーが「いいね」をつけました。