¿Cómo funciona?
Actualizado: 9 de enero de 2022
Proyecto: Estación meteorológica desarrollada con Arduino y Access
Antecedentes
Con motivo de la realización de unos cursos de Arduino, me propuse llevar a cabo un proyecto de una estación meteorológica, basándome en el microcontrolador Atmel AT 328, instalado en una placa Arduino Nano.
El proyecto inicial incluía un sensor de temperatura y humedad para el exterior, y un sensor de presión y temperatura para el interior, mostrando los datos en un display LCD de 20 X 4.
El proyecto ha sido actualizado y ahora incluye un sensor de temperatura, presión y humedad para el exterior, y un sensor de presión y temperatura para el interior.
También se le ha agrgado un potenciómetro para regular la intensidad de la luz del display y un interruptor para cambiar el modo de presentación: cambio entre datos de interior y exterior cadaa 10 segundos o presentar sólo datos del exterior.
Hasta aquí es un proyecto normal y corriente de Arduino, no obstante, decidí dar un paso más, y hacer que la estación se comunicara por el puerto serie (a través de USB) con el ordenador, y le enviara la información de los sensores en ese momento cada minuto, almacenando dicha información en una BBDD Access para el posterior tratamiento estadístico de los datos.
La estación cuenta con un RTC (Real Time Clock) que mantiene la fecha y hora, no obstante, por defectos de los componentes, estado de la pila, etc., pueden existir diferencias de unos pocos segundos entre el PC y la estación. En caso de fallo de energía de la pila, el RTC se resetea a las 00:00:00 del 01/01/2000. Este problema ha sido subsanado mediante una rutina que permite enviar la fecha y hora del PC al RTC y así sincronizarlos.Componentes utilizados
Arduino Nano
5.50 € - 26.95 €
Arduino UNO
8.99 € - 29.96 €
Potenciómetro de 5K
0.75 € - 1.50 €
Utilizado para controlar la intensidad de la luz del display.
Nota: este potenciómetro no es imprescindible, ya que la controladora I2C del display lleva un puente para proporcionar tensión a la iluminación de la pantalla.
Sensor BME 280 (Exterior)
6.50 € - 15.50€
Para medir temperatura, humedad y presión, con bus I2C y SPI
Sensor BMP 280 (Interior)
2.25 €
Para medir temperatura, humedad y presión, con bus I2C y SPI
Placa adaptadora a bus I2C para displays LCD alfanuméricos.
1.25 €
RTC (Reloj de tiempo real) DS 3231
2.95 €
Display LCD 20 X 4
5.50 €
Alfanumérico de 20 columnas y 4 filas.
Mini placa breadboard
1.25 € - 3.95 €
para el Inter conexionado de los componentes.
Nota: Estos precios son orientativos ya que depende de dónde compres, en tiendas Online chinas (Joom, AliExpress, Wish…) puedes encontrar productos similares más baratos y en otros (Amazon, eBay, etc) pueden ser más caros. Y también hay que sumarle los costes de envío.
Los precios que he puesto son de tiendas Online y tiendas físicas en España donde los he comprado.
Comunicación de datos entre los distintos componentes de la estación
La placa Arduino Nano se comunica con el display, el RTC y los sensores BMP280 y BME280 por medio de la interfaz de bus I2C (IIC), teniendo cada uno de los dispositivos una dirección única, por lo que se puede controlar la información que se recibe o envía cada momento a cada dispositivo.
El uso del bus I2C proporciona una velocidad de transmisión mucho más alta, además de que sólo son necesarios 2 hilos para la comunicación, pudiéndose conectar todos los dispositivos en paralelo (o en cascada en caso de que el dispositivo tenga las señales de datos en una salida, como es el caso del RTC) ya que el microcontrolador se comunica con cada uno de los dispositivos por medio de su dirección única.
Comunicación de datos Arduino – Access
El Arduino y Access se comunican por medio del puerto serie, emulado por un USB, a una velocidad programada en el Arduino. Las velocidades que se pueden seleccionar van desde los 300, 600, 1.200, 2.400, 4.800, 9.600, 14.400, 19.200, 28.800, 38.400, 57.600 o 115.200 de forma estándar, pero se pueden usar velocidades de 230.400, 250.000, 500.000 baudios, e incluso he hecho pruebas con 1.000.000 Y 2.000.000, pero en estos casos depende de la calidad de los componentes (originales o clones), de la interfaz de puerto serie que lleve el Arduino y de la conexión USB del PC (USB 2.0 ,USB 2.1, USB 3.0, USB 3.1, o superior).
En este caso, como no es imprescindible una velocidad de transmisión tan excesivamente elevada, uso 115.200 baudios.
Ejemplo de comunicación a ¡1.000.000! baudios en el IDE de Arduino.
¡Conexión a 1.000.000 baudios con Access!
Conexión a 115.200 baudios con Access
Programacion del Arduino
El Arduino Nano se programa en una variante del lenguaje C/C++, utilizando unas librerías específicas para el control del bus I2C, el display, el RTC y los sensores, además de los comandos necesarios para el control del puerto serie, controles de I/O, etc.
Además, se ha incorporado la salida y entrada de datos por el puerto serie para la transmisión/recepción de información con el PC y Access.
Diagrama de bloques del programa Arduino
Access
Para el desarrollo de Access se tuvo que recurrir al empleo de un Userform para gestionar las comunicaciones, evitando así problemas de sincronía con los formularios de Access.
El UserForm es el encargado de realizar la comunicación entre Access y el Arduino, teniendo que configurarse únicamente el puerto de comunicación y la velocidad de transmisión, que debe coincidir con la programada en el Arduino (115000 baudios en este caso).
El UserForm recibe los datos enviados por el Arduino (cada minuto) y añade un registro en una tabla en cuanto le han llegado todos los datos y está activado el registro de datos por medio del botón correspondiente.
El agregado de datos se puede controlar por medio de un botón, que puede habilitar o deshabilitar la inserción de nuevos registros.
También tiene un botón que nos permite visualizar los datos que le llegan a Access a través del puerto serie.
También controla la sincronía de fecha y hora entre el PC y el Arduino, y en caso necesario, por medio de un botón se envían los datos de fecha y hora del PC al RTC para mantener la sincronía.
Existe además un formulario normal de Access cuyo único cometido es lanzar el UserForm por medio de un botón de comando, y presentar los datos existentes en la tabla a través de una consulta, para que se muestren sólo los del día actual ordenados de más reciente a más antíguo.
Diagrama de flujo de Access