Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Medición de Distancia en Tiempo Real con Sonar Arduino y Visualización en Processing

Componentes y suministros

Arduino UNO × 1
Micro-servomotor SG90 × 1
Sensor ultrasónico HC-SR04 (genérico) × 1
Cables de conexión (genéricos) × 1
Protoboard sin soldadura (tamaño completo) × 1

Herramientas y máquinas necesarias

Aplicaciones y servicios en línea

Sobre el proyecto

Hola a todos, me sugirieron hacer un coche evitador de obstáculos, pero me pareció demasiado común e impráctico. Así que decidí hacer un sonar usando el concepto del servomotor y el sensor HC-SR04 del coche evitador de obstáculos.

No tenía una pantalla TFT LCD para mostrar la salida del sonar, así que pensé en usar Processing IDE, que permite visualizar la salida en la PC con buena resolución. Como era nuevo en Processing, practiqué primero con el editor web p5 y luego usé Processing IDE con algunas bibliotecas para leer la salida del sonar y mostrarla en la PC.

Monté el sensor ultrasónico en el servomotor usando pegamento caliente para que gire con el servo y cubra un rango de 180 grados. La salida (si se detecta un objeto o no) se muestra en Processing IDE, y escribí código adicional que muestra con precisión la distancia y el ángulo.

Código

Código del sonar para Arduino IDE (C/C++)

#include <Servo.h>
const int trigPin = 12;
const int echoPin = 11;
long duration;
int distance;
Servo s1;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  s1.attach(9);
}

void loop() {
  for(int i = 0; i < 180; i++) {
    s1.write(i);
    delay(30);
    distance = calDist();
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print(".");
  }
  for(int i = 180; i > 0; i--) {
    s1.write(i);
    delay(30);
    distance = calDist();
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print(".");
  }
}

int calDist() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  return distance;
}

Código del sonar para Processing IDE (Java)

import processing.serial.*;
Serial 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, width, height * 0.93);
  noStroke();
  fill(0, 255);
  rect(0, height * 0.93, width, height);
  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());
  angle = int(ang);
  dist = int(distance);
  System.out.println(angle);
}

void drawRadar() {
  pushMatrix();
  noFill();
  strokeWeight(0.5);
  stroke(10, 255, 10);
  translate(width/2, height - height * 0.06);
  line(-width/2, 0, width/2, 0);
  arc(0, 0, (width * 0.5), (width * 0.5), PI, TWO_PI);
  arc(0, 0, (width * 0.25), (width * 0.25), PI, TWO_PI);
  arc(0, 0, (width * 0.75), (width * 0.75), PI, TWO_PI);
  arc(0, 0, (width * 0.95), (width * 0.95), PI, TWO_PI);
  line(0, 0, (-width/2) * cos(radians(30)), (-width/2) * sin(radians(30)));
  line(0, 0, (-width/2) * cos(radians(60)), (-width/2) * sin(radians(60)));
  line(0, 0, (-width/2) * cos(radians(90)), (-width/2) * sin(radians(90)));
  line(0, 0, (-width/2) * cos(radians(120)), (-width/2) * sin(radians(120)));
  line(0, 0, (-width/2) * cos(radians(150)), (-width/2) * sin(radians(150)));
  stroke(175, 255, 175);
  line(0, 0, (-width/2) * cos(radians(15)), (-width/2) * sin(radians(15)));
  line(0, 0, (-width/2) * cos(radians(45)), (-width/2) * sin(radians(45)));
  line(0, 0, (-width/2) * cos(radians(75)), (-width/2) * sin(radians(75)));
  line(0, 0, (-width/2) * cos(radians(105)), (-width/2) * sin(radians(105)));
  line(0, 0, (-width/2) * cos(radians(135)), (-width/2) * sin(radians(135)));
  line(0, 0, (-width/2) * cos(radians(165)), (-width/2) * sin(radians(165)));
  popMatrix();
}

void drawLine() {
  pushMatrix();
  strokeWeight(9);
  stroke(0, 255, 0);
  translate(width/2, height - height * 0.06);
  line(0, 0, (width/2) * cos(radians(angle)), (-width/2) * sin(radians(angle)));
  popMatrix();
}

void drawObject() {
  pushMatrix();
  strokeWeight(9);
  stroke(255, 0, 0);
  translate(width/2, height - height * 0.06);
  float pixleDist = (dist / 40.0) * (width / 2.0);
  float pd = (width/2) - pixleDist;
  float x = -pixleDist * cos(radians(angle));
  float y = -pixleDist * sin(radians(angle));
  if(dist <= 40) {
    line(-x, y, -x + (pd * cos(radians(angle))), y - (pd * sin(radians(angle))));
  }
  popMatrix();
}

void drawText() {
  pushMatrix();
  fill(100, 200, 255);
  textSize(25);
  text("10cm", (width/2) + (width * 0.115), height * 0.93);
  text("20cm", (width/2) + (width * 0.24), height * 0.93);
  text("30cm", (width/2) + (width * 0.365), height * 0.93);
  text("40cm", (width/2) + (width * 0.45), height * 0.93);
  if(dist <= 40) {
    text("Distancia: " + dist, width * 0.7, height * 0.99);
  }
  translate(width/2, height - height * 0.06);
  textSize(25);
  text(" 30", (width/2) * cos(radians(30)), (-width/2) * sin(radians(30)));
  text(" 60", (width/2) * cos(radians(60)), (-width/2) * sin(radians(60)));
  text("90", (width/2) * cos(radians(91)), (-width/2) * sin(radians(90)));
  text("120", (width/2) * cos(radians(123)), (-width/2) * sin(radians(118)));
  text("150", (width/2) * cos(radians(160)), (-width/2) * sin(radians(150)));
  popMatrix();
}

Esquemáticos

Diagrama de conexiones del sensor ultrasónico HC-SR04, servomotor SG90 y Arduino UNO.

Proceso de manufactura

  1. Detector de idiomas TinyML con Edge Impulse en Arduino Nano 33 BLE Sense
  2. Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
  3. Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
  4. Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
  5. Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
  6. Registrador de Temperatura y Humedad con Arduino, DHT11 y Ethernet Shield
  7. Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
  8. Contador Inteligente de Plazas de Aparcamiento: Seguimiento en Tiempo Real con Arduino, Processing y PHP
  9. Control de brillo LED sin interrupciones con Bolt IoT y Arduino UNO
  10. Controla tu TV con Alexa mediante Arduino IoT Cloud: Guía Paso a Paso
  11. Construye una Brújula Digital en Tiempo Real con Arduino y Processing