Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Das hydroMazing Smart Garden System

Komponenten und Verbrauchsmaterialien

Raspberry Pi 3 Model B
OPTIONAL - Internet der Dinge - Textnachrichten
× 1
Arduino Nano R3
× 2
Arduino Nano Expansion Shield
× 2
DHT21/22 Temperatur-/Feuchtigkeitssensor
benötigt möglicherweise einen 10k-Widerstand zwischen Vcc/Data
× 1
Fotozellenmodul
× 1
nRF24L01 2,4-GHz-Funk-Transceiver-Modul
mit oder ohne SMA-Antenne
× 1
Dallas Temperatursensor (für Nährlösungstemperatur)
braucht wahrscheinlich einen Anschluss
× 1
433 MHz HF-Sender- und -Empfängermodule
× 1
Set 3-5 Pack drahtlos gesteuerte Steckdosen inklusive Fernbedienung
× 1
DFRobot LCD mit Tasten Shield für Arduino Uno
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE
Microsoft Visual Studio 2015

Über dieses Projekt



Es war nicht meine Absicht, ein Produkt herzustellen. Ich wollte einfach ein allgemeines Problem lösen. Ich möchte Pflanzen drinnen oder unter kontrollierten Bedingungen anbauen. Wie kann ich mit handelsüblichen Elektronik- und Haushaltsgegenständen eine optimale Umgebung für das Gedeihen von Pflanzen schaffen? Was ist am besten, Erde oder Hydrokultur?

hydroMazing ist ein Werkzeug, das es einfacher macht, optimale Wachstumsbedingungen für den erfolgreichen Pflanzenanbau zu Hause zu schaffen. Ein unabhängiges Datenerfassungssystem und eine Webschnittstelle, die sich auf Ihrem eigenen Gerät befinden, keine Remote-Cloud.

~

Zu lernen, wie man Pflanzen anbaut, kann kompliziert und kostspielig sein. Pflanzen sind widerstandsfähig, aber nur ein unschuldiges Versehen kann Ihre Ernte ruinieren. Sie können diese kostspieligen Fehler vermeiden, indem Sie ein intelligentes Gartensystem die harte Arbeit für Sie erledigen lassen!

Es war vor zwei Jahren, als ich beschloss, einen Arduino Uno-Mikrocontroller zu verwenden, um meinen individuellen programmierbaren Auslassthermostat Lux WIN100 für Heizung und Kühlung zu ersetzen. Diese Ausgänge steuern ein Gerät, beispielsweise eine kleine Heizung oder in diesem Fall einen Ventilator. Ein an die Steckdose angeschlossenes Gerät schaltet das Gerät ein und aus, indem es Temperatureinstellungen verwendet, die Sie manuell in jedes Gerät programmieren. Diese Technik zur Steuerung der Lüfter ist effektiv, verwendet jedoch mehrere Verlängerungskabel. Die Temperaturausgangsregler verwenden altmodische Relais, um den Zustand des Geräts zu schalten. Mein erster Versuch war, eine Erweiterungsbox zu hacken, indem ich meine eigenen Relais hineinstecke und sie mit dem Arduino Uno verbinde. Es dauerte nicht lange, da gab es ein Durcheinander von Drähten mit vielen Steckermuttern und ich war entmutigt.

Hausautomation

Eine Idee der Hausautomation, die mir eine Weile im Kopf herumschwirrte, bestand darin, drahtlos gesteuerte Steckdosen mit einer Handfernbedienung zu verwenden. Die Fernbedienung zu hacken, um das Signal für die ON- oder OFF-Taste zu senden, die durch einen entsprechenden Pin am Arduino Uno ausgewählt wird, sollte nicht allzu schwierig sein, oder? Die quälende Sorge, die mich davon abhielt, diese Idee zu testen, war die Befürchtung, dass das Signal nicht zuverlässig sein würde und der Uno „denken“ könnte, dass er ein Gerät eingeschaltet hatte, obwohl es tatsächlich ausfiel. Schließlich konnte ich mich selbst davon überzeugen, dass der beste Weg, dies herauszufinden, darin besteht, einfach zu versuchen, zu sehen, was passiert. Leider waren die Ergebnisse dieses Tests nicht viel besser als der Staffelversuch.

