Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Le système de jardin intelligent hydroMazing

Composants et fournitures

Raspberry Pi 3 Modèle B
OPTIONNEL - Internet des objets - messagerie texte
× 1
Arduino Nano R3
× 2
Bouclier d'extension Arduino Nano
× 2
Capteur de température/humidité DHT21/22
peut avoir besoin d'une résistance de 10k entre Vcc/Data
× 1
Module photocellule
× 1
Module émetteur-récepteur radio sans fil nRF24L01 2.4Ghz
avec ou sans antenne SMA
× 1
Capteur de température Dallas (pour la température de la solution nutritive)
a probablement besoin d'un connecteur
× 1
Modules émetteurs et récepteurs RF 433MHz
× 1
ensemble de 3 à 5 prises contrôlées sans fil avec télécommande
× 1
DFRobot LCD avec boutons Shield pour Arduino Uno
× 1

Outils et machines nécessaires

Fer à souder (générique)

Applications et services en ligne

Arduino IDE
Microsoft Visual Studio 2015

À propos de ce projet



Ce n'était pas mon intention de faire un produit. Je voulais simplement résoudre un problème commun. Je veux faire pousser des plantes à l'intérieur ou dans des conditions contrôlées. Comment puis-je créer un environnement optimal pour que les plantes prospèrent en utilisant des appareils électroniques et ménagers courants ? Quelle est la meilleure, terre ou culture hydroponique ?

hydroMazing est un outil qui permet de fournir plus facilement des conditions de croissance optimales pour réussir la croissance des plantes à la maison. Un système de collecte de données indépendant et une interface Web situés sur votre propre appareil et non sur un cloud distant.

~

Apprendre à faire pousser des plantes peut être compliqué et coûteux. Les plantes sont résistantes, mais un seul oubli innocent peut ruiner votre récolte. Vous pouvez éviter ces erreurs coûteuses en laissant un système de jardinage intelligent faire le travail à votre place !

Il y a deux ans, j'ai décidé d'essayer d'utiliser un microcontrôleur Arduino Uno pour remplacer mon thermostat de sortie programmable individuel de chauffage et de refroidissement Lux WIN100. Ces sorties contrôlent un appareil, tel qu'un petit radiateur ou, dans ce cas, un ventilateur d'aération. Un appareil branché sur la prise allume et éteint l'appareil en utilisant des réglages de température que vous programmez manuellement dans chaque appareil. Cette technique de contrôle des ventilateurs est efficace, mais utilise plusieurs rallonges. Les contrôleurs de sortie de température utilisent des relais à l'ancienne pour changer l'état de l'appareil. Ma première tentative était de pirater un boîtier d'extension en y insérant mes propres relais et en les connectant à l'Arduino Uno. Il n'a pas fallu longtemps avant qu'il y ait un désordre de fils avec beaucoup d'écrous de connecteur et je me suis senti découragé.

Domotique

Une idée de domotique qui me trotte dans la tête pendant un moment était d'utiliser des prises secteur contrôlées sans fil qui utilisent une télécommande portative. Pirater la télécommande pour envoyer le signal du bouton ON ou OFF sélectionné par une broche correspondante sur l'Arduino Uno ne devrait pas être trop difficile, non? La préoccupation lancinante qui m'empêchait de tester cette idée était la peur que le signal ne soit pas fiable et que l'Uno puisse « penser » qu'il avait allumé un appareil alors qu'il a réellement échoué. Finalement, j'ai pu me convaincre que la meilleure façon de le savoir est d'essayer de voir ce qui se passe. Malheureusement, les résultats de ce test n'étaient guère meilleurs que la tentative de relais.

Une recherche sur le Web pour presque n'importe quel capteur ou doo-papa électronique avec "Arduino" entraînera la vente d'un certain nombre de produits pour quelques dollars. Dans ce cas, j'ai trouvé les paires d'émetteurs et de récepteurs 315Mhz et 433Mhz qui se trouvent dans la plage de fréquences de la plupart des prises commerciales sans fil. Le plus grand avantage de l'utilisation de la famille de microcontrôleurs Arduino pour ces types de projets est que vous pouvez trouver un logiciel open source pour commencer. Une autre recherche sur le web pour une « bibliothèque Arduino » et dans ce cas, émetteur et récepteur ou paire tx/rx. Maintenant, ça devenait excitant pour moi. Je pouvais lire les codes sortant de la télécommande, les enregistrer, puis programmer l'Arduino pour contrôler les prises correspondantes. Concevoir le logiciel pour fonctionner sur l'Arduino Uno est devenu le défi. Les exemples fournis avec le logiciel Arduino et les exemples inclus avec les bibliothèques sont un excellent début pour un projet. D'après mon expérience, une fois que vous commencez à combiner et à modifier les exemples, cela ne prend pas très longtemps avant de vous heurter à un mur. Je ne pense pas être un bon programmeur, je pense que je suis un perfectionniste têtu.

