Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

HydroMazing Slimme Tuinsysteem: Geavanceerde IoT Plantenverzorging

Onderdelen en Benodigdheden

Onderdeel Aantal Opmerking
Raspberry Pi 3 Model B 1 OPTIONEEL - Internet of Things - SMS berichten
Arduino Nano R3 2
Arduino Nano Uitbreidings Shield 2
DHT21/22 Temperatuur / Vochtigheid Sensor 1 Misschien 10k weerstand tussen Vcc/Data nodig
Fotocel Module 1
nRF24L01 2.4Ghz Draadloze Radio Transceiver Module 1 Met of zonder SMA Antenne
Dallas Temperatuursensor (voor voedingsoplossing temperatuur) 1 Waarschijnlijk connector nodig
433MHz RF Zender & Ontvanger Modules 1
Set 3-5 pak Draadloos Bedienbare Stopcontacten inclusief afstandsbediening 1
DFRobot LCD met Knoppen Shield voor Arduino Uno 1

Benodigde Tools en Machines

  • Solderbout (algemeen)

Apps en Online Services

  • Arduino IDE
  • Microsoft Visual Studio 2015

Over dit Project

Het was niet mijn bedoeling om een product te maken. Ik wilde gewoon een veelvoorkomend probleem oplossen. Ik wil planten binnen of onder gecontroleerde omstandigheden kweken. Hoe kan ik een optimale omgeving creëren voor planten om te bloeien met algemeen beschikbare elektronica en huishoudelijke items? Wat is beter, aarde of hydroponica?

hydroMazing is een tool om het makkelijker te maken om optimale groeiomstandigheden te bieden voor het succesvol kweken van planten thuis. Een onafhankelijk dataverzamelingssysteem en webinterface op je eigen apparaat, niet in een externe cloud.

Leren planten kweken kan ingewikkeld en duur zijn. Planten zijn veerkrachtig, maar één onschuldige vergissing kan je oogst ruïneren. Je kunt deze dure fouten voorkomen door een slim tuinsysteem het harde werk te laten doen!

Huisautomatisering

Een huisautomatiseringsidee dat ik al een tijdje in mijn hoofd had, was het gebruiken van draadloos bedienbare stopcontacten met een handzender. De zender hacken om het signaal voor de AAN of UIT knop te sturen, geselecteerd door een corresponderende pin op de Arduino Uno, zou niet te moeilijk moeten zijn, toch? De nagging zorgen over betrouwbaarheid hielden me tegen. Uiteindelijk overtuigde ik mezelf dat de beste manier om te weten of het werkt, gewoon proberen is. Helaas was het resultaat niet veel beter dan de relaispoging.

Een zoekopdracht op het web voor bijna elke sensor met "Arduino" levert producten op voor paar dollar. Ik vond de 315MHz en 433MHz zender/ontvanger paren die in het frequentiebereik vallen van de meeste commerciële draadloze stopcontacten. Het grote voordeel van Arduino is dat je open-source software kunt vinden. Een zoekopdracht naar "Arduino library" voor tx/rx paren maakte het spannend. Ik kon de codes van de afstandsbediening uitlezen, opnemen en de Arduino programmeren om de bijbehorende stopcontacten te bedienen.

Het ontwerpen van de software werd de uitdaging. De voorbeelden die bij Arduino en bibliotheken horen zijn een prima start. Maar zodra je ze combineert en aanpast, bot je snel tegen grenzen. Ik denk niet dat ik een goede programmeur ben, ik ben een koppige perfectionist.

In mijn favoriete boek "Zen and the Art of Motorcycle Maintenance" spreekt Robert Pirsig over de "gumption trap". Feitelijk is dat een gebeurtenis of mindset die iemand kan laten aflopen en ontmoedigen om een project te starten of voort te zetten. Weten door te zetten of een pauze te nemen zijn persoonlijke uitdagingen. Soms had ik een pauze moeten nemen om een uitstekende oplossing te bedenken. Andere keren liep ik een maand weg en werkte aan iets anders, en voelde me verfrisd. Misschien, als het project belangrijk genoeg is, worden we gedwongen erop terug te keren. De val is ons in te redeneeren dat het niet de moeite waard is, zelfs als het fantastisch kan zijn.

Programmeren

