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

Detector de fugas de agua y control de válvulas

Componentes y suministros

Caja de aluminio
× 1
Arduino UNO
× 1
Arduino Ethernet Shield 2
× 1
Fuente de alimentación
× 1
Carcasa de aire acondicionado
× 1
Kit de LED con resistencias
× 1
Relés (1 dual 5v y 1 dual 12v)
× 1
Válvula motorizada
× 1
conectores JST
× 1
Sensor de agua
× 1

Acerca de este proyecto

Descripción general

Durante una charla con un amigo, me di cuenta de que las fugas de agua son un gran problema. Mi amigo tuvo que reemplazar todos los muebles en su sótano, solo porque una tubería se rompió mientras estaba en el trabajo.

Este proyecto es similar al que publiqué para el concurso Microsoft IoT pero este está basado en Arduino, no en Raspberry. Mi punto de vista es el siguiente:en lugar de centralizar muchas responsabilidades en una gran plataforma (como RasPi, DragonBoard o una PC), prefiero delegar responsabilidades simples a dispositivos simples (como Arduino y otros). Harán lo que se supone que deben hacer y, como opción, se conectarán a través de la red a otros dispositivos (simples o complejos) para ofrecer servicios avanzados. En caso de falla de la red, aún continúan haciendo lo que se supone que deben hacer.

Básicamente, monitorea las fugas de agua y desencadena acciones como cerrar la entrada principal de agua, dependiendo de la falla detectada.

También publica mensajes a un corredor de MQTT. La idea es que el dispositivo debe administrar el agua localmente, pero también está involucrado, junto con otros dispositivos, en un sistema más grande que administra la automatización del hogar.

Así es como se ve:

La entrada principal de agua se encuentra en la parte inferior. El primer dispositivo lo instalan los servicios de suministro de agua de la ciudad para controlar la presión del agua. Instalé la pieza en la parte superior de la imagen. La válvula motorizada (en azul) se instala en paralelo con una válvula manual. En este dibujo, la válvula manual se abre y, por lo tanto, se deriva la válvula motorizada. Es útil en caso de corte de energía. En modo normal, la válvula manual debe estar apagada.

Hay un motor de CC (12v) dentro de la válvula y gira en sentido horario o antihorario dependiendo de la polaridad. Hay un bucle de retroalimentación que indica si la válvula está efectivamente encendida o apagada. Para encenderlo, simplemente aplique un voltaje positivo a la conexión superior izquierda.

Aquí está el controlador:

De izquierda a derecha:el enchufe de CA, un botón de reinicio, algunos LED para mostrar estados, conectores (a los sensores, al motor), una interfaz Ethernet y USB.

  • LED1 :Rojo fijo =agua detectada localmente, Rojo intermitente =agua detectada de forma remota, Apagado =sin fugas de agua
  • LED 2 :Amarillo fijo =no se puede controlar la válvula motorizada, Amarillo intermitente =no se puede comunicar con el agente de MQTT, Apagado =Todo bien
  • LED3 :Azul fijo =todo bien, Azul parpadeante =la válvula motorizada está cerrada Apagado =el sistema no funciona o no recibe alimentación

Aquí hay un sensor, ubicado donde creo que podría gotear agua:

Aquí está lo que hay debajo del capó:

¡ADVERTENCIA!

La fuente de alimentación AC / DC que estoy usando tiene dos salidas:la primera es 12V DC y se usa para alimentar la válvula motorizada (controlada por dos relés que controlan la rotación del motor) y la segunda es EXACTAMENTE 5V DC, para alimentar el Arduino. Es por eso que estoy alimentando directamente en el circuito de 5V, no en el Vin que requiere al menos 6V DC. Una vez que la CA / CC está conectada, NUNCA (dije NUNCA) conecte ni el conector Arduino DC ni el cable USB Arduino. Si aún desea depurar a través de USB, configure un cable casero SIN las líneas eléctricas, conserve solo las líneas de datos. Por cierto, el vínculo entre la carcasa de CA y la fuente de alimentación de CA / CC es de 110 V. ¡No toques, nunca!

Código

  • Detección de fugas de agua y control de válvulas motorizadas
  • biblioteca MQTT
Detección de fugas de agua y control de válvulas motorizadas Arduino
 #include  #include  #include  #include  #include  #include  #include  0) {if (getDebouncedValue (limitSwitchPin, 10, 10) ==LOW) {return 0; } cnt =cnt - 1; Serial.print (F (".")); retraso (1000); }; Serial.println (F ("- tiempo de espera alcanzado mientras se cierra la válvula. Verifique si la válvula está bien encendida y los cables están conectados.")); return -1;} // Esta rutina ayuda a evitar falsas alarmasint getDebouncedValue (int inputPin, int intervalInMs, int requiredConfirmations) {int confirmations =1; int currentValue =digitalRead (inputPin); while (confirmaciones <=requiredConfirmations) {delay (intervalInMs); if (currentValue ==digitalRead (inputPin)) {confirmaciones =confirmaciones + 1; } else {confirmaciones =1; currentValue =digitalRead (inputPin); }} return currentValue;} //// Gestión de LED // void configureLedsWithInitialStates () {clearLeds (); // Reevaluar si (isWaterDetectedRemotely ==1 || isWaterDetected ==1) {digitalWrite (AlarmLedPin, HIGH);}; if (isConnectedToValve ==0 || isConnectedToBroker ==0) {digitalWrite (FaultLedPin, HIGH);}; digitalWrite (SystemLedPin, HIGH);} void configureLedsWithFinalStates () {if (isWaterDetectedRemotely ==1) {digitalWrite (AlarmLedPin, LOW);}; if (isConnectedToBroker ==0) {digitalWrite (FaultLedPin, LOW);}; if (isValveClosed ==1) {digitalWrite (SystemLedPin, LOW);}; } void clearLeds () {digitalWrite (AlarmLedPin, LOW); digitalWrite (FaultLedPin, BAJO); digitalWrite (SystemLedPin, LOW);} void testLeds () {clearLeds (); digitalWrite (AlarmLedPin, ALTO); retraso (500); digitalWrite (FaultLedPin, ALTO); retraso (500); digitalWrite (SystemLedPin, ALTO); retraso (500); clearLeds ();} //// Funciones relacionadas con MQTT //// Manejo de mensajes MQTT entrantes void MQTTBrokerCallback (char * subsignedTopic, byte * payload, unsigned int length) {Serial.print (F ("Nuevo mensaje recibido del agente MQTT. Tema =")); Serial.print (subsignedTopic); String payloadAsString =(char *) payload; String realPayload =payloadAsString.substring (0, longitud); // de lo contrario, obtenemos basura ya que el búfer se comparte entre In y Out Serial.print (F (", content =")); Serial.print (realPayload); if (realPayload.indexOf ("WaterDetected")> 0 &&realPayload.indexOf (mqttClientLocation) ==-1) // la segunda parte de la prueba es necesaria para evitar fallas auto-disparadas {isWaterDetectedRemotely =1; } // for (int i =0; i  

Esquemas


Proceso de manufactura

  1. Válvulas para control y cierre difíciles
  2. Control de actuador y sensor Raspberry Pi
  3. Control de llenado de piscinas
  4. Depuración de doble núcleo Portenta H7
  5. Control remoto universal usando Arduino, 1Sheeld y Android
  6. Animación LCD y juegos
  7. Controlar el aceptador de monedas con Arduino
  8. Centro de control de Arduino
  9. Detector de frecuencia de audio
  10. ¡Arduino con Bluetooth para controlar un LED!
  11. Controla Arduino Rover usando Firmata y el controlador Xbox One