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

El sistema de jardinería inteligente hydroMazing

Componentes y suministros

Raspberry Pi 3 Modelo B
OPCIONAL - Internet de las cosas - mensajería de texto
× 1
Arduino Nano R3
× 2
Arduino Nano Expansion Shield
× 2
Sensor de temperatura / humedad DHT21 / 22
puede necesitar una resistencia de 10k entre Vcc / Data
× 1
Módulo de fotocélula
× 1
nRF24L01 Módulo transceptor de radio inalámbrico de 2,4 Ghz
con o sin antena SMA
× 1
Sensor de temperatura de Dallas (para la temperatura de la solución nutritiva)
probablemente necesite un conector
× 1
Módulos de transmisor y receptor de RF de 433 MHz
× 1
set 3-5 paquete de enchufes inalámbricos controlados incluye control remoto
× 1
DFRobot LCD con escudo de botones para Arduino Uno
× 1

Herramientas y máquinas necesarias

Soldador (genérico)

Aplicaciones y servicios en línea

Arduino IDE
Microsoft Visual Studio 2015

Acerca de este proyecto



No era mi intención hacer un producto. Simplemente quería resolver un problema común. Quiero cultivar plantas en interiores o en condiciones controladas. ¿Cómo puedo crear un entorno óptimo para que las plantas prosperen utilizando productos electrónicos y artículos para el hogar comúnmente disponibles? ¿Qué es mejor, suelo o hidroponía?

hydroMazing es una herramienta para facilitar el suministro de condiciones óptimas de crecimiento para que las plantas crezcan con éxito en el hogar. Un sistema de recopilación de datos independiente y una interfaz web ubicados en su propio dispositivo, no en una nube remota.

~

Aprender a cultivar plantas puede resultar complicado y costoso. Las plantas son resistentes, pero un solo descuido inocente puede arruinar su cultivo. ¡Puede evitar estos costosos errores dejando que un sistema de jardinería inteligente haga el trabajo duro por usted!

Fue hace dos años cuando decidí intentar usar un microcontrolador Arduino Uno para reemplazar mi termostato individual de salida programable de calefacción y enfriamiento Lux WIN100. Estas salidas controlan un aparato, como un pequeño calentador o, en este caso, un ventilador de ventilación. Un dispositivo que está enchufado a la toma de corriente enciende y apaga el electrodoméstico mediante la configuración de temperatura que usted programa manualmente en cada dispositivo. Esta técnica para controlar los ventiladores es eficaz, pero utiliza varios cables de extensión. Los controladores de salida de temperatura utilizan relés anticuados para cambiar el estado del dispositivo. Mi intento inicial fue piratear una caja de extensión insertando mis propios relés en ella y conectándolos al Arduino Uno. No pasó mucho tiempo antes de que hubiera un desorden de cables con muchas tuercas de conexión y me quedé sintiéndome desanimado.

Automatización del hogar

Una idea de la automatización del hogar que me dio vueltas en la cabeza durante un tiempo fue usar tomas de corriente de CA controladas de forma inalámbrica que usan un control remoto de mano. Hackear el control remoto para enviar la señal para el botón de ENCENDIDO o APAGADO seleccionado por un pin correspondiente en el Arduino Uno no debería ser demasiado difícil, ¿verdad? La inquietante preocupación que me impedía probar esta idea era el temor de que la señal no fuera confiable y el Uno pudiera "pensar" que había encendido un dispositivo cuando en realidad fallaba. Finalmente, pude convencerme de que la mejor manera de averiguarlo es simplemente intentar ver qué pasa. Desafortunadamente, los resultados de esta prueba no fueron mucho mejores que el intento de relevo.

Una búsqueda en la web de casi cualquier sensor o dispositivo electrónico con “Arduino” resultará en una serie de productos que se venderán por unos pocos dólares. En este caso, encontré los pares de transmisor y receptor de 315Mhz y 433Mhz que están dentro del rango de frecuencia de la mayoría de los puntos de venta controlados de forma inalámbrica comerciales. La mayor ventaja de usar la familia de microcontroladores Arduino para este tipo de proyectos es que puede encontrar software de código abierto para comenzar. Otra búsqueda en la web de una “biblioteca Arduino” y en este caso, transmisor y receptor o par tx / rx. Ahora, se estaba volviendo emocionante para mí. Podría leer los códigos que salen del control remoto, grabarlos y luego programar el Arduino para controlar las salidas correspondientes. Diseñar el software para operar en Arduino Uno se convirtió en el desafío. Los ejemplos que vienen con el software Arduino y los ejemplos incluidos con las bibliotecas son un excelente comienzo para un proyecto. En mi experiencia, una vez que comienzas a combinar y hacer modificaciones a los ejemplos, no pasa mucho tiempo antes de que choques contra una pared. No creo que sea un buen programador, creo que soy un perfeccionista obstinado.