De software die ik heb ontwikkeld is geprogrammeerd in de microcontroller en bevat een set basismparameters voor timing, beheren, zenden en ontvangen van "sensor" en "apparaat" objecten. Besturing van apparaten gebeurt via een set algoritmen die ik "TheDecider" noem, die beslissens nemen op basis van sensorwaarden en vooraf geprogrammeerde drempels en de microcontroller aanstuurt om de draadloze stopcontacten aan of uit te zetten.

Ik wilde het systeem gemakkelijk aanpasbaar maken voor andere omgevingen zoals aquaponica, paddenstoelen kweken, en alles waar besturing plaatsvindt door sensoren te lezen en apparaten te bedienen op basis van geprogrammeerde regels. De draadloze stopcontacten bleken een betrouwbare methode om de ventilatoren te bedienen met de Arduino die signalen stuurt afhankelijk van de temperatuursensor. Het duurde niet lang voordat de broncode uitgroeide tot een beest. De Arduino familie is beperkt in hoeveel instructies het kan draaien en de programma-grootte limiet wordt snel bereikt als je meer wilt dan een paar knipperende LEDs. Ik ontdekte dat deze limiet me gedwongen heeft om betere, efficiëntere code te schrijven.zelfs met creatieve variabele afhandeling en custom libraries, komt er uiteindelijk een moment dat je een andere microcontroller nodig hebt of naar een grotere moet stappen.

Draadloze Monitoring Zonder Internet

Er zijn verschillende manieren waarop microcontrollers met elkaar kunnen communiceren. De goedkoopste draadloze methode die ik kon vinden is de nRF24L01 draadloze radio transceiver. De module is een laag-energie, lichtgewicht variant van bluetooth die hydroMazing de mogelijkheid geeft om te communiceren met een monitor-eenheid.

Ik besloot nog een Arduino Uno toe te voegen met een LCD-shield zodat ik kon tonen wat de sensoren meten, de toestand van apparaten, en waarschuwingen met notificaties.

Ik maakte mijn eigen open en aanpasbare platform dat op maat gemaakt kan worden voor een grote verscheidenheid aan tuinbehoeftes en omstandigheden; toch ook een zelfstandig draadloos systeem. De open architectuur maakt integratie van internetconnectiviteit en webservices makkelijk.

Internet Monitoring

Nu de Raspberry Pi met een nRF24L01 module. Ik kon veel van mijn Arduino-broncode aanpassen om inkomende transmissies te luisteren en die data naar een paar bestanden te schrijven. Eerst een logbestand dat alle communicatie vastlegt tussen de Pi en de hydroMazing Monitor. Vervolgens schrijft het programma de huidige staat van alle sensor-objecten en een bestand voor alle apparaat-objecten. Bij een waarschuwing maakt het programma een bestand met die alert. Daarna voegde ik een PHP-script toe om de data-objecten uit hun bestanden te lezen en live op de Apache-server van de Pi weer te geven.

Vervolgens schreef ik een Python-script om de map te controleren op het waarschuwingsbestand. Als het bestaat, leest het het bestand, haalt de relevante info eruit en stuurt een e-mail of SMS naar de gebruiker. Naast het sturen van een alert, verplaatst het Python-script het waarschuwingsbestand naar de positie voor het PHP-script om te lezen en weer te geven. Met de logbestanden kan ik de data in een database importeren. Eenmaal in een database op de Raspberry Pi, kunnen we analyses doen en rapporten genereren. Monitoring en besturing gebeurt meestal automatisch, maar als hydroMazing ons moet waarschuwen voor een probleem, kan het dat nu via de Raspberry Pi.

De hydroMazing Garden Wizard begeleidt je door je hele kwekerij! Het systeem geeft feedback en tips voor het beheren van problemen die hydroMazing identificeert. www.hydroMazing.com

Voedingsoplossing Monitoring

Het voedingsoplossingsniveau van het hydroponica containersysteem moet worden gemonitord. Als het niveau daalt, moet het aangevuld worden met vers water, anders wordt de oplossing geconcentreerder en reageren sommige planten slecht. De hydroMazing Nutrient Controller kan een pomp activeren die vers water toevoegt om de concentratie terug te brengen naar het startniveau, vaak "topping-off" genoemd. De controller meet ook pH en EC, activeert pompen om de oplossing te managen, en waarschuwt je wanneer wijzigingen nodig zijn.

Meer Informatie

  • Existentiële Crisis - Arduino Role-Playing Game Simulator
  • Waarom DIY als je kunt kopen?
  • Wat is een "Slimme" Tuin?
  • Starten met een Slimme Binnentuin
  • Dieper Graven in Binnentuinieren
  • Binnentuinieren: Wat kan er misgaan?
  • Voedingsoplossing Systemen Beheren
  • Waarom Arduino als je Pi kunt hebben?

