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

Mi Río

Componentes y suministros

Arduino MKR1000
× 1
Sensor de nivel de agua
× 1
Sensor de pH
× 1
LED (genérico)
Blanco si es posible
× 1
Resistencia 221 ohm
× 2
Foto resistor
× 1
Cables de puente (genéricos)
× 1

Herramientas y máquinas necesarias

Soldador (genérico)
Sierra para metales

Aplicaciones y servicios en línea

Arduino Web Editor
Sigfox
Wia

Acerca de este proyecto

Descripción general

Un río o un lago pueden ser una gran fuente de diversión y relajación. Pero si el río se ensucia y se contamina, toda la diversión se acaba. Muchas personas dependen del agua del río para alimentar a su ganado y no pueden permitirse darles agua sucia.

Imagínese viviendo justo al lado de un río (si no lo está), no querría despertarse en medio de la noche con su casa inundada por el río. O si tu vecino decide tirar gasolina al río, no querrás que tus animales se enfermen.

MyRiver resuelve todos esos problemas, puede operar en áreas aisladas gracias a Sigfox para que todos tengan acceso al dispositivo. El dispositivo leerá el pH del agua, su nivel de contaminación mediante un método innovador y su nivel de agua. Podrás monitorear el río en vivo en tu teléfono o computadora en cualquier lugar gracias a Wia. De esta manera, puede saber si hay un problema con la transmisión y le permite actuar antes de que sea demasiado tarde. Le notificará si hay un problema con el río de inmediato.

Video

Imagen

Funcionalidad

El dispositivo está basado en el Arduino MKR FOX, está diseñado para uso remoto, el usuario puede colocar el dispositivo en un río o lago y monitorearlo desde cualquier lugar. Gracias al modo de bajo consumo de SAM D, el dispositivo puede funcionar durante un período de tiempo prolongado con baterías 2AA.

El dispositivo toma lecturas cada 30 minutos, luego se va a dormir, el período de sueño se puede restablecer, aunque el tiempo mínimo de sueño debe ser de 20 minutos.

El MKR FOX lee el pH del río usando un sensor de pH, también obtiene su nivel de agua, usando un sensor de nivel de agua, y detecta si está contaminado por sustancias insolubles al encender un LED en un fotorresistor, si la lectura del fotoresistor es bajo, significa que hay una sustancia sólida (aceite, gasolina, mercurio, etc.) en el río. Luego, el dispositivo envía todos los datos a Sigfox, donde se transmite a Wia, se procesa y se visualiza. Se notifica al usuario sobre el estado del río. A continuación se muestra una imagen de la descripción general de la funcionalidad.

El búfer se enviará a Sigfox codificado como HEX, Sigfox transmitirá los datos a Wia, los datos luego pasarán a través de un flujo, los datos se convertirán nuevamente en una cadena y luego en los valores del sensor. Luego se procesarán y se notificará al usuario si los valores están fuera de los límites.

A continuación se muestra otra imagen que ilustra la descripción general del código del proyecto, que se describe a continuación.

  • Leer sensores leerá los valores del sensor de pH, nivel de agua y fotorresistencia y los almacenará en variables.
  • Buffer de formato fusionará todos los valores en un búfer de 12 bytes que se puede enviar a Sigfox.
  • Analizar datos analizará el búfer en Sigfox.

El MKR FOX solo puede enviar 12 bytes a través de Sigfox, esto significa que todos los valores del sensor deben fusionarse en los 12 bytes, el valor bruto máximo de cada sensor es 1024 (ya que todos son analógicos), por lo que cada sensor representa un tercio del búfer (4 bytes). El Arduino tiene que fusionar los valores y agregar ceros al inicio de cada valor hasta que el valor tenga 4 bytes. La siguiente imagen ilustra este proceso.

El Arduino recibe los valores del sensor como números enteros, luego convierte los números enteros en cadenas y agrega ceros al inicio de cada valor hasta que tenga 4 bytes, por ejemplo, si el valor del fotoresistor es 620, se agregará un cero, 0 620. Pero si el sensor de nivel de agua es igual a 24, se agregan dos ceros, 00 24. El dispositivo luego fusiona los valores en un búfer de 12 bytes y envía los datos a SigFox.

El dispositivo en acción

A continuación se muestran una serie de fotos que muestran la funcionalidad del proyecto; para verlas mejor, consulte el video de arriba.

Beneficios

