週刊 ロボザック

パソコンでラジコン操作(5)

8月に買ったのと同じもの、以下の無線機関連1式を、また購入していたんですが、21日に届きましたhappy01

これでラジコン送信機が3つになりましたcoldsweats01
Dsc00053

最初の送信機は手を付けずノーマルのままですが、8月に買った2つ目の送信機は、予定通り分解して「パソコンでラジコン」できるようにしましたが、実験用に、今回、購入した3つ目の送信機で、2つ目でやったことを使い勝手よくするために、Arduinoのラジコン送信機シールド!?って感じに仕上げたいと思ってますhappy01

one電池からも、ACアダプターからも、電源を取れるように、DCジャックを付け、twoパソコンからの操作、および、スティックからの操作のどちらでもできるようにArduinoと繋げることを予定でいまして、以下のような回路にする予定です。

ずっとDCジャックの為の穴をどこに開けようかと悩んでますthink

側面だとスティックの操作の時に邪魔になりそうだし、裏蓋だと、完成するまで、ラインに繋がった裏蓋が邪魔っけになるからなぁ〜。。。

Omnigraffle_professionalscreensnapz

----------------------------------

| | コメント (0) | トラックバック (0)

パソコンでラジコン操作(4)

タイトルを変えようかと思いましたが、同じくプロポがらみなんで、”続き”ということにしましたrock

前回までで、パソコンからArduinoを介してラジコンできるようにしたんですが、使わなくなったスティックは、使わないのももったいないので、以下の2つもできるようにしようかと思ってます。

スティックの動きをArduinoで読み取って(電圧を得て)、

  1. パソコンに読み込む
  2. ラジコンできるようする。

今回はパソコンでスティックの動きを表示できるように、Arduino/Processingで作ってみましたpaper

one前回までと同じですが、Arduinoには、Arduino Libraryの中にあるStandard_Firmata.pdeをArduinoで開いて、Arduinoに転送して起きます。

Arduinoライブラリは、Processingの設定したフォルダ、デフォルトでは「書類の中のProcessingの中」に入れておかないと、Processingから使えませんpaperFinderscreensnapz003

two今回はスティックを1つだけArduinoに繋いでテストしました。3.3Vの電源を取って、analog inに、スティックのシグナルを0, 1番ポートに入れてます。Dsc00036x

threeProcessingのプログラムと動かしてみた図
ソースは図に映っている部分だけなので、クリックして拡大して見て頂ければ、問題ないかと。。。
Potentiometerscreensnapz001x

ま、この調子で普通にスティックのシグナルを読み取れば、パソコンでも、ラジコンでも大丈夫ですねhappy01

----------------------------------

| | コメント (0) | トラックバック (0)

パソコンで赤外線リモコン(2)

パソコンで赤外線リモコン(1)」で取得したリモコンのデータを送信するためのProcessingのアプリ(図)を作りましたhappy01paper

Screensnapz037_2

one赤外線データの送信用のArduinoのプログラム:受信の時と同じく、Okiraku Programmingさんの「Arduinoで学習リモコン」のページにある受送信のプログラムを、送信部分だけ切り抜いて、少しモディファイしたものを使いました。

下のダウンロードできるファイルの中の「InfraRedSender」です。

  • Processingとのやり取りに邪魔になるので、Serial.printは、すべてコメントアウト(もしくは、削除)
  • void sendSignal()の中を少し改良?
void sendSignal() {
 
for (int cnt = 0; cnt < 512; cnt++) {
   
unsigned long len = data[cnt]*10;  // dataは10us単位でON/OFF時間を記録している
   
if (len == 0) break;      // 0なら終端。
   
int hl=1-(cnt&1); //Mofified
   
unsigned long us=len+micros(); //Mofified
   
do {
      
digitalWrite(ir_out, hl);// cntが偶数なら赤外線ON、奇数なら0のOFFのまま
      
delayMicroseconds(8);  // キャリア周波数38kHzでON/OFFするよう時間調整
      
digitalWrite(ir_out, 0);
      
delayMicroseconds(7);
    }
while (long(us-micros()) > 0); // 送信時間に達するまでループ
  }

}