Eine Suche im Internet nach fast jedem Sensor oder elektronischen Doo-Dad mit „Arduino“ führt dazu, dass eine Reihe von Produkten für ein paar Dollar verkauft werden. In diesem Fall habe ich die Sender- und Empfängerpaare mit 315 MHz und 433 MHz gefunden, die im Frequenzbereich der meisten kommerziellen drahtlos gesteuerten Steckdosen liegen. Der größte Vorteil bei der Verwendung der Arduino-Mikrocontroller-Familie für diese Art von Projekten besteht darin, dass Sie Open-Source-Software für den Einstieg finden können. Eine weitere Suche im Web nach einer „Arduino-Bibliothek“ und in diesem Fall Sender und Empfänger oder tx/rx-Paar. Jetzt wurde es spannend für mich. Ich konnte die Codes aus der Fernbedienung lesen, aufzeichnen und dann den Arduino so programmieren, dass er die entsprechenden Ausgänge steuert. Das Entwerfen der Software für den Betrieb auf dem Arduino Uno wurde zur Herausforderung. Die mit der Arduino-Software gelieferten Beispiele und die in den Bibliotheken enthaltenen Beispiele sind ein ausgezeichneter Start in ein Projekt. Meiner Erfahrung nach dauert es nicht lange, bis Sie an eine Wand stoßen, sobald Sie mit dem Kombinieren und Ändern der Beispiele beginnen. Ich glaube nicht, dass ich ein guter Programmierer bin, sondern ein sturer Perfektionist.

In einem meiner Lieblingsbücher, Zen and the Art of Motorcycle Maintenance, spricht der Autor Robert Pirsig von der Kaugummifalle. Im Wesentlichen ist die Kaugummifalle ein Ereignis oder eine Denkweise, die dazu führen kann, dass eine Person den Enthusiasmus verliert und entmutigt wird, ein Projekt zu beginnen oder fortzusetzen. Zu wissen, wann man Unbehagen und Frustration überwinden muss und wann man eine Pause einlegen und das Projekt verlassen sollte, sind persönliche Herausforderungen. Es gab Zeiten, in denen ich ohne eine Pause möglicherweise keine hervorragende Lösung für einen Konflikt in meinem Quellcode gefunden hätte. Im Gegenteil, es gab Zeiten, in denen ich einen Monat wegging und an einer ganz anderen Art von Projekt arbeitete und mich neu belebt fühlte. Wenn das Projekt wichtig genug ist, werden wir vielleicht gezwungen sein, wieder daran zu arbeiten. Die Falle besteht darin, uns selbst davon zu überzeugen, dass es sich nicht lohnt, zu dem Projekt zurückzukehren, auch wenn es erstaunlich sein könnte. Vielleicht lohnt es sich wirklich nicht, zur Fertigstellung zurückzukehren und hier enden viele Projekte.

Programmierung

Die von mir entwickelte Software wurde in den Mikrocontroller einprogrammiert und bietet eine Reihe von Basisparametern zum Timing, Verwalten, Senden und Empfangen von „Sensor“-Objekten und „Appliance“-Objekten. Die Steuerung der Geräte wird durch eine Reihe von Algorithmen erreicht, die ich „TheDecider“ genannt habe, die Entscheidungen basierend auf Sensormesswerten und vorprogrammierten Schwellenwerten treffen und den Mikrocontroller auffordern, die drahtlos gesteuerten Steckdosen ein- oder auszuschalten. Ich wollte, dass das System leicht modifiziert werden kann, um mit anderen Umgebungen zusammenzuarbeiten, einschließlich Aquaponik, Pilzzucht und allem, wo die Kontrolle durch das Lesen von Sensoren und das Bedienen von Geräten basierend auf programmierten Regeln erreicht wird. Die drahtlos gesteuerten Ausgänge erwiesen sich als zuverlässige Methode zur Steuerung der Lüfter mit dem Arduino, um die Signale in Abhängigkeit von den Messwerten des Temperatursensors zu senden. Es dauerte nicht lange, bis sich der Quellcode zu einem Biest entwickelt hatte. Die Arduino-Mikrocontroller-Familie ist in der Anzahl der Befehle, die sie ausführen kann, begrenzt, und das Erreichen der Programmgrößenbeschränkung dauert nicht lange, wenn Sie mehr als ein paar blinkende LEDs steuern möchten. Ich habe festgestellt, dass mich die Größenbeschränkung gezwungen hat, besseren und effizienteren Code zu schreiben, als ich es ursprünglich tue. Selbst bei kreativer Handhabung von Variablen und benutzerdefinierten Bibliotheken besteht irgendwann die Notwendigkeit für einen anderen Mikrocontroller oder die Umstellung auf einen größeren.

Drahtlose Überwachung ohne Internet

Es gibt verschiedene Möglichkeiten, wie die Mikrocontroller miteinander kommunizieren können. Die kostengünstigste drahtlose Methode, die ich finden konnte, ist der drahtlose Funk-Transceiver nRF24L01. Das Modul ist eine stromsparende, leichte Bluetooth-Variante, die hydroMazing die Möglichkeit gibt, mit einer Überwachungseinheit zu kommunizieren.

