Isi kandungan:

聲納: 4 Langkah
聲納: 4 Langkah

Video: 聲納: 4 Langkah

Video: 聲納: 4 Langkah
Video: Garmin® FF250 GPS and Garmin® STRIKER™ Plus 4 Comparison 2024, Julai
Anonim
聲納
聲納

改作:

我 在 原本 聲納 的 基礎 下 加裝 了 喇叭 以 達到 警告 的 作用

材料: arduino uno, 超音波 感測器, 驅動 馬達, 喇叭

功能: 掃描 到 物品 時 加速 並 傳 述 到 電腦 , 物品 接近 10cm 時 喇叭 會 警告

Langkah 1: Langkah 1 電路圖

Langkah 1 電路圖
Langkah 1 電路圖

這 是 電路圖

Langkah 2: Langkah 2 寫 程式 (arduino)

Langkah 2 寫 程式 (arduino)
Langkah 2 寫 程式 (arduino)

create.arduino.cc/editor/dwdawdad/ef6b26a2-3f40-410d-9fdd-3413816090fe/peninjauan

Langkah 3: Langkah 3 processing 程式 (pemprosesan)

pemprosesan import.serial. *;

import java.awt.event. KeyEvent; import java.io. IOException;

MyPort bersiri; PFont ataucFont; int iAngle; jarak jauh; batal persediaan () {saiz (1000, 500); halus (); myPort = Serial baru (ini, "COM7", 9600); myPort.clear (); myPort.bufferUntil ('\ n');

} undian tidak sah () {isi (98, 245, 31); noStroke (); isi (0, 4); segiempat tepat (0, 0, lebar, 0.935 * tinggi); isi (98, 245, 31); DrawRadar (); DrawLine (); DrawObject (); DrawText (); } batal serialEvent (Serial myPort) {cuba {String data = myPort.readStringUntil ('\ n'); jika (data == null) {kembali; } int commaIndex = data.indexOf (","); String angle = data.substring (0, commaIndex); Jarak rentetan = data.substring (commaIndex + 1, data.length () - 1); iAngle = StringToInt (sudut); iDistance = StringToInt (jarak); } tangkapan (RuntimeException e) {}} batal DrawRadar () {pushMatrix (); terjemahkan (lebar / 2, 0,926 * tinggi); noFill (); berat badan (2); strok (98, 245, 31); // melukis garis arka DrawRadarArcLine (0.9375); DrawRadarArcLine (0.7300); DrawRadarArcLine (0.5210); DrawRadarArcLine (0.3130); // melukis garis sudut akhir int setengah Lebar = lebar / 2; garis (-halfWidth, 0, halfWidth, 0); untuk (sudut int = 30; sudut <= 150; sudut + = 30) {DrawRadarAngledLine (sudut); } garis (-halfWidth * cos (radian (30)), 0, halfWidth, 0); popMatrix (); } batal DrawRadarArcLine (pekali apungan akhir) {arka (0, 0, pekali * lebar, pekali * lebar, PI, TWO_PI); } batal DrawRadarAngledLine (sudut int akhir) {line (0, 0, (-width / 2) * cos (radian (angle)), (-width / 2) * sin (radian (sudut))); } batal DrawObject () {pushMatrix (); terjemahkan (lebar / 2, 0,926 * tinggi); berat badan (9); strok (255, 10, 10); int pixsDistance = int (iDistance * 0.020835 * tinggi); jika (iDistance 40? "Out of Range": "In Range"), 0.125 * lebar, 0.9723 * tinggi); teks ("Sudut:" + iAngle + "°", lebar 0,52 *, 0,9723 * tinggi); teks ("Jarak:", lebar 0.74 *, tinggi 0.9723 *); jika (iDistance <40) {teks ("" + iDistance + "cm", 0,775 * lebar, 0,9723 * tinggi); } textSize (25); isi (98, 245, 60); terjemahkan (0,5006 * lebar + lebar / 2 * cos (radian (30)), 0,9093 * tinggi - lebar / 2 * sin (radian (30))); putar (-radian (-60)); teks ("30 °", 0, 0); resetMatrix (); terjemahkan (0.497 * lebar + lebar / 2 * cos (radian (60)), 0.9112 * tinggi - lebar / 2 * sin (radian (60))); putar (-radian (-30)); teks ("60 °", 0, 0); resetMatrix (); terjemahkan (0,493 * lebar + lebar / 2 * cos (radian (90)), 0,9167 * tinggi - lebar / 2 * sin (radian (90))); putar (radian (0)); teks ("90 °", 0, 0); resetMatrix (); terjemahkan (0.487 * lebar + lebar / 2 * cos (radian (120)), 0.92871 * tinggi - lebar / 2 * sin (radian (120))); putar (radian (-30)); teks ("120 °", 0, 0); resetMatrix (); terjemahkan (0,4896 * lebar + lebar / 2 * cos (radian (150)), 0,9426 * tinggi - lebar / 2 * sin (radian (150))); putar (radian (-60)); teks ("150 °", 0, 0); popMatrix (); }

int StringToInt (String string) {int value = 0; untuk (int i = 0; i = '0' && string.charAt (i) <= '9') {nilai * = 10; nilai + = (string.charAt (i) - '0'); }} nilai pulangan;}

Disyorkan: