radar arduino

Radar con Arduino usando sensor de ultrasonidos HC-SR04

Te mostramos el que es posiblemente uno de los proyectos m谩s interesantes si est谩s iniciandote en el mundo de la electr贸nica y Arduino. A continuaci贸n te mostraremos paso a paso como montar y programar este radar con Arduino, el cual emplea uno de los m贸dulos m谩s famosos que es el sensor de ultrasonidos o tambi茅n llamado HC-SR04.

Materiales empleados en el proyecto

A continuaci贸n veremos te mostramos los materiales que se van a emplear para realizar聽 este radar con Arduino. Adem谩s, te mostramos una breve descripci贸n de los mismos. Para todos aquellos que est茅n interesados en realizar el proyecto, te dejamos una lista con los links de compra para poder adquirir dichos materiales.

Placa de Arduino UNO:聽Es el cerebro de nuestro proyecto, encargada de controlar todos los procesos del mismo mediante el c贸digo que encontrar谩s m谩s adelante.

Servomotores:聽 motores de 5v con una reductora, lo que permite un gran manejo de su posici贸n y una gran fuerza para su reducido tama帽o.

Tabla de madera: La emplearemos como base donde pegar y colocar todos los componentes de nuestro proyecto

Producto Arduino UNO ES US
Producto M贸dulo de ultrasonidos HC-SR04 ES US
Producto Servomotores ES US
ProductoCABLES MACHO HEMBRAESUS

Explicaci贸n paso a paso de como construir el radar con Arduino

En primer lugar uniremos con cola t茅rmica el sensor de ultrasonidos con el servomotor. Dicha uni贸n debe hacerse con los pines del modulo HC-SR04 apuntando hacia arriba, para que no internieran con el servomotor.

radar arduino union servomotor sensor

A continuaci贸n rcolocaremos la placa de Arduino en la tabla de madera. En nuestro caso, nos hemos ayudado de una plataforma hecha con impresi贸n 3D para no tener que pegar la propia placa en la madera.

Adem谩s, pegaremos tambi茅m el servomotor. Este debe estar bien fijado a la plataforma de madera para que no se suelte cuando gire.

radar arduino montaje

Esquema de conexiones del proyecto

Para que te sea m谩s f谩cil montar este proyecto, aqu铆 tienes el esquema de conexiones. Todas las conexiones de este esquema corresponden con el c贸digo de programaci贸n que hay justo abajo, as铆 que aseg煤rate de que todas est谩n tal y como se muestra en esta imagen.聽

esquema conexiones radar arduino

Video con explicaci贸n paso a paso del proyecto

Si lo que buscas es ver de una forma mucho m谩s detallada de como realizar este proyecto desde el inicio hasta el final y una explicaci贸n del c贸digo, a continuaci贸n se muestra el video con dicho contenido, mucho mas visual y f谩cil de comprender. Y recuerda, si te gusta esta clase de contenido, no olvides聽suscribirte馃槈

C贸digos de Arduino para la programaci贸n un radar con sensor de ultrasonidos

A continuaci贸n se muestra el c贸digo de programaci贸n desarrollado espec铆ficamente para este proyecto. Los pines que puedes encontrar en el c贸digo son los mismos que encontrar谩s en el esquema de conexiones previamente mostrado.

Si tienes dudas sobre c贸mo usar o instalar el entorno de programaci贸n empleado para Arduino, te dejamos un link de聽com贸 descargar el IDE de Arduino