Ich beschloss, ein weiteres Arduino Uno mit einem Flüssigkristalldisplay-Schild hinzuzufügen, damit ich anzeigen kann, was die Sensoren lesen, den Zustand der Geräte und Warnungen mit Benachrichtigungen.

Ich habe meine eigene offene und anpassungsfähige Plattform entwickelt, die an eine Vielzahl von Gartenbedürfnissen und -bedingungen angepasst werden kann. aber auch ein in sich geschlossenes drahtloses System. Die offene Architektur des Systems ermöglicht eine einfache Integration von Internet-Konnektivität und Webdiensten.

Internetüberwachung

Geben Sie den Raspberry Pi ein, der mit einem nRF24L01-Modul verbunden ist.

Ich war in der Lage, einen Großteil meines Arduino-Quellcodes zu ändern, um auf eingehende Übertragungen zu hören und diese Daten dann in einige Dateien zu schreiben. Zuerst eine Protokolldatei, die die gesamte Kommunikation zwischen dem Pi und dem hydroMazing Monitor erfasst. Als nächstes lasse ich das Programm den aktuellen Zustand aller Sensorobjekte und eine Datei für alle Geräteobjekte ausschreiben. Wenn eine Warnung auftritt, erstellt das Programm eine Datei, die diese Warnung enthält. Ich habe dann ein PHP-Skript hinzugefügt, um die Datenobjekte aus ihren jeweiligen Dateien einzulesen und live auf dem Apache-Server des Pi anzuzeigen.

Als nächstes habe ich ein Python-Skript geschrieben, um das Verzeichnis für die Warnungsdatei zu lesen, und falls vorhanden, die Datei lesen, die relevanten Informationen analysieren und dann dem Benutzer eine E-Mail oder SMS senden. Zusätzlich zum Senden einer E-Mail- oder Textwarnung verschiebt das Python-Skript die Warnungsdatei an die Position, damit das PHP-Skript sie lesen und anzeigen kann. Mit den erstellten Logfiles kann ich die Daten in eine Datenbank importieren. Sobald die Daten des hydroMazing in einer Datenbank auf dem Raspberry Pi aufgezeichnet wurden, können wir mit der Durchführung von Analysen beginnen und einige Berichte erstellen. Die Überwachung und Steuerung des Systems wird hauptsächlich für uns übernommen, aber wenn das hydroMazing uns auf ein Problem aufmerksam machen muss, kann es jetzt mit dem Raspberry Pi verwendet werden.

Der hydroMazing Garden Wizard, der Sie durch Ihren gesamten Grow führt! Das System bietet Feedback und Tipps zum Umgang mit den von hydroMazing identifizierten Problemen. http://www.hydroMazing.com

Überwachung der Nährlösung

Der Nährlösungsstand des Hydroponik-Containersystems muss überwacht werden.

Wenn der Nährlösungsspiegel sinkt, muss mit frischem Wasser aufgefüllt werden, da sonst die Nährlösung konzentrierter wird und einige Pflanzen nicht gut reagieren. Der hydroMazing Nutrient Controller kann eine Pumpe aktivieren, die frisches Wasser hinzufügt, um die Konzentration wieder auf das Niveau zu bringen, auf dem sie gestartet wurde, was oft als „Nachfüllen“ bezeichnet wird. Der hydroMazing Nutrient Controller überwacht auch Ihren pH- und EC-Wert, aktiviert Pumpen zur Verwaltung der Lösung und benachrichtigt Sie, wenn Sie Änderungen vornehmen müssen.

Willst du mehr?

  • Existenzielle Krise - Arduino Rollenspielsimulator
  • Warum DIY, wenn man kaufen könnte?
  • Was ist ein „intelligenter“ Garten?
  • Einen intelligenten Indoor-Garten starten
  • Tief in die Indoor-Gartenarbeit ein
  • Innengarten:Was kann schief gehen?
  • Verwalten von Nährstofflösungssystemen
  • Warum Arduino, wenn Sie Pi können?

Code

  • Einstellungen von Objekten
