Mostrando entradas con la etiqueta ADC. Mostrar todas las entradas
Mostrando entradas con la etiqueta ADC. Mostrar todas las entradas

miércoles, 1 de marzo de 2017

¿Qué es un ESP32?

ESP32 Development Kit

Hoy os traemos una nueva plaquita que acaba de aterrizar al mercado y que previsiblemente muy pronto veremos en todas partes:  la ESP32 de Espressif.

Sin entrar en demasiados detalles, os adjunto aquí una pequeña tabla comparativa preparada por nuestros colegas del canal educ8s que hace unas semanas le dedicó un pequeño reportaje a esta fantástica placa.



No solo es que el microcontrolador sea 10 veces más rápido, sino que además es al ser de arquitectura de 32 bits y doble nucleo la velocidad de procesamiento de datos es muy superior a la que nos tiene acostumbrados nuestro querido ATmega328P de ATMEL, o cualquiera de las diferentes versiones que tiene disponible en la gran familia

Pero si ya fuera poco la cuestión de la potencia del micro, todavía hay más. Si habéis podido echarle un vistazo a la primera tabla, la ESP32 nos ofrece nada más y nada menos 18 pines analógicos, 3 veces más que nuestra placa Arduino UNO, pero podríamos argumentar que nuestra placa Arduino Mega algo parecido 16, y es verdad pero es que la resolución de los pines analógicos de la ESP32, es de 12 bits y no de 10 como los que tiene nuestro Arduino UNO o nuestra Arduino MEGA. Para estar a la altura deberíamos optar por nuestra Arduino DUE, que al igual que la ESP32, nos ofrece dos pines de salida analógica (Digital to Analog Converter) de 12 bits.  Aunque menos potente, parecida. Pero si solo fuera una cuestión de tamaño, y no lo decimos por grande es una cuarta parte del tamaño de nuestro Arduino UNO.

Es que en este tamaño tan reducido, se ha incluido una antena un módulo WIFI y un módulo Bluetooth, además de capacidad criptográfica para permitir que este módulo se puede convertir en el rey de IoT (Internet of thing, o internet de las cosas).


Un ejemplo de la capacidad de desarrollar soluciones extremas lo podéis encontrar en Youtube, donde Jeija dice haber conseguido transmitir señales de video solo con la ESP32 a unos 10 kms campo a través.



Y por si fuera poco, el precio parece de lo más abordable. Una tentación para probar cuánto de verdad hay en un módulo alucinante.


martes, 14 de febrero de 2017

Números decimales, variables tipo float y función print





Es habitual que a veces necesitemos hacer algunos cálculos precisos con las variables que estemos manejando en nuestro sketch, y precisemos el manejo de decimales. Por ejemplo pudiera ser que quisiéramos usar nuestro Arduino para medir voltajes gracias a las entradas analógicas que tenemos en nuestra placa.


Como vimos en la entrada que dedicamos a la resolución de los pines analógicos  podríamos conseguir distinguir variaciones de hasta 4.9 milivoltios en nuestras mediciones. Así que por qué no ponernos manos a la obra y fabricarnoslo.


Versión 1 - Regla de tres para obtener el valor de voltaje
Para ello solo tenemos que aplicar una regla de tres muy sencillita:

Sin embargo, cuando abrimos el monitor serie para evaluar los resultados, el resultado que nos devuelve es siempre  "0" y no lo que esperábamos visualizar: un valor comprendido entre 0-5 voltios.



la razón del error es probable que esté localizada en el cálculo que hemos hecho al dividir 5/1023, que aunque nosotros de forma lógica pensamos que debería ser un número 0.00488758553, nuestro Arduino razona de diferente manera y lo redondea a 0. Y claro cualquier número multiplicado por 0 es 0. Así que tendremos que arreglarlo.


Versión 2 - Manejo de decimales