En uno de mis libros favoritos, Zen and the Art of Motorcycle Maintenance, el autor, Robert Pirsig, habla de la trampa del gumption. Esencialmente, la trampa del gumption es un evento o mentalidad que puede hacer que una persona pierda el entusiasmo y se desanime de comenzar o continuar un proyecto. Saber cuándo superar la incomodidad y la frustración y cuándo tomar un descanso y alejarse del proyecto son desafíos personales. Ha habido ocasiones en las que si me hubiera tomado un descanso, es posible que no hubiera encontrado una solución excelente a un conflicto en mi código fuente. Por el contrario, ha habido ocasiones en las que me he alejado durante un mes y he trabajado en un tipo de proyecto completamente diferente sintiéndome revitalizado. Quizás, si el proyecto es lo suficientemente importante, nos veremos obligados a volver a trabajar en él. La trampa es convencernos a nosotros mismos de que no vale la pena volver al proyecto, incluso cuando podría ser asombroso. Tal vez realmente no valga la pena volver a completarlo y aquí es donde terminan muchos proyectos.

Programación

El software que he desarrollado ha sido programado en el microcontrolador y presenta un conjunto de parámetros básicos para sincronizar, administrar, transmitir y recibir objetos “sensores” y objetos “aparatos”. El control de los electrodomésticos se logra a través de un conjunto de algoritmos que he denominado "TheDecider", que toma decisiones basadas en lecturas de sensores y umbrales preprogramados y solicita al microcontrolador que encienda o apague los tomacorrientes controlados de forma inalámbrica. Quería que el sistema se modificara fácilmente para que funcionara con otros entornos, incluidos la acuaponía, el cultivo de hongos y cualquier cosa en la que el control se logre mediante la lectura de sensores y dispositivos operativos basados ​​en reglas programadas. Las salidas controladas de forma inalámbrica demostraron ser un método confiable para controlar los ventiladores usando el Arduino para enviar las señales dependiendo de las lecturas del sensor de temperatura. No pasó mucho tiempo para que el código fuente se convirtiera en una bestia. La familia de microcontroladores Arduino está limitada en la cantidad de instrucciones que puede ejecutar y alcanzar el límite de tamaño del programa no lleva mucho tiempo cuando desea controlar más de unos pocos LED parpadeantes. Descubrí que la limitación de tamaño me ha obligado a escribir un código mejor y más eficiente de lo que hice inicialmente. Incluso con el manejo creativo de variables y bibliotecas personalizadas, eventualmente, existe la necesidad de otro microcontrolador o pasar a uno más grande.

Monitoreo inalámbrico sin Internet

Hay varias formas en que los microcontroladores pueden comunicarse entre sí. El método inalámbrico menos costoso que pude encontrar es el transceptor de radio inalámbrico nRF24L01. El módulo es una variedad liviana de bluetooth de baja potencia que le da a hydroMazing la capacidad de comunicarse con una unidad de monitoreo.

Decidí agregar otro Arduino Uno con un protector de pantalla de cristal líquido para poder mostrar lo que estaban leyendo los sensores, el estado de los dispositivos y las alertas con notificaciones.

Hice mi propia plataforma abierta y adaptable que se puede adaptar a una amplia variedad de necesidades y condiciones de jardinería; sin embargo, también es un sistema inalámbrico autónomo. La arquitectura abierta del sistema permite integrar fácilmente la conectividad a Internet y los servicios web.

Monitoreo de Internet

Ingrese la Raspberry Pi conectada con un módulo nRF24L01.

