Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Monitor meteorológico MKR FOX 1200

Componentes y suministros

Arduino MKR Fox 1200
× 1
Desglose del sensor atmosférico SparkFun - BME280
× 1
Sensor de luz de luminosidad digital TSL2561
× 1
HTU 1D
× 1

Aplicaciones y servicios en línea

Arduino Web Editor
API ThingSpeak
Sigfox

Acerca de este proyecto

Nota:este tutorial podría estar desactualizado, vaya aquí para una versión más actual.

Este proyecto muestra cómo convertir un MKR FOX 1200 y un montón de sensores I2C en una estación meteorológica simple que funciona con baterías.

Usaremos:

  • el sensor de temperatura integrado (baja precisión, ± 1 ° C)
  • Sensor HTU21D I2C para obtener el nivel de humedad
  • Bosch BMP280 para obtener la presión barométrica y la temperatura precisa
  • Sensor de luz TSL2561 para obtener luminosidad

Configuración de hardware

Las conexiones de hardware para este proyecto son bastante simples:todos los sensores usan interfaces I2C y funcionan a 3.3V.

Necesitan cuatro cables del MKR FOX 1200:GND, 3.3V, SDA en el pin 11 y SCL en el pin 12. Las mismas cuatro conexiones se pueden compartir en paralelo con los tres sensores porque cada uno de ellos tiene una dirección I2C específica y, por lo tanto, el las bibliotecas y funciones relevantes se encargarán de discriminar cada una de ellas.

Todo el proyecto puede ser alimentado por dos baterías alcalinas AA o AAA conectadas en serie para generar 3V y cableadas al bloque de terminales de conexión por tornillo en la placa.

Mensajes de Sigfox

Dado que la red Sigfox puede enviar un máximo de 140 mensajes por día, optimizaremos las lecturas y enviaremos datos en formato binario compacto.

El empaquetado de datos es importante porque el tamaño máximo de un mensaje que puede enviar es de 12 bytes. Un flotador ocupa 4 bytes, por lo que necesitaremos empaquetar nuestras lecturas en una representación más pequeña.

El formato flotante es muy amplio (puede representar números tan grandes como 3.402823e + 38 (!)) Y no necesitamos todo el espacio de datos; luego podemos decidir los límites seguros (basados ​​en dónde vamos a implementar la estación) y restaurar la representación original en el backend.

Configuración de los servicios en la nube

Usaremos dos servicios en la nube:

  • Backend de Sigfox
  • Habla de las cosas

Registre su tablero en el backend de Sigfox usando el PAC y el ID proporcionado por el ejemplo de FirstConfiguration (se puede omitir si ya lo hizo para un proyecto anterior).

Ambos deben configurarse para comunicarse entre sí e interpretar los datos en el formato correcto. Regístrese en ambos y cree un par de canales en Thingspeak. La configuración se informa en la imagen a continuación.

El primer canal que configuramos será el que reciba los datos brutos ( readChannelID ), mientras que el segundo recopilará los datos reescalados ( writeChannelID ).

Es hora de cargar el boceto usando Arduino Create Editor. El boceto predeterminado le permite probar ampliamente toda la infraestructura antes de implementarla en el campo.

Recuerde declarar:

  oneshot =false  

cuando esté seguro de que toda la configuración de la infraestructura de backend es correcta. El boceto espera el puerto serie, por lo que no lo lanzaremos ahora. En su lugar, abra el backend de SigFox y configure una devolución de llamada:

Haga clic en TIPO DE DISPOSITIVO -> LISTA -> haga clic derecho en su tablero y haga clic en Editar.

Haz clic en CALLBACKS . en el menú del lado izquierdo:

Verá una ventana como esta:

Haga clic en Nuevo . botón en la parte superior derecha de la ventana:

Seleccione Devolución de llamada personalizada:

Las configuraciones relevantes se informan a continuación. Asegúrese de que la devolución de llamada esté configurada como:

  • TIPO: DATA / UPLINK
  • Canal: URL
  • Método Http: GET

Como Carga útil personalizada, configure:

  status ::uint:8 temp1 ::int:16:little-endian temp2 ::int:16:little-endian press ::uint:16:little-endian hum ::uint:16:little -endian light ::uint:16:little-endian lastMsg ::uint:8  

Esto representa la estructura que empaquetamos en el boceto. Estamos asignando una variable a cada campo, por lo que podemos hacer referencia a ellos en la devolución de llamada HTTP.

Como patrón de URL, configure:

  https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData # light} &field6 ={customData # status} &field7 ={customData # lastMsg}  

Una vez configuradas, sus ventanas deberían ser así:

Recuerde cambiar la clave API api_key con el proporcionado por Thingspeak como Write API Key para Channel1 .

Guardar y Salir. Ahora podemos abrir el puerto serie y observar el primer mensaje que se envía. ¡Hurra!

De Raw a Gráficos

La configuración que configuramos enrutará nuestros datos al backend de Thingspeak, pero todavía están en formato sin procesar; para reconvertirlos, usemos la herramienta de análisis de Thingspeak con este fragmento

 % TODO - Reemplaza [] con el ID del canal para leer datos de:readChannelID =[]; % TODO - Ingrese la clave de API de lectura entre '' a continuación:readAPIKey ='T6UK7XO6A4H2AGT7'; % TODO - Reemplace [] con el ID del canal para escribir datos en:writeChannelID =[]; % TODO:ingrese la clave de API de escritura entre '' a continuación:writeAPIKey ='XU4TGY261P6B5USN'; %% Read Data %% data =thingSpeakRead (readChannelID, 'ReadKey', readAPIKey, 'OutputFormat', 'table'); datos analizados =datos; %% Analizar datos %% INT16_t_MAX =32767; UINT16_t_MAX =65536; datos analizados ('Temperatura1') =datos. ('Temperatura1') / INT16_t_MAX * 120; datos analizados ('Temperatura2') =datos. ('Temperatura2') / INT16_t_MAX * 120; datos analizados ('Presión') =datos. ('Presión') / UINT16_t_MAX * 200000; datos analizados. ('Luz') =datos. ('Luz') / UINT16_t_MAX * 100000; datos analizados ('Humedad') =datos. ('Humedad') / UINT16_t_MAX * 110; %% Write Data %% thingSpeakWrite (writeChannelID, modifiedData, 'WriteKey', writeAPIKey); %% Programar acción:Reaccionar -> cada 10 minutos  

Reemplazando los ID de canal con el nuestro, finalmente podemos volver a convertir los datos sin procesar en valores reales. Recuerde programar la acción de análisis cada 10 minutos usando React ¡o nunca se ejecutará!

Finalmente tenemos nuestros maravillosos gráficos.

Código

WeatherMonitor

Proceso de manufactura

  1. Estación meteorológica Raspberry Pi
  2. Monitor del tiempo
  3. Hacer Monitor Ambilight usando Arduino
  4. Monitoreo de CO2 con sensor K30
  5. Monitor de frecuencia cardíaca con IoT
  6. Arduino + ESP Weather Box
  7. ¿Qué tan alto eres?
  8. Sensor capacitivo de huellas dactilares con Arduino o ESP8266
  9. Torre de sensores de nubes Arduino
  10. Monitor de calidad del aire para bricolaje con sensor Sharp GP2Y1010AU0F
  11. Estación meteorológica local