Dans l'un de mes livres préférés, Zen and the Art of Motorcycle Maintenance, l'auteur, Robert Pirsig, parle du piège du bon sens. Essentiellement, le piège du bon sens est un événement ou un état d'esprit qui peut amener une personne à perdre son enthousiasme et à se décourager de démarrer ou de poursuivre un projet. Savoir quand surmonter l'inconfort et la frustration et quand faire une pause et s'éloigner du projet sont des défis personnels. Il y a eu des moments où si j'avais fait une pause, je n'aurais peut-être pas trouvé une excellente solution à un conflit dans mon code source. Au contraire, il y a eu des moments où je suis parti pendant un mois et j'ai travaillé sur un type de projet complètement différent en me sentant revigoré. Peut-être que si le projet est suffisamment important, nous serons obligés de recommencer à travailler dessus. Le piège est de nous convaincre que le projet ne vaut pas la peine d'y retourner même quand il pourrait être incroyable. Peut-être que cela ne vaut vraiment pas la peine de revenir pour terminer et c'est là que se terminent de nombreux projets.

Programmation

Le logiciel que j'ai développé a été programmé dans le microcontrôleur et comporte un ensemble de paramètres de base pour la synchronisation, la gestion, la transmission et la réception d'objets « capteur » et d'objets « appareil ». Le contrôle des appareils s'effectue grâce à un ensemble d'algorithmes que j'ai nommés « TheDecider », qui prend des décisions en fonction des lectures des capteurs et des seuils préprogrammés et invite le microcontrôleur à activer ou désactiver les sorties contrôlées sans fil. Je voulais que le système soit facilement modifié pour fonctionner avec d'autres environnements, y compris l'aquaponie, la culture de champignons et tout ce dont le contrôle est obtenu en lisant des capteurs et en utilisant des appareils basés sur des règles programmées. Les sorties contrôlées sans fil se sont avérées être une méthode fiable pour contrôler les ventilateurs à l'aide de l'Arduino pour envoyer les signaux en fonction des lectures du capteur de température. Il n'a pas fallu longtemps pour que le code source évolue en une bête. La famille de microcontrôleurs Arduino est limitée dans le nombre d'instructions qu'elle peut exécuter et atteindre la limite de taille du programme ne prend pas très longtemps lorsque vous souhaitez contrôler plus que quelques LED clignotantes. J'ai découvert que la limitation de taille m'a obligé à écrire un code meilleur et plus efficace que je ne le faisais initialement. Même avec une gestion créative des variables et des bibliothèques personnalisées, il est finalement nécessaire d'avoir un autre microcontrôleur ou de passer à un plus grand.

Surveillance sans fil sans Internet

Les microcontrôleurs peuvent communiquer entre eux de plusieurs manières. La méthode sans fil la moins chère que j'ai pu trouver est l'émetteur-récepteur radio sans fil nRF24L01. Le module est une variété de Bluetooth léger et à faible consommation donnant à HydroMazing la possibilité de communiquer avec une unité de surveillance.

J'ai décidé d'ajouter un autre Arduino Uno avec un écran d'affichage à cristaux liquides afin de pouvoir afficher ce que les capteurs lisaient, l'état des appareils et des alertes avec notifications.

J'ai créé ma propre plate-forme ouverte et adaptable qui peut être adaptée à une grande variété de besoins et de conditions de jardinage ; mais aussi un système sans fil autonome. L'architecture ouverte du système facilite l'intégration de la connectivité Internet et des services Web.

Surveillance Internet

Entrez le Raspberry Pi connecté avec un module nRF24L01.

J'ai pu modifier une grande partie de mon code source Arduino pour écouter les transmissions entrantes, puis écrire ces données dans quelques fichiers. Tout d'abord, un fichier journal qui capture toutes les communications entre le Pi et le moniteur hydroMazing. Ensuite, je demande au programme d'écrire l'état actuel de tous les objets capteurs et un fichier pour tous les objets de l'appareil. Lorsqu'une alerte se produit, le programme crée un fichier contenant cette alerte. J'ai ensuite ajouté un script PHP pour lire les objets de données à partir de leurs fichiers respectifs et les afficher en direct sur le serveur Apache du Pi.

