Proyectos IoT

[2/3] Del hardware a la nube: Probando el MMC5883MA

Daniela Rico
- 6 min read
Enviar por correo electrónico

¿Alguna vez has pensado en desarrollar tu propia aplicación IoT desde cero, pero no sabías por dónde empezar? Buenas noticias, ¡aquí aprenderás cómo hacerlo! Mantente al tanto de los avances del proyecto[aquí].

Este es el segundo de una serie de artículos a través de los cuales describiré el proceso de desarrollo de mi propia aplicación IoT desde cero. Si aún no has leído la parte 1, te recomiendo que lo hagas antes, para que puedas entender el contexto del proyecto y ponerte al día de las consideraciones que se tuvieron en cuenta para seleccionar las tecnologías y componentes necesarios para construir el primer prototipo.

Para poder construir un prototipo, es necesario conocer los detalles de funcionamiento y las especificaciones técnicas de cada componente. Por mi experiencia, considero que el primer paso (y quizá el más importante) es comprender los principales aspectos de la ficha técnica de los módulos. Después, recomiendo realizar pruebas individuales con cada uno de ellos para entender su comportamiento.

Teniendo todo esto en cuenta, decidí empezar por la parte más crítica del prototipo: los sensores. La razón es sencilla: es necesario asegurarse de que los sensores seleccionados son realmente capaces de detectar la presencia de un vehículo, además de compararlos para averiguar cuál es el más adecuado para cumplir los requisitos y objetivos de la aplicación.

A lo largo de este artículo, describiré el proceso llevado a cabo para evaluar el comportamiento del sensor magnético MMC5883MA y su capacidad para detectar la presencia de un vehículo en una plaza de aparcamiento. Al final, se mostrarán y analizarán los resultados de las pruebas.

Acerca de los componentes

El MMC5883MA es un sensor magnético de 3 ejes de bajo consumo que puede comunicarse, a través de una interfaz I2C, con un microcontrolador externo. Al escribir y leer ciertos registros específicos del sensor, el microcontrolador puede configurar el modo de funcionamiento e iniciar el proceso de medición, además de obtener los datos de las mediciones.

Para esta prueba, estoy utilizando la versión de evaluación del sensor MMC5883MA, llamada MMC5883MA-B, porque los componentes superficiales no se pueden probar tan fácilmente. Como primero necesitaba construir un prototipo, la mayoría de los componentes deben conectarse a través de una protoboard y el MMC5883MA-B, lo que me permite hacerlo sin requerir tiempo y trabajo extra.

Para poder llevar a cabo la prueba, el primer paso fue seleccionar un microcontrolador que recogiera los datos generados por el sensor. Sin embargo, como el objetivo de la prueba se centra en el análisis del comportamiento del sensor, no del microcontrolador, una buena opción puede ser elegir un microcontrolador sencillo de programar, para reducir el tiempo y la complejidad del experimento. En resumen, necesitaba encontrar un microcontrolador (o placa de desarrollo) sencillo y práctico, con una interfaz I2C, que además tuviera la capacidad de enviar los datos del sensor a la plataforma Ubidots para ser almacenados y procesados allí.

Teniendo todo esto en cuenta, decidí utilizar un NodeMCU ESP8266 como microcontrolador. Esta placa de desarrollo compatible con Arduino se basa en el módulo WiFi ESP8266 y es muy popular entre las aplicaciones de Internet de las Cosas debido a su practicidad. Este dispositivo tiene una variedad de interfaces de comunicación, incluyendo I2C. Todas estas características lo hacen apropiado para ser utilizado en el experimento.

Descripción de la prueba

El experimento consistía en realizar mediciones periódicas del campo magnético en una plaza de aparcamiento simulando condiciones reales, es decir, con vehículos entrando y saliendo de la misma. Los datos de los sensores debían enviarse en tiempo real a la plataforma Ubidots y luego analizarse para identificar si había algún cambio en el comportamiento de las mediciones que pudiera estar relacionado con la presencia de vehículos.

