{"id":152,"date":"2017-02-20T10:57:19","date_gmt":"2017-02-20T10:57:19","guid":{"rendered":"http:\/\/escueladefrikis.com\/?p=152"},"modified":"2017-02-20T10:57:19","modified_gmt":"2017-02-20T10:57:19","slug":"segundo-proyecto-detector-distancias","status":"publish","type":"post","link":"https:\/\/escueladefrikis.com\/index.php\/2017\/02\/20\/segundo-proyecto-detector-distancias\/","title":{"rendered":"Medir distancias con Arduino (proyecto 2)"},"content":{"rendered":"<p>Hoy vamos a trabajar con uno de los componentes que viene con el pack de iniciaci\u00f3n: el medidor de distancias por ultrasonido. Este componente es muy f\u00e1cil de distinguir porque tiene esta pinta:<\/p>\n<figure id=\"attachment_159\" aria-describedby=\"caption-attachment-159\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-159\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/cortocircuito-1-300x133.jpg\" alt=\"Cortocircuito\" width=\"300\" height=\"133\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/cortocircuito-1-300x133.jpg 300w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/cortocircuito-1.jpg 450w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-159\" class=\"wp-caption-text\">Cortocircuito (el hermano mayor del HC SR204)<\/figcaption><\/figure>\n<p><!--more--><\/p>\n<h3>El HC-SR04: medidor de distancias por ultrasonido<\/h3>\n<p>\u00bfC\u00f3mo funciona este componente? Os pongo un ejemplo de la vida real para que lo entend\u00e1is:<\/p>\n<p>Si alguna vez hab\u00e9is caminado entre monta\u00f1as o hab\u00e9is estado en un recinto lo suficientemente amplio, habr\u00e9is podido escuchar vuestro propio eco. Una manera de medir una distancia ser\u00eda gritar muy fuerte y medir el tiempo hasta que escuch\u00e1is el eco. Sabiendo la velocidad a la que viaja vuestra voz podr\u00edais calcular la distancia recorrida por vuestra voz, que ser\u00e1 el doble de la distancia hasta la monta\u00f1a o pared que est\u00e1 haciendo rebotar vuestra voz.<\/p>\n<p>El HC-SR04 funciona de la misma manera: transmite ultrasonidos y luego detecta cu\u00e1ndo se recibe, y nosotros nos encargaremos de calcular la distancia a partir del tiempo que ha tardado en recibir el eco. Aqu\u00ed ten\u00e9is el link a las <a href=\"http:\/\/www.micropik.com\/PDF\/HCSR04.pdf\" target=\"_blank\">especificaciones del HC-SR04<\/a>.<\/p>\n<h3>Pines del MC-SR04<\/h3>\n<p>Este componente tiene 4 patillas:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"193\" class=\"size-medium wp-image-157\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_componente_2-1-300x193.jpg\" alt=\"&quot;&lt;yoastmark\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_componente_2-1-300x193.jpg 300w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_componente_2-1-1024x659.jpg 1024w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_componente_2-1-768x494.jpg 768w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_componente_2-1-1536x989.jpg 1536w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_componente_2-1.jpg 1911w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<ul>\n<li>Dos pines para alimentar el componente (necesita corriente para poder funcionar):\n<ul>\n<li><span style=\"font-family: 'courier new', courier, monospace;\">Vcc<\/span>: pin de alimentaci\u00f3n. Seg\u00fan el documento de especificaciones se alimenta con 5 voltios.<\/li>\n<li><span style=\"font-family: 'courier new', courier, monospace;\">GND<\/span>: el pin de retorno de la corriente de alimentaci\u00f3n.<\/li>\n<\/ul>\n<\/li>\n<li>Dos pines para activar el env\u00edo y recibir la respuesta:\n<ul>\n<li><span style=\"font-family: 'courier new', courier, monospace;\">TRIGGER<\/span>: en ingl\u00e9s significa \u00abgatillo\u00bb o \u00abdisparador\u00bb y sirve para activar la transmisi\u00f3n del ultrasonido.<\/li>\n<li><span style=\"font-family: 'courier new', courier, monospace;\">ECHO<\/span>: como nos podemos imaginar es el pin por el que leer la detecci\u00f3n del eco.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Conexi\u00f3n del HC-SR04 a la placa Arduino<\/h3>\n<p>Tenemos dos juegos de pines: los de alimentaci\u00f3n, y los de env\u00edo y recepci\u00f3n de datos. Los vamos a conectar de la siguiente manera:<\/p>\n<ul>\n<li>Para los pines de alimentaci\u00f3n (<span style=\"font-family: 'courier new', courier, monospace;\">Vcc<\/span> y <span style=\"font-family: 'courier new', courier, monospace;\">GND<\/span>) vamos a localizar en nuestra placa Arduino la secci\u00f3n de pines marcada como \u00abPOWER\u00bb. Podremos encontrar entre ellos un pin marcado como <span style=\"font-family: 'courier new', courier, monospace;\">GND<\/span> y otro pin marcado con <span style=\"font-family: 'courier new', courier, monospace;\">5V<\/span>, que conectaremos con los pines <span style=\"font-family: 'courier new', courier, monospace;\">GND<\/span> y <span style=\"font-family: 'courier new', courier, monospace;\">Vcc<\/span> del componente.<\/li>\n<li>Para los pines de env\u00edo y recepci\u00f3n de datos, vamos a utilizar dos pines digitales cualquiera (en mi caso, el pin 9 y 10).<\/li>\n<\/ul>\n<p>C\u00f3mo ver que un LED se encienda lo vimos en este <a href=\"https:\/\/www.escueladefrikis.com\/2017\/02\/02\/primer-proyecto-arduino-encender-led\/\">post anterior<\/a>.\u00a0Adem\u00e1s, en el circuito voy a incluir tambi\u00e9n un LED, de manera que cuando un objeto est\u00e9 muy cerca el LED se encienda, como si fuera un detector de colisi\u00f3n. Por tanto, adem\u00e1s de los pines anteriores tambi\u00e9n ocuparemos otro pin digital y podemos utilizar el mismo ping <span style=\"font-family: 'courier new', courier, monospace;\">GND<\/span> o el ping <span style=\"font-family: 'courier new', courier, monospace;\">GND<\/span> digital.<\/p>\n<p>La conexi\u00f3n a la placa quedar\u00eda de esta manera:<\/p>\n<figure id=\"attachment_154\" aria-describedby=\"caption-attachment-154\" style=\"width: 222px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-154\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones-1-222x300.jpg\" alt=\"Conexi\u00f3n HC SR04 (1)\" width=\"222\" height=\"300\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones-1-222x300.jpg 222w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones-1-759x1024.jpg 759w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones-1-768x1036.jpg 768w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones-1-1139x1536.jpg 1139w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones-1-1518x2048.jpg 1518w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones-1-scaled.jpg 1898w\" sizes=\"auto, (max-width: 222px) 100vw, 222px\" \/><figcaption id=\"caption-attachment-154\" class=\"wp-caption-text\">Conexi\u00f3n HC SR04 (1)<\/figcaption><\/figure>\n<p>Y la conexi\u00f3n con el HC-SR04 y el LED quedar\u00eda as\u00ed:<\/p>\n<figure id=\"attachment_155\" aria-describedby=\"caption-attachment-155\" style=\"width: 300px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-155\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones_2-1-300x222.jpg\" alt=\"Conexi\u00f3n HC SR04 (2)\" width=\"300\" height=\"222\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones_2-1-300x222.jpg 300w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones_2-1-1024x759.jpg 1024w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones_2-1-768x569.jpg 768w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones_2-1-1536x1139.jpg 1536w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_conexiones_2-1-2048x1518.jpg 2048w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-155\" class=\"wp-caption-text\">Conexi\u00f3n HC SR04 (2)<\/figcaption><\/figure>\n<h3>C\u00e1lculos previos<\/h3>\n<p>Si vamos a la especificaci\u00f3n, vemos que nuestro medidor de distancia hace lo siguiente:<\/p>\n<figure id=\"attachment_158\" aria-describedby=\"caption-attachment-158\" style=\"width: 300px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-158\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_diagrama_temporal-1-300x128.jpg\" alt=\"Diagrama temporal detecci\u00f3n de distancias por ultrasonidos\" width=\"300\" height=\"128\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_diagrama_temporal-1-300x128.jpg 300w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/ultrasonidos_diagrama_temporal-1.jpg 545w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-158\" class=\"wp-caption-text\">Diagrama temporal detecci\u00f3n de distancias por ultrasonidos<\/figcaption><\/figure>\n<ol>\n<li>Nosotros activamos el pin <span style=\"font-family: 'courier new', courier, monospace;\">TRIGGER<\/span> al menos 10 microsegundos a nivel HIGH.<\/li>\n<li>Despu\u00e9s, el dispositivo env\u00eda 8 pulsos a una frecuencia de 40KHz.<\/li>\n<li>Tras esto, recibiremos el pulso de retorno tras un retardo. La duraci\u00f3n del pulso de retorno es equivalente al tiempo de retardo. La f\u00f3rmula que nos proponen en las especificaciones para medir la distancia es:<\/li>\n<\/ol>\n<pre>distance=high level time * velocity (340m\/s) \/ 2 = high level time (us) * 340 (m\/s) \/ 2 = high level high (us) * 0,00017 m<\/pre>\n<p>Es decir, cada microsegundo de retardo equivale a 0,00017 metros, o 0,17 mil\u00edmetros.<\/p>\n<h3>\u00bfQu\u00e9 deber\u00eda hacer nuestro programa?<\/h3>\n<p>Antes de ponernos a escribir el c\u00f3digo, es conveniente pensar y listar las operaciones que debemos ejecutar, aunque sea de manera descriptiva. Con todo lo que hemos visto hasta ahora, nuestro programa deber\u00eda ejecutar la siguiente secuencia de operaciones:<\/p>\n<ul>\n<li>Comenzamos definiendo las constantes y las variables que utilizaremos en el programa.<\/li>\n<li>Inicializamos:\n<ul>\n<li>El puerto serie para poder escribir traza, tal y como explicamos en el post anterior: <a href=\"https:\/\/www.escueladefrikis.com\/2017\/02\/12\/logs-trazas-arduino-esta-programa\/\">Logs y trazas en Arduino<\/a>.<\/li>\n<li>Los pines digitales que vamos a utilizar.<\/li>\n<\/ul>\n<\/li>\n<li>Una vez en el loop:\n<ul>\n<li>Desactivamos el pin TRIGGER\u00a0por seguridad.<\/li>\n<li>Activamos el TRIGGER y esperamos 10 microsegundos.<\/li>\n<li>Escuchamos la respuesta del pin ECHO mediante la funci\u00f3n <a href=\"https:\/\/www.arduino.cc\/en\/Reference\/PulseIn\">PulseIn<\/a>. Esta funci\u00f3n devuelve el tiempo en microsegundos de un pulso.<\/li>\n<li>Traceamos la duraci\u00f3n del pulso.<\/li>\n<li>Calculamos la distancia en mil\u00edmetros.<\/li>\n<li>Traceamos la distancia calculada.<\/li>\n<li>Activamos o desactivamos el LED en funci\u00f3n de la distancia calculada.<\/li>\n<li>Desactivamos el pin TRIGGER.<\/li>\n<li>Esperamos un segundo hasta el siguiente loop.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Codificando el medidor de distancia<\/h3>\n<p>Con todo lo que hemos explicado, el programa ser\u00e1 el siguiente:<\/p>\n<pre>\/\/ Constants\nint PIN_TRIGGER=9;\nint PIN_ECHO=10;\nint PIN_LED=12;\nlong MIN_DISTANCE=200; \/\/ in milimeters\nint LOOP_DELAY=1000; \/\/ one second\n\n\/\/ Vars\nlong distance;\nlong echoDurationTime;\nString stringOutput;\n\nvoid setup(){\n Serial.begin(9600);\n pinMode(PIN_TRIGGER, OUTPUT);\n pinMode(PIN_ECHO, INPUT);\n pinMode(PIN_LED,OUTPUT);\n \n}\n\nvoid loop(){\n Serial.println(\"---------------------------------\");\n digitalWrite(PIN_TRIGGER,LOW); \/\/ Assure that we are LOW before we activate the trigger\n digitalWrite(PIN_TRIGGER, HIGH); \/\/ Activate the trigger\n delayMicroseconds(10);\n\nechoDurationTime=pulseIn(PIN_ECHO, HIGH); \/\/ Read the echo signal\n \/\/ Trace delay\n Serial.print(\"Delay: \");\n Serial.print(echoDurationTime);\n Serial.println(\" us\");\n \n distance= 0.17*echoDurationTime; \/\/ Distance in milimeters\n \/\/ Trace distance\n Serial.print(\"Distance: \");\n Serial.print(distance);\n Serial.println(\" mm\");\n \n \/\/ Light the LED if objects are too close \n if (distance&lt;MIN_DISTANCE) {\n  Serial.println(\"Activate LED: object too close!!!\");\n  digitalWrite(PIN_LED,HIGH);\n } else {\n  Serial.println(\"Deactivate LED: objects are far...\");\n  digitalWrite(PIN_LED,LOW);\n }\n\n\/\/ Wait till next loop\ndigitalWrite(PIN_TRIGGER,LOW);\ndelay(LOOP_DELAY);\n}<\/pre>\n<h3>Resultados<\/h3>\n<p>Si activamos el monitor del puerto serie veremos en traza algo como esto:<\/p>\n<figure id=\"attachment_163\" aria-describedby=\"caption-attachment-163\" style=\"width: 755px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-163\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_traza-1.gif\" alt=\"Medidor de distancia: traza\" width=\"755\" height=\"397\" \/><figcaption id=\"caption-attachment-163\" class=\"wp-caption-text\">Medidor de distancia: traza<\/figcaption><\/figure>\n<p>Podemos ver c\u00f3mo al mover un objeto delante del medidor de ultrasonidos, el retardo cambia, la distancia calculada cambia y cuando est\u00e1 por debajo de la distancia m\u00ednima se activa el LED.<\/p>\n<p>Como dir\u00eda Coco:<\/p>\n<ul>\n<li>Esto es lejos:<\/li>\n<\/ul>\n<figure id=\"attachment_156\" aria-describedby=\"caption-attachment-156\" style=\"width: 688px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-156\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_lejos-1-1024x759.jpg\" alt=\"Detecci\u00f3n de distancias: lejos\" width=\"688\" height=\"510\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_lejos-1-1024x759.jpg 1024w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_lejos-1-300x222.jpg 300w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_lejos-1-768x569.jpg 768w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_lejos-1-1536x1139.jpg 1536w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_lejos-1-2048x1518.jpg 2048w\" sizes=\"auto, (max-width: 688px) 100vw, 688px\" \/><figcaption id=\"caption-attachment-156\" class=\"wp-caption-text\">Detecci\u00f3n de distancias: lejos<\/figcaption><\/figure>\n<ul>\n<li>Esto es cerca:<\/li>\n<\/ul>\n<figure id=\"attachment_160\" aria-describedby=\"caption-attachment-160\" style=\"width: 688px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-160\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_cerca-1-1024x759.jpg\" alt=\"Detecci\u00f3n de distancias: cerca\" width=\"688\" height=\"510\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_cerca-1-1024x759.jpg 1024w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_cerca-1-300x222.jpg 300w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_cerca-1-768x569.jpg 768w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_cerca-1-1536x1139.jpg 1536w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_cerca-1-2048x1518.jpg 2048w\" sizes=\"auto, (max-width: 688px) 100vw, 688px\" \/><figcaption id=\"caption-attachment-160\" class=\"wp-caption-text\">Detecci\u00f3n de distancias: cerca<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Hoy vamos a trabajar con uno de los componentes que viene con el pack de iniciaci\u00f3n: el medidor de distancias por ultrasonido. Este componente es muy f\u00e1cil de distinguir porque tiene esta pinta:<\/p>\n","protected":false},"author":2,"featured_media":163,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[10,23,33],"class_list":["post-152","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","tag-arduino","tag-led","tag-ultrasonidos"],"jetpack_featured_media_url":"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/02\/proyecto_002_traza-1.gif","_links":{"self":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts\/152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/comments?post=152"}],"version-history":[{"count":0,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts\/152\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/media\/163"}],"wp:attachment":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/media?parent=152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/categories?post=152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/tags?post=152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}