Code

Instellingen van Objecten (C/C++)

Het CoreSettings.h bestand bevat veel kritieke instellingen inclusief het nRF-netwerk, de AC-stopcontact afstandsbedieningscodes, de Timer, Apparaat, en Sensor objectdefinities die door het hydroMazing systeem worden gebruikt.

/* CoreSettings.h - Copyright (C) 2015 Cory J. Potter - All Rights Reserved
 * You may use, distribute and modify this code under the terms of the LICENSE.txt
 * NOT INTENDED FOR COMMERCIAL USE! */

#ifndef __CORESETTINGS_H__
#define __CORESETTINGS_H__

#ifdef ARDUINO
#define RX_PIN 103
#define TONE_PIN 104
#define TX_PIN 8

uint8_t node_address = 1;
uint8_t totalNodes = 3;
unsigned long lastRxTimeStamp = 0;
const uint64_t nRFbaseAddress = 1034834473100;
uint8_t nRFaddress = 0;

uint64_t tx_pipes[3] = { 0xF0F0F0F0F8LL, 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL };
uint64_t rx_pipes[3] = { 0xF0F0F0F0F1LL, 0xF0F0F0F0F2LL, 0xF0F0F0F0F3LL };

/************************************************************************/
// Draadloos Bedienbare Stopcontact Schakelaars
/************************************************************************/
// ETEKCITY #0319
uint8_t totalSwitches = 5;
unsigned long mySwitchOn[] = {24,333107,333251,333571,335107,341251};
unsigned long mySwitchOff[] = {24,333116,333260,333580,335116,341260};

/************************************************************************/
/* I2C Communicatie */
/************************************************************************/
const int MY_ADDRESS = 42;
const int SEND_TO_ADDRESS = 22;

/************************************************************************/
/* Timers */
/************************************************************************/
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_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_ALERTS, 45000UL, true, false, 0, &Timer_Sensor_Read };
Timer Timer_rxData = { TIMER_RX_DATA, 6000UL, true, false, 0, &Timer_Save_Settings };

/************************************************************************/
// Initialiseer Apparaten
/************************************************************************/
Appliance Appliance_Light_1 = {101, 1, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, NULL };
Appliance Appliance_IntakeFan = {104, 1, APPLIANCE_INTAKE_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_Light_1 };
Appliance Appliance_ExhaustFan = {103, 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_Heater = {101, 0, APPLIANCE_HEATER, DEFAULT_TIME, true, false, OFF, &Appliance_Humidifier };
Appliance Appliance_FeedPump = {105, 1, APPLIANCE_PUMP, DEFAULT_TIME, true, false, OFF, &Appliance_Heater };
uint8_t totalAppliances = 6;

/************************************************************************/
// Initialiseer Sensoren
/************************************************************************/
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_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;

/************************************************************************/
#endif

Schema's

  • Inlaat- en uitlaatventilatoren, groeilichten, verwarmers, luchtvochtbestrijders en pompen automatisch bediend via draadloze stopcontacten
  • Algemene draadloos bedienbare stopcontacten gebruikt in dit project
  • Gemonteerd en testen
  • hydroMazing prototype Web Interface
  • hydroMazing prototype web Interface voor waarschuwingen

Productieproces

  1. Professionele temperatuurbewaking met Raspberry Pi en DS18B20
  2. LM35-gebaseerd temperatuurregelsysteem met AT89S52 microcontroller
  3. Een MCP3008 ADC gebruiken om analoge sensoren met Raspberry Pi uit te lezen
  4. Hoe ABS (Antiblokkeersysteem) Werkt: Complete Gids
  5. Elektronisch Ontstekingssysteem: Complete Werkgids
  6. Magneto-Ontstekingssysteem: Principes & Toepassingen
  7. Het Amerikaanse Productiesysteem: Geschiedenis, Technieken en Impact
  8. Begrijpen van draagbare Braille displays: Kerninzichten & Innovaties
  9. De smart home skills gap overbruggen: Waarom Groot-Brittannië achterloopt op Europa
  10. De toekomst van stedelijk leven: Kernkenmerken van opkomende Smart Cities - Deel 1
  11. Drankenproductie Verbeteren met IoT-ingeschakelde Vloeistofpeilmonitoring