USBケーブルを外す

Last modified on 11/12/2013.

ダンボーに音声合成を搭載するとき、PCと接続しているUSBケーブルがあっては、自立したロボットになりません。そこで、USBケーブルを外しても話せるようにします。

AquesTalk picoには、動作モードが4つ準備してあります。動作モードは、PMOD1とPMOD0のピンがHIGHかLOWになっているかをリセットしたときに読み込みます。リセットを押さない限り端子の状態を読みにいかないため、連続使用中はこのモードは変更されません。(そのため、マイコンボードを使うときにはリセットを押すことで動き始めるようです。)

モード PMOD1 PMOD0
コマンド入力モード 1 1
セーフモード 1 0
スタンドアロンモード 0 1
デモモード 0 0
LSIピン番号 15 14
Arduinoピン番号 D9 D8

1つ目は「コマンド入力モード」で、前回のようにシリアル通信でキーボードから入力するモードです。PMOD1とPMOD0の両方をHIGHにします。2つ目は「セーフモード」で、コマンドモードと同様にシリアル通信で利用しますが、通信関連の設定が変更されるようです。PMOD1をHIGH、PMOD0をLOWにします。3つ目は「スタンドアロンモード」で、あらかじめ登録しておいたプリセットメッセージを発声します。PMOD1をLOW、PMOD0をHIGHにします。4つ目は「デモモード」で、登録されているメッセージを全て連続で発声します。PMOD1とPMOD0の両方をLOWにします。

今回は「スタンドアロンモード」を用いて、特定の入力に対して、特定の発声をする回路を作製します。まず、スタンドアロンモードを使いますので、PMOD1とPMOD0のピンを設定します。AquesTalk picoのデータシートを見ると、PMOD1は15番ピン、PMOD0は14番ピンと書いてあります。そのため、それぞれのピンをグランドや電源に接続すればいいことになります。しかしながら、今はマイコンボードに搭載しているため、どのピンがどのポートに対応しているのか分かりません。そのため、AVRマイコンとArduinoの対応するピン配置を検索しました。その結果、PMOD1の15番ピンはDIGITAL 9番ピン、PMOD0の14番ピンはDIGITAL 8番ピンに対応していることが分かりました。

AquesTalk picoには、あらかじめ登録しておけるプリセットメッセージは15文章です。その15文章のどれを発声させるかの設定は、PC3、PC2、PC1、PC0の4つのピンの状態によって決まります。PC3を最上位ビット、PC0を最下位ビットのように並べて、2進数の0000~1110までのピン状態に設定することで、それぞれの登録された文章を発声します。1111は発声なしとなっています。PC3からPC0のピンの状態は常時監視していて、変化があったときのピンの状態を見て発声が始まります。発声中のピン状態の変化は無視されます。

PC3からPC0のピンについても、マイコンボードとの対応を調べてみると、PC3の26番ピンはANALOG IN 3番ピン、PC2の25番ピンはANALOG IN 2番ピン、PC1の24番ピンはANALOG IN 1番ピン、PC0の23番ピンはANALOG IN 0番ピンでした。この4つのピンにスイッチを取り付ければ、登録しておいた任意の文章を発声できることになります。

プリセットメッセージ選択 PC3 PC2 PC1 PC0
LSIピン番号 26 25 24 23
Arduinoピン番号 A3 A2 A1 A0

これらのピンは全てプルアップされています。そのため、スピーカだけでリセットを押したときにはシリアル通信をする「コマンド入力モード」が実行されることになるわけです。


これまでの情報を基にArduinoのボードを配線していきます。スタンドアロンモードにするため、PMOD1をLOWに、PMOD0をHIGHに接続することになりますが、プルアップされていることを考えれば、PMOD1をLOWにすればいいことが分かります。そのため、ArduinoボードのD9をGNDに接続しました(写真の黄色のケーブル)。今回も、モードを決定させるために、リセットボタンを押してください。

プリセットメッセージの選択をするため、PC3からPC0(ArduinoボードのA3からA0)のそれぞれをGNDに接続したり、外したり(プルアップされているのでHIGHになる)することで、プリセットメッセージを発声します。このプリセットメッセージの変更は別のページに記載します。

USBケーブルを外しましたので、電源を確保する必要があります。Arduinoは7V~12Vで動作しますので、006pの乾電池を用いました。

StandaloneMode