Einstellungen von ObjektenC/C++
Die Datei CoreSettings.h enthält viele kritische Einstellungen, einschließlich des nRF-Netzwerks, der Fernschaltercodes der Wechselstromsteckdose, der vom hydroMazing-System verwendeten Timer-, Appliance- und Sensor-Objektdefinitionen.
/** @file CoreSettings.h* Copyright ( C) 2015 Cory J. Potter - Alle Rechte vorbehalten* Sie dürfen diesen Code gemäß den* Bedingungen der LICENSE.txt* NICHT FÜR DEN KOMMERZIELLEN GEBRAUCH BESTIMMT verwenden, verteilen und ändern!* Sie sollten eine Kopie der LICENSE.txt mit . erhalten haben * Diese Datei. Falls nicht, schreiben Sie bitte an:*/#ifndef __CORESETTINGS_H__#define __CORESETTINGS_H__#ifdef ARDUINO// RX_PIN 3 in use by Dallas Temperature Probe#define RX_PIN 103#define TONE_PIN 104#define//What_ .PIN 8 ist unsere Adresse 1 oder 2uint8_t node_address =1;uint8_t totalNodes =3;unsigned long lastRxTimeStamp =0;const uint64_t nRFbaseAddress =1034834473100;uint8_t nRFaddress =0; // 00 - 255// HINWEIS:das "LL" am Ende der Konstanten ist vom Typ "LongLong" // 1034834473185, 1034834473170// const uint64_t tx_pipes[5] ={ 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0BB, 0xF0LLF0F0F1 // const uint64_t rx_pipes [5] ={0xF0F0F0F22ALL, 0xF0F0F0F299LL, 0xF0F0F0F308LL, 0xF0F0F0F377LL, 0xF0F0F0F3E6LL} // uint64_t tx_pipes [3] ={0xF0F0F0F0E8LL, 0xF0F0F0F0E7LL, 0xF0F0F0F0E6LL} // uint64_t rx_pipes [3] ={0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 1 ************************************************* ****/// Kabellos gesteuerte Steckdosenschalter/**************************************** ********************************* /// 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};/**************************************** ****************************** //* I2C-Kommunikation *//*********** ************************************************* ************/const int MY_ADDRESS =42;const int SEND_TO_ADDRESS =22;/************************ ********************************************** // * Timer *//************************************************ ************************** ///Timer Object ={ (Typ), (Intervall in Millisekunden), bereit, ausgelöst, Zeitstempel, (Zeiger auf nächstes Objekt)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 ={ TIMER_LCD_CYCLE 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_READINGS, 10UL, true, false_, 0, } /Timer Timer_Lite ={ TIMER_LITE, 180000UL, true, false, 0, &Timer_Ping };Timer Timer_Save_Settings ={ TIMER_SAVE_SETTINGS, 3600000UL, true, false, 0, &Timer_txData };//Timer Timer_Sensor_Read ={ TIMER_SENSOR_READINGS, 7000UL, true, false, 0, &Timer_Save_Settings };//Timer Timer_Alerts, { , &Timer_Sensor_Read };Timer Timer_rxData ={ TIMER_RX_DATA, 6000UL, true, false, 0, &Timer_Save_Settings };/**************************** ****************************************** /// Geräte initialisieren/ ************************************************* **********************/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 DEFAULT_TIME, true, false, 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_A, APPliance Appliance_Heater ={101 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, &Appliance_Heater };uint8_t totalAppliances =6;/******************************************** ****************************** /// Sensoren initialisieren/**************** ************************************************* ********* ///Sensor:={ Pin; Knotenadresse; SENSORART; Frequenz; minWert; maxWert; UL-Zeitstempel; Float-Wert; struct Sensor *weiter; } // NULL für das erste - Wir können nicht auf ein Objekt zeigen, das noch nicht erstellt wurde.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_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;/************************ **************************************************/ 

Schaltpläne

Einlass- und Abluftventilatoren, Pflanzenlampen, Heizungen, Entfeuchter und Pumpen werden automatisch über drahtlose AC-Steckdosen gesteuert Gemeinsame drahtlos gesteuerte AC-Steckdosen, die in diesem Projekt verwendet werden. Zusammengebaut und getestet hydroMazing Prototyp Webinterface hydroMazing-Prototyp-Webschnittstelle für Warnmeldungen.

Herstellungsprozess

  1. Temperaturüberwachung auf dem Raspberry Pi
  2. Temperaturbasiertes Gerätesteuerungssystem mit LM35
  3. Analoge Sensoren auf dem Raspberry Pi mit einem MCP3008
  4. Die Kompetenzlücke im Smart Home
  5. Alles kann smart sein:Die wichtigsten Merkmale der neuesten Smart Cities – Teil 1
  6. Machen Sie die Getränkeindustrie intelligenter mit einem IoT-betriebenen Füllstandsüberwachungssystem
  7. Funktionsweise des Antiblockiersystems (ABS) verstehen
  8. Die Funktionsweise des elektronischen Zündsystems verstehen
  9. Die Funktionsweise des Magnetzündsystems verstehen
  10. Was ist das amerikanische Fertigungssystem?