Pude modificar gran parte de mi código fuente de Arduino para escuchar las transmisiones entrantes y luego escribir esos datos en algunos archivos. Primero, un archivo de registro que captura todas las comunicaciones entre el Pi y el HydroMazing Monitor. A continuación, hago que el programa escriba el estado actual de todos los objetos del sensor y un archivo para todos los objetos del dispositivo. Cuando ocurre una alerta, el programa creará un archivo que contiene esa alerta. Luego agregué un script PHP para leer los objetos de datos de sus respectivos archivos y mostrarlos en vivo en el servidor Apache de Pi.

A continuación, escribí una secuencia de comandos de Python para leer el directorio del archivo de alertas y, si existe, leer el archivo, analizar la información pertinente y luego enviar un correo electrónico o un mensaje de texto SMS al usuario. Además de enviar un correo electrónico o una alerta de texto, la secuencia de comandos de Python mueve el archivo de alerta a la posición para que la secuencia de comandos PHP lo lea y muestre. Usando los archivos de registro que se crean, puedo importar los datos a una base de datos. Una vez que los datos de HydroMazing se registran en una base de datos que reside en la Raspberry Pi, podemos comenzar a realizar análisis y generar algunos informes. El monitoreo y control del sistema lo hacemos principalmente por nosotros, pero cuando el hydroMazing necesita alertarnos sobre un problema, ahora puede hacerlo usando la Raspberry Pi.

¡El asistente de jardín hydroMazing que te guía a través de todo tu cultivo! El sistema proporciona comentarios y sugerencias sobre cómo gestionar los problemas que identifica hydroMazing. http://www.hydroMazing.com

Monitoreo de la solución de nutrientes

Se debe monitorear el nivel de solución de nutrientes del sistema de contenedores hidropónicos.

A medida que el nivel de la solución de nutrientes disminuye, debe reponerse con agua dulce; de ​​lo contrario, la solución de nutrientes se vuelve más concentrada y algunas plantas no responderán bien. El controlador de nutrientes hydroMazing puede activar una bomba que agrega agua dulce para devolver la concentración al nivel que tenía cuando se inició, lo que a menudo se conoce como "relleno". El controlador de nutrientes hydroMazing también monitoreará su pH y CE, activando bombas para administrar la solución y notificándole cuando necesite hacer cambios.

¿Quieres más?

  • Crisis existencial:simulador de juegos de rol de Arduino
  • ¿Por qué hacer bricolaje cuando se puede comprar?
  • ¿Qué es un jardín "inteligente"?
  • Comenzando un jardín interior inteligente
  • Profundizar en la jardinería interior
  • Jardinería interior:¿Qué puede salir mal?
  • Manejo de sistemas de solución de nutrientes
  • ¿Por qué Arduino cuando puedes Pi?

Código

  • Configuración de objetos
