Inhoudsopgave:
- Stap 1: ONDERDELEN en GEREEDSCHAP
- Stap 2: BODEMVOCHTIGHEIDSSONDE V1
- Stap 3: BODEMVOCHTIGHEIDSSONDE V2
- Stap 4: BODEMVOCHTIGHEIDSSONDE V3 "Katana"
- Stap 5: BASISFUNCTIONALITEIT
- Stap 6: 7 SEGMENT DISPLAY
- Stap 7: POMP en POMPREGELING
- Stap 8: CONFIGURATIE en KNOPPEN
- Stap 9: RTC: REAL-TIME KLOK
- Stap 10: ALLES SAMENSTELLEN
- Stap 11: SCHETSEN en meer
- Stap 12: *** WIJ GEWONNEN!!! ***
Video: APIS - Geautomatiseerd plantirrigatiesysteem - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
De GESCHIEDENIS: (een volgende evolutie van dit systeem is hier beschikbaar)
Er zijn nogal wat instructables over het onderwerp plantenwater geven, dus ik heb hier nauwelijks iets origineels uitgevonden. Wat dit systeem anders maakt, is de hoeveelheid programmering en aanpassing die erin is gestoken, waardoor een betere controle en integratie in het dagelijks leven mogelijk is.
Hier is een video van een irrigatieloop: irrigatieloop
Zo is APIS ontstaan:
We hebben twee roodgloeiende chilipeperplanten, die een aantal van onze vakanties nauwelijks hebben "overleefd", en op dit moment bijna als gezinsleden worden beschouwd. Ze hebben extreme droogte en te veel water doorgemaakt, maar zijn altijd op de een of andere manier hersteld.
Het idee om op Arduino gebaseerde bewatering van planten te bouwen, was bijna het eerste idee hoe Arduino kon worden toegepast als een domotica-project. Dus werd er een eenvoudig plantenbewateringssysteem gebouwd.
Versie 1 had echter geen enkele indicatie van bodemvochtigheid en er was geen manier om te zeggen of het op het punt stond de planten water te geven, of dat het een paar dagen later water zou geven.
Zoals we allemaal weten, heeft Curiosity de kat gedood en versie 2 is gebouwd met een 4-cijferige 7-segmentmodule om de huidige vochtigheid te allen tijde weer te geven.
Dat was niet genoeg. De volgende vraag was "wanneer heeft het de planten voor het laatst water gegeven"? (Omdat we zelden thuis waren om er getuige van te zijn). Versie 3 gebruikte de 7 segment module om ook weer te geven hoe lang geleden de laatste bewatering plaatsvond (als een lopende tekststring).
Op een nacht begon de bewatering om 4 uur 's ochtends, waardoor iedereen wakker werd. Frustrerend… Omdat ik het te veel werk vond om APIS 's nachts uit te zetten en overdag aan te zetten om te voorkomen dat het water midden in de nacht water geeft, werd een realtime klok toegevoegd om het apparaat 's nachts in slaap te laten vallen als onderdeel van versie 4.
Aangezien de realtimeklok periodieke aanpassingen vereist (zoals de zomertijdschakelaar bijvoorbeeld), bevat versie 5 drie knoppen waarmee een verscheidenheid aan bewateringsparameters voor planten kan worden ingesteld.
Daar bleef het niet bij. Ik merkte op dat de vochtigheidssonde de neiging heeft om vrij snel te eroderen, mogelijk als gevolg van het feit dat het (door het ontwerp) onder constante spanning stond, en daarom was er een constante elektrische stroom tussen de sondes (eroderende anode). De goedkope bodemsonde uit China overleefde ongeveer een week. Zelfs een gegalvaniseerde spijker werd in een maand "opgegeten". Een roestvrijstalen sonde hield beter vast, maar ik merkte dat zelfs dat opgaf. Versie 6 zet de sonde elk uur slechts 1 minuut aan (en de hele tijd aan tijdens het water geven), waardoor erosie drastisch wordt verminderd (~16 minuten per dag versus 24 uur per dag).
Het idee:
Ontwikkel een bewateringssysteem voor planten met de volgende mogelijkheden:
- Bodemvochtigheid meten
- Bij het bereiken van een vooraf gedefinieerde "lage" vochtigheidsmarkering, zet u de waterpomp aan en geeft u de planten water totdat een "hoge" vochtigheidsmarkering is bereikt
- Water geven moet in verschillende runs worden gedaan, gescheiden door perioden van inactiviteit om waterverzadiging door de grond mogelijk te maken
- Het systeem zou zichzelf 's nachts moeten deactiveren tussen "slaap" en "wakker" tijden
- "Wektijd" moet voor weekenden worden aangepast naar een latere waarde
- Het systeem moet het logboek van pompruns bijhouden
- Het systeem moet de huidige aflezing van de bodemvochtigheid weergeven
- Het systeem moet de datum/tijd van de laatste pomprun weergeven
- Bewateringsparameters moeten instelbaar zijn zonder herprogrammering;
- Stop met pompen en geef een foutconditie aan als het draaien van de pomp niet leidt tot verandering in vochtigheid (watertekort of sensorproblemen) waardoor overstroming van de plant en lekkage wordt voorkomen
- Het systeem moet de vochtigheidssensor in-/uitschakelen om metaalerosie te voorkomen
- Het systeem moet water uit de buizen afvoeren om te voorkomen dat er zich schimmel in de buizen vormt
De volgende parameters moeten via knoppen kunnen worden geconfigureerd:
- Vochtigheidsmarkering "laag", in %, om pompwerking te starten (standaard = 60%)
- Vochtigheidsmarkering "hoog", in %, om de pompwerking te stoppen (standaard = 65%)
- Duur van een enkele besproeiing, in sec (standaard = 60 seconden)
- Aantal pogingen om de doelvochtigheid te bereiken (standaard = 4 runs)
- Militaire tijd om te deactiveren voor de nacht, alleen uren (standaard = 22 of 22 uur)
- Militaire tijd om 's ochtends te activeren, alleen uren (standaard = 07 of 7 uur)
- Weekendaanpassing voor ochtendactivering, delta-uren (standaard = +2 uur)
- Huidige datum en tijd
APIS schrijft datum/tijd van 10 laatste beregeningsbeurten in het EEPROM-geheugen. Het logboek kan worden weergegeven met de datum en tijd van de runs.
Een van de vele dingen die we van APIS hebben geleerd, is dat je planten niet elke dag water hoeft te geven, wat onze routine was totdat we de metingen van de bodemvochtigheid op een 7-segments display zagen…
Stap 1: ONDERDELEN en GEREEDSCHAP
Je hebt de volgende onderdelen nodig om APIS te bouwen:
BEDIENINGSKAST EN BUIS:
- Arduino Uno-bord: op Amazon.com
- 12v peristaltische vloeistofpomp met siliconenslang: op Adafruit.com
- 4X Numerieke LED-display Digitale buis JY-MCU-module: op Fasttech.com
- DS1307 Real Time Clock breakout board kit: op Adafruit.com (optioneel)
- Microtivity IM206 6x6x6mm toetsschakelaar: op Amazon.com
- Vero-bord: op Amazon.com
- L293D motor driver IC: op Fasttech.com
- 3 x 10kOhm weerstanden
- Arduino projecten plastic behuizing: op Amazon.com
- 12v AC/DC-adapter met een 2,1 mm-stroomaansluiting: op Amazon.com
- Bamboe spiesjes
- Loopvlak en een beetje supercementlijm
- Superzachte latex rubberen slang 1/8" ID, 3/16" OD, 1/32" wand, semi-helder amber, 10 ft. Lengte: op McMaster.com
- Duurzame nylon tight-seal buisfitting met weerhaken, T-stuk voor 1/8" buis ID, wit, pakken van 10: op McMaster.com
- Duurzame nylon tight-seal buisfitting met weerhaken, Wye voor 1/8" buis ID, wit, pakken van 10: op McMaster.com
- Zoals gewoonlijk worden draden, soldeergereedschappen, enz.
VOCHTIGHEIDSSONDE:
- Klein stukje hout (1/4" x 1/4" x 1")
- 2 x roestvrijstalen acne-extractienaalden: op Amazon.com
- Bodemvochtigheidsdetectiesensormodule: op Fasttech.com
Stap 2: BODEMVOCHTIGHEIDSSONDE V1
Bodemvochtigheid wordt gemeten op basis van de weerstand tussen twee metalen sondes die in de grond zijn gestoken (ongeveer 1 inch uit elkaar). De schema's zijn weergegeven op de afbeelding.
De eerste sonde die ik probeerde, was degene die je bij een aantal internetproviders kunt kopen (zoals deze).
Het probleem daarmee is dat het folieniveau relatief dun is en snel erodeert (een kwestie van een of twee weken), dus ik heb deze voorgefabriceerde snel verlaten voor de stevigere sensor, gebaseerd op gegalvaniseerde spijker (zie volgende stap).).
Stap 3: BODEMVOCHTIGHEIDSSONDE V2
De sonde van de "next generation" was zelfgemaakt van twee gegalvaniseerde spijkers, een houten plank en een paar draden.
Omdat ik al een versleten gefabriceerde sonde had, heb ik het verbindingsstuk en de elektronicamodule ervan opnieuw gebruikt, eigenlijk alleen maar het bodemdeel vervangen.
Gegalvaniseerde nagels waren tot mijn verbazing ook geërodeerd (zij het langzamer dan dunne folie), maar nog steeds sneller dan ik zou willen.
Er werd een andere sonde ontworpen, gebaseerd op roestvrijstalen naalden voor het verwijderen van acne. (zie volgende stap).
Stap 4: BODEMVOCHTIGHEIDSSONDE V3 "Katana"
De roestvrijstalen sonde (die lijkt op samoeraizwaard, vandaar de naam) is degene die momenteel wordt gebruikt.
Ik geloof dat de snelle erosie kan worden toegeschreven aan het feit dat de sonde altijd onder elektrische spanning (24x7) stond, ongeacht hoe vaak de eigenlijke meting plaatsvond.
Om dit te verminderen, heb ik de meetintervallen gewijzigd in een keer in 1 uur (dit is tenslotte GEEN realtime systeem) en heb ik de sonde aangesloten op een van de digitale pinnen in plaats van permanente 5v. Momenteel wordt de sonde slechts ~16 minuten per dag gevoed in plaats van 24 uur, wat de levensduur drastisch zou moeten verlengen.
Stap 5: BASISFUNCTIONALITEIT
APIS is gebaseerd op het Arduino UNO-bord.
APIS meet de bodemvochtigheid eenmaal per uur en als deze onder een vooraf gedefinieerde drempel komt, schakelt de pomp gedurende een vooraf gedefinieerde tijdsperiode in, een vooraf gedefinieerd aantal keren, gescheiden door "verzadigings"-intervallen.
Zodra een beoogde vochtigheidsdrempel is bereikt, keert het proces terug naar de meetmodus van eenmaal per uur.
Als de beoogde luchtvochtigheid niet kan worden bereikt, maar de ondergrens is bereikt, is dat ook OK (er is in ieder geval wat water gegeven). De reden kan een ongelukkige plaatsing van de sonde zijn, waar deze te ver van de vochtige grond is.
Als echter zelfs de onderste vochtigheidslimiet niet kan worden bereikt, wordt een foutconditie aangegeven. (Hoogstwaarschijnlijk een probleem met de sonde, of de voorraademmer was leeg, enz.). Bij een foutconditie zal het apparaat 24 uur slapen zonder iets te doen en het dan opnieuw proberen.
Stap 6: 7 SEGMENT DISPLAY
TM1650 GEBASEERD 7 SEGMENT DISPLAY:
Oorspronkelijk had APIS geen weergavemogelijkheid. Het was onmogelijk om de huidige vochtigheidsgraad van de bodem te bepalen zonder verbinding via USB.
Om dat op te lossen heb ik een 4-cijferig 7-segments display aan het systeem toegevoegd: op Fasttech.com
Ik kon nergens een bibliotheek vinden om met deze module te werken (noch een gegevensblad ervoor), dus na een paar uur I²C-poortonderzoek en -experimenten, besluit ik zelf een driverbibliotheek te schrijven.
Het ondersteunt weergaven van maximaal 16 cijfers (waarbij 4 een standaard is), kan basis ASCII-tekens weergeven (let op: niet alle tekens kunnen worden geconstrueerd met 7 segmenten, dus letters zoals W, M, enz. zijn niet geïmplementeerd)., ondersteunt decimaal puntweergave op de module, lopende reeks tekens (om meer dan 4 letters weer te geven) en ondersteunt 16 graden helderheid.
De bibliotheek is hier beschikbaar op de speelplaats arduino.cc. TM1650 driverbibliotheek
Voorbeeldvideo is hier beschikbaar
ANIMATIE:
Een beetje animatie van 7 segmenten wordt geïmplementeerd tijdens een waterloop.
- Terwijl de pomp is ingeschakeld, lopen de digitale stippen op het display in een patroon van links naar rechts, wat een waterloop symboliseert: bewateringsanimatievideo
- Tijdens de "verzadiging"-periode lopen de stippen vanuit het midden van het scherm naar buiten, wat de verzadiging symboliseert: verzadigingsanimatievideo
Onnodig, maar een mooi gebaar.
Stap 7: POMP en POMPREGELING
POMP
Ik gebruikte 12v Peristaltic Liquid Pump (hier verkrijgbaar) om de planten water te geven. De pomp levert ongeveer 100 ml/min (dat is ongeveer de helft van een glas - goed om te onthouden bij het configureren van de waterlooptijd om overlopen te voorkomen, en het gebeurde 8-))
POMPREGELING - L293D
De pomp wordt bestuurd via de L293D-motordriverchip. Omdat de draairichting vooraf is ingesteld, hoeft u eigenlijk alleen de chip-enabled-pin te gebruiken voor besturing. De richtingspennen kunnen permanent rechtstreeks op +5v en GND worden aangesloten.
Als je (zoals ik) niet zeker wist in welke richting de pomp zal gaan, kun je nog steeds alle drie de pinnen op Arduino aansluiten en de richting programmatisch regelen. Minder opnieuw solderen.
Stap 8: CONFIGURATIE en KNOPPEN
TOETSEN:
Ik heb drie knoppen gebruikt om APIS te configureren en te besturen.
Alle druk op de knop wordt verwerkt op basis van de pin-interrupts (PinChangeInt-bibliotheek).
- Rood (meest rechts) is een SELECT-knop. Het zorgt ervoor dat APIS de configuratiemodus ingaat en bevestigt ook de waarden.
- De zwarte meest linkse en middelste knoppen (respectievelijk PLUS en MIN) worden gebruikt om configureerbare waarden te verhogen/verlagen (in de configuratiemodus), of om de huidige datum/tijd en informatie over de laatste bewatering weer te geven (in de normale modus).
Aangezien het display meestal is uitgeschakeld, zullen alle knoppen eerst APIS "wekken" en pas daarna, bij een tweede druk, hun functie uitvoeren.
Het display wordt uitgeschakeld na 30 seconden inactiviteit (tenzij er een besproeiingsbeurt aan de gang is).
APIS doorloopt de configuratieparameters bij het opstarten voor beoordeling: video
CONFIGURATIE:
APIS heeft vier configuratiemodi:
- Besproeiingsparameters configureren
- Realtimeklok instellen
- "Force" gieter
- Besproeiingslogboek bekijken
WATERPARAMETERS:
- Lage drempel voor bodemvochtigheid (begin met water geven)
- Drempel voor hoge bodemvochtigheid (stop met water geven)
- Duur van een enkele besproeiing (in seconden)
- Aantal gietbeurten in één batch
- Duur van de bodemverzadigingsperiode tussen runs binnen één batch (in minuten)
- Activeringstijd nachtmodus (militaire tijd, alleen uren)
- Eindtijd nachtmodus (militaire tijd, alleen uren)
- Weekendaanpassing voor eindtijd nachtmodus (in uren)
REAL-TIME KLOK INSTELLEN:
- Eeuw (d.w.z. 20 voor 2015)
- Jaar (d.w.z. 15 voor 2015)
- Maand
- Dag
- Uur
- Minuut
De klok wordt aangepast met seconden ingesteld op 00 na bevestiging van minuten.
Instellingen hebben een time-outperiode van 15 seconden, waarna alle wijzigingen worden geannuleerd.
Na het opslaan worden de parameters opgeslagen in het EEPROM-geheugen.
EEN WATERVORMING DRUKKEN:
Ik weet nog steeds niet zeker waarom ik het heb geïmplementeerd, maar het is er. Eenmaal geactiveerd, gaat APIS naar de bewateringsmodus. De bewateringsmodus is echter nog steeds onderhevig aan drempels. Dit betekent dat als u de gietbeurt forceert, maar de vochtigheid van de grond boven de HIGH-markering komt, de gietbeurt onmiddellijk stopt. In principe werkt dit alleen als de bodemvochtigheid tussen de LAGE en HOGE drempels ligt.
BEWAKING LOG OVERZICHT:
APIS houdt een logboek bij van de laatste 10 gietbeurten in het EEPROM-geheugen, dat de gebruiker kan bekijken. Alleen Datum/Tijd van de besproeiing wordt opgeslagen. Drempels (op dat moment) en het aantal runs dat nodig was om de HOGE drempel te bereiken, worden niet opgeslagen (hoewel ze in de volgende versie mogelijk wel zijn).
Stap 9: RTC: REAL-TIME KLOK
NACHTSTAND
Toen APIS me 's nachts wakker maakte, kwam het idee op om een "nachtmodus" te implementeren.
Een nachtmodus is wanneer er geen metingen plaatsvinden, het display is uitgeschakeld en er geen water wordt gegeven.
Op een gewone werkdag wordt APIS om 7.00 uur 's ochtends wakker (configureerbaar) en gaat om 22.00 uur naar de nachtmodus (configureerbaar)., als de weekendafstelling 2 uur is).
RTC BREAKOUT BOARD versus "SOFTWARE" RTC:
Ik gebruikte hardware-RTC (hier beschikbaar) om de datum/tijd bij te houden en de nachtmodus in/uit te schakelen.
Het is optioneel om te gebruiken, omdat schetsen kunnen worden gecompileerd om zogenaamde "software" RTC te gebruiken (met de millis()-functionaliteit van arduino).
Het nadeel van het gebruik van software RTC is dat je de tijd moet instellen telkens wanneer APIS opstart.
Ik heb de standaard RTC-bibliotheek aangepast om exact overeen te komen met de API, en ook om het millis-rollover-probleem te omzeilen. (Zie de schetsen stap voor downloads).
Stap 10: ALLES SAMENSTELLEN
Het hele systeem (behalve de sonde) inclusief de pomp past in een kleine doos voor Arduino Uno.
- Het TM1650-display gebruikt de TWI-interface, dus de SDA- en SDC-draden gaan respectievelijk naar Arduino-pinnen A4 en A5. De andere twee draden zijn +5v en GND.
- RTC-bord gebruikt TWI-interface, dus hetzelfde als hierboven. (TM1650 en RTC gebruiken verschillende poorten, dus ze bestaan vreedzaam naast elkaar). RTC +5v-pin is verbonden met arduino-pin 12 (aangedreven via digitale pin in plaats van +5v). Weet niet meer waarom ik het deed, dat hoeft ook niet.
- L293D-pinnen zijn als volgt aangesloten: inschakelen (pin 1) op D5 en richtingsbesturingspinnen 2 en 7 op arduino-pinnen D6 en D7 respectievelijk.
- KNOPPEN zijn aangesloten op pinnen D2, D8 en D9 voor respectievelijk SELECT, PLUS en MIN. (Knoppen zijn geïmplementeerd met een pull-down 10K-weerstanden - in de "actief-hoog"-configuratie).
- De +5v-voeding van de PROBE-module is aangesloten op arduino-pin 10 (om periodieke metingen mogelijk te maken) en de sonde is aangesloten op analoge pin A1.
OPMERKING: Fritzing-schemabestand is toegevoegd aan de github-repository.
Stap 11: SCHETSEN en meer
Update maart 2015:
- Functionaliteit toegevoegd om de buizen na het drenken af te tappen om schimmelvorming te voorkomen (jongen! Ik ben blij dat ik de draairichting van de pomp niet vast heb gemaakt op de L293D!)
- Uitgebreidere logging omvat datum/tijd van het begin en einde van de besproeiing, begin en einde vochtigheid en hoe vaak de pomp werd ingeschakeld tijdens de besproeiing
- Foutroutine bijgewerkt: apparaat wordt na 24 uur na het invoeren van de foutconditie hard gereset
- Opnieuw gecompileerd met TaskScheduler 2.1.0
- Diverse andere bugfixes
Vanaf 18 november 2015 is APIS geüpgraded met de volgende extra functies:
- Gebruik van DirectIO-bibliotheek voor snellere en eenvoudigere pinwisselingen
- Gebruik van de Tijdzone-bibliotheek om correct te schakelen tussen EST en EDT
- Logica voor het de-bouncen van knoppen toegevoegd met alleen TaskScheduler
- Functie voor het herhalen van knoppen toegevoegd (waarden cyclus als de knop wordt ingedrukt en vastgehouden, waarbij de snelheid van de cyclus toeneemt na 5 cycli)
- Opnieuw gecompileerd met IDE 1.6.6 AVR 1.6.9 tegen TaskScheduler 1.8.4
- Verplaatst naar Github
bibliotheken:
APIS is gebaseerd op de volgende bibliotheken:
- EEPROM - onderdeel van Arduino IDE
- Draad - onderdeel van Arduino IDE
- EnableInterrupt - beschikbaar op Github
- Tijdzone - beschikbaar op Github
- DirectIO - beschikbaar op Github
Aangepast (gevorkt) door mij:
- Tijd - beschikbaar op Github
- RTClib - beschikbaar op Github
Door mij ontwikkeld:
- TM1650 - beschikbaar op Github
- TaskScheduler - beschikbaar op Github
- AvgFilter - beschikbaar op Github
SCHETSEN:
De nieuwste versie van de APIS-schets, inclusief het fritzing-schemabestand, is beschikbaar op Github
DATASHEETS:
- L293D: hier
- RTC breakout board: hier
Stap 12: *** WIJ GEWONNEN!!! ***
Dit project won de tweede prijs in de domotica-wedstrijd gesponsord door Dexter Industries.
Bekijken! WOE-HOO!!!
Tweede prijs in de domotica