El MMC5883MA-B tiene que ser conectado con el NodeMCU ESP8266 a través del puerto I2C. Estas conexiones se pueden hacer fácilmente con la ayuda de una protoboard. El módulo NodeMCU tiene que estar correctamente configurado para poder acceder a una red WiFi y enviar datos a Ubidots. El último detalle antes de empezar la prueba era proporcionar una fuente de alimentación a los módulos, para que fueran portátiles. Como la tensión de trabajo de los módulos es de 3,3 voltios, bastaría con utilizar dos pilas AA de 1,5 voltios cada una, conectadas en serie. Las conexiones resultantes se muestran en el siguiente diagrama.

Hora de codificar

Dado que la NodeMCU es una placa compatible con Arduino, se puede programar a través del IDE de Arduino. El código Arduino debe implementar dos tareas principales:

  • Adquisición de datos de sensores.
  • Puesto de datos en la plataforma Ubidots.

La parte del código encargada de leer los datos del sensor y decodificarlos para obtener la medida del campo magnético se escribió basándose en la hoja de datos del MMC5883MA, donde se explican detalladamente los registros del sensor. Aquí, la librería de Arduino Wire.h fue de gran ayuda para lograr la comunicación I2C.

La parte del código encargada de configurar la conexión WiFi y enviar los datos a la plataforma Ubidots está basada en el tutorial de Ubidots"Connect a NodeMCU ESP8266 to Ubidots over HTTP". Para aprender a configurar el IDE de Arduino para programar la placa NodeMCU, recomiendo seguir el paso 1 que se encuentra en el tutorial.

El código resultante puede encontrarse en este repositorio de Github.

Resultados de las pruebas

Tras completar las configuraciones explicadas anteriormente y asegurarme de que la NodeMCU leía los datos y los enviaba a Ubidots correctamente, coloqué la breadboard en el suelo de la plaza de aparcamiento, aproximadamente en la posición marcada con la X verde en la imagen inferior.

Para iniciar la prueba, aparqué un coche y lo dejé allí unos minutos. Después, saqué el coche y esperé un par de minutos antes de repetir el proceso. Hay que tener en cuenta que el sensor tomaba las medidas periódicamente, aproximadamente cada dos segundos. Repetí el mismo proceso varias veces y terminé la prueba.

Previamente, configuré un dashboard en mi cuenta de Ubidots para facilitar la visualización de los datos del sensor. Tras finalizar la prueba, he revisado las gráficas en mi dashboard y esto es lo que me he encontrado:

Mientras analizaba los datos, me di cuenta de que había algunos cambios significativos en las mediciones del eje z. El primero se produjo cuando la magnitud del campo magnético en el eje z aumentó (marcado con "1" en la imagen superior). El primero se produjo cuando la magnitud del campo magnético en el eje z aumentó (marcado con el "1" en la imagen de arriba); el segundo, cuando la magnitud volvió a disminuir (marcado con el "2" en la imagen de arriba). Es importante observar que la magnitud de los datos tomados entre estos puntos se aproxima al mismo valor.

Teniendo todo esto en cuenta, es posible concluir que los cambios marcados como 1 y 2 corresponden a los momentos en que aparqué el coche (1) y lo volví a mover (2). Además, las mediciones realizadas entre ambos significan el tiempo mientras el coche estaba aparcado. Este comportamiento en las mediciones se repitió de nuevo en el punto marcado como 3.

El resultado del experimento implica que, con el MMC5883MA, se puede detectar la presencia de un vehículo a través de los cambios en las mediciones del campo magnético, que serán más considerables en uno de los ejes, en este caso, el eje z. Resumiendo, cuando hay un coche en la plaza de aparcamiento, la medida del campo magnético será mayor que cuando está solo. Según la diferencia entre estos valores, es posible definir un umbral para tomar una decisión sobre la presencia del vehículo.

El siguiente objetivo a alcanzar es realizar experimentos similares con los demás sensores. Al final, hay que comparar los resultados para averiguar cuál de los sensores es el más adecuado para construir el prototipo final del proyecto.

Si quieres saber cómo resultan los demás experimentos, estate atento a los próximos posts.