89. Eliminar el ruido en Arduino, controlando la senal

Published: Aug. 23, 2016, 5:42 a.m.

Despu\xe9s de unas semanas de vacaciones en este periodo estival, vuelvo a la carga con un nuevo cap\xedtulo del podcast La Tecnolog\xeda Para Todos. Hoy voy a hablarte de c\xf3mo eliminar el ruido en Arduino.

Tarde o temprano te ver\xe1s expuesto a esta se\xf1al parasitaria que se acopla a tu se\xf1al \xfatil y perturba tus mediciones. Por eso es necesario saber qu\xe9 es el ruido, cu\xe1les son las fuentes que lo producen y como podemos atajarlo.

Al igual que en muchos factores involucrados en la electr\xf3nica y en la programaci\xf3n, no hay una f\xf3rmula m\xe1gica para la eliminaci\xf3n del ruido, pero si que podemos aplicar ciertas t\xe9cnicas que nos ayuden a mitigarlo en la medida de lo posible.

Eliminar el ruido en Arduino

Antes de comenzar con tema que voy a tratar hoy, decirte que el 14, 15 y 16 de Octubre, estar\xe9 en las XI JPOD (Jornadas de Podcasting) en M\xe1laga. En este evento nacional realizar\xe9 un directo junto a Gabriel Viso del podcast Pitando. Si vas a estar por all\xed, espero verte.

\xbfQu\xe9 es el ruido?, conocerlo nos ayudar\xe1 a eliminar el ruido en Arduino

Podemos encontrar muchos art\xedculos, libros e incluso v\xeddeos sobre el ruido en Internet. El objeto de este cap\xedtulo no es profundizar hasta tal detalle, solo quiero dejar claro c\xf3mo afecta a nuestros proyectos y c\xf3mo podemos eliminar el ruido en Arduino.

El ruido no deja de ser una se\xf1al el\xe9ctrica, al igual que las se\xf1ales de Arduino, normalmente una se\xf1al continua de 5V, y de otros sistemas el\xe9ctricos que trabajan con se\xf1ales alternas que pueden ir, por ejemplo, de 220V a -220V.

Por lo tanto, el ruido es una se\xf1al de interferencia que se a\xf1ade o se suma a nuestra se\xf1al \xfatil produciendo efectos perjudiciales. Vamos a verlo con un ejemplo. Imag\xednate un sensor de temperatura cuya relaci\xf3n temperatura-voltaje es de 1\xba-10mV. Esto quiere decir que cada grado, se incrementa en 10mV la tensi\xf3n obtenida. Si medimos la temperatura en alg\xfan lugar donde sabemos que hay 20\xbaC exactamente, el resultado ser\xe1 200mV. Al conectar el sensor a Arduino comprobamos que el voltaje obtenido es de 220mV, lo que equivale a una temperatura de 22\xbaC. Esos 20mV de m\xe1s \xbfqu\xe9 son? Precisamente eso es el ruido, una se\xf1al parasitaria que se a\xf1ade a nuestra se\xf1al \xfatil y por lo tanto la altera.

Dise\xf1amos con casos ideales que no contemplan el ruido en nuestros proyectos

Cuando estamos dise\xf1ando nuestro proyecto, utilizamos la t\xedpica Ley de Ohm o Leyes de Kirchhoff. Estas leyes se basan en desarrollos matem\xe1ticos que no tienen en cuenta el efecto del ruido. Podemos probar a crear un circuito muy sencillo con una resistencia y un LED. Si hacemos los c\xe1lculos y obtenemos los voltajes, comprobaremos con un mult\xedmetro que aunque se parezcan, el resultado no es el mismo. Esto es debido al ruido inherente de la propia placa de Arduino, los componentes e incluso el mult\xedmetro. En consecuencia debemos contemplar esta se\xf1al perjudicial y por lo tanto eliminar el ruido en Arduino.

La se\xf1al de ruido no afecta de igual manera a las se\xf1ales anal\xf3gicas que digitales

