İçindekiler:

聲納: 4 Adım
聲納: 4 Adım

Video: 聲納: 4 Adım

Video: 聲納: 4 Adım
Video: 【MultiSub】《欢乐颂4 Ode to JoyⅣ》第3集:刺激!江疏影和教授被传桃色绯闻,窦骁冲进研究所霸气护妻!#欢乐颂4 #江疏影 #窦骁 #杨采钰 2024, Temmuz
Anonim
聲納
聲納

改作:https://aboutsciences.com/blog/arduino-radar-using…

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

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

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

Adım 1: Adım 1 電路圖

Adım 1 電路圖
Adım 1 電路圖

這是電路圖

Adım 2: Adım 2 寫程式(arduino)

Adım 2 寫程式(arduino)
Adım 2 寫程式(arduino)

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

Adım 3: Adım 3 寫程式(işleme)

işleme.serisini içe aktar.*;

java.awt.event. KeyEvent'i içe aktar; java.io. IOException'ı içe aktarın;

Seri myPort; PFont orcFont; int iAngle; int iDistance; geçersiz kurulum() { boyut(1000, 500); düz(); myPort = yeni Seri(bu, "COM7", 9600); myPort.clear(); myPort.bufferUntil('\n');

} void draw() { fill(98, 245, 31); noStroke(); doldur(0, 4); rect(0, 0, genişlik, 0.935 * yükseklik); doldur(98, 245, 31); DrawRadar(); Çizgi çiz(); DrawObject(); DrawText(); } void serialEvent (Seri myPort) { try { String data = myPort.readStringUntil('\n'); if (veri == boş) { dönüş; } int commaIndex = data.indexOf(", "); Dizi açısı = data.substring(0, commaIndex); Dize mesafesi = data.substring(commaIndex+1, data.length()-1); iAngle = StringToInt(açı); iDistance = StringToInt(mesafe); } catch(RuntimeException e) {} } geçersiz DrawRadar() { pushMatrix(); çevir(genişlik/2, 0.926 * yükseklik); Dolu değil(); vuruş Ağırlığı(2); vuruş(98, 245, 31); // yay çizgilerini çizer DrawRadarArcLine(0.9375); DrawRadarArcLine(0.7300); DrawRadarArcLine(0.5210); DrawRadarArcLine(0.3130); // açı çizgilerini çizer final int yarı Genişlik = genişlik/2; line(-halfWidth, 0, halfWidth, 0); for(int açı = 30; açı <= 150; açı+=30) { DrawRadarAngledLine(açı); } line(-halfWidth * cos(radyan(30)), 0, halfWidth, 0); popMatrix(); } void DrawRadarArcLine(son kayan nokta katsayısı) { arc(0, 0, katsayı * genişlik, katsayı * genişlik, PI, TWO_PI); } void DrawRadarAngledLine(son int açı){ line(0, 0, (-width/2) * cos(radyan(açı)), (-width/2) * sin(radyan(açı))); } geçersiz DrawObject() { pushMatrix(); çevir(genişlik/2, 0.926 * yükseklik); vuruş Ağırlığı(9); vuruş(255, 10, 10); int pixsDistance = int(iDistance * 0.020835 * yükseklik); if(iDistance 40 ? "Menzil Dışı": "Menzil İçinde"), 0.125 * genişlik, 0.9723 * yükseklik); text("Açı: " + iAçı + " °", 0,52 * genişlik, 0,9723 * yükseklik); text("Mesafe: ", 0.74 * genişlik, 0.9723 * yükseklik); if(iDistance < 40) { text(" " + iDistance +" cm", 0.775 * genişlik, 0.9723 * yükseklik); } metinSize(25); doldur(98, 245, 60); translate(0.5006 * genişlik + genişlik/2 * cos(radyan(30)), 0.9093 * yükseklik - genişlik/2 * sin(radyan(30)); döndür(-radyan(-60)); metin("30°", 0, 0); resetMatrix(); translate(0.497 * genişlik + genişlik/2 * cos(radyan(60)), 0.9112 * yükseklik - genişlik/2 * günah(radyan(60))); döndür(-radyan(-30)); metin("60°", 0, 0); resetMatrix(); translate(0.493 * genişlik + genişlik/2 * cos(radyan(90)), 0.9167 * yükseklik - genişlik/2 * sin(radyan(90))); döndür(radyan(0)); metin("90°", 0, 0); resetMatrix(); translate(0.487 * genişlik + genişlik/2 * cos(radyan(120)), 0.92871 * yükseklik - genişlik/2 * günah(radyan(120))); döndür(radyan(-30)); metin("120°", 0, 0); resetMatrix(); translate(0.4896 * genişlik + genişlik/2 * cos(radyan(150)), 0.9426 * yükseklik - genişlik/2 * sin(radyan(150))); döndür(radyan(-60)); metin("150°", 0, 0); popMatrix(); }

int StringToInt(String string) { int değer = 0; for(int i = 0; i = '0' && string.charAt(i) <= '9') { değer *= 10; değer += (string.charAt(i) - '0'); }} geri dönüş değeri;}

Önerilen: