Über dieses Projekt
Hallo zusammen, mir wurde vorgeschlagen, ein Hindernisvermeidungsauto zu bauen, aber ich dachte, es wäre zu üblich und unpraktisch, um eines zu bauen ..., also dachte ich, ein Sonar mit dem Konzept des Servos des Hindernisvermeidungsautos und des HC-SR04-Sensors zu erstellen.
Ich hatte keinen TFT-LCD-Bildschirm, aufgrund dessen ich nicht wusste, wie man die Sonarausgabe anzeigt. Dann dachte ich, die Verarbeitungs-IDE zu verwenden, da sie es ermöglichte, die Sonarausgabe auf meinem PC auch mit schöner Auflösung anzuzeigen! Aber da ich neu in der Verarbeitung von IDE war, wusste ich nicht, wie ich es verwenden sollte, also habe ich zum Üben den p5-Webeditor (nur zum Üben) verwendet, als ich die Verarbeitung von IDE und einige Bibliotheken verwendet habe, um die Ausgabe von Sonar zu lesen und auf dem PC anzuzeigen!
Ich habe den Ultraschallsensor mit einer Heißklebepistole am Servomotor befestigt, so dass sich der Ultraschallsensor mit Servo dreht und einen Bereich von 180 Grad abdeckt zeigt genau den Abstand und den Winkel an!
Freunde Ich habe auch geteilt, wie die Ausgabe bei der Verarbeitung der IDE aussieht. Sie können das Bild als Referenz für Ihr Projekt verwenden :)
Da wir wissen, wie die Montage und Ausgabe aussieht, bleibt nur das Video der Ausgabe. Sehen Sie sich das Video bis zum Ende an, um die Ausgabe besser zu verstehen.
Code
- Sonar-Code für Arduino-IDE
- Sonar-Code zum Verarbeiten der IDE
Sonarcode für Arduino IDEC/C++
#include const int trigPin=12;const int echoPin=11;lange Dauer;int Abstand;Servo s1;void setup() { Serial.begin (9600); pinMode (trigPin, AUSGANG); pinMode (echoPin, EINGANG); s1.attach(9);}void loop(){ for(int i=0;i<180;i=i+1){ s1.write(i); Verzögerung (30); Distanz =calDist(); Serial.print (i); Serial.print (","); Serial.print (Abstand); Serial.print("."); } for(int i=180;i>0;i=i-1){s1.write(i); Verzögerung (30); Distanz =calDist(); Serial.print (i); Serial.print (","); Serial.print (Abstand); Serial.print("."); }} Int calDist () { DigitalWrite (trigPin, LOW); VerzögerungMikrosekunden(2); digitalWrite (trigPin, HOCH); VerzögerungMikrosekunden(10); digitalWrite (trigPin, LOW); Dauer =pulseIn(echoPin, HIGH); Distanz =Dauer*0,034/2; Rückweg;}
Sonar-Code zur Verarbeitung von IDEJava
import processing.serial.*; Serieller myPort; String ang="";String distance="";String data="";int angle, dist;void setup() { size (2000,800); myPort =new Serial(this,"COM3", 9600); myPort.bufferUntil('.'); background(0);}void draw() {fill(0,5); noStroke(); rect(0, 0, Breite, Höhe*0,93); noStroke(); füllen (0,255); rect(0,Höhe*0,93,Breite,Höhe); drawRadar(); drawLine(); drawObject(); drawText();}void serialEvent (Serial myPort) { data =myPort.readStringUntil('.'); data =data.substring(0,data.length()-1); int index1 =data.indexOf(","); ang=data.substring(0, index1); distance=data.substring(index1+1, data.length()); Winkel =int(ang); dist =int (Entfernung); System.out.println (Winkel);}void drawRadar () { pushMatrix (); noFill(); Hubgewicht (0,5); Hub (10,255,10); Übersetzen (Breite/2, Höhe-Höhe * 0,06); Linie(-Breite/2,0,Breite/2,0); arc(0,0,(Breite*0,5),(Breite*0,5),PI,TWO_PI); arc(0,0,(Breite*0,25),(Breite*0,25),PI,TWO_PI); arc(0,0,(Breite*0.75),(Breite*0.75),PI,TWO_PI); arc(0,0,(Breite*0,95),(Breite*0,95),PI,TWO_PI); line(0,0,(-Breite/2)*cos(Radiant (30)),(-Breite/2)*sin(Radiant (30))); line(0,0,(-Breite/2)*cos(Radiant(60)),(-Breite/2)*sin(Radiant(60))); line(0,0,(-Breite/2)*cos(Radiant(90)),(-Breite/2)*sin(Radiant(90))); line(0,0,(-Breite/2)*cos(Radiant(120)),(-Breite/2)*sin(Radiant(120))); line(0,0,(-Breite/2)*cos(Radiant(150)),(-Breite/2)*sin(Radiant(150))); Hub (175,255,175); line(0,0,(-Breite/2)*cos(Radiant(15)),(-Breite/2)*sin(Radiant(15))); line(0,0,(-Breite/2)*cos(Radiant(45)),(-Breite/2)*sin(Radiant(45))); line(0,0,(-Breite/2)*cos(Radiant(75)),(-Breite/2)*sin(Radiant(75))); line(0,0,(-Breite/2)*cos(Radiant(105)),(-Breite/2)*sin(Radiant(105))); line(0,0,(-Breite/2)*cos(Radiant(135)),(-Breite/2)*sin(Radiant(135))); line(0,0,(-Breite/2)*cos(Radiant(165)),(-Breite/2)*sin(Radiant(165))); popMatrix();}void drawLine() { pushMatrix(); Strichgewicht(9); Strich(0,255,0); Übersetzen (Breite/2, Höhe-Höhe * 0,06); line(0,0,(Breite/2)*cos(Radiant(Winkel)),(-Breite/2)*sin(Radiant(Winkel))); popMatrix();}void drawObject() { pushMatrix(); Strichgewicht(9); Strich(255,0,0); Übersetzen (Breite/2, Höhe-Höhe * 0,06); float pixleDist =(dist/40.0)*(width/2.0); float pd=(Breite/2)-pixleDist; float x=-pixleDist*cos(Radiant(Winkel)); float y=-pixleDist*sin(Radiant(Winkel)); if(dist<=40){ line(-x,y,-x+(pd*cos(Radiant(Winkel))),y-(pd*sin(Radiant(Winkel)))); } popMatrix();}void drawText(){ pushMatrix(); füllen(100,200,255); Textgröße (25); text("10cm",(Breite/2)+(Breite*0,115),Höhe*0,93); text("20cm",(Breite/2)+(Breite*0,24,Höhe*0,93); text("30cm",(Breite/2)+(Breite*0,365),Höhe*0,93); text("40cm",(Breite/2)+(Breite*0,45,Höhe*0,93); if(dist<=40) { text("Distance:"+dist,width*0.7,height*0.99); } translate(width/2,height-height*0.06); Textgröße (25); text(" 30",(Breite/2)*cos(Radiant(30)),(-Breite/2)*sin(Radiant(30))); text(" 60",(Breite/2)*cos(Radiant(60)),(-Breite/2)*sin(Radiant(60))); text("90",(Breite/2)*cos(Radiant(91)),(-Breite/2)*sin(Radiant(90))); text("120",(Breite/2)*cos(Radiant(123)),(-Breite/2)*sin(Radiant(118))); text("150",(Breite/2)*cos(Radiant(160)),(-Breite/2)*sin(Radiant(150))); popMatrix(); }