Ensuite, j'ai écrit un script Python pour lire le répertoire du fichier d'alertes et s'il existe, lire le fichier, analyser les informations pertinentes, puis envoyer un e-mail ou un SMS à l'utilisateur. En plus d'envoyer une alerte par e-mail ou texte, le script python déplace le fichier d'alerte en position pour que le script PHP puisse le lire et l'afficher. À l'aide des fichiers journaux créés, je suis en mesure d'importer les données dans une base de données. Une fois que les données de l'hydroMazing sont enregistrées dans une base de données résidant sur le Raspberry Pi, nous pouvons commencer à effectuer des analyses et générer des rapports. La surveillance et le contrôle du système sont principalement effectués pour nous, mais lorsque l'hydroMazing doit nous alerter d'un problème, il le peut désormais en utilisant le Raspberry Pi.

L'assistant de jardin hydroMazing qui vous guide tout au long de votre culture ! Le système fournit des commentaires et des conseils sur la façon de gérer les problèmes identifiés par hydroMazing. http://www.hydroMazing.com

Surveillance des solutions nutritives

Le niveau de solution nutritive du système de conteneurs hydroponiques doit être surveillé.

Au fur et à mesure que le niveau de solution nutritive diminue, il faut la reconstituer avec de l'eau douce, sinon la solution nutritive devient plus concentrée et certaines plantes ne réagiront pas bien. Le contrôleur d'éléments nutritifs hydroMazing peut activer une pompe qui ajoute de l'eau douce pour ramener la concentration au niveau où elle était au démarrage, souvent appelée « appoint ». Le contrôleur d'éléments nutritifs hydroMazing surveillera également votre pH et votre EC, activant les pompes pour gérer la solution et vous avertissant lorsque vous devez apporter des modifications.

Vous en voulez plus ?

  • Crise existentielle - Simulateur de jeu de rôle Arduino
  • Pourquoi bricoler quand on peut acheter ?
  • Qu'est-ce qu'un jardin « intelligent » ?
  • Démarrer un jardin intérieur intelligent
  • Aller plus loin dans le jardinage d'intérieur
  • Jardinage d'intérieur :qu'est-ce qui peut mal tourner ?
  • Gestion des systèmes de solutions nutritives
  • Pourquoi Arduino quand on peut Pi ?

Code

  • Paramètres des objets
