超音波中級練習-3点ポジショニング
最近、ブロガーは超音波が非常に便利なものであることを発見したので、彼はポジショニングプロジェクトに突入しませんでした。次のステップは参照用です!
1.作業プロセス
(各位置に3つの超音波があり、角度範囲は最大45度に達する可能性があります。より良い効果が必要な場合は、数を増やすか、モーターまたはステアリングギアを追加してスキャンすることを検討してください。上記の値を図に従って変更してください。
実験材料:
- Arduinoメガ2560X1
- RS04超音波センサーX1
- デュポンライン数
- ブレッドボードX1
- USBダウンロードケーブルX1
- ティッシュ1パック(初心者におすすめです。長い間理解していないと、冷たい汗をかく可能性があります)
2.配線方法
次のトリガーピンとエコーピンは送信ピンと受信ピンです。変更する必要がある場合は、2次元配列の番号を直接変更してください。
*すべてのプラス端子はメガの5vピンに接続されています。
*すべての負極はメガのgndピンに接続されています。
*超音波0の3つのTrigPinがポート22、24、および26に順番に接続されています
*超音波0の3つのエコーピンがポート23、25、27に順番に接続されています
*超音波1の3つのTrigPinが28、30、32に順番に接続されています
* 3つの超音波1のEchoPinは29、31、33に順番に接続されています
*超音波2の3つのTrigPinが34、36、38に順番に接続されています
*超音波2の3つのエコーピンが35、37、39に順番に接続されています
*注:実際の状況に応じて、上記のもののLx、Ly、サイズの値を変更してください
*注:測定範囲が小さすぎたり(超音波応答が得られない)、大きすぎたり(測定範囲を超えたり)、角度が大きくずれたり(超音波モジュールによって制限されたり)することはできません。
*フィードバック:arduino ideのシリアルモニターを開きます。3行3列の数値は9つの超音波測定値であり、出力のx値とy値は計算値です。単一の超音波値が常に0.00である場合は、ハードウェアの障害を考慮してください。
3.コード
float cm[3][3];
int TrigPin[3][3] = {
{22,24,26},{28,30,32},{34,36,38}};
int EchoPin[3][3] = {
{23,25,27},{29,31,33},{35,37,39}};//双数发,单数收
float target_cm[3];
float p = 0;
int y = 0;
int x = 0;
void setup()
{
Serial.begin(9600); //设置波特率
for(int i = 0;i<3;i++)
for(int j = 0;j<3;j++)
{
pinMode(TrigPin[i][j], OUTPUT);
pinMode(EchoPin[i][j], INPUT);
}
}
void loop()
{
for(int i = 0;i<3;i++)
for(int j = 0;j<3;j++)
{
digitalWrite(TrigPin[i][j], LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2); // delayMicroseconds在更小的时间内延时准确
digitalWrite(TrigPin[i][j], HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin[i][j], LOW); //通过这里控制超声波的发射
cm[i][j] = pulseIn(EchoPin[i][j], HIGH) / 58.0; //将回波时间换算成cm
cm[i][j] = (int)(cm[i][j] * 100.0) / 100.0; //保留两位小数
//delay(50);
}
/
Serial.println();
Serial.println();
for(int i = 0;i<3;i++)
{
for(int j = 0;j<3;j++)
{
Serial.print(cm[i][j]);
Serial.print(" ");
}
Serial.println();
}
Serial.println();
Serial.println();
//
for(int i = 0;i<3;i++)
{
target_cm[i] = cm[i][0];
for(int j = 0;j<3;j++)
{
if(cm[i][j] > 0 && cm[i][j] <= 350 && target_cm[i] >= cm[i][j])
target_cm[i] = cm[i][j]; //取最小值
}
Serial.println(target_cm[i]);
}
y = 0;
x = 0;
if( target_cm[0]> 0 && target_cm[1]> 0 && target_cm[2]> 0)
{
int a = target_cm[0] +size_of_thing;
int b = target_cm[1] +size_of_thing;
int c = target_cm[2] +size_of_thing;
p = (a+b+Lx)/2.0;
int S = (int)(sqrt(p*(p-a)*(p-b)*(p-c)));
int h = 2*S/a;
y = h;
x = (int)(sqrt((a*a) - (y*y)));
Serial.print("x = ");
Serial.print(x);
Serial.print(" ");
Serial.print("y = ");
Serial.println(y);
}
else
{
Serial.println("请放在指定位置");
}
}
4.実験現象
自分でやって、電子部品を購入して、学びたいなら自分でテストして、真実を実践してください!ハハハッハッハ!
5.まとめ
意志があれば実現!問題が発生しても慌てないでください。最初に電話を取り出してください。Sanmingの先輩がいつもあなたと一緒にいます!
いい加減にして!ご不明な点がございましたら、メッセージを残してください。2回目のブログでは、テクノロジーは平均的です。気分を害することなく、ご覧ください。
さまざまなWebサイトにArduinoコンポーネント材料の例が多すぎて、このアカウントで見つけるのが不便であるという問題を解決するには、ここではセンサー名またはコンポーネント名を検索するだけで済みます。同時に、ブロガーは学習と参照のためにケースを公開することがよくあります!それに注意を払う必要があります、それはあなたにとって本当に役に立ちます!
ご清聴ありがとうございました!続行するには...、お楽しみに!