AquesTalk と Node-RED と ラズパイで おしゃべりティラノくん作製

Home > 電子工作 > AquesTalk と Node-RED と ラズパイで おしゃべりティラノくん作製
すき 0
うんこ 0

最近、長男くんがハマっているYouTubeチャンネルが以下になります。

なんか青鬼のアニメばかり見ててナレや歌が耳について耳について。。。

お母ちゃんがこのチャンネルのナレーションAquesTalkじゃね?ってことで以下のデモを使って色々しゃべると長男くんが少し怖がって、言うことを聞くことを発見www

「早く寝なさい」とかね。

こりゃいいぞ!ということでAquesTalkで喋って動くお人形を作ろうということに相成りました。

おしゃべりティラノくん

しゃべるときに口パクパクさせたいよねと思い。

前にダイソーで買ったニギニギするとパクパクするティラノのおもちゃを使いました。もう歯も取れて、目も剥げてボロボロだったしね。。リメイク!

ラズパイにAquesTalk導入してモータでパクパクしてみました。

めっちゃビビる長男くん。。。

 

一緒に遊んでなんとか仲良しに。。。

 

専用のウェブページを作ってスマホやPCで発話入力できるようにしてます。

最初はラズパイ3とUSBスピーカをつかってみましたがでかいので、ラズパイゼロWで小型化しました。

↓これをこう!

以下に制作の詳細記載します。

 

 

構成

AquesTalkをインストールしたラズパイゼロWにアンプMAX98357Aとサーボを接続しました。

部品

  • Raspberry Pi Zero W

     
  • マイクロサーボ SG90

     

  • MAX98357A搭載 I2S 3W D級アンプボード

  • スピーカー
    長女ちゃんの昔使ってた音の鳴るおもちゃ(プリキュアかなんかの)を分解してスピーカを拝借。小さいけどパワーあってGoodでした。
     
  • ティラノ顔
    ダイソーのパクパク恐竜を分解

配線・組み立て

ティラノの頭とサーボをグルーガンで貼り付けて部品を配線。JCOMでもらった升を筐体として使用しましたw。

枡に穴を開けてスピーカを埋め込みました。

サーボとティラノの頭を紐でつないで、発話中のパクパクを実現します。

AquesTalk

AquesTalkとはテキスト入力で発話させることができr日本語音声合成エンジンです。今回はこれをラズパイに導入して発話させます。

インストール

ラジパイ用の実行モジュールをコピーするだけです。簡単!
以下でtgzファイルをダウンロードします。

ファイルをラズパイ上で解凍します。

解凍したフォルダに移動して以下を実行するだけで音声データが作られ再生されます。

アンプMAX98357A 設定

小型化のためにラズパイゼロを採用しましたがオーディオ出力端子はついていません。ですのでアンプボードMAX98357Aを使用しました。

I2Sという規格で3線で音声データをシリアル転送します。ラズパイとの配線は以下の通り

  • アンプ Vin to Raspbery Pi 5V
  • アンプ GND to Raspbery Pi GND
  • アンプ DIN to Raspbery Pi GPIO21
  • アンプ BCLK to Raspbery Pi GPIO18
  • アンプ LRCLK to Raspbery Pi GPIO19

 

以下をラズパイのターミナルで実行するだけでアンプを使用するためのセットアップができます。

スピーカを接続して音声出力設定は終了です。

参考

Node-RED

ラズパイ上でコマンド打って発話だとちょっと使いづらいので、ブラウザで別端末から発話できるようにするべくNode-Redで設定しました。ついでに発話中の口パクパク用サーボの制御もNode-REDで実施します。

インストール

最近のラズパイOSには Node-REDはインストールされていません。以下実行でインストールできます。

Node-RED設定

以下が今回のフローとなります。

  1. httpノード
    URLを指定してメッセージをGETできるようにしました。

    以下をブラウザ送信すると発話文が受信されます
  2. jsonノード
    jsonノードを挿入してブラウザからのメッセージをString型に変換しています
     
  3. execノード
    コマンド実行してくれるexecノードでブラウザからのメッセージを受け取って、AquesTalkのコマンドを実行します。

     
  4. triggerノード
    ブラウザからメッセージを受けると”1″を200msec毎に出力し続けます。
    “0”が入力されるとトリガがリセットされて止まるようにしました。
     
     
  5. randomノード
    triggerノードからの200msec毎の出力を受けて12.0〜15.0の間で値を生成して出力します。
     
     
  6. rpi-gpio outノード
    サーボモータを動かすためにGPIO2ピンにPWM信号を出力させます。

     

    “サーボの制御にPWMモードが利用でき、入力に小数値も含む 10 から 20 の値が指定可能です。”とのことで今回はrandomノードから12.0〜15.0の間で値がランダムに入力されてサーボをコントロールします。
     

  7. functionノード
    execノードからの発話再生終了出力信号を受けて”0″を出力します。 
    “0”出力をrandomノードに入力して値出力を止めます。更にrpi-gpio outノードにも入力してサーボを完全に止めます。

以上でブラウザから発話メッセージを受けて再生し、音声再生の間はサーボが動いて口がパクパクします。再生が止まるとパクパクも止まります。

Node-red自動起動設定

以下のコマンドの実行でラズパイ起動で自動的にNode-REDも起動します。

参考

ブラウザページの作成

発話文章を入力するページはお母ちゃんに作ってもらいました。ではよろしく。

表示

入力エリアと送信ボタンだけのシンプルな画面です。

ソースコード

Node-RED のエンドポイントに ajax で送信しました。

終わりに

新しい家族が増えました。

長男くん以外のみんなでスマホやPCから文章打ち込んで
「ちゃんとご飯食べなさい」とか
「もう寝なさい」とか
言わせてますww ビビって結構いう事聞いてくれるのよ。これが。

ロボットとお友達とか冗談抜きで未来じゃなくなってる。Amazon Echoも子どもたちはほとんど人として接しているしね。

今度はティラノくんを目覚ましにしたり、リマインダにしたりしたいな。
「宿題やった?」と「歯磨きしなさい」とかね。

追記

定期発話機能追加 (2018/11/4)

Node-REDのinjectノードの繰り返し機能で時刻と曜日が指定できることを知り、目覚ましとリマインダ発話を追加しました。

目覚ましや「宿題やった?」とか「もう寝なさい」とか時間でしゃべるようにしました。いやーNode-REDマジ便利!

Raspberry Pi Zero (2019/4/23)

Raspberry Pi Zero WからRaspberry Pi Zero + WiFiドングルに変更しました。SDカード差し替えるだけで問題なく動きました。

 

Raspberry Pi Zero Wはまた別用途で使用します!

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください