Subido por manuelalarcon_24

Radar

Anuncio
TECNOLOGICO NACIONAL DE
MEXICO
CAMPUS ACAPULCO
Unidad 4
ELECTRONICA ANALOGICA
NOMBRE DE LOS INTEGRANTES
MANUEL ALARCON CHAVELAS
JOSE DAVID ANTUNEZ VARGAS
FREDDY CASTAÑON LOPEZ
GERARDO LENNIN CASTAÑEDA ZUÑIGA
DILAN ANDRES CELESTINO ALBARRAN
JOSE GABRIEL ALARCON FLORES
INDRODUCCIÓN
Aprenderas a construir y programar un radar de 180º utilizando los componentes
de arduino. El sistema detectará cualquier objeto que se encuentre dentro de los
180º de alcance del radar y calculará su distancia.
El desarrollo de un radar hoy en día puede llegar a facilitar la obtención de muchas
cosas como podrían ser imágenes de superficies planetarias o cartografia de zonas
de alta nubosidad (inaccesibles mediante sensores ópticos), es por eso que el
desarrollo de un radar puede ser una tecnologia que pueda ayudar a resolver estos
problemas
El desarrollo de este radar se realizó a través de Arduino, un sensor HY-SRF04 y un
servomotor y para visualizar los datos obtenidos a través del sensor se visualizan
en el pc mediante la comunicación serial.
El sistema complejo que utiliza muchos elementos tales. como el procesamiento de
señales, procesamiento de datos, dispersión electromagnética, detección,
estimación de parámetros, extracción de información, antenas, transmisores y
receptores. Lo anterior hace que sea un sistema muy interesante de estudiar y con
ello lograr el desarrollo de nuevos campos de aplicación que contribuyan en el
mejoramiento de nuestra vida cotidiana.
Fecha;
22/05/2022
Proyecto con Arduino
1
MANTERIALES
 1 Servomotor
 1 Sensor de distancia por
ultrasonidos
 1 Caja de cartón
 1 USB Cable 1PCS
 1 Ordenador
 Adhesivo o cinta adhesiva