//CODIGO ARDUINO
//Canal de YT -> RobotUNO
//Proyecto RADAR
#include <Servo.h>
const int trigPin = 10;
const int echoPin = 11;
long duration;
int distance;
Servo myServo;
void setup() {
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
  myServo.attach(12);
}
void loop() {
  for(int i=15;i<=165;i++){  
  myServo.write(i);
  delay(30);
  distance = calculateDistance();
  Serial.print(i); 
  Serial.print(","); 
  Serial.print(distance);
  Serial.print(".");
  }
  for(int i=165;i>15;i--){  
  myServo.write(i);
  delay(30);
  distance = calculateDistance();
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  }
}
int calculateDistance(){
  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贸digos de programaci贸n para la aplicaci贸n de processing

A continuaci贸n tambi茅n te dejamos los c贸digos para descargar la aplicaci贸n de processing.

Si no la tienes instalada, puedes descargarla pinchando AQU脥.

IMPORTANTE! En la l铆nea 19 deberemos comprobar en que puerto est谩 conectado y modificar 鈥淐OM7鈥 por el que corresponda en tu caso.

import processing.serial.*; // imports library for serial communication
import java.awt.event.KeyEvent; // imports library for reading the data from the serial port
import java.io.IOException;
Serial myPort; // defines Object Serial
// defubes variables
String angle="";
String distance="";
String data="";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1=0;
int index2=0;
PFont orcFont;
void setup() {
  
 size (1200, 700); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION***
 smooth();
 myPort = new Serial(this,"COM7", 9600); // starts the serial communication
 myPort.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: angle,distance.
}
void draw() {
  
  fill(98,245,31);
  // simulating motion blur and slow fade of the moving line
  noStroke();
  fill(0,4); 
  rect(0, 0, width, height-height*0.065); 
  
  fill(98,245,31); // green color
  // calls the functions for drawing the radar
  drawRadar(); 
  drawLine();
  drawObject();
  drawText();
}
void serialEvent (Serial myPort) { // starts reading data from the Serial Port
  // reads the data from the Serial Port up to the character '.' and puts it into the String variable "data".
  data = myPort.readStringUntil('.');
  data = data.substring(0,data.length()-1);
  
  index1 = data.indexOf(","); // find the character ',' and puts it into the variable "index1"
  angle= data.substring(0, index1); // read the data from position "0" to position of the variable index1 or thats the value of the angle the Arduino Board sent into the Serial Port
  distance= data.substring(index1+1, data.length()); // read the data from position "index1" to the end of the data pr thats the value of the distance
  
  // converts the String variables into Integer
  iAngle = int(angle);
  iDistance = int(distance);
}
void drawRadar() {
  pushMatrix();
  translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  noFill();
  strokeWeight(2);
  stroke(98,245,31);
  // draws the arc lines
  arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI);
  arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI);
  arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);
  arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI);
  // draws the angle lines
  line(-width/2,0,width/2,0);
  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)));
  line((-width/2)*cos(radians(30)),0,width/2,0);
  popMatrix();
}
void drawObject() {
  pushMatrix();
  translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  strokeWeight(9);
  stroke(255,10,10); // red color
  pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels
  // limiting the range to 40 cms
  if(iDistance<40){
    // draws the object according to the angle and the distance
  line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));
  }
  popMatrix();
}
void drawLine() {
  pushMatrix();
  strokeWeight(9);
  stroke(30,250,60);
  translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // draws the line according to the angle
  popMatrix();
}
void drawText() { // draws the texts on the screen
  
  pushMatrix();
  if(iDistance>40) {
  noObject = "Out of Range";
  }
  else {
  noObject = "In Range";
  }
  fill(0,0,0);
  noStroke();
  rect(0, height-height*0.0648, width, height);
  fill(98,245,31);
  textSize(25);
  
  text("10cm",width-width*0.3854,height-height*0.0833);
  text("20cm",width-width*0.281,height-height*0.0833);
  text("30cm",width-width*0.177,height-height*0.0833);
  text("40cm",width-width*0.0729,height-height*0.0833);
  textSize(40);
  text("FABRI creator", width-width*0.875, height-height*0.0277);
  text("脕ngulo: " + iAngle +" 掳", width-width*0.48, height-height*0.0277);
  text("Dist:", width-width*0.26, height-height*0.0277);
  if(iDistance<40) {
  text("        " + iDistance +" cm", width-width*0.225, height-height*0.0277);
  }
  textSize(25);
  fill(98,245,60);
  translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30)));
  rotate(-radians(-60));
  text("30掳",0,0);
  resetMatrix();
  translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60)));
  rotate(-radians(-30));
  text("60掳",0,0);
  resetMatrix();
  translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90)));
  rotate(radians(0));
  text("90掳",0,0);
  resetMatrix();
  translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120)));
  rotate(radians(-30));
  text("120掳",0,0);
  resetMatrix();
  translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150)));
  rotate(radians(-60));
  text("150掳",0,0);
  popMatrix(); 
}
Publicado en Otros, Proyectos con Arduino, Proyectos con sensores, Proyectos con Servomotores, Proyectos de electr贸nica.

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *