No.170111

KD-07, Rover with 2 Eyes





〔概要〕

 障害物回避ローバーの制作



〔参考書籍〕


   


『XbeeによるArduino無線ロボット工作』 鈴木美朗志 著 (2016年 東京電機大学出版局)
第3章 XBeeによるアームクローラーの制御



〔参考LINK〕

鈴木美朗志 著 « 東京電機大学出版局

XBeeSeries – スイッチサイエンス
https://trac.switch-science.com/wiki/XBeeSeries
ボクにもわかるZigBee方式 XBee (ボクにもわかる地上デジタル 地デジ方式編)
http://www.geocities.jp/bokunimowakaru/std-zigbee.html

センサーを使ってみよう(PSD測距センサー編) | RT Robot Shop Blog
光位置センサ PSD- Wikipedia

PORTD


十六進法 - Wikipedia
2進数、16進数と10進数 - CyberLibrarian




〔Parts List〕

 Arduino Nano x 1

 タミヤ アームクローラー工作セット
 タミヤ ユニバーサルプレート
 ツインモーターギヤーボックス

  XBee S2 (ZB 2mW, XB24-Z7PIT-004 ) PCBアンテナ

 XBee ピッチ変換基盤 3.3v レギュレータ付き x2
  http://akizukidenshi.com/catalog/g/gP-05060/
 測距モジュール GP2Y0A21YK x1
 http://akizukidenshi.com/catalog/g/gI-02551/
 DCモータードライバー TA7267BP x2
 http://www.marutsu.co.jp/GoodsDetail.jsp?q=TA7267BP&salesGoodsCode=14353879&shopNo=3

  圧電サウンダ x 1
     LED x 9
     抵抗220Ω x 4
     抵抗390Ω x 1

     積層セラミックコンデンサ 0.1μ㌲ 50V x 1
     積層セラミックコンデンサ 0.01μ㌲ 50V x 2


     電池ボックス 単三x4本用 x 1

     電池ボックス 006P用 x 2
     電池スナップ x 2

     ユニバーサル基盤 72 x 96 1枚
     ユニバーサル基盤 48 x 72 1枚

  ソープディッシュ(本体ボディ用)
  アクリル板
  蝶番・L字金具・ネジなど












テキストの続き、アームクローラーベースのロボットにとりかかります


ただし内容や機能的に前回のインセクトとかなり重複してしまうため、
いくつかの部分で変更を加えてみました















基板などを取り付けるため、本体に加工













今回は小型化を図って、Arduino Nanoを使用してみました

機能的にはArduino UNO R3と同様らしいので、多分なんとかなるはず








ブレッドボード上で動作テスト

この時点では、XBeeではなくBluetoothモジュールを使用してiPad上から操作する、
ということを試みていたのですが、なんやかんやあって断念しました






<なんやかんややった痕跡>



RN-42使用 Bluetooth無線モジュール評価キット 
RN42 - Bluetooth Module

Tera Term (テラターム) プロジェクト日本語トップページ - OSDN
https://ja.osdn.net/projects/ttssh2/

Bluetooth通信する(Bluetoothモジュール RN-42 使用)
電子工作勉強中: RN-42使用 Bluetooth無線モジュール評価キット:
Bluetooth経由でArduino上のLEDをコントロール
Arduinoでラジコン戦車 その2 無線化 – Nu
屋外と通信出来た、Bluetoothモジュール・RN-42-I/RM
シリアル通信の無線化 -第2回:Bluetoothモジュールの仕様確認: Arduinoで遊ぶブログ

RN-42 Bluetoothモジュールの使い方1 | Workpiles
RN-42Bluetoothモジュールの使い方2 | Workpiles
http://workpiles.com/2014/04/rn42-bluetooth2/



iOS + Roving Networks BT (RN-42) | Johan Lövgren
RN-42でiPhoneにペアリングさせるまで - Qiita
Cool Term
RN-42使用 Bluetooth無線モジュール評価キット 
RN42 - Bluetooth Module

浅草ギ研 ArduinoとiPhone端末をBLEでつないでみる
Make: Japan | Bluetooth 4.0でArduinoとiPhoneを接続:脱獄もMFiも必要なし?





Android端末があれば接続には問題なさそうなので、参考までにメモを残しておきます








ついでに作ったこれが便利でした。















今回は基板丸出しではなく、ガワをつけてみることにしました

100円ショップで見つけたせっけん置きがちょうどよい大きさだったので、
これを採用。


内部にLEDを設置するので、透けて見えたら良さそうな感じです








大枠のレイアウトはこんな感じ

本体部は、テキスト内容にある温度センサー、タクトスイッチを省略