Vamos a escribir lo mismo pero de diferente forma. En lugar de 5/1023, vamos e escribir 5.0/1023.0, para nosotros es exactamente lo mismo que 5/1023, pero escribiéndoselo así, nuestro Arduino piensa que lo que tiene entre manos tiene que dar como resultado un número decimal. Veamos el resultado.

Bastante mejor, pero no todo lo bien que quisiéramos, si ahora en lugar de limitarnos a querer saber si en la salida tenemos 0, 1, 2, 3, 4 ó 5 voltios, quisiéramos sacar toda la precisión que tiene nuestros pines analógicos, que son capaces de discriminar variaciones de tensión de 4,9 milivoltios, lo único que se nos ocurre es es cambiar la definición de nuestra variable voltaje.



Versión 3 - Uso de variable tipo float
Hasta ahora hemos utilizado números enteros en todos nuestros ejemplos. Sin embargo, es muy habitual que los cálculos matemáticos den como resultados números decimales y no enteros. Para manejarlos, Arduino nos permite utilizar dos tipos de variables: float y double.

Los float tienen una precisión de 6 o 7 dígitos decimales. Al contrario que en otras plataformas, donde tu podrías obtener mayor precisión usando una variable tipo double (por ejemplo, por encima de 15 dígitos), en Arduino los double tienen el mismo tamaño que los float. En Arduino se mantienen los dos tipos por compatibilidad con C y C++, pero es importante tener en cuenta que no hay diferencia entre ambos. Los dos permiten utilizar números decimales entre el intervalo 3.4028235e+38 y -3.4028235e+38.
Así que parece evidente lo que debemos hacer. Vamos a cambiar la definición de la variable voltaje de entero (int) a decimal (float). Con ello deberíamos resolver el problema.
Pero ojo, a pesar de haber declarado la variable voltaje como float, parece que hay algún error en alguna parte, el resultado solo contiene dos números decimales y no todos los que esperábamos.



El origen del error esta vez no proviene de los cálculos, ni de la declaración de las variables. El error proviene de la función que estamos usando para visualizar los datos a través del monitor serie. Por defecto print y println sólo muestran dos posiciones decimales.

Versión 4 - Números decimales, variables tipo float y función print

De modo que si queremos sacar tres decimales, el truco está en decírselo a la función print de forma explícita. Pare ello después de indicarle lo que queremos que pinte en el monitor serie, le pondremos el número de decimales con los que queremos que nos lo enseñe.



De este modo ahora, si que nuestro sketch nos mostrará las medidas que queríamos obtener.




Espero que hayamos podido explicar bien el problema y como resolverlo adecuadamente. En breve haremos una entrada un poco más técnica sobre la manipulación de los números decimales y el porqué restas tan simples como  5.1-0.1 nunca dan 5.


Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a
e intentaremos responder a vuestra pregunta lo antes que podamos.

domingo, 20 de septiembre de 2015

¿Cuál es la precisión de medida del Arduino?



Para contestar a esta pregunta deberíamos formular primero si lo que queremos saber es cuál es el menor cambio en una señal a medir capaz de producir una salida perceptible en el Arduino. A esto se le conoce comúnmente por el nombre de resolución.

Y esto nos lleva a la segunda pregunta, ¿de qué precisión estamos hablando, de la precisión de las entradas analógicas o de la precisión de las entradas digitales?

Si nuestra duda viene generada por la resolución de las mediciones que nuestro Arduino hace a través de las entradas analógicas, conviene primero hacer un pequeño repaso a los detalles concretos de la placa que estemos usando, puesto que está en la naturaleza de la placa que tengamos en la mano, la respuesta a nuestra pregunta.

Vamos a repasar juntos los detalles de la placa Arduino UNO y con el mismo método podremos resolver la pregunta para el resto de las placas disponibles.

La placa Arduino UNO lleva montado un microcontrolador del tipo ATmega328