Configuración de objetos C / C ++
El archivo CoreSettings.h contiene muchas configuraciones críticas, incluida la red nRF, los códigos de interruptor remoto de salida de CA, las definiciones de objetos de temporizador, dispositivo y sensor que utiliza el sistema hydroMazing.
 / ** @file CoreSettings.h * Copyright ( C) 2015 Cory J. Potter - Todos los derechos reservados * Puede usar, distribuir y modificar este código bajo los * términos de LICENSE.txt * ¡NO ESTÁ DESTINADO PARA USO COMERCIAL! * Debería haber recibido una copia de LICENSE.txt con * Este archivo. De lo contrario, escriba a: * / # ifndef __CORESETTINGS_H __ # define __CORESETTINGS_H __ # ifdef ARDUINO // RX_PIN 3 en uso por la sonda de temperatura de Dallas # define RX_PIN 103 # define TONE_PIN 104 # define TX_PIN 8 // ¿Qué es nuestra dirección 1 o 2uint8_t node_address =1; uint8_t totalNodes =3; unsigned long lastRxTimeStamp =0; const uint64_t nRFbaseAddress =1034834473100; uint8_t nRFaddress =0; // 00-255 // NOTA:el "LL" al final de la constante es el tipo "LongLong" // 1034834473185, 1034834473170 // const uint64_t tx_pipes [5] ={0xF0F0F0F0E1LL, 0xF0F0F0F0D2LF, 0xF0F0F0B0; // const uint64_t rx_pipes [5] ={0xF0F0F0F22ALL, 0xF0F0F0F299LL, 0xF0F0F0F308LL, 0xF0F0F0F377LL, 0xF0F0F0F3E6LL}; tx_pipes // uint64_t [3] ={0xF0F0F0F0E8LL, 0xF0F0F0F0E7LL, 0xF0F0F0F0E6LL}; rx_pipes // uint64_t [3] ={0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL}; tx_pipes uint64_t [3] ={0xF0F0F0F0F8LL, 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL}; rx_pipes uint64_t [3] ={0xF0F0F0F0F1LL, 0xF0F0F0F0F2LL, 0xF0F0F0F0F3LL}; / ****************** *********************************************** **** /// Interruptores de salida controlados de forma inalámbrica / *********************************** ********************************** /// ETEKCITY # 1401 // unsigned long mySwitchOn [] ={24 , 1398067,1398211,1398531}; // unsigned long mySwitchOff [] ={24, 1398076,1398220,1398540}; // ETEKCITY # 1405 // unsigned l ong mySwitchOn [] ={24,1135923,1136067,1136387}; // unsigned long mySwitchOff [] ={24,1135932,1136076,1136396}; // ETEKCITY # 1406 // unsigned long mySwitchOn [] ={24,4281651 , 4281795,4282115}; // unsigned long mySwitchOff [] ={24,4281660,4281804,4282124}; // ETEKCITY # 1407 // unsigned long mySwitchOn [] ={24,87347,87491,87811}; // unsigned long mySwitchOff [] ={24,87356,87500,87820}; // ETEKCITY # 1411 // unsigned long mySwitchOn [] ={24,283955,284099,284419}; // unsigned long mySwitchOff [] ={24,283964 , 284108,284428}; // ETEKCITY # 1415 // unsigned long mySwitchOn [] ={24,21811,21955,22275,23811,29955}; // unsigned long mySwitchOff [] ={24,21820,21964,22284, 23820,29964}; // ETEKCITY # 1419 // unsigned long mySwitchOn [] ={24,333107,333251,333571,335107,341251}; // unsigned long mySwitchOff [] ={24,333116,333260,333580,335116 , 341260}; // ETEKCITY # 0319uint8_t totalSwitches =5; unsigned long mySwitchOn [] ={24,333107,333251,333571,335107,341251}; unsigned long mySwitchOff [] ={24,333116,3 33260,333580,335116,341260}; / ************************************** ******************************* // * Comunicaciones I2C * // ********** *********************************************** ************ / const int MY_ADDRESS =42; const int SEND_TO_ADDRESS =22; / ************************ ********************************************** // * Temporizadores * // ******************************************* *************************** /// Timer Object ={(tipo), (intervalo en milisegundos), listo, activado, marca de tiempo, (puntero al siguiente objeto) Timer Timer_txData ={TIMER_TX_DATA, 30000UL, true, false, 0, NULL}; // Timer Timer_Lcd ={TIMER_LCD, 12000UL, true, false, 0, &Timer_Log}; // Timer Timer_Lcd_Cycle ={Y TIMER_LCD_CYcle 6000UL, true, false, 0, &Timer_Lcd}; // Temporizador Timer_Lcd_Scroller ={TIMER_LCD_SCROLLER, 500UL, true, false, 0, &Timer_Lcd_Cycle}; // Temporizador Timer_Ping ={TIMER_SENSOR_READINGS, 10UL, true, false, 0, &Timer; / Timer Timer_Lite ={TIMER_LITE, 180000UL, true, false, 0, &Timer_Ping}; Temporizador Timer_Save_Settings ={TIMER_SAVE_SETTINGS, 3600000UL, true, false, 0, &Timer_txData}; // Temporizador Timer_Sensor_Read ={TIMER_SENSOR_READINGS, 7000UL, verdadero, falso, 0, &Timer_Save_Settings}; // Timer_Save_Settings, TIMER_Alerts. , &Timer_Sensor_Read}; Temporizador Timer_rxData ={TIMER_RX_DATA, 6000UL, verdadero, falso, 0, &Timer_Save_Settings}; / *************************** ****************************************** /// Inicializar dispositivos / *********************************************** ********************** / Appliance Appliance_Light_1 ={101, 1, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, NULL}; // Appliance Appliance_Light_2 ={ 102, 0, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, &Appliance_Light_1}; // Appliance Appliance_Light_3 ={103, 0, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, &Appliance_Light_2}; Appliance Appliance_IntakeFan ={104, 1, DEFAULT_TIME, verdadero, falso, APAGADO, &Appliance_Light_1}; Appliance Appliance_ExhaustFan ={1 03, 1, APPLIANCE_EXHAUST_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_IntakeFan}; Appliance Appliance_Humidifier ={102, 0, APPLIANCE_HUMIDIFIER, DEFAULT_TIME, true, false, OFF, &Appliance_ExhaustFan}; Appliance, DE_HUMIDIFICADOR, DEFAULT_TIME, verdadero, falso, APAGADO y Appliance_ExhaustFan}; Aparato, APAGADOR_HUMIDIFICADOR, DEFAULT_TIME true, false, OFF, &Appliance_Humidifier}; // Appliance Appliance_AirPump ={PIN4, 2, APPLIANCE_PUMP, DEFAULT_TIME, true, false, OFF, &Appliance_Heater}; Appliance Appliance_FeedPump ={105, 1, APPLIANCE_PUMP, DEFAULT_TIME, true, &Appliance_Heater}; uint8_t totalAppliances =6; / *************************************** ******************************* /// Inicializar sensores / ************* *********************************************** ********* /// Sensor:={pin; dirección_nodo; SENSOR_TYPE; freq; minVal; maxVal; Marca de tiempo UL; valor flotante; struct Sensor * siguiente; } // NULL para el primero:no podemos apuntar a un objeto que aún no se ha creado.Sensor Sensor_Photocell ={PIN_A0, 1, SENSOR_PHOTO, 100, 50, 100, 0, 25, NULL}; Sensor Sensor_Temp ={PIN7, 1, SENSOR_TEMPF, 50, 70, 80, 0, 75 y Sensor_Photocell}; Sensor Sensor_Humidity ={PIN7, 1, SENSOR_HUMIDITY, 50, 40, 70, 0, 50, &Sensor_Temp}; Sensor Sensor_WaterTemp ={PIN3_INT1, 1, SENSOR_WATER_TEMPF, 100, 50, 70, 0, 65, &Sensor_Humidity}; Sensor Sensor_Flow ={PIN2_INT0, 2, SENSOR_FLOW, 100, 50, 50, 0, 75, &Sensor_WaterTemp}; // Sensor Sensor_Microphone ={PIN_A1, 0, SENSOR_SOUND, 60, 10, 100, 0, 75, &Sensor_Flow}; // Sensor Sensor_Ultrasonic ={PIN_A2, 0, SENSOR_ULTRASONIC, 60, 10, 100, 0, 75, &Sensor_Microphone}; // Sensor Sensor_PIR ={PIN_A2, 0, SENSOR_PHOTO, 60, 10, 100, 0, 75, &Sensor_Microphone}; // Sensor Sensor_Moisture ={PIN_A2, 0, SENSOR_MOISTURE, 60, 10, 100, 0, 75, &Sensor_Flow}; Sensor Sensor_Float ={PIN_A2, 1, SENSOR_FLOAT, 100, 0, 1, 0, 1, &Sensor_Flow}; Sensor Sensor_Voltage ={PIN1_ TX, 1, SENSOR_VOLTAGE, 100, 0, 100, 0, 50, &Sensor_Float}; uint8_t totalSensors =7; / ************************* ********************************************* / 

Esquemas

Ventiladores de admisión y escape, luces de cultivo, calentadores, deshumidificadores y bombas controladas automáticamente a través de salidas de CA inalámbrica tomacorrientes de CA comunes controlados de forma inalámbrica que se utilizan en este proyecto. Ensamblado y probando Prototipo de interfaz web de hydroMazing Prototipo de interfaz web hydroMazing para notificaciones de alerta.

Proceso de manufactura

  1. Monitoreo de temperatura en Raspberry Pi
  2. Sistema de control de dispositivo basado en temperatura usando LM35
  3. Sensores analógicos en Raspberry Pi con un MCP3008
  4. La brecha de habilidades para el hogar inteligente
  5. Todo puede ser inteligente:Rasgos clave de las ciudades inteligentes más nuevas - Parte 1
  6. Hacer que la industria de las bebidas sea más inteligente con el sistema de monitoreo de nivel impulsado por IoT
  7. 5 W de la pantalla Braille portátil
  8. Comprender el funcionamiento del sistema de frenos antibloqueo (ABS)
  9. Comprender el funcionamiento del sistema de encendido electrónico
  10. Comprender el funcionamiento del sistema de encendido por magneto
  11. ¿Qué es el Sistema Americano de Manufactura?