Mostrando entradas con la etiqueta señal analógica. Mostrar todas las entradas
Mostrando entradas con la etiqueta señal analógica. Mostrar todas las entradas

domingo, 1 de enero de 2017

Ejemplos - Basics - AnalogReadSerial






Con esta entrada comenzaremos a repasar la serie de ejemplos que el IDE Arduino trae instalado para permitirnos aprender a usar las funciones más básicas de nuestro placa.

En este caso vamos a revisar el primer ejemplo de los considerados básicos, relacionados con la lectura de una señal de tensión analógica.


Para esta práctica vamos a necesitar repasar unas cuantas ideas que vimos anteriormente:

  1. ¿Qué es un voltaje?
  2. ¿Qué es la ley de Ohm?
  3. ¿Qué es un divisor de tensión?
  4. ¿Qué es un potenciómetro?
  5. ¿Qué es una señal analógica?
  6. ¿Qué es un convertidor analógico digital?
  7. ¿Cuántos pines tiene nuestro Arduino capaz de leer señales analógicas?

Adicionalmente vamos a necesitar introducir una señal analógica variable por uno de los pines analógicos de nuestra placa.  Para ellos usaremos vamos necesitaremos aplicar lo que hemos aprendido sobre los divisores de tensión.

Sabemos que si colocamos nuestro voltímetro entre dos resistencias conectadas a una diferencia de potencial concreto, el voltaje que mediríamos vendría dado por la formula


Y cómo aplicando la Ley de Ohm al circuito completo sabemos que V= I*(R1+R2), si despejamos I de esta ecuación no quedaría que I= V/(R1+R2), y sustituyéndolo en la ecuación anterior donde V2=I*R2, obtendremos que


Esto que estamos haciendo de forma manual con un polímetro conectado entre los extremos de la resistencia R2, también lo podríamos hacer gracias a los pines analógicos de nuestra placa Arduino.


Por ejemplo, imaginemos que no tenemos un polímetro a mano y queremos conseguir una tensión de 2.5 voltios en nuestra placa, aunque sabemos que los únicas tensiones que suministra son de 5V y de 3.3V. Para ello con lo que hemos aprendido más arriba, podría ser suficiente poner dos resistencias de igual valor (por ejemplo 10K) y coger la tensión en el punto donde se unen ambas. Con ello teóricamente obtendríamos los 2.5voltios, pero para estar seguros de que no nos hemos equivocado, como tenemos una placa Arduino con 6 pines analógicos, conectaremos esa señal a un pin analógico e intentaremos medir el valor con un programita sencillo.

Esto lo podríamos esquematizar de la siguiente manera




Ahora solo nos queda ver cómo podemos ver el valor de voltaje que está midiendo nuestro Arduino. Para ello tendremos que usar una función que se llaman analogRead(), que solo requiere que le pasemos un parámetro (el pin que estemos usando) y te devolverá un valor entero comprendido entre 0  y 1023. El 0 representará a 0 voltios y el 1023 a 5 voltios.



Para entender el porqué de esta traducción de números, es mejor que repaseis el capítulo dedicado a al convertidor analógico digital.

De forma resumida podemos decir que en los pines analógicos de nuestro Arduino UNO, tenemos unos convertidores Analógicos Digitales (ADC) de 10 bits, esto es, que son capaces de trocear los 5 voltios máximos de tensión que son capaces de medir en 2 elevado a 10, o lo que es lo mismo 1024 trocitos.

Ahora solo nos queda escribir un pequeño código para que podamos ver en pantalla, el valor que estamos registrando por el PIN analógico seleccionado (en nuestro ejemplo el A0). Que debería ser algo parecido a 511 (el valor entero más proximo a dividir 1023 entre 2).

Pues bien esto mismo que hemos aprendido aplicándolo a un divisor de tensión, lo podríamos aplicar para medir la tensión de cualquier sensor analógico que tengamos a mano. Solo necesitaríamos que nos suministrara una tensión comprendida entre 0 y 5 voltios, y conectarlo al PIN analógico donde querramos registrar los valores. Algo similar lo podemos simular reemplazando el sensor con un potenciómetro.