Pues bien, si le echamos un vistazo a la hoja de datos del ATMEL de este micro, veremos que lo primero que nos indica, si le echamos un vistazo a la sección de periféricos (Peripheral Features en inglés), esto es de las estructuras que usa para conectarse con el mundo exterior, es que si nuestro encapsulado es del tipo PDIP (Dual-In-Line), el conversor que usa para transformar las señales analógicas en digitales es de 6 canales y de 10 bits.



Por lo que al menos físicamente parece que encaja con la imagen de la tarjeta que tenemos en la mano, y con el número de pines analógicos identificados en la placa : A0, A1, A2, A3, A4 y A5.



Pero y ¿qué significa "10-bit ADC"? ¿estará ahí la respuesta a nuestra pregunta sobre la precisión de medida de nuestro Arduino?

Para contestar a esta pregunta tenemos que volver a la presentación que hicimos sobre los tres pasos de la conversión analógica digital que estuvimos viendo en entradas anteriores:

1.- Muestreo (ver entrada)
2.- Cuantización de la señal (ver entrada)
3.- Codificación binaria de la señal (ver entrada)

Primero muestramos la señal, luego ajustamos las medidas a unos valores concretos y finalmente transformamos estas medidas en números binarios para que sean procesables por nuestro Arduino.



Pues bien, es desde aquí desde donde podemos contestar a nuestra pregunta sobre la precisión de nuestra medida.

Imaginemos que estamos intentando medir una señal eléctrica pero solo tenemos un multímetro de juguete que tiene tres LEDs que se iluminan cuando la tensión es mayor o igual a 1,  3 y 5voltios respectivamente.






Si traducimos este sistema de LEDs al lenguaje binario,  cuando no se encienden, entenderíamos que es 0 voltios, y se traduce por un 00, cuando se encienda 1 LED entenderíamos que es mayor o igual a 1 voltios y lo traduciríamos por 01 en binario, cuando se encienden 2 LEDs, entenderíamos que es mayor o igual a 3 voltios y lo traduciríamos en binario por 10,  y por último cuando se encendieran los tres,  entenderíamos que es mayor o igual a 5 voltios, y  lo traduciríamos por un 11 al lenguaje binario. 

Con este sencillo multímetro de LEDs binarios, estaríamos traduciendo nuestra señal con un conversor analógico digital de 2 bits.


Pero una cosa es lo que mido y otra cosa bien distinta es lo es. Teniendo en cuenta que mi sistema de LEDs no admite "decimales" o bien se enciende o bien está apagado, estamos perdiendo parte de la realidad, y con los datos obtenidos, la señal original podría ser cualquier cosa comprendida en estos puntos. Un par de ejemplos los podríamos ver a continuación:





Con los mismos resultados, no seríamos ni tan siquiera capaz de asegurar la periodicidad de la onda, no ya la forma, que como podríamos ver podría ser cuadrada, triangular, periódica o totalmente irregular, etc...  

En definitiva con un conversor ADC de 2 bits, solo podríamos medir bien señales que de antemano supieramos la forma concreta, y nos sería imposible identificar si la señal es periódica o no.

Pues bien, imaginemos que ahora vamos a la tienda donde compramos nuestro medidor de juguete y les compramos otro que tenga al menos 7 LEDs, de modo que podamos medir mejor las medidas intermedias.

Pues bien, si ahora volvemos a medir nuestra señal, lo que tendremos sería algo así como esto

Con este nuevo juguete, hemos podido convertir nuestra señal analógica a una digital con el equivalente a un conversor analógico digital de 3 bits. Cuando está todos los LEDs apagados sería el equivalente binario de un 000, cuando se enciende uno sería el 001, cuando se enciende dos sería el 010, ... así hasta cuando se enciende el séptimo tendríamos un 111.  No está mal.


Y al a vista de la gráfica, empezamos a pensar que la señal podría ser periódica,  pero si miramos más detenidamente, vemos que en esos resultados caben muchas opciones, por ejemplo una función senoidal, o una triangular.




