Introduction: Radar Sencillo Con Processing Y Arduino

About: Músico, matemático, computación, ciencia... insolente y subversivo, pero siempre propositivo

Un radar utiliza una señal que rebota en la superficie de cuerpos sólidos y regresa, para determinar la distancia de objetos. EL radar hace un recorrido de 180 o 360 grados para detectar que existe alrededor, e incluso para determinar la velocidad de cuerpos que se muevan hacia el radar.

En este instructable construimos un radar sencillo utilizando un sensor ultrasónico, un servo y Processing para graficar la información. Además aprendemos a conectar Arduino y processing a través de puerto serial. Entonces, por el lado de Arduino aprendemos:

  • Usar un servo
  • Rotar el servo de forma contínua hacia la izquierda y derecha
  • Utilizar un sensor de distancia ultrasónico
  • Mandar información por puerto serial

Del lado de Processing:

  • Recibir infromación por puerto serial
  • Separar datos recibidos
  • Usar sistemas de referencia en Processing.

Me imagino que cuentan con un Arduino y tienen el IDE instalado. Sino tienen Processing, lo pueden descargar. El lenguaje de Processing es Java que es muy simular a C/C++ así que van a entender el código sin problemas.

Step 1: Materiales

Materiales:

  1. Arduino UNO o clon
  2. Servo motor pequeño (TowerPro SG-92R Micro Servo)
  3. Cables jumper
  4. Sensor Ultrasónico (HCSR04)
  5. Masking tape o tape doble
  6. Tiras de plástico o impresora 3D

Aunque estoy utilizando un Iteaduino UNO, que trae conectores incorporados. Para claridad el esquema de conexión lo preparé pensando en un Arduino UNO y un breadboard.

Step 2: Conexiones Y Armado

Conexiones

Las conexiones en el Arduino UNO se muestran en el esquema. En el Itearduino UNO pueden conectar los conectores directamente sin utilizar el breadboard, como se ve en las fotos. Las conexiones:

  1. EL servo conectar el cable de 5V (generalmente rojo) a la salida de 5V del Arduino, el cable de GND (generalmente negro o café) a el GND del Arduino, y el de señal (anaranjado o blanco) al pin 9 del Arduino.
  2. Para el ultrasónico, conectar el vcc a 5V del Arduino, el GND al GND del Arduino, y el conector de TRIG al pin 13, y el ECHO al pin 12.

Armado

Hay dos opciones:

  1. Imprimir en 3D este adaptador de servo y ultrasónico que diseñe, y luego montar el sensor y servo como se ve en la foto.
  2. Utilizar tiras de plástico para sostener en sensor a uno de los adaptadores que vienen con el servo (ver fotos)

Para sostener el servo a la mesa utilizo un tape con doble adhesivo, pero pueden utilizar cualquier otra cosa.

Step 3: Código

En este instructable no esntraré en detalles para explicar el código ya que el código es muy sencillo. Desde el arduino "Arduino_Radar.ino" nada más se mandan los datos por el puerto serial, y en Processing "Arduino_Radar.pde" son recibidos por el evento serialEvent(). El código de Arduino y Processing lo pueden descargar de este Github.

En el códgo de processing si es importante en esta línea, pues determina el puerto de conexión del Arduino,

port = new Serial(this, "/dev/ttyACM1", 9600)

Escribir el puerto donde está conectado el Arduino, este es el mismo del Arduino IDE. En el ejemplo de arriba, el Arduino (en linux) está conectado al puerto "/dev/ttyACM1", esto se cambia en caso de que esté conectado a otro puerto (puertos COM en window y tty en MAC). En MAC el puerto es algo como "/dev/cu.usbmodem14221", y en Windows "COM3" o algún otro puerto.

Arduino

En el arduino, para leer el sensor ultra-sónico, ocupamos las siguientes lineas,

long microsec = ultrasonic.timing();
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);

La primera línea lee el tiempo en que la señal se envía y regresa, la segunda calcula en centímetros la distancia (básicamente el tiempo multiplicado por la velocidad del sonido y luego dividido entre 2).

Para hacer rotar e servo hacia la derecha y luego hacia la izquierda, colocamos las siguientes líneas:

a+=dir; 
servo.write(a); 
if(a==0)dir=5;
if(a==180)dir=-5;

La primera y segunda línea suma o resta dir al ángulo, y luego mueve el servo. Luego los "if" lo que hacen es determinar si viene desde la derecha o desde la izquierda y cambia la dirección de movimiento, cambiando el signo de "dir".

Luego mandamos todo por puerto serial en as siguientes líneas,

Serial.print(int(cmMsec));
Serial.print(",");  
Serial.println(a);

Processing

En processing hay dos cosas imporatnes que hacer notar. Primero es que usamos un evento para recoger la información del puerto serial,

void serialEvent(Serial port) {<br>   String bufString = port.readString();
   data = float(split(bufString, ','));
}

Noten que usamos la función "split" para separa la información que viene como un texto con coma para separar los datos. Lo almacenamos luego en un arreglo global "data". Noten también como usamos "float()" para cnvertir de textos a números reales en processing.

Lo segundo es que usamos pushMatrix() y popMatrix(), para cambiar el sistema de coordenadas (ver este tutorial de processing) y facilitar dibujar las líneas (cambiamos el ángulo de grados a radianes),

pushMatrix();<br>  translate(width/2, 10);
  rotate(HALF_PI-data[1]*PI/180);
  line(0, 0, 0, 800);
  stroke(255, 0, 0, 50);
  line(0,data[0]*3,0,800);
popMatrix();

data[0] contiene el ángulo en grados, y data[1] la distancia en centímetros. Usamos translate para mover el marco de referencia y luego rotate para rotar la línea al mismo ángulo que tiene el servo.

NOTA: para este instructable utilizo la librería de ultrasónico que está en el mismo repositorio del código. Si utilizan otra librería, deben modificar un poco el código en el uso del ultrasónico

Step 4: Funcionando Y Retos

  1. Cargar el código al Arduino
  2. Ver en que puerto está conectado el arduino
  3. Colocar el puerto en el código de Processing
  4. y darle Run en processing

El video muestra como funciona.

Retos:

  1. Mejorar la resolución del sonar
  2. Mejorara los gráficos en Processing
Microcontroller Contest 2017

Participated in the
Microcontroller Contest 2017