かわりに測距モジュールを2基に増やし、方向指示器としてLEDを周囲に配置しました
加えて、方向転換中には圧電サウンダー(ブザー)から音が出るようにします


リモコンは4つボタンのものは前回作ったので、今回は2ボタンに















ブザーの音がこもってしまったので、背面に穴をあけました








もっと扁平な感じの外観を予想していたのですが、亀っぽくなりました








甲羅がカパっと開くようになっています

センサー、電源等はピンソケット接続にしておき、いつでも配線などをやり直せるようにしておきました








なんとか本体が完成















今回破損してしまった部品

どれもソケット接続にしていたので、すぐに交換出来たというのが不幸中の幸いでしょうか

















動作テスト

リモコンのスイッチで動作開始

 左センサーに障害物反応 ⇒ 右旋回
 右センサーに障害物反応 ⇒ 左旋回


回避行動5回で待機状態となる








// とりあえず動いた

#define eyeL A0
#define eyeR A1

int notes[] = {262,294,330,440};     // 周波数を配列で記憶
int digitalLow,valL,valR;

void setup()
{
  Serial.begin(9600);
  pinMode(3,OUTPUT);  // R Motor Forward
  pinMode(2,OUTPUT);  // R Motor Reverce
  pinMode(5,OUTPUT);  // L Motor Forward
  pinMode(4,OUTPUT);  // L Motor Reverce

  pinMode(10, OUTPUT);  // LED Left, Yellow
  pinMode(9, OUTPUT);  // LED Front, Blue
  pinMode(8, OUTPUT);  // LED Right, Yellow
  pinMode(7, OUTPUT);  // LED Rear, Red
}

void loop()
{
  PORTD=0; 
  if(Serial.available() > 21)
  {
    if(Serial.read()==0x7E)
    {
      for(int i=1; i<=19; i++)
      {
        byte discard=Serial.read();
      }
      digitalLow=Serial.read();

      if(digitalLow == 0x0D)  //リモコン入力1101
      {
      int count = 0;
      while (count < 5)
      {
      digitalWrite(9,HIGH);  // LED 青 点灯
      digitalWrite(3,HIGH);
      digitalWrite(2,LOW);
      digitalWrite(5,HIGH);
      digitalWrite(4,LOW);
      delay(200);  // 0.2秒毎に距離を測定

      valR=analogRead(eyeR);  // 右側に障害を発見
      if(valR >= 348)  // 障害物までの距離15cm以下なら
      {
        digitalWrite(9, LOW);  // LED 青 消灯
        tone(6, notes[3]);
        digitalWrite(7, HIGH);  // LED 赤 点灯
        delay (100);
        noTone(6);
        digitalWrite(3,LOW);  // 後退
        digitalWrite(2,HIGH);
        digitalWrite(5,LOW);
        digitalWrite(4,HIGH);
        delay(1200);
        digitalWrite(7, LOW);  // LED 赤 消灯
        tone(6, notes[0]);
        digitalWrite(10, HIGH);  // LED 左 点灯
        digitalWrite(3,HIGH);  // 左旋回
        digitalWrite(2,LOW);
        digitalWrite(5,LOW);
        digitalWrite(4,HIGH);
        delay(1000);
        noTone(6);
        digitalWrite(10, LOW);  // LED 左 消灯
        count ++;
      }

      valL=analogRead(eyeL);  // 右側に障害を発見
      if(valL >= 348)  // 障害物までの距離15cm以下なら
      {
        digitalWrite(9, LOW);  // LED 青 消灯
        tone(6, notes[3]);
        digitalWrite(7, HIGH);  // LED 赤 点灯
        delay (100);
        noTone(6);
        digitalWrite(3,LOW);  // 後退
        digitalWrite(2,HIGH);
        digitalWrite(5,LOW);
        digitalWrite(4,HIGH);
        delay(1200);
        digitalWrite(7, LOW);  // LED 赤 消灯
        tone(6, notes[1]);
        digitalWrite(8, HIGH);  // LED 右 点灯
        digitalWrite(3,LOW);  // 右旋回
        digitalWrite(2,HIGH);
        digitalWrite(5,HIGH);
        digitalWrite(4,LOW);
        delay(1000);
        noTone(6);
        digitalWrite(8, LOW);
        count ++;
        }
     }
   }
  }
 }
}






















































〔雑感〕

テキスト内容に対して「加えたかった改良点」のうち、達成できた点は半分程度だった

作業が冗長的にならないよう、ある程度期間を区切って完成(あるいは断念)する、
という方針なので、ひとまず燃えたり粉々になったりせず、形にはなったのでよかったです



前回までとくらべて、多少は見た目にも気を遣うようになったような







Back