Por lo que si ahora conectamos un cable a un pin analógico de nuestra placa Arduino, como pudiera ser cualquiera de los marcados como "Analog In"



podremos leer la señal analógica  a través de un PIN analógico seleccionado.


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.


miércoles, 10 de julio de 2013

¿Qué es la lógica digital?




Una vez que hemos visto como un convertidor puede digitalizar una señal analógica, ahora vamos a dar un paso más y vamos a ver cómo la electrónica moderna consigue velocidades de computación tan rápidas a través de la simplificación máxima de las operaciones.

Para ello usan lo que se conoce como lógica de dos estados. Un sistema que se limita a emitir preguntas que se pueden contestar con un Sí o con un No, con un Verdad o con un Falso, con un Encendido o con un Apagado, con un Alto o con un Bajo, con un 1 o con un 0.

Las señales se digitalizan, las preguntas se reformulan y cuando finalmente consigues que tu mundo sea así de simple, desaparecen las ambigüedades que nos causan tantos malos entendidos y nos consumen tantos recursos, y todo empieza a ser lógico. 

A estos estados se le llama ALTO y BAJO respectivamente. 

Al valor inferior de tensión BAJO le asociamos un valor lógico LOW ó ‘0’, mientras que al valor superior ALTO le asociamos HIGH ó ‘1’ lógico.

El valor "ALTO" vendría definido por el tipo de tecnología que estemos usando para definir el valor HIGH, que puede ser 5V, 3.3V ó 2.8V, y normalmente se le da el nombre genérico de Vcc, y "BAJO " sería normalmente 0V.

Pero ¿qué sucede si todavía no he llegado arriba pero estoy muy cerca?, ¿cómo puedo contestar?. Para resolver esta situación que es la más común de las situaciones en las que se puede  encontrar cualquier señal, el truco que se emplea es realizar una comparación con un valor que hace de juez, este valor se le llama tensión umbral. Si el valor medido es superior a la tensión umbral se devuelve HIGH, y si es inferior LOW. En general es razonable suponer que la tensión umbral es cercana al punto medio entre -Vcc y +Vcc.

En Arduino los valores de alimentación habituales son 0V (sería nuestro valor BAJO, y normalmente se le llama GND) y 5V (sería nuestro valor ALTO). En este caso la tensión umbral será muy cercana a 2’5V. Por tanto si medimos una tensión con un valor intermedio entre 0 a 2’5V Arduino devolverá una lectura LOW, y si medimos un valor entre 2’5V y 5V, devolverá HIGH.





De esta manera cualquier señal analógica podrá ser digitalizada para responder más rápidamente a las preguntas que le haga el microcontrolador.

¿Qué es una señal digital?

Aunque en el mundo real los valores que nos podemos encontrar en cada magnitud que medimos se encuentran dentro un espectro continuo de resultados posibles véase por ejemplo la evolución de temperatura que tenemos en nuestro dormitorio entre dos instantes de tiempo diferente T1 y T2 representada en una gráfica como ésta: 
Señal analógica
en el mundo digital, las magnitudes que queremos medir solo pueden estar en un conjunto discreto de valores: señales digitales. 

Un ejemplo que nos puede ayudar a entender este comportamiento lo podemos encontrar en el comportamiento de un ascensor, la señal que representa su estado sólo nos devolverá resultados del tipo, primera planta, segunda planta, etc. Otro ejemplo podría encontrarlo si queremos medir el estado de una lámpara, en este caso la señal sólo nos devolverá resultados del tipo, encendido o por el contrario apagado.

Entonces para trabajar en un mundo digital necesitaremos de la ayuda de un componente clave: el convertidor analógico digital (ADC, Analog to Digital Converter, en inglés).

Más adelante veremos el procedimiento de conversión de una señal analógica a digital, generando un tren de pulsos eléctricos. Muy parecido al código Morse, pero más sencillo. Traducirá cualquier seña a "ceros" y "unos": los famosos bits.
Conversión analógico digital


En la próxima entrada veremos qué son los bits.

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.