Entonces, ¿por qué no usar un multímetro que tenga "miles" de LEDs?, ¿qué pasaría entonces? Pues sucedería que los valores intermedios estarían tan pegados que podríamos reproducir la señal con muchísima fiabilidad.  A mayor número de bits, mayor cantidad de niveles intermedios de medid




En la siguiente figura podemos ver la diferencia entre usar un conversor ADC de 3 bits y uno de 16 bits. O lo que sería equivalente, un multímetro con capacidad para medir 65,536 valores intermedios.
Pues bien, vamos a regresar al principio y vamos a ver qué tipo de conversor ADC teníamos integrado en nuestro Arduino.

Nuestro conversor era de 6 canales, esto es que puede manejar simultáneamente 6 pines analógicos y de 10 bits, esto es que es capaz de manejar 2 elevado a 10 valores intermedios de tensión. ¿Y esto cuántos pasos son?, pues 1024 diferentes de tensión. Así que si ya hemos visto como de preciso es un conversor de 2 bits y uno de 3, ¿cuánto lo será uno de 10 bits?

La respuesta es una simple cuenta. Si dividimos los 1024 escalones (correspondientes a los 10 bits de resolución del conversor) entre los 5 voltios máximo que admite la entrada analógica, significa que convertirá tensiones entre 0 y 5 voltios a un número entero entre 0 y 1023. Esto proporciona una resolución en la lectura de: 5 voltios / 1024 unidades, es decir, 0.0049 voltios (4.9 mV) por unidad.

De modo que volviendo al comienzo, podemos decir que gracias al conversor ADC de 10 bits,  el menor cambio en tensión que es capaz de producir una salida perceptible en el Arduino, sería 4,9mV.


Y ahora qué sabemos cuál es la resolución del Arduino UNO, ¿cuál es la resolución del resto de las versiones de placas de Arduino disponibles?

Echémosle un vistazo a la descripción de cada una de ella:




Podemos ver que sólo en la versión Arduino Due, se ha incorporado un conversor ADC de 12 bits, y dado que funciona con tensiones máximas de 3.3 voltios en lugar de 5 voltios del resto de las versiones de Arduino, si hacemos los cálculos 3.3/ 4096, nos dará que si usamos la versión Due, podremos trabajar con resoluciones de tensión de 0,8mV.  



En próximas entradas veremos un truco para mejorar la resolución del Arduino UNO sin necesidad de adquirir una Arduino DUE, cuando las señales analógicas trabajen con tensiones inferiores a los 5 voltios, y cómo comprobar experimentalmente el resultado de estas mejoras.

Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a

e intentaremos responder a vuestra pregunta lo antes que podamos. 



sábado, 19 de septiembre de 2015

Conversión analógica digital - ADC - Codificación binaria de la señal

Conversión analógico digital

Una vez aclaradas las diferencias básicas entre la tecnología analógica y la digital,  cómo muestrear la señal analógica,  y cómo cuantificarla, veamos ahora cómo se efectúa el último paso, el de la codificación binaria de la señal.

Como vimos en la primera entrada, nuestro Arduino, tiene, como cualquier sistema físico, unos recursos limitados con los que procesar la información, de modo que es incapaz de memorizar todas las variaciones de cualquier señal a lo largo de todo los instantes de tiempo. Para ello, emplea el sistema de muestreo que vimos en el primer paso. Es el equivalente a lo que se hace en el cine, cuando se toma 24 fotos por segundo cuando se rueda una película y eso nos crea la ilusión, cuando se muestran uno tras otro rápidamente, de ver un movimiento fluido y natural.

Luego vimos que además de esta limitación en la cantidad de "fotos" que puede tomar por segundo, tenía la limitación de que no puede medir todos los posibles valores que la señal tuviera en el instante de la "captura" y para hacer estas mediciones más rápidas, los resultados se aproximan a una serie de posibles resultados discretos. Es lo que llamamos cuantización de la señal.


