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