工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

WALTER:Arduino駆動の走光性昆虫ロボット

必要な部品と材料

SparkFun Arduino Pro Mini 328 - 5V/16MHz ×1
超音波距離センサ HC-SR04(汎用) ×3
フォトダイオード ×4
抵抗 100kΩ ×4
MG90S メタルギア マイクロサーボ ×5
スマートフォン用モバイルバッテリー(2出力:1A、2.1A) ×1

必要な工具と機器

使用するアプリとオンラインサービス

プロジェクト概要

[拙い英語をお許しください]

YouTubeで人気の「2サーボのArduino昆虫ロボット」が大好きです。しかし、それ以前からBEAMロボティクスの愛好家たちは、2つのモーター間の角度を工夫した「マイクロコア/バイコアウォーカー」などで、より優れた歩行を実現していました。

それでも、BEAMロボティクスの創始者Mark Tilden氏が作った「VBug1.5(Walkman)」ほど生き生きとした動きをするものはありません。5つのモーターを用いるため、より高い機動性を持っています。

シンプルなBEAMロボットなら作れますが、VBug1.5のような複雑なものを、電子工作初心者の私(恥ずかしながらエンジニア志望)が作るのは困難です。そこで、非エンジニアでも扱いやすいArduinoプラットフォームを採用しました。

その結果生まれたのが「Walter」です。4脚、5サーボのArduinoロボットです。「なぜ8や12サーボにしなかったのか?」と思われるかもしれません。最もシンプルな構成で最大の機動性を得ること、フレーム加工ではなく接着剤で組み立てられることを目指しました。

行動パターン

多くのArduinoロボットと同様、WalterはHC-SR04超音波センサで障害物を回避します。さらに「走光性(フォトヴォア)」を持ち、光源に引き寄せられます。フォトダイオードで光を検知し、Arduinoスケッチ内の乱数によって休止タイミングや歩行速度(3段階)をランダムに変化させます。

当初は各脚の下にタクトスイッチを設け、接地センサとして機能させる予定でしたが、スマホ用モバイルバッテリーの重さでサーボが負荷に耐えられませんでした。スイッチ自体は軽量ですが、ロボット全体が軽すぎて逆さまにしたスイッチが押せなかったのです。

より大型のサーボを使ったWalterバージョン2では、これらの接地センサを追加する予定です。

回路図

WALTER:Arduino駆動の走光性昆虫ロボット

スケッチ(WALTER.ino)

全文は長いため、主要な定数定義と関数構成を抜粋します。完全なコードは添付ファイルをご覧ください。

/* WALTER - 4脚走光性ロボット
   Yohanes Martedi - 2015 */

#include <Servo.h>

// **** サーボの中心位置(マイクロ秒単位、writeMicroseconds()使用)。1500から調整開始。
const int ANGLE_mid_Shaft = 1520;
const int ANGLE_mid_FLeft = 1550;
const int ANGLE_mid_FRight = 1570;
const int ANGLE_mid_BLeft = 1450;
const int ANGLE_mid_BRight = 1450;

const int ANGLE_sweep = 250;      // ** 脚の振り幅(ステップ幅)。大きいほど広い角度。
const int ANGLE_res = 10;         // ** サーボ動作分解能(マイクロ秒)。サーボのデッドバンド幅以上。
int sweepSPEED;                   // サーボ動作速度(歩行速度)。
int sweepSPEED_Rand[3] = {4, 6, 8}; // ** 3段階の速度モード(ミリ秒)。小さいほど高速。

const int ANGLE_turnMAX = ANGLE_sweep * 1.5;     // ** 光に向かって曲がる最大角度。
const int ANGLE_turnNARROW = ANGLE_sweep * 0.25; // ** 狭い場所での障害物回避時の最大角度。

const int SONAR_sum = 3;          // 超音波センサ数。
const int PHOTO_sum = 4;          // フォトダイオード数。

int PIN_trig[SONAR_sum] = {13, 11, 8}; // *** 超音波センサTrigピン {前, 左, 右}。
int PIN_ec[SONAR_sum] = {12, 10, 7};   // *** 超音波センサEchoピン {前, 左, 右}。
int PIN_PHOTO[PHOTO_sum] = {2, 3, 1, 0}; // *** フォトダイオード接続アナログピン {前左, 前右, 後左, 後右}。

const int distRotate = 25;   // ** 回避回転を開始する前方障害物距離(cm)。
const int distRetreat = 10;  // ** 後退回避を開始する前方障害物距離(cm)。
const int distTurn = 20;     // ** 旋回回避を開始する前方障害物距離(cm)。
const int counter_gait_max = 8; // ** 障害物回避時の歩数。

const int RUN_time = 25000;  // ** 走行継続時間(ms)。
const int REST_time = 3000;  // ** 休止時間(ms)。

// ... 以下、サーボ制御、歩行ゲイト、障害物回避、光源追跡、超音波測距などの関数が続く ...

スケッチ内には ****(サーボ中心位置、要キャリブレーション)、***(ピン割り当て)、**(好みで調整可能なパラメータ)といったマークで変更推奨箇所が示されています。

製造プロセス

  1. Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
  2. Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
  3. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
  4. Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
  5. Arduinoで地球の質量を測定:ステップバイステップDIYガイド
  6. DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
  7. Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
  8. ゲーム用カスタムArduinoジョイスティックハンドルの製作
  9. ArduinoとTEA5767で作る高性能FMラジオ受信機
  10. Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き
  11. ヘルスバンド:高齢者を見守る信頼のスマートウェアラブルアシスタント