Si seguimos con el símil del cine, es como si nuestra cámara cuando revelara las fotos solo imprimiera un conjunto sólido de colores fijos: todo negro, todo blanco, todo amarillo, todo rojo, .... Por lo que cualquier escena sería simplificada al color fundamental más abundante en la imagen. A fin de cuentas es el modo en cómo se procesan las imágenes digitales. Pero para permitirnos identificar nos solo colores sino también formas, se trocea la imagen en pequeños puntos llamados pixeles. La suma de todos ellos en la pantalla, nos crea la sensación de estar presenciando una imagen real, aunque solo es una matriz gigantesca de puntos de colores concretos.

En el tercer y último  paso que realiza el Conversor Analógico Digital ADC (Analog-to-Digital Converter - ADC en inglés), veremos como estos valores numéricos discretos son a su vez convertidos al sistema binario.

1.- Muestreo (ver entrada)
2.- Cuantización de la señal (ver entrada)
3.- Codificación binaria de la señal

Recordemos que un sistema binario, cada valor numérico tiene su traducción en ceros y unos. Veamos el ejemplo de como traduciríamos los 256 primeros números (rango de 0 a 255).




Pues  bien con este traductor en la mano, los valores cuantizados obtenidos tras el proceso de muestreo se convertirían en cadenas de ceros y unos. Que es el único idioma que la electrónica digital es capaz de entender.

Y de este modo una señal analógica con infinitos valores intermedios distribuida sobre un continuo infinito de instantes de tiempo, quedaría para nuestro Arduino traducida en una secuencia finita de valores binarios como los que se presentan en la siguiente imagen.



En la próxima entrada veremos un ejemplo de cómo Arduino usa lo que hemos visto con las señales eléctricas que recibe por sus pines analógicos.

Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a


e intentaremos responder a vuestra pregunta lo antes que podamos. 

Conversión analógica digital - ADC - Cuantización de la señal

Conversión analógico digital

Una vez aclaradas las diferencias básicas entre la tecnología analógica y la digital,  y cómo muestrear la señal analógica, veamos ahora cómo se efectúa el proceso de cuantizar al señal.

Es el segundo paso que realiza el Conversor Analógico Digital ADC (Analog-to-Digital Converter - ADC en inglés) 


1.- Muestreo (ver entrada)
2.- Cuantización de la señal

La cuantización (también llamada cuantificación) es la conversión de una señal discreta en el tiempo evaluada de forma continua a una señal discreta en el tiempo discretamente evaluada. El valor de cada muestra de la señal se representa como un valor elegido de entre un conjunto finito de posibles valores. 

Y esto es importante no olvidarlo porque, limitará los valores registrados a un número limitado de valores específicos. De modo que el resultado medido, no será tampoco el resultado real de la señal en ese momento, sino el valor más cercano. Viene a ser como si tuviéramos una regla y solo pudiéramos medir centímetros, pero no valores intermedios.



De este modo, en este punto ya llevamos hecha dos aproximaciones, 


  • la primera, haber seleccionado solo unos puntos concretos para muestrear la señal, y
  • la segunda, aproximar nuestras mediciones a un conjunto limitado de valores fijos.


Se conoce como error de cuantificación, a la diferencia entre la señal de entrada (sin cuantificar) y la señal de salida (ya cuantificada). Lógicamente, igual que vimos en el primer paso, el muestreo, que cuanto mayor sea, más fidedigna será la reproducción de la señal, en este segundo paso, cuanto menor sea el error de cuantificación, mejor. En este capítulo, Arduino te permite trabajar un poco. Ya lo veremos cuando presentemos la función "map".

En la próxima entrada veremos el último paso, y es cómo codificar la señal muestreada en código binario.

Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a

e intentaremos responder a vuestra pregunta lo antes que podamos. 

Conversión analógica digital - ADC - Muestreo