two赤外線LED
赤外線LEDは、以前、秋月から買って持ってたものを使いました。100個入りで以下のスペックです。

  • VF:1.25V(@20mA)
  • ピーク波長:940nm
  • 半減角:15°
  • 推奨電流:20mA

1.25V@20mAということなんで、とりあえず3つ繋げました。
Dsc00033
で、半減角が15度。資料によると図のような感じだそうで、
Safariscreensnapz031_2
角度を変えると、ほとんど光って見えません。送信時は、赤外線LEDをちゃんと受信機の方に向けないと、うまくデータが届かないようです。
Dsc00032

three赤外線データの送信用のProcessingのプログラム:下のダウンロードできるファイルの中の「RZ1IRRemocon」というのを作りましたhappy01paper

InfraRedSenderは、最初がスペース、最後が0+スペースのデータを受け取って、LEDを点減させる仕組みになっています。前回得たデータを、以下のようにStringのArrayにして、

String[] data={
" ",
" 500 100 50 50 50 100 50 50 ...略... 50 50 0 ",
" 500 100 50 50 50 100 50 50
...略... 100 50 0 ",
" 500 100 50 50 50 100 50 50
...略... 100 50 0 ",
...略...

として、クリックされたボタンの番号に合わせて、

Serial.write(data[btn]);

する仕組みです。

fourroboBASICのプログラム:ロボザックの赤外線リモコン用のプログラムをMR-C3024に転送しておけば、実際にロボザックでテストできるんですが、サクサクとテストできないので、受信した値を第一変数に入れるだけのプログラム(Infrared.bas)を作って、RZ1Basicのコントローラーデータ取得で、確認しましたpaper

  • 取得データは第一変数である「SRAM 0x0140」にセットして「取得開始」させます。
  • RZ1IRRemoconを起動して、ボタンをクリックすれば、サクサクと、受信状況が確認できます。

Rz1irremoconscreensnapz001

fiveMiconoIRDemo:サンプルコードをダウンロードできるようにしましたhappy01paper

各自の責任においてご利用下さい。

ダウンロード

内容:

  • Arduino
    • InfraRedReceiver:リモコンからデータを取得する為のArduinoのコード
    • InfraRedSender:赤外線LEDを点減させて、データを送信する為のArduinoのコード。
  • Processing
    • RZ1IRRemocon:ロボザックの赤外線リモコンのインターフェイスを持つProcessingのコード。Arduinoには、InfraRedSenderのコードを入れておく。
  • roboBASIC
    • Infrared.bas:受信テストの為のコード。第一変数に受信した値が入る様になっている。
  • References
    • 関連資料のリンク

------------------------------------------

| | コメント (0) | トラックバック (0)

パソコンで赤外線リモコン(1)

この前、パソコンからArduinoを使ってラジコン送信してロボザックをコントロールできるようにしたので、どうせなので、赤外線リモコンでもロボザックをコントロールできるようにしてみようと思いやってみましたhappy01paper
Rz1basicscreensnapz001

まず、Arduinoの赤外線リモコンの為のプログラミングですが、検索して「Arduinoで学習リモコン」というページを参考させて頂きましたpaper

oneロボザックの赤外線リモコンは、赤外線受信センサーも赤外線リモコンも第36号に付いてきます。その受信センサーを使って、Arduinoと接続しました。

黄色:8番ポート
赤色:5V PWR
黒色:GND

Dsc00028

twoArduinoで学習リモコン」のページに受送信のプログラムがあります。これをそのまま使えばいいんですが、データ取得用と、データ送信用とにプログラムを2つに分けました。

-------------------------------------------------------------------

int ir_in = 8;

int last = 0;
unsigned long us = micros();

// セットアップ
void setup() {
  Serial.begin(57600);    // シリアル通信速度の設定
  pinMode(ir_in, INPUT);  // 入出力ピンの設定
}

void loop() {
  unsigned int val;
  unsigned int cnt = 0;
 
  // Wait for incoming IR signal
  while ((val = digitalRead(ir_in)) == last) {  // パルスが切り替わるまで待機
    if (++cnt >= 30000) {  // 30000回ループで信号が終了したとみなす
      if (cnt == 30000)  {
        Serial.print("¥n");
      }
      cnt = 30000;
    }
  }

  unsigned long us2 = micros();
  Serial.print((us2-us)/10, DEC);   // 赤外線のON/OFFが続いた時間を10us単位で送信
  Serial.print(" ");
  last = val;
  us = us2;
}

-------------------------------------------------------------------

  1. 上記ソースをArduinoに「Upload」
  2. 「Serial Monitor」を表示
    Arduinoscreensnapz005
  3. Baudrateを57600に設定(ソースと合わせる)
    Arduinoscreensnapz004
  4. リモコンのボタンを押すと、「Serial Monitor」上に数値が表示されます。この数値は、ソースのコメントにあるように、赤外線のON/OFFが続いた時間が10us単位で表示されることになります。

three得られたデーターを整理する
生データは例えば、以下の様な数値になっています。
¥n323198 503 96 54 45 55 94 55 45 54 95 54 44 55 44 55 .....

で、最初の数字はデータを受信してない部分なので無視して、その次の数値からがデータになります。

ここで、以前、ロボザックの赤外線リモコンようのiアプリを作っているし、どんなデータが送られているのかは解析済みなんですよねhappy01

  • 5000µs:スタート
  • 500µs (L) 500µs (H):理論0
  • 1000µs (L) 500µs (H)理論
  • 50µs:ストップ

なんで、生データは、
503 96 54 45 55 94... (10us)
=5030 960 540 450 550 940... (1us)
=5000 1000/500 500/500 1000....
=スタート 理論1 理論0 理論1 理論0 ....

ってな感じになりますねrock

ということで、Arduinoで受信した32個のボタンの生データを整理してみました(※50は幅を合わせる為に050と書いてます)。
Miscreensnapz004

というところで、今日の所はここまでhappy01paper

Arduinoのプログラムの「Upload」ボタンは、「Download」という名称の方が正しいのではないのかな???ま、「Upload」の方がなんとなく理解しやすいからいいんだけど。。。

------------------------------------------

| | コメント (0) | トラックバック (0)

パソコンでラジコン操作(3)

Processingで作っていたロボザック第84号(1,990円)に付いてくるプロポを、パソコンからArduinoを介してコントロールするプログラムですが、左のスティックに関しても動かせる様にして、見た目もカッコ良くしましたhappy01paper
Zebra4fm_controllerscreensnapz001
ニュートラルの値を決め打ちしてる部分とか、も〜ちょい改良したいんですけど、朝6時起きなんで、今回は、とりあえず、ここまででで、ソースコードをダウンロードできるようにしておきますhappy01paperここをクリック

  • ニュートラルの値は、各自で誤動作のないような値に調整して下さい。
  • Arduinoライブラリが必要です。
  • シグナルの配線(黄色)は、以下の図のようになります。5、6、9、10番ポートです。
    Omnigraffle_professionalscreensnapz

----------------------------------

 

| | コメント (0) | トラックバック (0)

パソコンでラジコン操作(2)

前回分解したロボザック第84号(1,990円)に付いてくるプロポを、パソコンからArduinoを介して、データを送信することができましたhappy01paper
Arduino_pwmscreensnapz001x 図1

まず、プロポのスティックを動かすことによってシグナル(図2黄)がどう変化するか調べました。結果、電圧の変化は、ニュートラル状態で、約1.65v(3.3vの半分)で、スティックを動かすと約±0.4v変化しました。
Omnigraffle_professionalscreensnapz 図2

今回は、まだ右スティックしか作っていませんが、Processingで上下左右計8個の丸いボタンがあり、そのボタンをクリックすると、対応する電圧をArduinoに送信するようなプログラムを作りました(図1a,b)。

Arduinoとプロポの配線は、アナログ出力できるArduinoの5、6番ポートとプロポのVR1、VR3の黄色をそれぞれ配線しました(図3:今回は、右スティックだけの配線)。
Omnigraffle_professionalscreensna_3 図3

電圧のコントロールは、ProcessingのArduinoライブラリを使って送信できるようにプログラミングしました(図1a)。

  • arduino.analogWrite(mLeftRightPortNum, mLeftRightVolt);
  • arduino.analogWrite(mUpDownPortNum, mUpDownVolt);

って感じ。簡単happy01

あと、受信機側は、以前書いたのと同じ繋ぎ方で(図4)、受信したデータをEasyBTでパソコンに送って、ターミナルでデータを表示させて確認しました(図1c)。
Omnigraffle_professionalscreensna_2 図4

バッチリgood

左スティックのぶんも作って、もう少し見栄えを良くしてから、また、続きを書きますpaper

----------------------------------

 

| | コメント (0) | トラックバック (0)

パソコンでラジコン操作(1)

インテルのCMの分解くんじゃないですがsweat01またまた分解してしまいましたhappy01

今回分解したのは、ロボザック第84号(1,990円)に付いてくるプロポ(ラジコン無線送信機)ですhappy01ま、約2000円で買えるんで、以前余分に買っておいた1台を分解しましたpaper

プロポを操作してパソコン上のアプリケーションでシミュレーションするというようなシステムはあったりするんですが、パソコンからラジコン操作できるモジュールみたいなのは売ってないみたいだし(パソコンと繋がるプロポはあるのかな?そういうプロポならパソコンでラジコンできるのかな?)、ロボザックのプロポを改造して、パソコンからコントロールできるようにできるといいなぁ〜と思ってます。
Dsc00499
Dsc00500
Dsc00012
Dsc00013

グルグルねじれてる線をほどいているうちに、左右のスティックがわからなくなってしまいましたが、スティックからの配線は、たぶん以下の図の様かなsweat01sign02
Omnigraffle_professionalscreensnapz

  • VRは「variable resistance:可変抵抗」の略かな?
  • 赤プラス 黒マイナス 黄シグナルで、分圧
  • ロボザックのラジコンの場合は、オンオフな動きなんで、ニュートラルの電圧から、適当に上下させれば反応するのかな?

----------------------------------

 

| | コメント (2) | トラックバック (0)

週刊 ロボザックのページが ご隠居ページに リニューアル

週刊 ロボザックのページが ご隠居ページに
リニューアルsign02
Safariscreensnapz002

ということなんで、このブログ内の記事で週刊ロボザックのページへのリンクが、切れ切れですwobblyごめんなさい、リンク張り直す余裕ありませんcoldsweats01

とりあえず、まだ、バックナンバー/パーツ販売は、57号を除いて、全部購入できそうでする。(※57号のCDは、更新プログラムがページで配布されてるからかないのかな??)

とりあえず、先日「ロボザックのラジコン(13)」で書いた、ロボザックの無線受信機をパソと繋いで何かできそうなので、以下の無線機関連1式追加購入していたのが届きましたhappy01

時間がある時に、今度は送信機の方、分解してみよ〜っとhappy01
あ、81号の、バッテリーボックスは、秋葉原でゲットした。けど、アンテナは買い忘れたsweat01

| | コメント (0) | トラックバック (0)

ロボザックのラジコン(13)

以前、ロボザックのラジコン(9)で、ロボザックのラジコンの受信機がどんな信号を出しているかを調べる為に、図の様に、ADM3024ANのモジュールを使って、プラグからのRS232Cの信号をUARTに変換して調べたんですが、

Omnigraffle_proscreensnapz012

ハイテックからダウンロードできる「ZEBRA4FM+HFS-RU01 対応テンプレートプログラム」の中にある説明書で、UARTの方に繋げている(プラグを使う場合は電源ケーブルとして使っている)

Kb

をRXポートに繋げて動かす方法と、そのテンプレートが付いていまして、UARTと書いてあるのに、電源としてしか使ってなくて、以前から気になっていたんですが、やっぱりUARTの信号もでているんですねpaperなかなか試す時間がなかったんですが、久々に、やってみましたhappy01

つなげ方は、上の図のBのケーブルの方をEasyBTにつなげて、ハ〜イsign01線(配線)はこれだけ〜heart04 EasyBT楽チンnote便利〜heart02
Omnigraffle_professionalscreensna_2

RZ1Terminalで、受信データを確認してみましたpaper
Rz1terminalscreensnapz001

バッチリgood


-----------------------------------------------------

いちおう、以前書いた記事の一覧です

  1. ロボザックのラジコン
  2. ロボザックのラジコン(2)
  3. ロボザックのラジコン(3)
  4. ロボザックのラジコン(4)
  5. ロボザックのラジコン(5)
  6. ロボザックのラジコン(6)
  7. ロボザックのラジコン(7)
  8. ロボザックのラジコン(8)
  9. ロボザックのラジコン(9)
  10. ロボザックのラジコン(10)
  11. ロボザックのラジコン(11)
  12. ロボザックのラジコン(12)

| | コメント (0) | トラックバック (0)

ROBOZAKで使える音声認識モジュール(4):VRbot

VRbotですが、

Vrbot1

以前、発売になったら、続きを書くと言ってましたが、やっと実際に動かしてみました。

oneVRbot ModuleとMR-C3024を接続する。
Screensnapz010_2
マニュアルのまんまですが、

  1. 赤黒のコードで電源をとります。
  2. 青白のコードでTX/RXの信号をとります。
  3. マイクを接続します。

それぞれ図に習って接続します。購入するとマイクも付いてくるようですが、私はマイクは貰えなかったので、ロボザックの音声認識モジュールのものを使いました。

twoMR-C3024にシリアルプラグを差し込みMR-C3024の電源を入れる。

threeVRbotGUIを起動し、COMポート番号を選択し、「Connect」のボタンをクリックして接続します。
Parallels_desktopscreensnapz009
接続が完了すると、ロボザックは座った姿勢になり、「Connect」ボタンがDisableになり「Disconnect」のボタンがEnableになります。

three「Set Language」のポップアップメニューの中から「日本語」を選択します。
Parallels_desktopscreensnapz008_2
選択すると、コマンドのラベル名も日本語に変わります。

fourでは、認識のテストして見ましょう!

  1. 「Test Group」のボタンをクリックすると
    Parallels_desktopscreensnapz010
  2. 「Speak now...」と表示されるので、表示されているラベル名の中から、適当にひとつ選んで、
  3. マイクに向かって発声して下さい。
  4. VRbotが認識したラベル名が「緑色」に点減します。
    Parallels_desktopscreensnapz008

正しく、認識されていたでしょうか?

five「Generate Code...」をクリックして、コードを保存。(カスタム音声を作っていなければ必要ないのかな?)
Parallels_desktopscreensnapz011

six「Disconnect」のボタンをクリックして接続を解除します。
Parallels_desktopscreensnapz012
※この時、音声認識用のコードがMR-C3024に書き込まれるのかな?

とりあえず、音声のカスタマイズに関しては、次回ということで、今回は、このデフォルトの設定のまま動かしてみます。

seven音声の認識は、トリガーとなる言葉+ワードセット1の言葉(+ワードセット2or3)になるのかな。
Screensnapz004

例えば、以下のようになります

  • ロボット+こんにちは
  • ロボット+進め+左
  • ロボット+進め+右
  • ロボット+進め+前
  • ロボット+進め+後ろ
  • ロボット+見ろ+左
  • ロボット+見ろ+右
  • ロボット+攻撃+二
  • ロボット+攻撃+右
  • ロボット+曲がれ+右
  • ロボット+走れ+右
  • ロボット+アクション+四

すこし、やってみましたhappy01
---------------------------------------------------

---------------------------------------------------

| | コメント (0) | トラックバック (0)

より以前の記事一覧