El usuario en funcionamiento esto proyecto lo hará beneficio en:

  • Monitorear fácilmente el nivel del agua, el pH y el nivel de contaminación de un río desde cualquier lugar y en cualquier momento
  • Recibir una notificación si el río está contaminado con sustancias solubles o insolubles o si se está inundando
  • Facilidad de uso y montaje
  • Funciona en cualquier país cubierto por Sigfox

Construyendo el Proyecto

Paso 1:Aparato requerido

Este proyecto requiere que todos los componentes estén soldados juntos, no hay demasiadas cosas aparte de los sensores. La lista de materiales se indica a continuación.

  • 1, Arduino MKR FOX 1200
  • 1, sensor de pH
  • 1, sensor de nivel de agua
  • 1, fotorresistencia
  • 1, LED blanco
  • 2, resistencias (220Ω)
  • Cables de puente

Paso 2:conexión del circuito

El diagrama de circuito del proyecto puede ser un poco confuso ya que los componentes no están colocados en una placa de prueba, si tiene alguna dificultad con él, intente descargar el archivo Fritzing a continuación y mover los cables en su computadora.

  • Descripción general del circuito

Las imágenes a continuación ilustrarán cómo debería verse el circuito una vez completado.

  • Preparando el MKR ZORRO

Las imágenes a continuación lo guiarán a través de la conexión de la caja de la batería y la antena al MKR FOX. Tenga en cuenta que la caja de la batería debe conectarse después de conectar los sensores. Otros cables y configuraciones se encuentran en Construcción del proyecto / Final.

Paso 3:reconocimiento del código

Hay 3 partes principales del código:

  • Leer sensores
  • Formato de búfer
  • Analizar datos

Estas secciones se explican a continuación.

  • Leer sensores
  struct GetValue // Estructuras creadas para facilitar los bucles {int riverLevel () // obtener el nivel del río {const int val =analogRead (A2); if (proDebug) {Serial.print ("Nivel del río"); Serial.println (val); } return val; } int riverPh () // obtener el ph del río {const int val =(analogRead (A1) / 5 * 3.3); if (proDebug) {Serial.print ("River Ph"); Serial.println (val); } return val; } int riverPol () // obtener el nivel de contaminación del río {const int val =analogRead (A3); if (proDebug) {Serial.print ("Contaminación del río"); Serial.println (val); } return val; }};  

La estructura anterior contiene bucles que leen cada valor de sensor, hay un bucle separado para cada valor.

  • Formatear búfer
  String data (int level, int ph, int pol) // fusiona los valores del sensor en el búfer {int values ​​[3] ={level, ph, pol}; String newValues; for (int i =0; i <3; i ++) // recorrerá todos los valores, agregando 0 al inicio {if (valores [i] <10) {newValues ​​+ ="000"; Serial.println ("Opción 1"); } else if (valores [i] <100) {newValues ​​+ ="00"; Serial.println ("Opción 2"); } else if (valores [i] <1000) {newValues ​​+ ="0"; Serial.println ("Opción 3"); } demás {}; newValues ​​+ =valores [i]; Serial.print ("Ejecutar"); Serial.print (i); Serial.print ("/ 3"); Serial.println (nuevosValores); } return newValues; }  

El bucle de arriba toma los 3 valores del sensor y luego los coloca en una matriz. Luego recorre cada valor, agregando ceros al comienzo de cada valor hasta que el valor tiene un tamaño de 4 bytes, luego agrega cada valor a una cadena que luego se devuelve.

  • Analizar datos
  void parseData (String data) // enviar búfer a SigFox {SigFox.beginPacket (); SigFox.print (datos); int ret =SigFox.endPacket (); }  

Esta sección toma la cadena para analizar y luego envía el valor a Sigfox.

Paso 4:Configuración de la integración de Wia Sigfox

Este paso ilustrará cómo configurar Wia para recibir mensajes de Sigfox, Wia es una plataforma de IoT profesional que le permite al usuario visualizar datos usando widgets en la web o en la aplicación móvil, también le permite al usuario crear un código de bloque llamado un flujo, que permite al usuario procesar los datos. Los datos están representados por un evento.

Para comenzar, asegúrese de tener una cuenta Sigfox y una cuenta Wia. También descargue la aplicación Wia en iOS o Android para que pueda recibir notificaciones. Las imágenes a continuación ilustrarán la conexión de Sigfox y Wia.

  • Establezca el Tipo a Enlace ascendente de datos
  • Establezca el canal a URL
  • No es necesario completar la Configuración de carga útil personalizada
  • Establezca la URL Patrón para "https://api.wia.io/v1/events"
  • Configure el HTTPMethod a POST
  • Cree un encabezado llamado Autorización con el valor Bearer (este valor se editará más adelante)
  • Establecer ContentType a aplicación / json
  • Copie el código de este enlace en el cuerpo del webhook.
  • Por último, haga clic en Aceptar y listo.

