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

Arduino Yunで超音波マップメーカーを自作するステップバイステップガイド

コンポーネントと用品

Arduino Yun × 1
超音波センサー (HC-SR04等) × 1
サーボモーター (Tower Pro MG996R) × 1
ジャンパーワイヤー (汎用) × 10本

アプリとオンラインサービス

Arduino IDE
MATLAB

このプロジェクトについて

ステップ1: 理論

このプロジェクトでは超音波距離センサーを使用します。人間の聴覚範囲を超えた音波を発生させ、その波が障害物に当たって戻ってくるまでの時間を計測することで距離を測定します。これはコウモリや巡航船が使用する原理と同じです。

もう一つのコンポーネントはサーボモーターです。通常のDCモーターとは異なり、指定された角度位置に精密に回転し、その位置を保持できます。特定の長さのパルスを与えると、対応する角度位置に移動します。

これら2つのコンポーネントを組み合わせて、ロボットに180度の視野角を持たせます。

ステップ2: 材料の準備

このプロジェクトで使用するハードウェア:

ソフトウェア側:

ステップ3: 機械的組み立て

汎用基板の小片でHC-SR04用の小さなヘッダーを作り、両面テープでサーボホーンに取り付けます。

このステップは省略可能ですが、システムをよりコンパクトにするため、サーボをプロトシールドの突出部に両面テープで固定しました。

完成すると、ウォーリー(Wall-E)の腹部のような見た目になります。

ステップ4: Arduinoコード

Arduinoコードは、サーボモーターの動作制御、超音波センサーからの読み取りタイミングと頻度を制御し、センサーデータをシリアルポートに出力します。

ステップ5: MATLABコード

MATLABコードはボードの制御よりもデータ処理を担当します。すべてのセンサーデータがシリアル経由でPCに送られ、MATLABで読み取られます。

Arduinoから受信するデータは2つの情報を含みます:サーボの回転角度と、その方向にある障害物までの距離。したがって、この時点で得られるデータは極座標系です。人間の目で見て理解しやすいように可視化するには、直交座標系(X-Y座標系)に変換する必要があります。

変換式:

x = distance × cos(角度)
y = distance × sin(角度)

MATLABコードはまさにこれを行います。COMポートからシリアルデータを取得し、回転角度とともに行列に保存し、上記の式で直交座標に変換します。完了したら、点をプロットしてグラフ出力します。ボードを箱の中に置いて実行した結果が以下です。

ステップ6: 結論

システムは完璧ではありませんが、目的を果たします。箱の幅と長さの大まかな推定が可能で、データは正確に送信されます。

現時点で見られる誤差は、サーボ移動時のセンサーの揺れと、センサー自体の誤読み取りによるものです。

これ以外は正常に動作し、奥行き知覚実験や基本的なコンピュータビジョンプロジェクトに活用できます。

コード

MATLABコード (PCで実行)

theta = 0:(pi/180):pi;
s = serial('COM10');
s.BaudRate = 9600;
fopen(s);
i = 0;
inc = 1;
while i < 180
    A = fgets(s);
    num(i+1) = str2num(A);
    i = i + 1;
end
fclose(s);

j = 1;
while j < 181
    tab(j,1) = (j-1) * inc;
    tab(j,2) = num(j);
    tab(j,3) = num(j) * cosd((j-1) * inc);
    tab(j,4) = num(j) * sind((j-1) * inc);
    j = j + 1;
end

plot(tab(:,3), tab(:,4));

Arduinoコード (Arduino Yunにアップロード)

#include <Servo.h>
#include <NewPing.h>

#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Servo myservo;

int pos = 0;
int it = 10;

void setup() {
  myservo.attach(9);
  Serial.begin(9600);
  delay(3000);
}

void loop() {
  int i = 0;
  int t = 0;
  int a = 0;
  
  for (i = 0; i < 180; i++) {
    unsigned int uS = sonar.ping();
    myservo.write(i);
    delay(20);
    
    for (t = 0; t < it; t++) {
      uS = sonar.ping();
      a = uS / US_ROUNDTRIP_CM + a;
      delay(30);
    }
    
    a = a / (it - 1);
    t = 0;
    Serial.println(a);
    a = 0;
  }
}

回路図

サーボと超音波センサーの接続用Fritzingファイル: YunConfig.fzz

製造プロセス

  1. Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
  2. Arduino Unoベースの人間検知レスキューロボット:センサー統合ステップバイステップ
  3. Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
  4. FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
  5. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  6. ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
  7. Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
  8. ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
  9. Arduino UNO WiFi Webサーバー:ブラウザからLEDをON/OFF制御
  10. Arduino UNOで作る完全自律ライントラッカーロボット ─ 入門に最適な自作キット
  11. Arduinoで自動化するChrome恐竜ゲーム – LDRとPythonで障害物を検知してジャンプ