SRM-10P


HSWB-2RGに接続するために使用。

回路図


srm10ppicbasic.gif
コネクタ SRM-10P 受け側コネクタ×2
<br>(SRM-10P スターターキットに付いてくる)
電源取得用 2ピンコネクタ
ロボット・コントローラーとの接続用コネクタ 4ピンコネクタ

合計約70秒で128音声まで登録出来るので、自分が使用する音声の種類のピン数のコネクタを準備しましょう。

ソース


'-------------------------------------------------
'- SRM-10P + PIC-BASIC 音声再生
'- Ver 1.00
'-------------------------------------------------

'-- 初期設定 --
INIT_RTN:
  ' RDポートを入力に設定
   Input RD.Bit0
   Input RD.Bit1
   Input RD.Bit2
   Input RD.Bit3
   Input RD.Bit4
   Input RD.Bit5
   Input RD.Bit6
   Input RD.Bit7

  ' ロボット側からの音声再生の要求番号
   Dim voice_no As Byte

  ' データは9600bps,8bit DATA, 1bit STOP, Non Parityで送信されます。
   Dim rs_start As Byte
   Dim rs_command As Byte
   Dim rs_param1 As Byte
   Dim rs_param2 As Byte
   Dim rs_end As Byte
   Dim rs_check As Byte

  ' START <&HF0>固定 ,END<&HF1>固定
   rs_start = &HF0
   rs_end = &HF1

  ' 起動直後、1秒間だけ待ちます
   Sleep 1000
   ' 受信バッファクリア
   Serclear

' == 主処理 ==
' -- ポート入力待ち --
' 0の間は、待ち状態
PORT_INPUT_WAIT:

  voice_no = 0
   ' 使用するピンだけコメントを外す
   ' 現ソースは、4ピンの設定で、15音声の再生
   If rd.Bit0=1 Then voice_no = voice_no + 1
   If rd.Bit1=1 Then voice_no = voice_no + 2
   If rd.Bit2=1 Then voice_no = voice_no + 4
   If rd.Bit3=1 Then voice_no = voice_no + 8
' If rd.Bit4=1 Then voice_no = voice_no + 16
' If rd.Bit5=1 Then voice_no = voice_no + 32
' If rd.Bit6=1 Then voice_no = voice_no + 64

  ' 0以外は、音声再生の要求有りと見なす
   If voice_no <> 0 Then
       ' 音声再生
       Gosub SEND_TALK_SUB
       ' 応答待ち状態の処理に行く
       Goto RECEIVE_WAIT
   Endif

  Goto PORT_INPUT_WAIT


' -- SRM-10P応答待ち --
' 基本的には応答パケットを受信するまで待ち状態
' (この間、音声再生の要求があっても再生しない)
RECEIVE_WAIT:
  ' 1バイト受信
   rs_start=0

  ' シリアルポート受信
   Serin pb9600,10,rs_start
   ' 受信出来ない場合、再び応答待ち
   If rs_start=0 Then RECEIVE_WAIT
   ' 受信したのは「コマンド有効」の場合、何もせず応答パケットを待つ
   If rs_start=&HF8 Then RECEIVE_WAIT
   ' 受信したのは「応答パケット」以外の場合、
   If rs_start<>&HF0 Then RECEIVE_DATA

  ' 受信したのは「応答パケット」の場合、応答パケット受信する
   Serin pb9600,30,rs_command,rs_param1,rs_param2,rs_end,rs_check

  Goto PORT_INPUT_WAIT


' -- 残受信データを全て受信する --
' 念の為の処理
RECEIVE_DATA:
  Do
       ' シリアルポート受信
       Serin pb9600,10,rs_start
   Until rs_start = 0

  Goto PORT_INPUT_WAIT


'== サブルーチン群 ==

'-- SRM-10Pにデータを送信する --
SEND_SRM10P_SUB:
  'チェックコード作成
   rs_check = rs_start ^ rs_command ^ rs_param1 ^ rs_param2 ^ rs_end
   rs_check = rs_check & &HFF
   'シリアルポート送信
   Serout pb9600,chr$(rs_start),chr$(rs_command),chr$(rs_param1),chr$(rs_param2),chr$(rs_end),chr$(rs_check)

  Return


