新規記事の投稿を行うことで、非表示にすることが可能です。
2018年09月18日
Raspberry PiとPythonで生活を改善してみるパート2
それでは、前回(Raspberry PiとPythonで生活を改善してみるパート1)の続きです。
今回は日本語音声合成にOpen Jtalkを使用しました。
Open Jtalkは、(1)テキストをwavファイル(音声)に変換して、(2)aplayコマンドでその音声ファイルを鳴らす(つまりしゃべらせる)ということができます。
インストールは
$ sudo apt-get install open-jtalk
インストールすると、Do you want to continue? と聞かれますので、 y を押してEnterします。
インストール時、推奨パッケージ(Suggested Package)がありますので、これもインストールしておきます。
$ sudo apt-get install open-jtalk-mecab-naist-jdic
$ sudo apt-get install hts-voice-nitech-jp-atr503-m001
毎回 テキストファイルをwavファイルに変換-->しゃべらせる-->wavファイルを削除 をするのは面倒なので、これをsaywd.shという名前の1個の実行ファイルにまとめます。
$ sudo nano saywd.sh
と打って、ファイルに下のスクリプトを記入します。
#!/bin/sh
TMP=/tmp/jsay.wav
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay --quiet $TMP
rm -f $TMP
Ctrl+X --> y を押してEnterキーを押して保存します。
次に、実行ファイルに実行権限を付与します。
$ chmod 755 saywd.sh
これでしゃべらせるための実行ファイルの準備はOKです。
$ ./saywd.sh 何かしゃべってみて
と書いてEnterを押すとしゃべります。
ここでしゃべらない場合は、ここまでのステップをもう一回確認してみてください。
あと、スピーカーがちゃんとなるかどうかも
では次に、人感センサーの前を通りかかった時に設定した言葉をしゃべらせる内容の実行ファイルをpythonという言語で作成します。
$ sudo nano nichan_supporter.py
と打ってEnterキーを押します。
開いた画面で、以下のスクリプトを貼り付けます。
#turns on and off a light emitting diode(LED) depending on motion sensor
# coding: utf-8
import RPi.GPIO as GPIO #importing the RPi.GPIO module
import time #importing the time module
import subprocess
import datetime as dt
GPIO.cleanup() #to clean up at the end of your script
led_pin =37 #select the pin for the LED
motion_pin = 35 #select the pin for the motion sensor
target1 = "Sさん"
# トーク内容
CMD1 = "./custom_jtalk.sh " + target1 + "、制服に着替えましたか。靴下は履きましたか。"
CMD2 = "./custom_jtalk.sh " + target1 + "、トイレは、もう済ませましたか。もう7時30分過ぎたから、そろそろ行っておかないと、50分に間に合わないよ。"
CMD3 = "./custom_jtalk.sh " + target1 + "、お弁当と水筒は入れてもらいましたか。まだだったら、すぐに入れましょう。"
CMD4 = "./custom_jtalk.sh " + target1 + "、おかえり。制服はハンガーにかけましたか?着替えた服は洗濯物置にもっていきましたか?"
CMD5 = "./custom_jtalk.sh " + target1 + "、宿題とかやらなあかんことはもう終わりましたか。ゲームや工作は、やらないといけないことを済ませてからやりましょう。やらないといけないことが残って後でしんどくなります。"
CMD6 = "./custom_jtalk.sh " + target1 + "、玄関の教科書を2階に片付けましょう。教科書が悲しんでいますよ。"
CMD7 = "./custom_jtalk.sh " + target1 + "、そろそろ晩ご飯ですよ。"
CMD8 = "./custom_jtalk.sh " + target1 + "、9時30分までにお風呂に入りましょう。"
CMD9 = "./custom_jtalk.sh " + target1 + "、そろそろ10時です。寝る準備をしよう。明日の準備は終わってますか。まだならすぐにやりましょう。"
def init():
GPIO.setmode(GPIO.BOARD) #to specify which pin numbering
GPIO.setwarnings(False)
GPIO.setup(led_pin,GPIO.OUT) #declare the led_poin as an output
GPIO.setup(motion_pin,GPIO.IN,pull_up_down=GPIO.PUD_UP) #declare the motion_pin as an input
print("----------------------------------------------------------")
def main():
while True:
value=GPIO.input(motion_pin)
dt_now=dt.datetime.now(); # to get time of now
dt_now_str= "今は" + dt.datetime.strftime(dt_now,'%H時%M分') + "です。"
if value!=0: #to read the value of a GPIO
GPIO.output(led_pin,GPIO.HIGH) #turn on led
time.sleep(2) #delay 2ms
else:
GPIO.output(led_pin,GPIO.LOW) #turn off led
time.sleep(2)
if GPIO.input(led_pin)==GPIO.HIGH:
subprocess.call("./custom_jtalk.sh " + dt_now_str,shell=True)
if dt_now > dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,30,0,0) :
subprocess.call(CMD1,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,45,0,0) :
subprocess.call(CMD2,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,45,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,50,0,0) :
subprocess.call(CMD3,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,16,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,17,00,0,0) :
subprocess.call(CMD4,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,17,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,18,00,0,0) :
subprocess.call(CMD5,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,18,00,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,0,0,0) :
subprocess.call(CMD6,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,30,0,0) :
subprocess.call(CMD7,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,21,30,0,0) :
subprocess.call(CMD8,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,21,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,22,40,0,0) :
subprocess.call(CMD9,shell=True)
else:
print "out of range"
time.sleep(2)
init()
main()
GPIO.cleanup()
貼り付けたら、Ctrl+X、続いて y そのあとにEnterを押して実行ファイルを保存してください。
一応これで準備は整いました。
では、実際に動かしてみましょう。
$ sudo python nichan_supporter.py
ーーーーーーーが出てきたら成功です。センサーに手を近づけて、しゃべらせてみてください。
なお、今回使用したラズパイと部品はAmazonで購入させていただいたものです。
あ、ちなみにチャレンジ中にエラーなどでできないことがあればコメントください。そんなに頻繁に見ていないこともありますが、見たら必ずお返事しますので!
本日も最後まで読んでいただき、ありがとうございました。
ブログランキングに参加しています。
もしよろしければ応援よろしくお願いします。
にほんブログ村
Pythonでプログラミングする
今回は日本語音声合成にOpen Jtalkを使用しました。
Open Jtalkは、(1)テキストをwavファイル(音声)に変換して、(2)aplayコマンドでその音声ファイルを鳴らす(つまりしゃべらせる)ということができます。
インストールは
$ sudo apt-get install open-jtalk
インストールすると、Do you want to continue? と聞かれますので、 y を押してEnterします。
インストール時、推奨パッケージ(Suggested Package)がありますので、これもインストールしておきます。
$ sudo apt-get install open-jtalk-mecab-naist-jdic
$ sudo apt-get install hts-voice-nitech-jp-atr503-m001
音声ファイルへの変換としゃべらせるコマンドを一緒にした実行ファイルを作る
毎回 テキストファイルをwavファイルに変換-->しゃべらせる-->wavファイルを削除 をするのは面倒なので、これをsaywd.shという名前の1個の実行ファイルにまとめます。
$ sudo nano saywd.sh
と打って、ファイルに下のスクリプトを記入します。
#!/bin/sh
TMP=/tmp/jsay.wav
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay --quiet $TMP
rm -f $TMP
Ctrl+X --> y を押してEnterキーを押して保存します。
次に、実行ファイルに実行権限を付与します。
$ chmod 755 saywd.sh
これでしゃべらせるための実行ファイルの準備はOKです。
$ ./saywd.sh 何かしゃべってみて
と書いてEnterを押すとしゃべります。
ここでしゃべらない場合は、ここまでのステップをもう一回確認してみてください。
あと、スピーカーがちゃんとなるかどうかも
いつ何をしゃべらせるかの実行ファイルを作成する
では次に、人感センサーの前を通りかかった時に設定した言葉をしゃべらせる内容の実行ファイルをpythonという言語で作成します。
$ sudo nano nichan_supporter.py
と打ってEnterキーを押します。
開いた画面で、以下のスクリプトを貼り付けます。
#turns on and off a light emitting diode(LED) depending on motion sensor
# coding: utf-8
import RPi.GPIO as GPIO #importing the RPi.GPIO module
import time #importing the time module
import subprocess
import datetime as dt
GPIO.cleanup() #to clean up at the end of your script
led_pin =37 #select the pin for the LED
motion_pin = 35 #select the pin for the motion sensor
target1 = "Sさん"
# トーク内容
CMD1 = "./custom_jtalk.sh " + target1 + "、制服に着替えましたか。靴下は履きましたか。"
CMD2 = "./custom_jtalk.sh " + target1 + "、トイレは、もう済ませましたか。もう7時30分過ぎたから、そろそろ行っておかないと、50分に間に合わないよ。"
CMD3 = "./custom_jtalk.sh " + target1 + "、お弁当と水筒は入れてもらいましたか。まだだったら、すぐに入れましょう。"
CMD4 = "./custom_jtalk.sh " + target1 + "、おかえり。制服はハンガーにかけましたか?着替えた服は洗濯物置にもっていきましたか?"
CMD5 = "./custom_jtalk.sh " + target1 + "、宿題とかやらなあかんことはもう終わりましたか。ゲームや工作は、やらないといけないことを済ませてからやりましょう。やらないといけないことが残って後でしんどくなります。"
CMD6 = "./custom_jtalk.sh " + target1 + "、玄関の教科書を2階に片付けましょう。教科書が悲しんでいますよ。"
CMD7 = "./custom_jtalk.sh " + target1 + "、そろそろ晩ご飯ですよ。"
CMD8 = "./custom_jtalk.sh " + target1 + "、9時30分までにお風呂に入りましょう。"
CMD9 = "./custom_jtalk.sh " + target1 + "、そろそろ10時です。寝る準備をしよう。明日の準備は終わってますか。まだならすぐにやりましょう。"
def init():
GPIO.setmode(GPIO.BOARD) #to specify which pin numbering
GPIO.setwarnings(False)
GPIO.setup(led_pin,GPIO.OUT) #declare the led_poin as an output
GPIO.setup(motion_pin,GPIO.IN,pull_up_down=GPIO.PUD_UP) #declare the motion_pin as an input
print("----------------------------------------------------------")
def main():
while True:
value=GPIO.input(motion_pin)
dt_now=dt.datetime.now(); # to get time of now
dt_now_str= "今は" + dt.datetime.strftime(dt_now,'%H時%M分') + "です。"
if value!=0: #to read the value of a GPIO
GPIO.output(led_pin,GPIO.HIGH) #turn on led
time.sleep(2) #delay 2ms
else:
GPIO.output(led_pin,GPIO.LOW) #turn off led
time.sleep(2)
if GPIO.input(led_pin)==GPIO.HIGH:
subprocess.call("./custom_jtalk.sh " + dt_now_str,shell=True)
if dt_now > dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,30,0,0) :
subprocess.call(CMD1,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,45,0,0) :
subprocess.call(CMD2,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,45,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,50,0,0) :
subprocess.call(CMD3,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,16,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,17,00,0,0) :
subprocess.call(CMD4,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,17,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,18,00,0,0) :
subprocess.call(CMD5,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,18,00,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,0,0,0) :
subprocess.call(CMD6,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,30,0,0) :
subprocess.call(CMD7,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,21,30,0,0) :
subprocess.call(CMD8,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,21,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,22,40,0,0) :
subprocess.call(CMD9,shell=True)
else:
print "out of range"
time.sleep(2)
init()
main()
GPIO.cleanup()
貼り付けたら、Ctrl+X、続いて y そのあとにEnterを押して実行ファイルを保存してください。
一応これで準備は整いました。
動かしてみる
では、実際に動かしてみましょう。
$ sudo python nichan_supporter.py
ーーーーーーーが出てきたら成功です。センサーに手を近づけて、しゃべらせてみてください。
なお、今回使用したラズパイと部品はAmazonで購入させていただいたものです。
あ、ちなみにチャレンジ中にエラーなどでできないことがあればコメントください。そんなに頻繁に見ていないこともありますが、見たら必ずお返事しますので!
本日も最後まで読んでいただき、ありがとうございました。
ブログランキングに参加しています。
もしよろしければ応援よろしくお願いします。
にほんブログ村
【このカテゴリーの最新記事】
-
no image
2018年09月17日
Raspberry PiとPythonで生活を改善してみるパート1
本日は、夏休みの工作にも使えそうな「Raspberry Pi X Pythonでしゃべるラズパイ」がテーマです。
以前、工作好きの息子のためにRaspberry Pi(ラズパイ)を購入しました。購入当時は楽しそうにScratchとかを楽しんでいたのですが、最近はまた別の工作にはまり放置されていたため、何か作ったろと思ってプログラミングすることにしました。
Scratchはコードを書かず、ブロックを組み合わせるようにいろいろ作れるんで面白いのですが、やっぱり自由自在にいろんなことができないこともあり、ラズパイにRaspbianというOSをインストールしたときに一緒にインストールしておいたPython(パイソン)を使うことにしました。
で、とりあえずRaspberry Piと一緒に購入した、「Raspberry Pi Starter Kit」に入っていた「人感センサー」を使って、ラズパイの前を通りかかった時になんかしゃべらせてみることにしました。購入したStarter Kitはこちらです。
※こちらのキットはラズパイに使えるいろんな部品が(ブレッドボードとか温湿度センサーとか気圧センサーとか。購入時期によって入っている部品が変わるかもしれないので、詳細は購入時に商品ページの詳細から確認してください。)入っているので、とりあえず何か作ってみたいなという人におすすめです。
何を作るか考えたんですが、今私の生活の中で一番時間食ってるのは、「子どもへの声掛け」。
うちの工作好きの兄ちゃんはいつもぼやーとしているので、朝は朝ごはん食べなさいから始まり、
着替え終わった??
時間割合わせてんの!?
トイレ行った??
お弁当入れた? など・・・・
これらを毎日、一時間の間に何度も同じことを言わねばならず、忙しい朝だけでも結構な時間を食っています。チェックリストなどを用意しても、どうしても身につかず、結局私がロボットのように毎日言い続けています。
これらの声掛けはだいたい時間が決まっているのですが、私も仕事があるので忙しいから、時々時間がずれたり忘れたりします。
そうすっと、
「もう間に合わへんやん!!(泣)」
てなって、私も子どもも非常なストレスにさらされるわけで...
これを解決できる何かを作ればいいのでは!!
ということで、
を作ることにしました。
で、長い前置きはここまでで、本題に行きましょう。
手順は次の通り。
※Raspberry PiのOS、Raspbianのインストール等、基本的な設定は終わっているという前提で書きます。細かいところがわからない場合はコメントしてください。
配線は、キットを販売されているOSOYOさんのページを参考に配線しました。
配線はOSOYOさんのページのが断然見やすいですが、一応写真を載せときます。
では、次からはラズパイでコマンドを打っていきますが、ちょっと長くなりそうなので、続きは次回(Raspberry PiとPythonで生活を改善してみるパート2)に持ち越します。
本日も最後まで読んでいただき、ありがとうございました。
ブログランキングに参加しています。
もしよろしければ応援よろしくお願いします。
にほんブログ村
以前、工作好きの息子のためにRaspberry Pi(ラズパイ)を購入しました。購入当時は楽しそうにScratchとかを楽しんでいたのですが、最近はまた別の工作にはまり放置されていたため、何か作ったろと思ってプログラミングすることにしました。
Scratchはコードを書かず、ブロックを組み合わせるようにいろいろ作れるんで面白いのですが、やっぱり自由自在にいろんなことができないこともあり、ラズパイにRaspbianというOSをインストールしたときに一緒にインストールしておいたPython(パイソン)を使うことにしました。
で、とりあえずRaspberry Piと一緒に購入した、「Raspberry Pi Starter Kit」に入っていた「人感センサー」を使って、ラズパイの前を通りかかった時になんかしゃべらせてみることにしました。購入したStarter Kitはこちらです。
※こちらのキットはラズパイに使えるいろんな部品が(ブレッドボードとか温湿度センサーとか気圧センサーとか。購入時期によって入っている部品が変わるかもしれないので、詳細は購入時に商品ページの詳細から確認してください。)入っているので、とりあえず何か作ってみたいなという人におすすめです。
毎日の声掛けを自動化してみることにした
何を作るか考えたんですが、今私の生活の中で一番時間食ってるのは、「子どもへの声掛け」。
うちの工作好きの兄ちゃんはいつもぼやーとしているので、朝は朝ごはん食べなさいから始まり、
着替え終わった??
時間割合わせてんの!?
トイレ行った??
お弁当入れた? など・・・・
これらを毎日、一時間の間に何度も同じことを言わねばならず、忙しい朝だけでも結構な時間を食っています。チェックリストなどを用意しても、どうしても身につかず、結局私がロボットのように毎日言い続けています。
これらの声掛けはだいたい時間が決まっているのですが、私も仕事があるので忙しいから、時々時間がずれたり忘れたりします。
そうすっと、
「もう間に合わへんやん!!(泣)」
てなって、私も子どもも非常なストレスにさらされるわけで...
これを解決できる何かを作ればいいのでは!!
ということで、
Raspberry Piの前を通りかかると、その時間にやらねばならないことをしゃべる、『兄ちゃんサポーター』
を作ることにしました。
で、長い前置きはここまでで、本題に行きましょう。
手順は次の通り。
- 人感センサーを配線する
- Pythonでプログラミングする
- 動かしてみる
※Raspberry PiのOS、Raspbianのインストール等、基本的な設定は終わっているという前提で書きます。細かいところがわからない場合はコメントしてください。
人感センサーを配線する
配線は、キットを販売されているOSOYOさんのページを参考に配線しました。
配線はOSOYOさんのページのが断然見やすいですが、一応写真を載せときます。
では、次からはラズパイでコマンドを打っていきますが、ちょっと長くなりそうなので、続きは次回(Raspberry PiとPythonで生活を改善してみるパート2)に持ち越します。
本日も最後まで読んでいただき、ありがとうございました。
ブログランキングに参加しています。
もしよろしければ応援よろしくお願いします。
にほんブログ村
2018年04月15日
空中に浮くBluetoothスピーカー Mars by crazybaby 2個使って2.1ch仕様にする(Double-up)
マニュアル情報のみで申し訳ないのですが。。。
MARSの記事(URL:https://fanblogs.jp/itcontents/archive/145/0)を以前書きましたが、やまTさんにコメントいただきまして、このMARSを2台使って2.1ch仕様にするための手順がわかりにくそうだったので追記しておきます!
以下、マニュアルを日本語に訳したものです。
2台のMars CraftをそれぞれMars CraftAとMars CraftBとします
本日も最後まで読んでいただき、ありがとうございました。
ブログランキングに参加しています。
もしよろしければ応援よろしくお願いします。
にほんブログ村
MARSの記事(URL:https://fanblogs.jp/itcontents/archive/145/0)を以前書きましたが、やまTさんにコメントいただきまして、このMARSを2台使って2.1ch仕様にするための手順がわかりにくそうだったので追記しておきます!
以下、マニュアルを日本語に訳したものです。
2台のMars CraftをそれぞれMars CraftAとMars CraftBとします
- Mars CraftAの電源をONにします。次にMars CraftBの電源をONにします。
- CraftAのボタンを長押しします。3つのライトバーが光ったらボタンを離します。<br/>CraftBのボタンを長押しします。4つのライトバーが光ったらボタンを離して、2つのCraftがペアリングされるまで待ちます。
- 2台のCraftのペアリングが成功すると、各Craftの周囲のLEDインディケータが光ります。
- CraftAのボタンを1秒ほど長押しして、ライトバーが光ったら手を離します。
- crazybabyアプリを開き、画面のインストラクションに従って、スマートフォン端末とMARSをbluetooth接続します。
- オーディオキューで接続が成功したことを確認します。
- crazybabyアプリでDouble-up/Stereoモードを選択します。
本日も最後まで読んでいただき、ありがとうございました。
ブログランキングに参加しています。
もしよろしければ応援よろしくお願いします。
にほんブログ村