﻿{"id":679,"date":"2019-12-17T00:38:53","date_gmt":"2019-12-17T00:38:53","guid":{"rendered":"http:\/\/robots-argentina.com.ar\/didactica\/?p=679"},"modified":"2020-12-09T00:57:44","modified_gmt":"2020-12-09T00:57:44","slug":"ingresar-lectura-de-varios-sensores-a-traves-de-un-unico-pin-analogico","status":"publish","type":"post","link":"https:\/\/robots-argentina.com.ar\/didactica\/ingresar-lectura-de-varios-sensores-a-traves-de-un-unico-pin-analogico\/","title":{"rendered":"Ingresar lectura de varios sensores a trav\u00e9s de un \u00fanico pin anal\u00f3gico"},"content":{"rendered":"<p><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/QTR-8A.png\"><img loading=\"lazy\" src=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/QTR-8A.png\" alt=\"\" width=\"576\" height=\"127\" class=\"aligncenter size-full wp-image-680\" srcset=\"https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/QTR-8A.png 576w, https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/QTR-8A-300x66.png 300w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/a><\/p>\n<p>Cuando queremos crear un robot que distinga el blanco del negro sobre una superficie, se realiza esa detecci\u00f3n con sensores infrarrojos reflectivos. Si la necesidad de determinar las ubicaciones debajo del sensor requiere precisi\u00f3n, hay que usar conjuntos de varios sensores, y sus salidas conectarlas a varios pines de entrada de un microcontrolador.<\/p>\n<p>Por ejemplo, para seguidores de l\u00ednea veloces (velocistas) tenemos la opci\u00f3n de utilizar un sensor como el de la imagen de arriba, el <strong><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/sensores-reflectivos-qtr-para-siguelineas\/\" rel=\"noopener\" target=\"_blank\">QTR-8A<\/a><\/strong>, fabricado por <strong><a href=\"https:\/\/www.pololu.com\/\" rel=\"noopener\" target=\"_blank\">Pololu<\/a><\/strong>. O un conjunto sensor similar hecho por nosotros con, por ejemplo, un conjunto de <strong><a href=\"http:\/\/robots-argentina.com.ar\/Sensores_reflectivos.htm\" rel=\"noopener\" target=\"_blank\">CNY-70<\/a><\/strong>.<\/p>\n<p><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Sensor_4_CNY70.jpg\"><img loading=\"lazy\" src=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Sensor_4_CNY70.jpg\" alt=\"\" width=\"628\" height=\"225\" class=\"aligncenter size-full wp-image-681\" srcset=\"https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Sensor_4_CNY70.jpg 628w, https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Sensor_4_CNY70-300x107.jpg 300w, https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Sensor_4_CNY70-624x224.jpg 624w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/a><\/p>\n<p>La mayor\u00eda de las veces los microcontroladores que usamos para controlar un robot tienen una cantidad limitada de pines de entrada y salida, y si tenemos que usar uno de \u00e9stos por cada sensor infrarrojo tendremos problemas para a\u00f1adir funcionalidades a nuestro robot: comunicaci\u00f3n serie, aceler\u00f3metros, giroscopios, <strong><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/descripcion-y-funcionamiento-del-bus-i2c\/\" rel=\"noopener\" target=\"_blank\">I2C<\/a><\/strong>, sensores de distancia, detectores de choque, pulsadores o llaves, motores, tac\u00f3metros, leds, etc.<\/p>\n<p>En los robots seguidores de l\u00ednea el m\u00ednimo es dos sensores infrarrojos, aunque con esta cantidad el robot seguidor se mover\u00e1 oscilando, y es muy posible que se escape en curvas cerradas o cruces de l\u00edneas. En los robots de Sumo se necesitan 4, incluso m\u00e1s si es un dise\u00f1o m\u00e1s sofisticado, y en los seguidores de l\u00ednea velocistas suele colocarse una hilera de 6 sensores o m\u00e1s.<\/p>\n<p>Esto lleva al uso de demasiado pines de entrada en nuestro micro. Se podr\u00eda utilizar alg\u00fan tipo de multiplexor (como el <strong><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/auxiliares-para-control-y-digitalizacion-de-senales-analogicas\/#CD74HC4067\" rel=\"noopener\" target=\"_blank\">CD74HC4067<\/a><\/strong>) para ir leyendo c\u00edclicamente los sensores, pero eso significa el uso adicional de al menos 3 l\u00edneas, necesarias para seleccionar las entradas del multiplexor si se trata de un conjunto desde 6 y hasta 8 sensores, o 4 l\u00edneas adicionales si tenemos hasta 16 sensores. (Esta cantidad de sensores no es excesiva en un robot medianamente operativo y desarrollado.)<\/p>\n<p><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Multiplexer.png\"><img loading=\"lazy\" src=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Multiplexer.png\" alt=\"\" width=\"513\" height=\"464\" class=\"aligncenter size-full wp-image-682\" srcset=\"https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Multiplexer.png 513w, https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Multiplexer-300x271.png 300w\" sizes=\"(max-width: 513px) 100vw, 513px\" \/><\/a><\/p>\n<p>Pero veremos una manera de leer varios sensores de infrarrojos usando s\u00f3lo un pin anal\u00f3gico del microcontrolador.<\/p>\n<p>La idea es vieja: convertir la activaci\u00f3n de los sensores en una selecci\u00f3n de resistores que aportan cada uno diferentes corrientes, y que al sumarse entregan una salida combinada, con valores diferentes de voltaje. A esta configuraci\u00f3n se le llama \u201c<strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Resistor_ladder\" rel=\"noopener\" target=\"_blank\">resistor ladder<\/a><\/strong>\u201d (escala de resistores) y lo que construimos es, en concreto, un <strong><a href=\"https:\/\/es.wikipedia.org\/wiki\/Conversor_de_se%C3%B1al_digital_a_anal%C3%B3gica\" rel=\"noopener\" target=\"_blank\">convertidor digital a anal\u00f3gico<\/a><\/strong>.<\/p>\n<p>Al usar varias resistencias, dependiendo de la entrada que se active, el pin del micro recibe una tensi\u00f3n distinta. Si el conjunto de resistores est\u00e1 bien dise\u00f1ado, se puede determinar cu\u00e1l es la entrada que se ha activado.<br \/>\n<center><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script><br \/>\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-format=\"fluid\"\n     data-ad-layout-key=\"-6u+d5+53-1c-7n\"\n     data-ad-client=\"ca-pub-7090242166042605\"\n     data-ad-slot=\"9428762062\"><\/ins><br \/>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/center><br \/>\nCon sensores basados en led infrarrojos y fototransistores, la se\u00f1al obtenida ser\u00e1 anal\u00f3gica y relacionada con la luz que se refleja, a menos que los sectores blanco y negro sean muy definidos y que no haya luz ambiente que interfiera. Para convertir estos valores intermedios a ceros y unos utilizamos un chip <strong><a href=\"https:\/\/es.wikipedia.org\/wiki\/Semiconductor_complementario_de_%C3%B3xido_met%C3%A1lico\" rel=\"noopener\" target=\"_blank\">CMOS<\/a><\/strong> inversor <strong><a href=\"http:\/\/es.wikipedia.org\/wiki\/Disparador_Schmitt\" rel=\"noopener\" target=\"_blank\">Schmitt trigger<\/a><\/strong> <strong>40106<\/strong> o <strong>74HC14<\/strong>, y en sus salidas ponemos resistencias en serie de distintos valores, que al final de la cadena se unen a un punto en com\u00fan.<\/p>\n<p><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/40106_74HC14.png\"><img loading=\"lazy\" src=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/40106_74HC14.png\" alt=\"\" width=\"585\" height=\"266\" class=\"aligncenter size-full wp-image-683\" srcset=\"https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/40106_74HC14.png 585w, https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/40106_74HC14-300x136.png 300w\" sizes=\"(max-width: 585px) 100vw, 585px\" \/><\/a><\/p>\n<p>Desde ese punto se tomar\u00e1 el valor de la tensi\u00f3n utilizando una entrada anal\u00f3gica, y si est\u00e1 bien calculado el conjunto de resistencias, el valor anal\u00f3gico ser\u00e1 distinto dependiendo del sensor que se haya activado. De ese modo, en el caso de un <strong><a href=\"https:\/\/es.wikipedia.org\/wiki\/Robot_seguidor_de_l%C3%ADnea\" rel=\"noopener\" target=\"_blank\">seguidor de l\u00edneas<\/a><\/strong>, conoceremos la posici\u00f3n del robot respecto al curso que debe seguir.<\/p>\n<p>La ventaja es que tener varios sensores <strong><a href=\"http:\/\/www.jmnlab.com\/cny70\/cny_70.html\" rel=\"noopener\" target=\"_blank\">CNY70<\/a><\/strong>, o un conjunto <strong><a href=\"http:\/\/www.pololu.com\/catalog\/product\/960\" rel=\"noopener\" target=\"_blank\">QTR-8A<\/a><\/strong> ya no es un problema, porque podemos leer todos los valores con un \u00fanico pin de nuestro microcontrolador, y dejar el resto libre para otras funciones.<\/p>\n<p>Recordemos que la conversi\u00f3n de anal\u00f3gico a digital dentro del m\u00f3dulo de un microcontrolador lleva tiempo. Por cada sensor que se lee con los pines anal\u00f3gicos se produce una pausa, ya que la lectura de un convertidor de anal\u00f3gico a digital (ADC) t\u00edpico tarda un tiempo en completarse. Si se conectan y leen por separado, a este retardo hay que multiplicarlo por la cantidad de sensores.<\/p>\n<p>Sin embargo, con esta soluci\u00f3n s\u00f3lo se hace UNA lectura anal\u00f3gica.<\/p>\n<p>Como vamos a usar un inversor schmitt trigger, y \u00e9ste s\u00f3lo nos da una se\u00f1al alta (5V) o baja (0V) en su salida, con las resistencias siempre vamos a obtener los mismos resultados de tensi\u00f3n, aunque cambiemos de entorno (pistas de competici\u00f3n, o caseras con distinta iluminaci\u00f3n), por tanto no hay necesidad de calibrar.<\/p>\n<p>Y utilizando las resistencias correctas, s\u00f3lo es necesario tener un ADC de 8 bits (0-255) para medir el voltaje (en tramos de 0,02V aproximadamente) con una referencia de 5V. En un Arduino el ADC tiene 4 veces m\u00e1s resoluci\u00f3n, ya que su conversi\u00f3n es de 10 bits, o sea que entrega valores digitales entre 0 y 1023.<\/p>\n<p>Pondremos como ejemplo 8 sensores infrarrojos que leen una superficie que tiene fondo blanco (que devuelve un valor cercano a 0), y la l\u00ednea de color negro (que es cuando devuelve un voltaje mayor). Como inversor schmitt trigger se puede usar un <strong><a href=\"http:\/\/www.ti.com\/lit\/ds\/symlink\/cd40106b.pdf\" rel=\"noopener\" target=\"_blank\">40106<\/a><\/strong> o un <strong><a href=\"http:\/\/www.ti.com\/lit\/ds\/symlink\/sn74hc14.pdf\" rel=\"noopener\" target=\"_blank\">74HCT14<\/a><\/strong>. Ambos tienen 6 entradas\/salidas. Como se necesitan 2 entradas m\u00e1s para llegar a las 8 del sensor, debemos usar un segundo chip inversor. Tambi\u00e9n se necesitan 8 diodos y 9 resistores.<\/p>\n<p><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Leer-m\u00faltiples-sensores-de-infrarrojos-con-un-s\u00f3lo-pin.png\"><img loading=\"lazy\" src=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Leer-m\u00faltiples-sensores-de-infrarrojos-con-un-s\u00f3lo-pin.png\" alt=\"\" width=\"565\" height=\"426\" class=\"aligncenter size-full wp-image-684\" srcset=\"https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Leer-m\u00faltiples-sensores-de-infrarrojos-con-un-s\u00f3lo-pin.png 565w, https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/Leer-m\u00faltiples-sensores-de-infrarrojos-con-un-s\u00f3lo-pin-300x226.png 300w\" sizes=\"(max-width: 565px) 100vw, 565px\" \/><\/a> <\/p>\n<p>La salida de cada <strong>CNY-70<\/strong>, o de cada elemento del conjunto <strong>QTR-8A<\/strong>, va dirigida a una de las entradas de uno de los inversores. La salida correspondiente de ese inversor va a un diodo de se\u00f1al como el <strong><a href=\"https:\/\/www.vishay.com\/docs\/85622\/1n914.pdf\" rel=\"noopener\" target=\"_blank\">1N914<\/a><\/strong> o <strong><a href=\"https:\/\/www.vishay.com\/docs\/81857\/1n4148.pdf\" rel=\"noopener\" target=\"_blank\">1N4148<\/a><\/strong>. Esto es necesario, ya que al estar unidas todas las salidas del otro lado de los resistores, con los diodos se evita que si una salida est\u00e1 a 5V, y otra a 0V, se derive una corriente entre ellas.<\/p>\n<p>Despu\u00e9s del diodo viene el resistor, que dependiendo de su valor har\u00e1 que la tensi\u00f3n en el punto de uni\u00f3n caiga m\u00e1s, o menos. El valor del resistor debe ser \u00fanico, diferente del de otros sensores, para que cada ca\u00edda de tensi\u00f3n sea distinta.<\/p>\n<p>Finalmente se unen todas las salidas a otro resistor para crear lo que se denomina un <strong><a href=\"http:\/\/es.wikipedia.org\/wiki\/Divisor_de_tensi\u00f3n\" rel=\"noopener\" target=\"_blank\">divisor de tensi\u00f3n<\/a><\/strong>. La l\u00ednea que va al pin anal\u00f3gico del microcontrolador se debe conectar en ese punto, para que \u00e9ste pueda medir el voltaje total y diferenciar qu\u00e9 sensor o sensores se activan.<br \/>\n<center><br \/>\n<script type=\"text\/javascript\"><!--\ngoogle_ad_client = \"ca-pub-7090242166042605\";\n\/* femeie336x280 *\/\ngoogle_ad_slot = \"6118472803\";\ngoogle_ad_width = 336;\ngoogle_ad_height = 280;\n\/\/-->\n<\/script><br \/>\n<script type=\"text\/javascript\"\nsrc=\"\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js\">\n<\/script><br \/>\n<\/center><\/p>\n<p>Este resistor de terminaci\u00f3n al que se une el resto va, en su otro extremo, a la alimentaci\u00f3n (Vcc).<\/p>\n<p>Esta configuraci\u00f3n est\u00e1 dise\u00f1ada para poder leer un fondo blanco con una l\u00ednea negra, siempre y cuando los sensores nos den un valor cercano a 0 cuando leen el fondo blanco, y un valor mucho mayor cuando leen la l\u00ednea negra. Si se necesita cambiar este comportamiento, se puede conectar la resistencia final a masa e invertir los diodos.<\/p>\n<p>Ahora que ya recibimos distintas tensiones en el pin anal\u00f3gico del microcontrolador, dependiendo de los sensores que est\u00e9n activos o no, debemos plantearnos cu\u00e1ntas mediciones posibles podemos obtener.<\/p>\n<p>Como trabajamos en el ejemplo de un seguidor velocista, se pueden dar los siguientes casos:<\/p>\n<ul>\n<li>Todos los sensores leen el fondo blanco.<\/li>\n<li>Un sensor lee la l\u00ednea negra y el resto el fondo blanco.<\/li>\n<li>Dos sensores leen la l\u00ednea negra y el resto el fondo blanco.<\/li>\n<\/ul>\n<p>Con esta combinatoria, para conocer las variaciones debemos multiplicar el n\u00famero de sensores por 2. En total tenemos 16 mediciones posibles (y diferentes) para todos los estados en que pueden estar los sensores.<\/p>\n<p>He aqu\u00ed un esquema con los distintos estados, el voltaje resultante (seg\u00fan una simulaci\u00f3n) y el valor del ADC llevado a 8 bits:<\/p>\n<p><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/velocista.png\"><img loading=\"lazy\" src=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/velocista.png\" alt=\"\" width=\"600\" height=\"967\" class=\"aligncenter size-full wp-image-685\" srcset=\"https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/velocista.png 600w, https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/velocista-186x300.png 186w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Para un robot de Sumo ya no vale el c\u00e1lculo anterior, ya que habr\u00eda 7 combinaciones posibles de sus 4 sensores, y el fondo es negro con una l\u00ednea blanca:<\/p>\n<p><a href=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/SensoresSUMO.png\"><img loading=\"lazy\" src=\"http:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/SensoresSUMO.png\" alt=\"\" width=\"353\" height=\"208\" class=\"aligncenter size-full wp-image-686\" srcset=\"https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/SensoresSUMO.png 353w, https:\/\/robots-argentina.com.ar\/didactica\/wp-content\/uploads\/SensoresSUMO-300x177.png 300w\" sizes=\"(max-width: 353px) 100vw, 353px\" \/><\/a><\/p>\n<p>Ahora s\u00f3lo queda medir una primera vez los diferentes valores de los sensores, y luego programar en nuestro microcontrolador una tabla con esos valores, para utilizar luego en las comparaciones del programa. Esta lista de valores servir\u00e1 para siempre. Por supuesto, como los valores de los resistores tienen un margen de error, y la ca\u00edda de tensi\u00f3n sobre los diodos no suele ser siempre el mismo, s\u00f3lo podremos hablar de valores orientativos y \u00fanicamente podemos obtener los valores correctos midi\u00e9ndolos directamente con un tester, o conectando el circuito al microcontrolador y que \u00e9ste nos los informe a trav\u00e9s del puerto COM y un monitor serie.<br \/>\n<center><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script><br \/>\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-format=\"fluid\"\n     data-ad-layout-key=\"-6u+d5+53-1c-7n\"\n     data-ad-client=\"ca-pub-7090242166042605\"\n     data-ad-slot=\"9428762062\"><\/ins><br \/>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando queremos crear un robot que distinga el blanco del negro sobre una superficie, se realiza esa detecci\u00f3n con sensores infrarrojos reflectivos. Si la necesidad de determinar las ubicaciones debajo del sensor requiere precisi\u00f3n, hay que usar conjuntos de varios sensores, y sus salidas conectarlas a varios pines de entrada de un microcontrolador. Por ejemplo, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[16,13,5,3,9,4],"tags":[43],"_links":{"self":[{"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/posts\/679"}],"collection":[{"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/comments?post=679"}],"version-history":[{"count":0,"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/posts\/679\/revisions"}],"wp:attachment":[{"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/media?parent=679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/categories?post=679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/robots-argentina.com.ar\/didactica\/wp-json\/wp\/v2\/tags?post=679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}