Entradas analógicas
El hecho de que existan multitud de sistemas cuya salida es una magnitud analógica, como potenciómetros, joysticks, resistores dependientes, etc. motiva que muchos modelos de microcontrolador incluyan un ADC para la adquisición de este tipo de señales. Debemos distinguir entre lo que es el módulo ADC incorporado y las entradas analógicas. Arduino UNO por ejemplo dispone de 6 entradas analógicas, pero un único ADC que, valiéndose de un multiplexor analógico, lee secuencialmente cada una de las entradas. Como ya comentamos en una unidad anterior el chip ESP8266 y por tanto la placa NodeMCU, incorpora un ADC de 10 bits disponible en la entrada A0. Además del escaso número de entradas, otro gran inconveniente es el hecho de emplear un fondo de escala de solo 1V. Esto supone una limitación a la hora de conectar cierto tipo de elementos, teniendo que recurrir a incluir componentes adicionales en el montaje. Para evitar esto, muchas placas incorporan el divisor de tensión, de forma que podamos introducir señales de 0 a 3.3V sin problema. Esta solución presenta el inconveniente de que la impedancia de entrada baja considerablemente, lo que dificulta sobremanera el diseño de divisores externos
El ADC de NodeMCU es de 10 bits, lo que significa que el valor de la tensión en la entrada se codificará en un número que variará proporcionalmente entre 0 para 0V y 1023 para 1V (o 3.3V con divisor de tensión). En muchos casos será deseable emplear un rango distinto, como un porcentaje o el fondo de escala de una magnitud. Para realizar el cambio de escala resulta bastante útil el bloque mapear, disponible en el menú Matemáticas de ArduinoBlocks. Para cambiar de la escala 0 – 1023 a 0 – 100 usaríamos:
Salidas analógicas
Ni las placas Arduino ni el chip ESP8266 incorporan un DAC. Como ya comentamos en una unidad anterior, lo que llamamos salida analógica, es en realidad una onda digital cuyo valor medio se modifica empleando una modulación PWM de ciclo de trabajo variable. Podemos disponer de esta funcionalidad en las placas Arduino en los pines marcados con el símbolo ~. El chip ESP8266 no dispone de generador PWM hardware, pero esto lejos de ser un inconveniente es una ventaja. Dada la mayor potencia de este chip, la señal PWM se puede generar por software sin sobrecargar el microcontrolador, lo que al final se traduce en que podemos obtener dicha señal en cualquiera de los pines de salida excepto D0.
Otra diferencia entre las señales PWM de Arduino y NodeMCU es la resolución. En las placas Arduino el generador PWM incorporado es de 8 bits, por lo que especificamos el ciclo de trabajo con un número entre 0 y 255, mientras que en NodeMCU es de 10 bits, por lo que el rango de valores para especificar el ciclo de trabajo es 0 – 1023. Es importante tener esto en cuenta, especialmente para aquellas personas con experiencia previa en Arduino, ya que en caso de no saberlo, no obtendrán los resultados deseados. Mientras que el valor 255 equivale en Arduino un 100% de ciclo de trabajo, ese mismo valor en NodeMCU equivale a un ciclo de trabajo del 25%, o lo que es lo mismo, la cuarta parte de potencia.
Empleando la modulación PWM podemos ajustar la cantidad de potencia entregada a una carga, como por ejemplo motores de corriente continua o iluminación. También programando una evolución suave del ciclo de trabajo podemos conseguir que las variaciones en la cantidad de potencia entregada a la carga no sean tan bruscas a la hora de conmutar.
Sensores
Una de las principales ventajas de ArduinoBlocks sobre otros entornos de programación por bloques, es el hecho de incluir multitud de bloques que modelan infinidad de dispositivos, de forma que la lectura del estado de un determinado sensor o controlar un actuador, se limita a incluir en nuestro programa el bloque correspondiente.
Hay varios modelos de sensores que se comunican con el microcontrolador mediante I2C. El bus I2C es un bus serie síncrono, que solamente necesita dos señales: SDA para transmisión bidireccional de datos y SCL para el sincronismo. Este bus soporta hasta 112 dispositivos, por lo que podemos incrementar las opciones de conectividad de cualquier microcontrolador de una forma asombrosa. Aunque desde hace años prácticamente todos los microcontroladores incorporan en el hardware esta característica, no es el caso de ESP8266. Al igual que sucedía con la modulación PWM, esta funcionalidad se consigue mediante software. Esto permite que podamos emplear cualquier pin de la placa para mapear las señales SDA y SCL. Sin embargo, al emplear el entorno ArduinoBlocks, el bus I2C se encuentra siempre en los pines D1 – SCL y D2 – SDA.
BMP180
El sensor BMP180 es un sensor barométrico que emplea la conectividad mediante bus I2C. Permite obtener los valores de la temperatura, presión y altitud. En realidad, la altitud se obtiene a partir de la medida de presión, por lo que puede no ser un valor demasiado preciso. Existen otros sensores similares que añaden funcionalidades adicionales, como el BMP280, que además de I2C permite la conexión por SPI, y el BME280 que también mide el valor de la humedad.
DHT11
DHT11 es un sensor de temperatura y humedad bastante extendido, por estar incluido en multitud de kits de Arduino, a pesar de ser un sensor cuyas características dejan bastante que desear, especialmente en lo que a la precisión se refiere (±2 ºC en temperatura y 5% en humedad). DHT22 es una versión superior con unas prestaciones bastante mejores, aunque con un notable incremento de precio. Una gran ventaja de estos dispositivos con respecto a otras opciones es que solamente necesitan un pin para comunicarse con el microcontrolador, lo que los convierte en una opción a tener en cuenta en sistemas con pocos pines disponibles.
En ambos sensores la salida es en colector abierto, por lo que la señal empleada para comunicación bidireccional con el microcontrolador debe conectarse a Vcc mediante una resistencia de pull-up de unos 10k, como en los pulsadores mecánicos. También podemos encontrar modelos ya montados en una placa con la resistencia incorporada.
Comentarios
Publicar un comentario