' COMMAND TK-音声合成再生 <&H58>
' PARAM1 音量 <127>
' PARAM2 音声番号
SEND_TALK_SUB:
  rs_command=&H58
   rs_param1=127
   rs_param2=voice_no
   Gosub SEND_SRM10P_SUB

  Return


' COMMAND PLY-録音音声再生 <&H51>
' PARAM1 音量 <127>
' PARAM2 音声番号
SEND_PLY_SUB:
  rs_command=&H51
   rs_param1=3
   rs_param2=voice_no
   Gosub SEND_SRM10P_SUB

  Return


使い方


HSWB-02RGの場合の記述を書きますと、単に音声を出すだけなら、以下のコマンドを実行します。

以下の例は、登録した一番目の音声を再生する場合です。


OLLLLLLLH
W10
OLLLLLLLL


モーションを実行中の場合は、Wコマンド(待機コマンド)の代わりに、本来のモーションを実行を実行させて下さい。
そして、適当な時期に、デジタル出力を全てLowにしてください。
ここでいう「適当な時期」と言うのは、ごくごく短い時間なので、いろいろと試して見てください。

仕様


PIC-BASICが、HSWB-02RGからの音声再生の指示があるまで、ひたすら待ちます。
ここで、待ち状態となるのは、デジタル出力が全てLowレベルの場合は「指示無し」と見なします。
Highレベルがどこか1ピンでもある場合は、SRM-10Pに、要求のあった音声再生を要求します。
ここで再生する音声は、デジタル出力を2進数→10進数として、音声再生します。

PIC-BASICは、SRM-10Pに音声再生を要求後、応答待ちになります。
この間、HSWB-02RGの音声再生の指示はみていません。

SRM-1OPからの応答が帰ってきたら、再び、HSWB-02RGの音声再生の指示待ちになります。

ここで、使い方のところでも書いた「適当な時期」というのは、この「SRM-1OPからの応答待ち」時間と
いうことです。
この時間内に全てLowレベルにしないと、また同じ音声が再生されるということになります。

逆に言えば、繰り返しの音声を使用する場合は、全てLowレベルにするのは、全てのモーションが終わってからにするということになります。

例えば、歩いている間、「よいしょ、よいしょ」という言葉を繰り返して言うのであれば、以下のようにします。

1.「よいしょ」という言葉と1言を登録する。
2.歩きはじめで、音声再生を指示。
3.歩きモーションを実行。この間、自動的に、「よいしょ」が繰り返される。
4.歩き終わった時に、全てをLow レベルに設定する。

というような使い方が出来ます。

回路の拡張


先の回路図は、音声再生のための最小限の回路図になっています。
その為、PIC-BASICに書き込むためには、別の書き込むための書き込み用ボードが必要だったり、SRM-1OPへの音声登録も、スタータキットで書き込む必要があります。
ですが、ちょっとしたコネクタやスイッチ、部品の追加で、ボードから外さなくても、出来るようにすることは可能です。
この辺りの回路図は、そんなに、頻繁に書き換える内容でもないと思いますので、今は公開しません。
(私も、PIC-BASICだけ、書き込み用のコネクタとスイッチを追加しただけですし、SRM-10Pは多分、これで動くだろう程度なので・・・)

HSWB-02RG以外から使えるのか?


基本的には、デジタル出力出来て、PIC-BASICでHigh/Lowレベルの認識ができれば使えるはずです。
では、最近、よくロボットで使われているモーションプロセッサーは、一見するとデジタル出力がないようだけど、どうなのか?

正直、試していないので判りませんが、吉日ツアー内で話を聞いたところによると、「RedGainSetコマンド」で、Low/Highレベルの設定が出来ると聞いています。
ただ、いっしょに「POSSISON EDITOR」で、ゲイン設定(通常は「PWN」になってる)のを[LOW][HIGH]に出来るが、「POSSION LIST」に登録した際には、その設定した内容は保存されないらしい、とも聞いているので、使い方としてはどうなのかはよくわかりません。

もしかすると、起動時にホームポジションに設定した時には、「PWN」となっていて、パルスをしているかもしれませんので、PIC-BASIC側で、起動時に、少しだけ処理待ち時間を設けた方がよいかもしれません。
(現在のソースにも、1秒間だけ待ち時間を設けています。そういったロボット・コントローラ側の設定完了の待ち時間として)



  • 最終更新:2014-09-19 20:35:16

このWIKIを編集するにはパスワード入力が必要です

認証パスワード