Conversión analógico digital

Una vez aclaradas las diferencias básicas entre la tecnología analógica y la digital, veamos ahora cómo se efectúa el proceso de conversión de una tecnología a otra.

La tarea la realiza un componente llamado Conversor Analógico Digital ADC (Analog-to-Digital Converter - ADC en inglés) y la ejecuta en tres pasos:


1.- Muestreo de la señal analógica

Para convertir una señal analógica en digital, el primer paso consiste en realizar un muestreo (sampling en inglés) de ésta, o lo que es igual, tomar diferentes muestras de tensiones o voltajes en diferentes puntos de señal que vamos a procesar.

Cuantos más puntos tomemos mejor aproximación a la forma original podremos hacer


Es por ello por lo que a la hora de evaluar la fiabilidad de la "traducción" digital que hayamos hecho, debemos tener en cuenta siempre la frecuencia de muestreo que estamos usando. Que no es más que la cantidad de puntos que estamos tomando por unidad de tiempo.  

Veamos en otro ejemplo, cómo de diferente podríamos imaginarnos la señal original dependiendo si tomamos 10, 6 ó 2 puntos para muestrearla



Entonces ¿por qué no tomar 1000 puntos y así reproducir mucho mejor la señal? 
  • A más puntos más memoria vamos a requerir, por lo que lo inteligente es no consumir más recursos de los estrictamente necesarios para "traducir" la señal la calidad que necesitemos. 
  • A más puntos más velocidad de captura y más velocidad de escritura, es lo que se viene a llamar ancho de banda. Ancho de banda mayores, requiere de componentes más avanzados y por lo tanto más caros. Y en este sentido, las limitaciones físicas vendrán dadas por nuestro propio Arduino.
El número de muestras por segundo se conoce en inglés como el bit-rate.
 
En la próxima entrada veremos el segundo paso y cómo cuantizaremos el valor de la señal en los puntos de muestreo seleccionados.

Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a

e intentaremos responder a vuestra pregunta lo antes que podamos. 

Conversión analógica digital - Midiendo el mundo analógico



La mayor parte de los microcontroladores tienen un conversor analógico-digital (analog to digital converter, ADC en inglés) para permitirnos convertir una tensión analógica de variación continua, a la que se suele definir como señal (por ejemplo la temperatura de una habitación) en un valor digital dentro de un rango definido a una velocidad de captura concreta, llamada frecuencia de muestreo.  En el ejemplo de la temperatura de nuestra habitación, sería las veces que nuestro microcontrolador mide la señal, o dicho de otro modo, la cantidad de veces por segundo que nuestro Arduino mide cuál es la temperatura de nuestro cuarto.

Así dicho no parece un parámetro importante, a fin de cuentas la temperatura no suele cambiar demasiado rápidamente a lo largo del día. Es verdad, pero si en lugar de medir la temperatura estuviéramos midiendo la deformación de un vehículo durante su impacto contra un muro, probablemente ahí todo fuera diferente, la carrocería se deforma muy rápidamente  y capturar la deformación mecánica de ciertas partes del coche, antes de que se convierta en chatarra, podría hacer que los ingenieros pudieran mejorar la seguridad del mismo.  Es por ello por lo que tan importante es saber identificar no solo la naturaleza y magnitud de la señal, sino como la frecuencia a la que vamos a necesitar digitalizarla: frecuencia de muestreo. Ver detalles en la entrada Conversión analógica digital - ADC - Muestreo.

El tiempo que transcurre entre una muestra y la siguiente se denomina periodo de muestreo, y es el inverso de la frecuencia de muestreo.


pero no solo es importante ver cuanto de rápido cambia la señal que quiero analizar para escoger bien la frecuencia de muestreo apropiada, también es importante saber de forma anticipada en qué rango de trabajo vamos a trabajar. No es lo mismo que queramos medir la fiebre de una persona, que a fin de cuentas sabemos que estará en el rango de 36-43 ºC, que intentar medir la variación de temperatura de un litro de agua mientras que lo voy calentando, que posiblemente esté en el rango de 0-100ºC. 

