Съдържание:

聲納: 4 стъпки
聲納: 4 стъпки

Видео: 聲納: 4 стъпки

Видео: 聲納: 4 стъпки
Видео: Innistrad Midnight Hunt。亡灵释放牌的开幕 2024, Ноември
Anonim
聲納
聲納

改作:

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

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

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

Стъпка 1: Стъпка 1 電路圖

Стъпка 1 電路圖
Стъпка 1 電路圖

這 是 電路圖

Стъпка 2: Стъпка 2 寫 程式 (arduino)

Стъпка 2 寫 程式 (arduino)
Стъпка 2 寫 程式 (arduino)

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

Стъпка 3: Стъпка 3 寫 程式 (обработка)

обработка на внос.serial.*;

импортиране на java.awt.event. KeyEvent; импортиране на java.io. IOException;

Сериен myPort; PFont orcFont; int iAngle; int iDistance; void setup () {размер (1000, 500); гладка (); myPort = нов сериен (това, "COM7", 9600); myPort.clear (); myPort.bufferUntil ('\ n');

} void draw () {fill (98, 245, 31); noStroke (); попълнете (0, 4); правоъгълна (0, 0, ширина, 0,935 * височина); попълнете (98, 245, 31); DrawRadar (); DrawLine (); DrawObject (); DrawText (); } void serialEvent (Serial myPort) {try {String data = myPort.readStringUntil ('\ n'); if (данни == null) {връщане; } int commaIndex = data.indexOf (","); Низ ъгъл = data.substring (0, commaIndex); Низово разстояние = data.substring (commaIndex+1, data.length ()-1); iAngle = StringToInt (ъгъл); iDistance = StringToInt (разстояние); } catch (RuntimeException e) {}} void DrawRadar () {pushMatrix (); превод (ширина/2, 0,926 * височина); noFill (); strokeWeight (2); ход (98, 245, 31); // изчертава дъговите линии DrawRadarArcLine (0.9375); DrawRadarArcLine (0.7300); DrawRadarArcLine (0.5210); DrawRadarArcLine (0.3130); // изчертава ъгловите линии final int halfWidth = width/2; ред (-halfWidth, 0, halfWidth, 0); for (int ъгъл = 30; ъгъл <= 150; ъгъл+= 30) {DrawRadarAngledLine (ъгъл); } ред (-halfWidth * cos (радиани (30)), 0, halfWidth, 0); popMatrix (); } void DrawRadarArcLine (краен коефициент на плаване) {дъга (0, 0, коефициент * ширина, коефициент * ширина, PI, TWO_PI); } void DrawRadarAngledLine (краен int ъгъл) {ред (0, 0, (-width/2) * cos (радиани (ъгъл)), (-width/2) * sin (радиани (ъгъл))); } void DrawObject () {pushMatrix (); превод (ширина/2, 0,926 * височина); strokeWeight (9); ход (255, 10, 10); int pixsDistance = int (iDistance * 0.020835 * височина); if (iDistance 40? "Out of Range": "In Range"), 0,125 * ширина, 0,9723 * височина); текст ("ъгъл:" + iAngle + "°", 0,52 * ширина, 0,9723 * височина); текст ("Разстояние:", 0,74 * ширина, 0,9723 * височина); if (iDistance <40) {text ("" + iDistance + "cm", 0.775 * ширина, 0.9723 * височина); } textSize (25); попълнете (98, 245, 60); превод (0.5006 * ширина + ширина/2 * cos (радиани (30)), 0.9093 * височина - ширина/2 * грех (радиани (30))); завъртане (-радиани (-60)); текст ("30 °", 0, 0); resetMatrix (); превод (0.497 * ширина + ширина/2 * cos (радиани (60)), 0.9112 * височина - ширина/2 * грех (радиани (60))); завъртане (-радиани (-30)); текст ("60 °", 0, 0); resetMatrix (); превод (0.493 * ширина + ширина/2 * cos (радиани (90)), 0.9167 * височина - ширина/2 * грех (радиани (90))); завъртане (радиани (0)); текст ("90 °", 0, 0); resetMatrix (); превод (0.487 * ширина + ширина/2 * cos (радиани (120)), 0.92871 * височина - ширина/2 * грех (радиани (120))); завъртане (радиани (-30)); текст ("120 °", 0, 0); resetMatrix (); превод (0.4896 * ширина + ширина/2 * cos (радиани (150)), 0.9426 * височина - ширина/2 * грех (радиани (150))); завъртане (радиани (-60)); текст ("150 °", 0, 0); popMatrix (); }

int StringToInt (низ от низ) {int value = 0; for (int i = 0; i = '0' && string.charAt (i) <= '9') {стойност *= 10; стойност += (string.charAt (i) - '0'); }} възвращаема стойност;}

Препоръчано: