Hola a todos, me sugirieron hacer un automóvil para evitar obstáculos, pero pensé que era demasiado común y poco práctico hacer uno ..., así que pensé en hacer un sonar usando el concepto de servo y sensor HC-SR04 del automóvil para evitar obstáculos.
No tenía una pantalla tft lcd debido a que no sabía cómo mostrar la salida de la sonda. ¡Entonces pensé en usar el IDE de procesamiento, ya que permitía mostrar la salida de la sonda en mi PC también con una buena resolución! pero como era nuevo en el procesamiento de IDE, no sabía cómo usarlo, así que para la práctica usé el editor web p5 (solo para practicar) que utilicé el procesamiento de Ide y algunas bibliotecas para leer la salida de la sonda y la visualización en la PC.
He adjuntado un sensor ultrasónico en el servomotor usando una pistola de pegamento caliente para que el sensor ultrasónico gire con el servo y cubra un rango de 180 grados y luego la salida de si se detecta un objeto o no se muestra en el procesamiento IDE y escribí un código más que muestra con precisión la distancia y el ángulo.
Amigos, también he compartido cómo se ve el resultado en el procesamiento de IDE, si pueden usar la imagen como referencia con su proyecto :)
Como sabemos cómo se ve el ensamblaje y la salida, lo único que queda es el video de salida, mire el video hasta el final para comprender la salida mucho más correctamente.
Código
- Código de sonda para arduino IDE
- Código de sonda para procesar IDE
Código de sonda para arduino IDE C / C ++
#include const int trigPin =12; const int echoPin =11; larga duración; int distancia; Servo s1; void setup () {Serial.begin (9600); pinMode (trigPin, SALIDA); pinMode (echoPin, ENTRADA); s1.attach (9);} bucle vacío () {para (int i =0; i <180; i =i + 1) {s1.write (i); retraso (30); distancia =calDist (); Serial.print (i); Serial.print (","); Serial.print (distancia); Serial.print ("."); } para (int i =180; i> 0; i =i-1) {s1.write (i); retraso (30); distancia =calDist (); Serial.print (i); Serial.print (","); Serial.print (distancia); Serial.print ("."); }} int calDist () {digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, BAJO); duración =pulseIn (echoPin, HIGH); distancia =duración * 0.034 / 2; distancia de retorno;}
Código de sonda para procesar IDE Java
procesamiento de importación.serial. *; Serial myPort; String ang =""; String distance =""; String data =""; int ángulo, dist; void setup () {size (2000,800); myPort =new Serial (este, "COM3", 9600); myPort.bufferUntil ('.'); fondo (0);} vacío dibujar () {relleno (0,5); noStroke (); rect (0, 0, ancho, alto * 0.93); noStroke (); llenar (0,255); rect (0, alto * 0.93, ancho, alto); drawRadar (); Dibujar linea(); dibujarObjeto (); drawText ();} void serialEvent (Serial myPort) {data =myPort.readStringUntil ('.'); datos =data.substring (0, data.length () - 1); int index1 =data.indexOf (","); ang =data.substring (0, index1); distancia =data.substring (index1 + 1, data.length ()); ángulo =int (ang); dist =int (distancia); System.out.println (ángulo);} void drawRadar () {pushMatrix (); sin relleno(); strokeWeight (0,5); accidente cerebrovascular (10,255,10); traducir (ancho / 2, alto-alto * 0.06); línea (-ancho / 2,0, ancho / 2,0); arco (0,0, (ancho * 0.5), (ancho * 0.5), PI, TWO_PI); arco (0,0, (ancho * 0.25), (ancho * 0.25), PI, TWO_PI); arco (0,0, (ancho * 0,75), (ancho * 0,75), PI, TWO_PI); arco (0,0, (ancho * 0.95), (ancho * 0.95), PI, TWO_PI); línea (0,0, (- ancho / 2) * cos (radianes (30)), (- ancho / 2) * sin (radianes (30))); línea (0,0, (- ancho / 2) * cos (radianes (60)), (- ancho / 2) * sin (radianes (60))); línea (0,0, (- ancho / 2) * cos (radianes (90)), (- ancho / 2) * sin (radianes (90))); línea (0,0, (- ancho / 2) * cos (radianes (120)), (- ancho / 2) * sin (radianes (120))); línea (0,0, (- ancho / 2) * cos (radianes (150)), (- ancho / 2) * sin (radianes (150))); accidente cerebrovascular (175,255,175); línea (0,0, (- ancho / 2) * cos (radianes (15)), (- ancho / 2) * sin (radianes (15))); línea (0,0, (- ancho / 2) * cos (radianes (45)), (- ancho / 2) * sin (radianes (45))); línea (0,0, (- ancho / 2) * cos (radianes (75)), (- ancho / 2) * sin (radianes (75))); línea (0,0, (- ancho / 2) * cos (radianes (105)), (- ancho / 2) * sin (radianes (105))); línea (0,0, (- ancho / 2) * cos (radianes (135)), (- ancho / 2) * sin (radianes (135))); línea (0,0, (- ancho / 2) * cos (radianes (165)), (- ancho / 2) * sin (radianes (165))); popMatrix ();} vacío drawLine () {pushMatrix (); strokeWeight (9); accidente cerebrovascular (0,255,0); traducir (ancho / 2, alto-alto * 0.06); línea (0,0, (ancho / 2) * cos (radianes (ángulo)), (- ancho / 2) * sin (radianes (ángulo))); popMatrix ();} vacío drawObject () {pushMatrix (); strokeWeight (9); carrera (255,0,0); traducir (ancho / 2, alto-alto * 0.06); float pixleDist =(dist / 40.0) * (ancho / 2.0); float pd =(ancho / 2) -pixleDist; float x =-pixleDist * cos (radianes (ángulo)); float y =-pixleDist * sin (radianes (ángulo)); if (dist <=40) {línea (-x, y, -x + (pd * cos (radianes (ángulo))), y- (pd * sin (radianes (ángulo)))); } popMatrix ();} vacío drawText () {pushMatrix (); llenar (100,200,255); textSize (25); texto ("10cm", (ancho / 2) + (ancho * 0.115), alto * 0.93); texto ("20cm", (ancho / 2) + (ancho * 0.24), alto * 0.93); texto ("30 cm", (ancho / 2) + (ancho * 0.365), alto * 0.93); texto ("40cm", (ancho / 2) + (ancho * 0.45), alto * 0.93); if (dist <=40) {text ("Distancia:" + dist, ancho * 0,7, alto * 0,99); } traducir (ancho / 2, alto-alto * 0.06); textSize (25); text ("30", (ancho / 2) * cos (radianes (30)), (- ancho / 2) * sin (radianes (30))); text ("60", (ancho / 2) * cos (radianes (60)), (- ancho / 2) * sin (radianes (60))); text ("90", (ancho / 2) * cos (radianes (91)), (- ancho / 2) * sin (radianes (90))); text ("120", (ancho / 2) * cos (radianes (123)), (- ancho / 2) * sin (radianes (118))); text ("150", (ancho / 2) * cos (radianes (160)), (- ancho / 2) * sin (radianes (150))); popMatrix (); }
Esquemas