Paso 5:Configuración de Wia Flow

Esta sección tardará un poco más en completarse, el flujo convertirá los datos recibidos de HEX a String, luego analizará la cadena en los 3 valores del sensor y luego los convertirá en números enteros, luego convertirá el valor de la contaminación del río y nivel del río a un descriptor Alto u Ok y el valor de ph sin procesar al valor de ph real, luego notificará al usuario si el valor está fuera de los límites.

La siguiente guía ilustra este proceso paso a paso. Se le indicará que inserte ciertos fragmentos de código en las funciones de Wia, estos fragmentos de código se insertan a continuación, simplemente copie y pegue el código en la función. Los datos a incluir en los correos electrónicos también se insertan a continuación, trabaje con ellos como con las funciones.

Funciones de Wia

  • processPayload
  if (input.body) {output.body.name ="value"; output.body.data =toByteArrayStr (input.body.data.sigfoxData);} función toByteArrayStr (sigfoxData) {dejar resultado =Buffer (sigfoxData, 'hex'); return result.toString ('utf8');}  
  • procesoPolución
  if (input.body.data) {let data =input.body.data; if (data =="CONTAMINADO") {output.body.name ="waterLevel"; salida.cuerpo.datos =datos; } else {mientras (1); }}  
  • processPh
  let minVal =6.5; let maxVal =8.5; if (input.body.data) {let data =input.body.data; if (datos> maxVal || datos  
  • processLevel
  if (input.body.data) {let data =input.body.data; if (data =="HIGH") {output.body.name ="waterLevel"; salida.cuerpo.datos =datos; } else {mientras (1); }}  
  • Contaminación del río
  let minVal =200; let maxVal =0; if (input.body.data.sigfoxData) {let data =input.body.data.sigfoxData; let ProcessData =toByteArrayStr (datos); dejar newData =cutString (ProcessingData); output.body.name ="waterPollution"; output.body.data =processData (newData);} función toByteArrayStr (sigfoxData) {dejar resultado =Buffer (sigfoxData, 'hex'); return result.toString ('utf8');} function cutString (data) {let newVal =data [8]; newVal + =datos [9]; newVal + =datos [10]; newVal + =datos [11]; let finalVal =parseInt (newVal); return finalVal;} function processData (data) {if (data  
  • riverPh
  let minVal =300; let maxVal =600; if (input.body.data.sigfoxData) {let data =input.body.data.sigfoxData; let ProcessData =toByteArrayStr (datos); dejar newData =cutString (ProcessingData); let finalVal =(newData / 73.1428571); let valueToSend =finalVal.toFixed (2); output.body.name ="waterPh"; output.body.data =valueToSend;} función toByteArrayStr (sigfoxData) {dejar resultado =Buffer (sigfoxData, 'hex'); return result.toString ('utf8');} function cutString (data) {let newVal =data [4]; newVal + =datos [5]; newVal + =datos [6]; newVal + =datos [7]; let finalVal =parseInt (newVal); return newVal;}  
  • riverLevel
  let minVal =0; let maxVal =200; if (input.body.data.sigfoxData) {let data =input.body.data.sigfoxData; let ProcessData =toByteArrayStr (datos); dejar newData =cutString (ProcessingData); output.body.name ="waterLevel"; output.body.data =processData (newData);} función cutString (data) {let newVal =data [0]; newVal + =datos [1]; newVal + =datos [2]; newVal + =datos [3]; let finalVal =parseInt (newVal); return finalVal;} función toByteArrayStr (sigfoxData) {dejar resultado =Buffer (sigfoxData, 'hex'); return result.toString ('utf8');} function processData (data) {if (data> maxVal) {return "HIGH"; } else {return "OK"; }}  

Correos electrónicos de Wia

  • riverPollutionEmail
  Automatic Messaging SystemDataWarning:el dispositivo myWater $ {trigger.source.device.id} detectó un problema en la corriente. Advertencia:el agua está contaminada por sustancias insolubles.InformationDevice $ {trigger.source.device.id} Raw Datos $ {input.body.data}  
  • riverPhEmail
  Automatic Messaging SystemDataWarning:el dispositivo myWater $ {trigger.source.device.id} detectó un problema en la transmisión. Advertencia:el pH del agua no es apropiado. El agua está contaminada. Dispositivo de información $ {trigger.source.device.id} Datos brutos $ {input.body.data}  
  • riverLevelEmail
  Automatic Messaging SystemDataWarning:el dispositivo myWater $ {trigger.source.device.id} detectó un problema en el arroyo. Advertencia:el nivel del agua es demasiado alto, el río puede estar inundado.InformationDevice $ {trigger.source.device .id} Datos brutos $ {input.body.data}  

Configuración de las variables

Cuando los datos son recibidos por Wia, deben procesarse, si los datos están entre un valor mínimo y máximo, el valor es seguro, los límites del sensor de nivel de agua y pH se han establecido, pero el usuario debe configurar manualmente el fotorresistor. límite, se debe realizar una prueba para determinar este valor; los pasos a continuación le indicarán cómo hacerlo.

  void setup () {pinMode (1, SALIDA); Serial.begin (9600); while (! Serial) {}; escritura digital (1, ALTA);} bucle vacío () {constante int val =analogRead (A3); Serial.println (val); retraso (5000);}  

Hay otra variable que el usuario debe configurar, proDebug , si está habilitado, el Arduino requiere conexión a través de USB a una computadora y el Monitor Serial debe estar abierto, el Arduino imprime al Monitor Serial en este modo, es ideal para la resolución de problemas. proDebug por defecto es false para operar en el campo.

Bibliotecas

  • Sigfox - copyright (c) 2016 Arduino LLC Licencia pública general reducida GNU esta biblioteca es de dominio público
  • ArduinoLowPower (c) 2016 Arduino LLC Licencia pública general reducida GNU esta biblioteca es de dominio público

Final

El último paso es conectar su Arduino a una PC / Mac y cargar el boceto, asegúrese de que la caja de la batería esté conectada al Arduino y que el circuito esté bien. Los siguientes pasos lo guiarán a través de la realización de un recinto para el proyecto.

He decidido crear mi recinto con una botella de agua, creo que es una forma excelente y ecológica de adoptar el proyecto. El dispositivo se parece a la imagen de abajo.

Si le gusta la idea del recinto, puede desplazarse por las imágenes a continuación, que ilustran cómo se hizo el recinto, siéntase libre de hacer uno usted mismo.

Lo último que debe hacer es colocar el dispositivo en el río. To do this, go to the river you wish to implement MyRiver on during High Tide , this is essential to ensure that the device is not alerting that the river is flooding when it is actually just the tide.

Place some tape on the top of the water bottle to prevent water from seeping into the bottle and destroying everything.

We went to a local, dirty river to test the project out, all the alarms went off correctly.

When placing the probe in the water, ensure that the water is at the bottom of the water level sensor but is covering the photoresistor entirely. Secure the project to the shore using tape or a hammer and screws, and it should look like this (or better).

Background

Relaxing in your house, looking out the window at the once beautiful and delightful river rushing in front of you. But instead of the beautiful fresh river, you see a green slimy one, you might want to move house in that case.

And if the river decides to flood into your house in the middle of the night while you are sleeping, you will certainly decide to move.

I thought of these problems and how to solve them all in one device, and I came up with MyRiver.

If you are in the city and living beside a river, it will warn you in time if the river decides to ruin your day in any way or if your neighbour is dumping oil in the river. Or if you are on a farm, MyRiver will warn you that the river is dirty before you give the water to your animals, and will give you time to bring the animals in before the river floods.

But just reading the pH of the river was not enough, as insoluble substances like mercury or other metals do not effect the Ph of the water. So we came up with a new method to detect those substances, unique to this project, a photoresistor reading the amount of light from an LED penetrating the water. This way any water impurity can be detected.

Código

MyRiver
The Full Code

Esquemas

schematics_lXO5SiusZO.fzz

Proceso de manufactura

  1. ¿Qué es un sensor de O2?
  2. Sensor de temperatura Raspberry Pi
  3. Sensor de emoción / EEG
  4. Dispositivo de medición de flujo de aire a presión con sensor analógico
  5. Sensor DHT11 con LED y altavoz piezoeléctrico
  6. UnifiedWater v1
  7. Arduclock 3D RGB
  8. Sensor de obstáculos simple con Arduino
  9. Juego de joystick
  10. Encuéntrame
  11. Pequeño vagabundo