En nuestro Arduino, los rangos de tensión que podemos manejar varían de una placa a otra, y en unos casos, como es el caso del Arduino UNO, la entradas analógicas permiten medir tensiones en el rango de 0 a 5 voltios, siendo, en caso de requerir medir tensiones superiores, necesario implementar soluciones del tipo divisores de tensión.

Conocer de forma anticipada el rango de trabajo en el que vamos a trabajar nos va a evitar muchos problemas graves y quizás darnos muchas alegrías, como veremos más adelante en la entrada donde explicamos como mejorar la resolución de nuestra placa.

Y es este el siguiente punto importante a tener en cuenta cuanto vamos a hacer mediciones analógicas,  la resolución de la medida. Es importante definir con antelación cuál es la resolución requerida cuando vayamos a analizar una señal,  no es lo requieres la misma resolución para medir la longitud de un puente, que para medir el tamaño de un pelo. En el primer caso, con una resolución de metros será suficiente, por ejemplo 136 metros, y en el segundo caso necesitarás que sea del orden de 0.01 milímetros, a fin de cuentas, el diámetro medio de un cabello en un joven es 0.1mm y en una persona anciana la mitad, por lo que si usamos como unidad de medida el metro, parecerá que todos estamos calvos, porque nos saldría 0 metros (0,00001m). Ver detalles en la entrada resolución de la medida del ADC.

Por lo que podemos resumir que, en general, hay tres cosas que nos interés para medir una señal:
  1. Cuántas veces por segundo vamos a requerir hacer la medida: frecuencia.
  2. Cuál es la resolución de la medida que vamos a requerir.
  3. Cuál es el rango de trabajo de la señal que queremos medir.

En la siguiente entrada vamos a repasar uno a uno estos conceptos, para luego poder saltar a presentar el ADC (conversor analógico digital en inglés) que el microcontrolador de nuestra placa Arduino usa, así como sus ventajas y sus inconvenientes.



miércoles, 10 de julio de 2013

¿Qué es una señal analógica?

Una magnitud analógica es aquella que toma valores continuos. Una magnitud digital es aquella que toma valores discretos. La mayoría de las cosas que se pueden medir cuantitativamente aparecen en la naturalez en forma analógica. Por ejemplo, la temperatura varía dentro de un rango continuo de valores. A lo largo de un día, la temperatura no varía entre, pro ejemplo, 20ºC y 25ºC de forma instantánea, sino que alcanza todos los infinitos valores que hay en este intervalo. Si dibujamos la gráfica de temperatura de un día típico de verano, tendríamos una curva continua suave similar a la de la figura siguiente

El problema que presenta nuestro Arduino es que solo entiende de magnitudes eléctricas, por lo que todo el resto de magnitudes físicas que necesitemos procesar, tendremos que traducírselas a señales eléctricas que pueda interpretar. Esto lo conseguiremos, como veremos más adelante, gracias al uso de los sensores. 

Pero este solo es el primer paso. Nuestro Arduino tampoco se encuentra cómodo con todas las señales eléctricas, de hecho las señales eléctricas analógicas las encuentra "ruidosas" y prefiere transformarlas en señales eléctricas digitales. En lugar de "memorizar" los infinitos valores que hay entre un intervalo concreto de valores de tensión, prefiere coger solo una muestra de ellos espaciados de igual manera, e imaginarse el resto de los puntos que se hallarían entre ellos. 




Para conseguirlo, el mismo Arduino convierte este tipo de señales gracias al uso de un convertidor analógico digital (ADC, Analog to Digital Converter, en inglés).


En la próxima, introduciremos el procedimiento de conversión de una señal analógica a digital.

Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a
e intentaremos responder a vuestra pregunta lo antes que podamos.