Icono del sitio Home Assistant Fácil

Dudas sobre arrays con Arduino y pin analógico del ESP8266

En este nuevo capítulo del podcast y artículo del blog voy a resolver algunas dudas que me han enviado alumnos del curso de Arduino y usuarios del blog.

Como la temporada pasada, iré resolviendo las dudas que me hagáis llegar a través de los diferentes medios.

En esta ocasión hablaré sobre arrays de datos con Arduino y del famoso pin analógico del ESP8266. Cualquier duda o pregunta me la puedes hacer llegar a través del formulario de contacto.

Ahora te dejo con el contenido de este capítulo.

Duda sobre arrays de datos con Arduino

Horacio Rubén Rodríguez preguntaba lo siguiente:

Buenos días Luis, imagino que te estas preparando para el Arduino Day, espero que lo disfrutes y lamento robarte un poquito de tu tiempo justo en estos días, pero me surgio una duda y aunque parezca algo tonta para mi es importante en la forma que de aquí en más voy a declarar un array. ¿Por qué crear una variable para almacenar el tamaño del array y luego declarar el array? Yo probé declarando el array con el número de tamaño entre corchetes y el código sigue corriendo exactamente igual. ¿Sera que más adelante nos vas a explicar como usar esa variable y por eso es necesario acostumbrarse a crearla? O simplemente va en el gusto de cada uno crear una variable para almacenar el tamaño del array o no? desde ya muchas gracias y te mando un abrazo desde la distancia.

Lo primero es que sí, efectivamente estoy preparando ya el Arduino Day 2019 que será el 30 de marzo en Logroño. Que ganas tengo de ir otra vez a ver a mis amigos Riojanos :)

Dicho esto vamos con la duda.

Efectivamente, cuando declaramos un array es necesario indicar el número de elementos que va a contener.

Pero vamos a empezar por el principio ¿qué es un array de datos en Arduino? Un array no es más que una lista de cosas. Imagínate una lista de perros puestos uno junto a otro o una lista de monedas.

Es así de simple, un array contiene una lista de valores o variables. Eso sí, todos tienen que ser del mismo tipo, los perros con los perros y las monedas con las monedas.

HABLAR DE EJEMPLO MEDIR TEMPERATURA A LO LARGO DEL DÍA

Declarar un array es muy simple.

Lo primero es escribir el tipo de dato que vamos a guardar en el array. Si declaramos un array del tipo int sólo podrá almacenar números enteros al igual que si es del tipo float sólo podrá almacenar números de coma flotante.

Luego pones el nombre. Hay libertad para poner el nombre que quieras pero a mi me gusta poner antes siempre la palabra array para identificar rápidamente que se trata de un array. Y seguidamente tienes que poner el número de elementos que va a tener el array entre corchetes ([]).

Esta parte es importante ya que le estamos diciendo al compilador cuanto va ocupar el array para reservar la memoria correspondiente.

Vale, entonces Horacio pregunta que si este número (el que indica en número de elementos) puede ser un número en vez de una variable. Efectivamente puede usarse indistintamente pero la ventaja de utilizar una variable es que si se necesita modificar el tamaño del array será mucho más sencillo.

Vamos a verlo con un ejemplo muy sencillo.

Controlar LEDs con array

El circuito que vamos a utilizar es el siguiente.

Son 4 LEDs conectados en serie con una resistencia de 220Ω a los pines 6, 8, 10 y 12.

Puedes controlar estos 4 pines con un array, vamos a ver cómo hacerlo.

Es un código bastante sencillo que gracias a los bucles for podemos recorrer el array y poner el modo de cada pin digital y hacer parpadear cada LED.

Vale ¿qué sucede si ahora queremos controlar en vez de 4 5 LEDs? Tendríamos que ir buscando en el código donde hacemos referencia al número 4 y modificarlo.

Si hubieras declarado una variable indicando el número de elementos serviría tanto para indicar el número de elementos del array como para recorrer los bucles for. Con sólo cambiar el valor de esa variable de 4 a 5 ya tendrías todo el código adaptado.

Pero ojo, cuando se utiliza para indicar el número de elementos del array en la declaración entre corchetes, esa variable tiene que ser una constante. De otra forma al compilar el código dará un error.

El mismo programa con una variable constante quedaría de la siguiente manera.

Y este es el motivo por el que es interesante utilizar variables y no literales.

Pin analógico del ESP8266

Carlos Moreno Gómez pregunta lo siguiente

Hola Luis.

Si quiero hacer un prototipo con un LM35 y una fotocélula, necesitaría dos entradas analógicas ¿verdad? En esta caso el ModeMCU no me valdría. ¿Hay algún otro kit con el ESP8266 que tenga más entradas analógicas?

Gracias

Para empezar hay que aclarar el tema del pin analógico del ESP8266. Lo primero es que no depende de la placa que tenga un único pin analógico, depende del microcontrolador o del SoC en este caso el ESP8266.

Según las especificaciones técnicas el ESP8266 tiene un ADC con un único pin analógico que mide en el rango de 0V a 1V con una resolución de 10-bit. Esto quiere decir que si a la entrada del pin tenemos 0V analogRead(A0) devolverá 0 y si tenemos 1V analogRead(A0) devolverá 1023.

Vamos, como ocurre con el Arduino UNO pero en otro rango.

Si ya has trabajado con alguna placa basada en el ESP8266 te habrás dado cuenta que el rango que suelen admitir es de 0V a 3,3V en la gran mayoría de los casos. Placas como NodeMCU y Wemos esto es normal.

¿A qué se debe esto? Esto se debe a que la electrónica que incorporan estas placas incorporan un divisor de tensión con resistencias. Por eso en ocasiones la conversión es tan mala, porque las resistencias son de mala calidad y con una tolerancia alta.

La solución puede ser utilizar un conversor ADC externo como el ADS1115. Tiene hasta cuatro canales es decir, cuatro pines analógicos con una resolución de hasta 16-bit. Se conecta por I2C al ESP8266 y no tiene problemas de precisión y calidad.

Con este componente vas a poder conectar hasta cuatro sensores analógicos.

Por lo tanto como conclusión recomiendo utilizar el pin analógico del ESP8266 cuando no se requiere precisión y en el caso de que se requiera, utilizar el ADS1115.

Si quieres compartir algo con todos nosotros lo puedes hacer en los comentarios de este artículo.

Salir de la versión móvil