Paramètres des objetsC/C++
Le fichier CoreSettings.h contient de nombreux paramètres critiques, notamment le réseau nRF, les codes des commutateurs à distance des prises de courant alternatif, les définitions des objets Minuterie, Appareil et Capteur utilisés par le système hydroMazing.
/** @file CoreSettings.h* Copyright ( C) 2015 Cory J. Potter - Tous droits réservés* Vous pouvez utiliser, distribuer et modifier ce code sous les* termes du LICENSE.txt* NON DESTINÉ À UN USAGE COMMERCIAL !* Vous devriez avoir reçu une copie du LICENSE.txt avec * ce fichier. Sinon, veuillez écrire à :*/#ifndef __CORESETTINGS_H__#define __CORESETTINGS_H__#ifdef ARDUINO// RX_PIN 3 utilisé par Dallas Temperature Probe#define RX_PIN 103#define TONE_PIN 104#define TX_PIN . est notre adresse 1 ou 2uint8_t node_address =1;uint8_t totalNodes =3;unsigned long lastRxTimeStamp =0;const uint64_t nRFbaseAddress =1034834473100;uint8_t nRFaddress =0; // 00 - 255// NOTE :le "LL" à la fin de la constante est de type "LongLong"// 1034834473185, 1034834473170// const uint64_t tx_pipes[5] ={ 0xF0F0F0F0E1LL, 0xF0F0F0F0F0D2LL, 0xF0LLF0LL0F0F0 // const uint64_t rx_pipes [5] ={0xF0F0F0F22ALL, 0xF0F0F0F299LL, 0xF0F0F0F308LL, 0xF0F0F0F377LL, 0xF0F0F0F3E6LL}; // tx_pipes de uint64_t [3] ={0xF0F0F0F0E8LL, 0xF0F0F0F0E7LL, 0xF0F0F0F0E6LL}; // rx_pipes de uint64_t [3] ={0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL } ;uint64_t tx_pipes[3] ={ 0xF0F0F0F0F8LL, 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL } ;uint64_t rx_pipes[3] 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL };uint64_t rx_pipes[3]0 0LL 0xF0******0******0F******0 ******************************************************** ****/// Interrupteurs de sortie contrôlés sans fil/****************************************** **********************************/// ETEKCITY #1401// non signé long mySwitchOn[] ={ 24 , 1398067,1398211,1398531 };// non signé long mySwitchOff[] ={ 24, 1398076,1398220,1398540 };// ETEKCITY #1405// non signé l ong mySwitchOn[] ={ 24,1135923,1136067,1136387 };// non signé long mySwitchOff[] ={ 24,1135932,1136076,1136396 };// ETEKCITY #1406// non signé long mySwitchOn[] ={ 24 4281651 ,4281795,4282115 };// non signé long mySwitchOff[] ={ 24,4281660,4281804,4282124 };// ETEKCITY #1407// non signé long mySwitchOn[] ={ 24 87347 87491 87811 };// non signé long mySwitchOff[] ={ 24,87356,87500,87820 };// ETEKCITY #1411// non signé long mySwitchOn[] ={ 24,283955,284099,284419 };// long non signé mySwitchOff[] ={ 24,283964 ,284108,284428 };// ETEKCITY #1415// non signé long mySwitchOn[] ={ 24,21811,21955,22275,23811,29955 };// non signé long mySwitchOff[] ={ 24,21820,21964,22284, 23820,29964 };// ETEKCITY #1419// non signé long mySwitchOn[] ={24,333107,333251,333571,335107,341251};// non signé long mySwitchOff[] ={24,333116,333260,333580,335116 ,341260};// ETEKCITY #0319uint8_t totalSwitches =5;non signé long mySwitchOn[] ={24,333107,333251,333571,335107,341251};non signé long mySwitchOff[] ={24,333116,3 33260,333580,335116,341260} ;/****************************************** ******************************** //* Communications I2C *//********** ******************************************************** ************/const int MY_ADDRESS =42;const int SEND_TO_ADDRESS =22;/************************ ************************************************** // * Minuteurs *//************************************************ *************************** ///Timer Object ={ (type), (intervalle en millis), prêt, déclenché, horodatage, (pointeur vers l'objet suivant)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_CY ={ TIMER_LCD,LCD 6000UL, true, false, 0, &Timer_Lcd };// Timer Timer_Lcd_Scroller ={ TIMER_LCD_SCROLLER, 500UL, true, false, 0, &Timer_Lcd_Cycle };//Timer Timer_Ping ={ TIMER_SENSOR_READING,S, 0UL, false /Timer Timer_Lite ={ TIMER_LITE, 180000UL, true, false, 0, &Timer_Ping };Timer Timer_Save_Settings ={ TIMER_SAVE_SETTINGS, 3600000UL, vrai, faux, 0, &Timer_txData } ;//Timer Timer_Sensor_Read ={ TIMER_SENSOR_READINGS, 7000UL, vrai, faux, 0, &Timer_Save_Settings } ;//Timer Timer ={ TIMER_SENSOR_READINGS, 7000UL, vrai, faux, 0, &Timer_Save_Settings } ;//Timer Timer = RT faux, , &Timer_Sensor_Read };Timer Timer_rxData ={ TIMER_RX_DATA, 6000UL, vrai, faux, 0, &Timer_Save_Settings };/****************************** ******************************************** /// Initialiser les appareils/ ******************************************************** ********************/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, APPLIANCE,_INTAKE_F DEFAULT_TIME, vrai, faux, OFF, &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 Appliance 101, 0, APPLIANCE_HEATTER, { 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, false, OFF, &Appliance_Heater };uint8_t totalAppliances =6;/************************************************ ******************************** /// Initialiser les capteurs/************ ******************************************************** *********///Capteur : = { broche ; adresse_noeud ; SENSOR_TYPE ; fréq; minVal; maxVal; horodatage UL ; valeur flottante ; struct Capteur *suivant; }// NULL pour le premier - Nous ne pouvons pas pointer vers un objet qui n'a pas encore été créé.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, &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_HUMIDITÉ, 60, 10, 100, 0, 75, &Sensor_Flow };Sensor Sensor_Float ={PIN_A2, 1, SENSOR_FLOAT, 100, 0, 1, 0, 1, &Sensor_Flow };Capteur Sensor_Voltage ={PIN1_ TX, 1, SENSOR_VOLTAGE, 100, 0, 100, 0, 50, &Sensor_Float };uint8_t totalSensors =7;/****************************** **************************************************/ 

Schémas

Ventilateurs d'admission et d'extraction, lampes de culture, appareils de chauffage, déshumidificateurs et pompes contrôlés automatiquement via des prises secteur sans fil prises de courant CA contrôlées sans fil utilisées dans ce projet. Assemblé et testé Interface Web prototype hydroMazing Interface Web prototype hydroMazing pour les notifications d'alerte.

Processus de fabrication

  1. Surveillance de la température sur le Raspberry Pi
  2. Système de contrôle d'appareil basé sur la température utilisant LM35
  3. Capteurs analogiques sur le Raspberry Pi utilisant un MCP3008
  4. L'écart de compétences dans la maison intelligente
  5. Tout peut être intelligent :caractéristiques clés des nouvelles villes intelligentes – Partie 1
  6. Comprendre le fonctionnement du système de freinage antiblocage (ABS)
  7. Comprendre le fonctionnement du système d'allumage électronique
  8. Comprendre le fonctionnement du système d'allumage magnéto
  9. Qu'est-ce que le système de fabrication américain ?