PROCEDIMIENTO
Primero diseñaremos el digrama de conexión
Una vez teniendo el diagrama prodemos armar el circuito.
Despus sigue programar el arduino
Arduino es una plataforma de hardware de código abierto, basada en una sencilla
placa con entradas y salidas, analógicas y digitales, cuenta con 14 pines digitales
de entrada y salida (de los cuales 6 se pueden utilizar como salidas PWM), 6
entradas analógicas, un cristal de cuarzo de 16 MHz. Arduino Uno es una placa
electrónica basada en ATmega328P con un entorno de desarrollo que està basado
en el lenguaje de programación Processing.
El uso del void setup y el void loop en Arduino es de carácter obligatorio, por lo que
no será posible escribir un algoritmo en esta plataforma sin contar con dichas
funciones. Cada vez que abrimos una nueva ventana contando con las dos
funciones escritas por defecto.
Fecha;
22/05/2022
Proyecto con Arduino
2
void setup()
El setup es la primera función en ejecutarse dentro de un programa en Arduino. Es,
básicamente, donde se "setean" las funciones que llevará a cabo el
microcontrolador. Si vamos a utilizar un pin determinado como salida de voltaje,
usamos el pinMode para indicarle a Arduino que determinado pin funcionará como
salida, usando el parámetro OUTPUT.
void loop()
Loop en inglés significa lazo o bucle. La función loop en Arduino es la que se
ejecuta un número infinito de veces. Al encenderse el Arduino se ejecuta el código
del setup y luego se entra al loop, el cual se repite de forma indefinida hasta que
se apague o se reinicie el microcontrolador.
Los apoyaremos de un digrama de flujo para poder programar el arduino
Fecha;
22/05/2022
Proyecto con Arduino
3
Con lo primero que vamos a comesar el desclarar las variable y dar un ciclo al
servo motor recorda el servo motor nada mas puede trabajar 180
#include <Servo.h>
const int trigPin = 10;
const int echoPin = 11;
long duration; //tiempo de ida/vuelta
int distance;
Servo myServo;
void setup() {
pinMode(trigPin, OUTPUT); // /ponemos al trigger a output para proporcionar
datos de la computadora
pinMode(echoPin, INPUT); // Setea el pin echoPin como un Input
Serial.begin(9600); // abre el puerto serie, establece la velocidad de datos en
9600 bps
myServo.attach(12);
}
void loop() {
for(int i=15;i<=165;i++){ //Rota el servo de 15 a 165 grados
myServo.write(i);
delay(30);
distance = calculateDistance();//Llama a esta funcion para calcular la distancia por
cada grado
Serial.print(i); // Envia el grado de inclinacion actual al puerto serial
Serial.print(","); // Envia una , como caracter de separacion
Serial.print(distance); // Envia la distancia al puerto serial
Serial.print("."); // Envia un . como final de la orden
}
for(int i=165;i>15;i--){ // Repite las lineas previas y hace que ahora el servo vaya
de 165 a 15 grados
myServo.write(i);
delay(30);
distance = calculateDistance();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
Fecha;
22/05/2022
Proyecto con Arduino
4
}
}
// Funcion que calcula la distancia real con los datos que nos devuelve el sensor
ultrasonico
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;
}
Una vez programado procedemos a subirno ala tarjeta de arduino y empezara a
funcionar.
Para ver los datos necitamos el programa processing y para este programa ya hay
un codigo para hacer funcionar nuestro radar que es el siguiente:
import processing.serial.*; // importa biblioteca para comunicación serial
import java.awt.event.KeyEvent; // importa la biblioteca para leer los datos del
puerto serie
import java.io.IOException;
Serial myPort; // define el objeto en serie
// descifra 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); // ***CAMBIA ESTO A LA RESOLUCIÓN DE TU PANTALLA***
smooth();
Fecha;
22/05/2022
Proyecto con Arduino
5
myPort = new Serial(this,"COM11", 9600); // inicia la comunicación serial
myPort.bufferUntil('.'); // lee los datos del puerto serie hasta el caracter '.'. Así que
en realidad dice esto: ángulo, distancia.
}
void draw() {
fill(98,245,31);
// simulando el desenfoque de movimiento y el desvanecimiento lento de la línea en
movimiento
noStroke();
fill(0,4);
rect(0, 0, width, height-height*0.065);
fill(98,245,31); // color verde
// llama a las funciones para dibujar el radar
drawRadar();
drawLine();
drawObject();
drawText();
}
void serialEvent (Serial myPort) { // comienza a leer datos del puerto serie
// lee los datos del puerto serie hasta el carácter '.' y lo pone en la variable de
cadena "datos".
data = myPort.readStringUntil('.');
data = data.substring(0,data.length()-1);
index1 = data.indexOf(","); // encuentra el caracter ',' y lo pone en la variable
"index1"
angle= data.substring(0, index1); // lee los datos desde la posición "0" hasta la
posición de la variable index1 o ese es el valor del ángulo que la placa Arduino
envió al puerto serie
// convierte las variables de cadena en enteros
distance= data.substring(index1+1, data.length());
iAngle = int(angle);
iDistance = int(distance);
}
void drawRadar() {
pushMatrix();
translate(width/2,height-height*0.074); // mueve las coordenadas iniciales a la
nueva ubicación
Fecha;
22/05/2022
Proyecto con Arduino
6
noFill();
strokeWeight(2);
stroke(98,245,31);
// dibuja las lineas del arco
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);
// dibuja las líneas de los ángulos
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); // mueve las coordenadas iniciales a la
nueva ubicación
strokeWeight(9);
stroke(255,10,10); // color rojo
pixsDistance = iDistance*((height-height*0.1666)*0.025); // cubre la distancia
desde el sensor de cm a píxeles
// limitando el rango a 40 cms
if(iDistance<40){
// dibuja el objeto segun el angulo y la distancia
line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(widthwidth*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));
}
popMatrix();
}
void drawLine() {
pushMatrix();
Fecha;
22/05/2022
Proyecto con Arduino
7
strokeWeight(9);
stroke(30,250,60);
translate(width/2,height-height*0.074); // mueve las coordenadas iniciales a la
nueva ubicación
line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height height*0.12)*sin(radians(iAngle))); // dibuja la línea según el ángulo
popMatrix();
}
void drawText() { // dibuja los textos en la pantalla
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);
Fecha;
22/05/2022
Proyecto con Arduino
8
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();
}
Una vez hecho esto procedemos a ejecutar el programa y ya deberia estar
funcionando.
Fecha;
22/05/2022
Proyecto con Arduino
9
RESULTADO
Fecha;
22/05/2022
Proyecto con Arduino
10
CONCLUSIÓN
En el desarrollo del proyecto se logra al objetivo de diseñar y construir un prototipo
capaz de detectar objetos que se encuentren a su paso. Esto se llevó a cabo
gracias al estudio de las ondas ultrasónicas, y funcionamiento de un radar, además
se logró con la ayuda de dispositivos que hoy en día se pueden conseguir en
cualquier tienda de electrónica. A pesar de haber logrado el objetivo, en el proyecto
se muestra aun un margen de error comparando la medida real con la que se
muestra en pantalla.
Con un mayor tiempo de análisis se puede lograr realizar una guía y trazado de
superficies y áreas, se puede obtener una visualización de distancia o volumen, lo
cual es ideal para superficies estrechas y de este método poder escanear la zona
a una distancia remota, cabe mencionar que al inicio del proyecto uno de los
objetivos era detectar objeto pero se puede, con ayuda de ondas
electromagnéticas que se propagan a través de los muros y otros obstáculos se
podría medir los cambios en el medio de propagación y analizar las modificaciones
en los distintos tipos de ondas, y así tal vez encontrar la presencia de una persona,
hoy en día, por ejemplo, se observan las radiografías con ultrasonido, es por eso
que el campo de exploración es grande y está en desarrollo.
Fecha;
22/05/2022
Proyecto con Arduino
11
REFERENCIA BIBLIOGRAFICA
[1] "Introducción al Sistema del Radar", Skolnik M. L. Editorial McGRAW-HILL,
Tercera Edicion, 2001.
[2] "Radar Systems Analysis and Design using Matlab", Mahafza, B. R. Editorial
CHAPMAN & HALL/CRC, Boca Raton,2005.
Fecha;
22/05/2022
Proyecto con Arduino
12
Descargar