みなさん,こんにちは
おかしょです.
このプロジェクトでは周りの環境を把握するためのレーダー探知機を作っています.構造は非常に単純で測距モジュールとサーボを使用して作っています.
この記事ではレーダー探知機の本体の作り方やArduinoを使ったサーボや測距モジュールの制御プログラムを解説します.
この記事を読むと以下のようなことがわかる・できるようになります.
- レーダー探知機の作り方
- 測距モジュールとサーボを同時に使う方法
- Arduinoのプログラム
この記事を読む前に
この記事は以下の記事の続きとなっているので,まだ以下の記事を読んでいない方はそちらを先に読んでおくことをおすすめします.
機体の作成
まずはレーダー探知機の本体を作成していきます.
とは言っても,使用する電子部品は測距モジュールとサーボの二つのみなので,測距モジュールをサーボに取り付けられるマウントを作るだけになります.
このときに使用する道具と材料は以下のようになります.
材料
M2ボルト・ナット
ジャンパー線
工具
電動ドリル
精密ドライバー
はんだこて
これらを使って測距モジュールをアルミ板に取り付けます.
サーボホーンもグルーガンで取り付けてしまいました.
電子回路
レーダー探知機は測距モジュールとサーボから構成されるので,以下のような電子回路になります.
Arduinoのプログラム
サーボと測距モジュールを同時に動作させるプログラムは以下になります.
#include <Servo.h>
Servo servo;
int angle = 0;
bool ch = true;
int data;
int L = 0;
float T = 0.05;
float K = 1.0;
unsigned long t0, t1;
float y0, y1;
int u0, u1;
void setup() {
Serial.begin(9600);
servo.attach(3);
servo.write(angle);
y0 = 0.0;
y1 = 0.0;
u0 = 0.0;
u1 = 0.0;
t0 = millis();
}
void loop() {
y0 = y1;
u0 = u1;
if(ch)
{
angle = angle + 1;
if(angle>=180)
{
ch = false;
}
}
else
{
angle = angle - 1;
if(angle<=0)
{
ch = true;
}
}
servo.write(angle);
data = analogRead(0);
u1 = data;
t1 = millis();
float Ts = (float)(t1-t0)/1000;
y1 = (2*T-Ts)/(2*T+Ts)*y0+K*Ts/(2*T+Ts)*(float)(u1+u0);
L = (int)(pow(y1, -1.25)*21000);
Serial.println(L);
delay(20);
t0 = t1;
}
上記のプログラムでは,ループが回るごとにサーボの角度を1度ずつ更新しています.
サーボの使用方法についての詳しい解説はこちらを参照してください.
測距モジュールの使い方はこちらで解説しています.
また,上記のプログラムでは測距モジュールのノイズを低減化するために,ローパスフィルターを使用しています.ローパスフィルタに関してはこちらを参考にしてください.
実行結果
上記のプログラムを実行すると,シリアルモニタに以下のように表示されます.
センサーで測定された距離がcm単位で表示されます.
また,サーボはゆっくりと回転し180°回転すると逆回転をします.
このようにして周りの障害物を何度も往復して測定します.
まとめ
この記事ではレーダー探知機のArduino部分を解説しました.
電子回路やプログラムを作るのは簡単だったのですが,アルミの加工に苦労しました.アルミはカッターで切れるので,加工がしやすいのですが3Dプリンターの方がやはり便利でした.
続けて読む
この記事の続きは以下のリンクから読めます.
以下の記事ではレーダー探知機の完成編として,実際に動作する様子を紹介しています.実際に動作する動画も載せてありますので,ぜひ読んでみてください.
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
それでは最後まで読んでいただきありがとうございました.
コメント