Ya hemos visto el ejemplo de un sensor de temperatura con una se\xf1al anal\xf3gica. Pero no afecta en igual medida a las se\xf1ales digitales, depender\xe1 de la amplitud del ruido. En t\xe9rminos generales, la se\xf1ales anal\xf3gicas son m\xe1s sensibles al ruido.

Si en el ejemplo anterior del sensor de temperatura, la se\xf1al de ruido tuviera 0.3mV en vez de 20mV, no afectar\xeda a nuestras medidas. Por lo tanto la amplitud de la se\xf1al es importante. En el caso de las se\xf1ales digitales, la amplitud tambi\xe9n es importante, pero solo afectar\xe1 si dicha amplitud es lo suficientemente grande para cambiar de estado de alto a bajo o de bajo a alto.

C\xf3mo funcionan las se\xf1ales digitales

Hagamos un par\xe9ntesis para ver c\xf3mo funcionan las se\xf1ales digitales en Arduino. Estamos acostumbrados a hablar de alto y bajo y relacionarlo con 0V y 5V. Pero eso no es realmente lo que sucede dentro de la placa. Existen unos m\xe1rgenes para identificar si la se\xf1al est\xe1 en estado alto o bajo.

Precisamente este es uno de los puntos fuertes de Arduino, gracias a la amplitud de ese rango la se\xf1al digital soporta una gran cantidad de ruido. A continuaci\xf3n puedes ver la imagen donde se representan esos m\xe1rgenes para el microcontrolador ATmega328 del Arduino UNO.

Niveles l\xf3gicos digital Arduino

Como comprobamos, de 0V a 1,5V se considera un estado bajo. De 3V a 5V se considera un estado alto. Por \xfaltimo de 1,5V a 3V se considera una indeterminaci\xf3n. Supongamos que tenemos un nivel bajo en la se\xf1al digital con un valor de 0,5V. Para que se produzca un cambio a una indeterminaci\xf3n necesitaremos que la amplitud del ruido sea de m\xe1s de 1V y para que cambie a estado alto m\xe1s de 2,5V.

Por lo tanto, el ruido no afecta en la misma medida a las se\xf1ales digitales eso s\xed, cuando afecta los resultados pueden ser "catastr\xf3ficos". Vamos a verlo con un ejemplo de la vida real

En el a\xf1o 2010 se produjo el apag\xf3n anal\xf3gico, se pas\xf3 de emitir la televisi\xf3n en anal\xf3gico a digital

Recordar\xe1s que antes la televisi\xf3n se ve\xeda de diferente manera. Antes del a\xf1o 2010, se emit\xeda con una se\xf1al anal\xf3gica. A partir de ese a\xf1o se empez\xf3 a emitir en digital a trav\xe9s de la TDT (Televisi\xf3n Digital Terrestre).

Con la televisi\xf3n anal\xf3gica, cuando hab\xeda interferencias por ruido, la se\xf1al se distorsionaba y se produc\xeda el t\xedpico efecto nieve. A\xfan as\xed se consegu\xeda ver la televisi\xf3n, aunque sin calidad. Con la TDT se consiguieron varias cosas entre ellas una mejor calidad, la necesidad de menor potencia para emitir y la optimizaci\xf3n del ancho de banda. El gran problema de este tipo de se\xf1ales es que si le afecta el ruido, la televisi\xf3n se deja de ver. Seguramente te habr\xe1 pasado alguna vez donde la televisi\xf3n se ha quedado en negro. Esto sucede por lo anteriormente comentado, la se\xf1al de ruido tiene tanta amplitud que hace cambiar de estado a los bit digitales.

En resumen, el ruido es otra se\xf1al que interfiere con nuestra se\xf1al \xfatil. Afecta en mayor medida a se\xf1ales anal\xf3gicas que digitales, pero cuando estas \xfaltimas son afectadas, su recuperaci\xf3n es complicada. Si queremos eliminar el ruido en Arduino, debemos conocer las fuentes y factores que lo producen.