Svenska ElektronikForumet
https://elektronikforumet.com/forum/

Växthusautomation
https://elektronikforumet.com/forum/viewtopic.php?f=3&t=95758

Författare:  Hesabon [ 16.24 2019-07-30 ]
Inläggsrubrik:  Växthusautomation

Jag beskriver här ett projekt som jag jobbat på i drygt ett år och nu äntligen fått så långt färdigt, att systemet är i användning, om än ofullständigt. Hoppas att tråden åtminstone så där i största allmänhet kan vara till nytta och nöje för någon.

Objektet:
Vid min sommarstuga har jag ett litet (ca. 8 kvm) växthus. För närvarande odlar jag enbart olika sorters chili. Tidigare har jag odlat också grönsaker och örter, men de är rätt tråkiga i längden... :wink:

Problemet:
Sommarstugan ligger på en ö i yttre skärgården. Bilresan av och an till båthamnen blir dryga tio mil, därtill båtfärd en dryg mil. På ön finns inte rinnande vatten och elförsörjningen är begränsad till 24 VDC från ett system med solpaneler.
Odlingstiden är därmed i praktiken från maj till oktober, bl.a. p.g.a. menföre och för att man inte kan värma upp växthuset utan el. (Det betyder också att jag inte kan hålla buskarna över vintern och därför planterar jag nya varje år i januari, börjande på fönsterbrädet i stan. I maj är de plantorna sedan tillräckligt stora för att flyttas ut till växthuset.)
Väl i växthuset bör odlingarna vattnas minst två gånger i veckan, men det bästa är att vattna lite varje dag.
Ifall det blir för varmt på dagen måste takluckan öppnas för vädring, och förstås stänga den till natten så att temperaturen inte sjunker under +8 grader, för då avstannar växten för många chiliarter. Så länge det är över +15 är det bra att ha vädringsluckan öppen, så att humlor och andra flygande insekter kommer åt att göra sitt.

Det är alltså rätt jobbigt att sköta underhållet den tid jag inte ”bor” där ute.

Målet:
Ett programmerbart, automatiskt bevattningssystem.

När jag kom så långt i tänkandet var det tid att göra upp en kravspecifikation:
- Systemet skall kunna sköta växthuset automatiskt utan underhåll åtminstone så länge som det finns vatten i "reservoaren".
- Skall stöda upp till fyra odlingsbänkar (i själva verket två bänkar och två vattenodlingshyllor)
- Odlingsbänkarna skall delas in i zoner, 4 st zoner per bänk. Varje zon skall kunna vattnas skilt på basen av individuella inställningar.
- Måste-krav:
- Skall mäta de för tillväxten väsentliga storheterna temperatur, luftfuktighet, jordfuktighet, ljus
- Skall övervaka vattennivån i vattenreservoaren och i bevattningstanken
- Skall sköta basbevattningen enligt programmerat tidsschema.
- Skall mäta fuktigheten i jorden (per zon) samt öka/minska bevattningen där ifall jorden i zonen är extra torr resp. fuktig
- Skall reglera takluckan efter temperaturen och enligt tidsschema
- Skall logga alla mätdata och regelbundet sända loggen trådlöst till en server för att läggas i en databas, som sedan kan nås över Internet
- Via servern skall man också [trådlöst] kunna fråga om status och inställningar
- Inställningarna skall kunna göras lokalt i växthuset och på distans över nätet (via servern).
- Skall tåla eventuella strömavbrott och andra störningar [vilka gör att processorn gör en reset] så, att bevattningsprogrammet fortsätter som programmerat efter avbrottet.
- Användargränssnittet skall vara menybaserat och ”tillräckligt” intuitivt.

Lösning och utförande:

Köpa något färdigt? => NEJ! :shock: Inget kul med det!

Så här tänkte jag mej bevattningen: (Principskiss)
Bilaga:
Principskiss.jpg


Reservoaren - Stor plasttunna (100 ltr) varifrån en elektriski pump fyller på
Bevattningstanken - En vattenkanna (2 ltr). Därifrån sker bevattningen med en annan pump, via en fördelare till magnetventilerna och spridarna - 1 vardera för varje zon.

Tanken bakom två vattenkärl och två pumpar är den, att det gör hela systemet mycket enklare. Precis som när man vattnar med sprutkanna, behöver man inte veta absolut hur mycket vatten man sprider varje gång. En bevattningstank från full till tom är därför "en dos", och i programmet kan man ställa in antalet bevattningsomgångar per dag (0..3 ggr) och hur många doser vid varje omgång (1..2 st).
Bevattningstanken behöver då endast två givare (flottörer), en för "Full" och en för "Tom". Genom att ändra på höjdskillnaden mellan dessa kan man då fininställa hur mycket en dos är.

Jag hade redan från början föresatt mig att bygga systemet kring en Arduino Nano. Den har ju förstås sina begränsningar, särskilt då programminnet som är ”endast” 32 kB, men tänkte ändå försöka.
Servern blir en Raspberry Pi (i sommarstugan) som kopplas till nätet över mobilt bredband.

Denna sommar kommer det ut en ny, pin-kompatibel version av Nano med bl.a. 1 MB programminne. Nästa vinter kommer jag troligtvis att konvertera programmet till den.

Här är en översiktsbild från växthuset.
Bilaga:
Vaxthus.jpg

Då hade jag endast ett ämbar som bevattningstank (med tegelsten i för att minska vattenvolymen).

Just nu ser vattentanken ut så här:
Bilaga:
Vattentank.jpg


...och för att visa att det blir resultat också... (försök räkna hur många poddar som syns på bilden :D ):
Bilaga:
Resultatet.jpg


Fortsättning följer...

Författare:  tecno [ 16.52 2019-07-30 ]
Inläggsrubrik:  Re: Växthusautomation

Lite nyfiken, varför har du vattentanken inne i växthuset? Det snor ju värdfull odlingsyta eller är det så att du vill temperera vattnet av någon anledning?

Författare:  danei [ 17.11 2019-07-30 ]
Inläggsrubrik:  Re: Växthusautomation

Det blir ju även ett värmemagasin som håller temperaturen uppe under natten.

Författare:  Lasp [ 19.26 2019-07-30 ]
Inläggsrubrik:  Re: Växthusautomation

Bra beskrivning på inriktning av vad du vill åstadkomma och vilka medel (resurser) du har att göra med.
Jag utgår från att de små tankarna är de som är högst upp för att via självfall portionera ut det eftertraktade vattnet!
Att vattnet har omgivningstemperatur är väl bara bra. Jag gillar sådana här trådar, inte för att jag numera (eller hustrun) har behov eller möjlighet med växthus.
Men mest för att se vad andra kan göra för att minska arbete ;-)

Författare:  pstrand [ 20.52 2019-07-30 ]
Inläggsrubrik:  Re: Växthusautomation

Tjusigt. Chilli? Vilka sorter odlar du?

Författare:  MadModder [ 16.37 2019-07-31 ]
Inläggsrubrik:  Re: Växthusautomation

11st!

Skulle det inte gå att köra bara en pump på tid direkt från tunnan? Då behövs ju bara en sensor för tom tunna.
Det finns enkla flödesmätare av impellertyp som ger varvpulser ut om man vill mäta det.

Säg att det bara är en zon som är torr så bara en solenoid är öppen. Det blir ganska mycket vatten just där om en hel dos ska dit. :)

Författare:  Hesabon [ 18.43 2019-08-03 ]
Inläggsrubrik:  Re: Växthusautomation

Tack för alla svar och kommentarer!
Just nu sitter jag ute på ön och kan inte uppdatera med bilder - mobilnätet har så svag signal här ute att bilderna tar en evighet att ladda upp. Jag skall därför endast svara på frågorna. Nya bilder efter veckoslutet.

Tecno: Jag kan inte bygga ut odlingsytan mera, men ett senare steg var faktiskt att flytta ut reservoaren samt ordna så att den fylls på med regnvatten t.ex. från stugans tak. Jag ville först försäkra mig om att systemet fungerar... :)

Danei: Det där med värmelager var en bra synpunkt! Tack! Tål att funderas på, kanske jag håller reservoaren innanför ändå(?)
Måste dock ordna med ngt slags automatisk påfyllning... :humm:

Lasp: Tackar!

Pstrand: Just nu har jag följande:
- Aji Cristal (6-7)
- Pequante (5)
- India Red (7-8)
- Fire Flame (7)
- Cayenne (6-7)
- Ramiro (0)
Siffran inom parentes anger styrkan på den förenklade skalan där vanlig paprika är 1 och den starkaste naturliga Habaneron är 10. Den skalan är lättare att hantera än den egentliga Scoville-skalan där ex. Jalopeno är ca 12 000 scoville, min Cayenne-sort ca 50-70 000 och Habanero 200 - 300 000.
Det finns ett flertal framodlade arter som är mycket starkare (ex. Carolina Reaper är 1.6 M scoville). På den förenklade skalan anges dessa mycket starkare som 10+, 10++ och 10+++.
Ramiron är en god och saftig art som faktiskt är sötare och mildare än vanlig paprika. Hos oss kallas den "barn-chili". Det är YTTERST viktigt för yngsta barnbarnet (6 år) och han äter dom med förtjusning.
När man äter chili är det inte bara eldigheten som är viktig. Man vill också ha smak i fruktens kött, men det är också viktigt att variera olika chili i olika rätter, speciellt efter när styrkan träder fram (i munnen/svalget). En del bränner genast till på tungspetsen, medan andra kommer sakta smygande först i svalget. Det är spännande att variera dessa från rätt till rätt under en hel middag.
Tips: Avsluta middagen med vanlig vaniljglass, toppad med en Chili-Svartvinbärsgelé! (med t.ex. Aji Cristal eller Cayenne).
En upplevelse!

MadModder: Nu har jag ju inte hunnit beskriva i detalj hur bevattningen går till. Tänkte lägga in det senare, men här kort:
Jag funderade på flödesmätare, och skaffade faktiskt ett par sådana med impeller, men jag kom fram till att det blev enklare med en lämplig "dos".
Den extra bevattningen går till precis som du tänker dig. Om en zon behöver mera vatten öppnas bara den magnetventilen och så pumpas en dos dit. En zon är ca 50 x 60 cm, och en dos är ca 1.2 ltr vilket är framexperimenterat.
Jag återkommer med bättre beskrivning senare.

Författare:  MadModder [ 19.55 2019-08-03 ]
Inläggsrubrik:  Re: Växthusautomation

Aha, ja på den ytan är ju inte 1,2 liter särskilt mycket.
Min timerstyrda balkonglådebevattning pytsar ut ca 1,7 liter på en minut, som två lådor får dela på. Det räcker med en gång varannan dag vid mulet, och en gång varje dag vid skinande sol.

Författare:  Hesabon [ 20.10 2019-08-04 ]
Inläggsrubrik:  Re: Växthusautomation

VATTENSYSTEMET

Bilaga:
Vattentank.jpg


Eftersom det inte finns rinnande vatten på ön måste jag lagra vatten i en "tillräckligt stor" tunna, kallad "reservoaren". (Det är den undre behållaren på bilden :wink: ).
Den lilla bryggan över tunnan håller nivåmätaren på plats (det fyrkantiga aluminiumröret i mitten).

Nivåmätaren har fem flottörer vilka anger vattennivån.
Bilaga:
Reservoar_sensorer.jpg

Längst nere är den första pumpen - en Kina (eBay) dränkpump (centrifugalpump) som går med 12 VDC.
Flottörerna är placerade så, att de ungefär skall ange 100%, 75%, 50%, 25%, 10% och tom (ifall under 10%).
I flottören sitter en magnet som sluter ett reed-relä.
De är sedan seriekopplade med motstånd enl. följande:
Bilaga:
Reservoar_sensor_koppling.png


Ovanpå reservoaren står bevattningstanken ("saftkannan").
Den har endast två sensorer, "Full" och "Tom".
Pumpen i vattenreservoaren pumpar tills läge "Full" och sedan pumpas vattnet vidare till någon zon som skall bevattnas, tills nivån "Tom". Skillnaden mellan dessa nivåer är alltså "en dos".
Bilaga:
Vattentank_2.jpg


Jag experimenterade med ett antal oiika behållare men det var svårt att få ner voiymen så att dosen inte blev för stor. I början försökte jag med ett ämbar i vilken ja satte tegelstenar för att ta bort volym.
Till slut hittade jag denna saftkanna, och nu fungerar det. En dos är som tidigare nämnt ca. 1.2 liter. Jag kan ändra dosen genom att flytta på den övre sensorn (ni ser fästhålen i hållaren).

Från bevattningstanken pumpas vattnet genom en sil (eller filter) från Biltema á 15 Euro.
Bilaga:
Vattenfilter.jpg

Jag försökte först utan, men det dyker trots allt upp en massa skräp i vattnet, bl.a. suicidala myror, så magnetventilerna ville stockas.
Det problemet försvann när jag satte till filtret.

Vidare från filtret kommer fördelarna, även dessa billiga kina-grejer (á ca 7 Euro st, inkl. frakt). Jag ville ha möjligheten att fysiskt stänga av fördelarens utgångar, ifall någon inte behövdes.

Genast efter fördelaren kommer sedan magnetventilerna, en för varje zon. Ni gissar säkert rätt. De liksom trädgårdsslang-anslutningarna är från - Kina!
(Hur jag styr magnetventilerna återkommer jag till när jag börjar tala om elektroniken).

Direkt efter magnetventilerna kommer sedan spridarna.
Zoner 1-4
Bilaga:
Magnetventiler_1-4.jpg


Zoner 5-8
Bilaga:
Magnetventiler_5-8.jpg


Spridarna är gjorda av vanliga 20 mm el-installationsrör, i vilka jag limmat fast trädgårdsslang-anslutningar för att kunna skruva fast magnetventilen. Andra ändan på spridarröret är blockerat.
I spridaren har jag sedan borrat små hål ovanför den zon som respektive rör sköter om.
Hålen 1.5 mm är borrade i tre rader, en lodrätt ner med 6cm avstånd från varandra, och en rad på vardera sidan om den första raden, hålen förskjutna +2 cm resp. -2 cm,
Utgående från detta ville jag räkna ut vilken vinkel dessa sidorader skulle vara från mittraden, för att bevattningsområdet skulle bli möjligast jämnt.
Jag utgick från den kinesiska pumpens angivna spec, delat med två (!) och satte att höjden ovanför odlingsbänken skulle vara ca 1 meter.
Jag kom då fram till, att vinkeln skulle vara närapå +/- 30 grader.
Sagt och gjort! Riggade upp rören i CNC-fräsen och borrade - och det visade sig att beräkningarna stämde precis! Vattnet faller jämnt över hela odlingsområdet, utan att rinna utanför. :vissla:
Bilaga:
Bevattning.jpg

Bilden är tyvärr inte riktigt tydlig, men jag hoppas ändå man ser hur denna zon nr 7 får vatten.

Nog för denna gång. Fortsättning följer.

Författare:  pstrand [ 20.40 2019-08-04 ]
Inläggsrubrik:  Re: Växthusautomation

Hur gör du med skadeinsekter, spinn, bladlus etc?

Författare:  Hesabon [ 10.52 2019-08-05 ]
Inläggsrubrik:  Re: Växthusautomation

pstrand: Ärligt talat: Jag vet inte ännu i alla fall. Under de fem år jag haft växthuset har det inte blivit drabbat.
Där har dock alltid funnits myror och speciellt mycket i år (vanliga stackmyror). De kliver också upp i chillibuskarna, men verkar inte göra någon skada, för varken bladen, blommorna eller frukten bär några spår.
Jag har för mig att stackmyrorna bl.a. i tallar skall hålla "boskapshjordar" vilka de mjölkar på något sekret, men har inte observerat något i chillin.

En bekant hade, enligt egen utsago med fördel bekämpat bladlöss med en lösning av vatten och ett naturligt tvättmedel som heter Tolu och som innehåller tallsåpa. Finns säkert något motsvarande i Sverige.

Jag har alltså själv inga erfarenheter, men bävar för möjligheten att sådana någon dag dyker upp.

Man vill ju inte förlora sådana här:
Bilaga:
Ramiro.jpg

Ramiron ("barn-chillin :D ) växer så det knakar och en är redan över 20 cm lång. Minstingen har reserverat...

Författare:  tecno [ 12.38 2019-08-05 ]
Inläggsrubrik:  Re: Växthusautomation

Vatten i sprutkanna + 1msk terpentin + 1msk Mäntysuopa har fungerat bra för mig. Man kan öka såpan för bättre vidhäftning.

Författare:  MadModder [ 19.28 2019-08-05 ]
Inläggsrubrik:  Re: Växthusautomation

Men hur många poddar syns på den där bilden längre upp då? Jag räknade till 11. :)

Författare:  Hesabon [ 19.47 2019-08-05 ]
Inläggsrubrik:  Re: Växthusautomation

Ursäkta! Jag missade den delaen av ditt svar. :doh:

Om man räknar hela + sådana som skymtar kom jag till 13 st.

EDIT: Kontrollräknade till 17 st:
Bilaga:
Chillijakt.jpg


Här en nyare bild som är tagen ungefär på samma ställe:
Bilaga:
Cayenne.jpg

De längsta poddarna är nu 18 cm.

Författare:  Hesabon [ 11.41 2019-08-06 ]
Inläggsrubrik:  Re: Växthusautomation

ELEKTRONIKEN, DEL 1

Ja så blir det dags att redogöra för elektroniken i systemet. Det är rätt mycket, så jag måste sprida ut det på flere inlägg.

Startar därför försiktigt med en arkitekturbild. Den här är förstås resultatet av flere iterationer:
Bilaga:
Arkitektur.jpg


Allt bygger runt en Arduino Nano. Antalet moduler som skulle anslutas blev så stort, att jag ville koppla upp dem över I2C för att spara Nanons portar. Trots det är endast 2 Analoga portar och 6 digital portar på Nanon lediga. Om man räknar nyttjandegraden för hela systemet så utnyttjas de digitala portarna till närapå 83 % (38/46) och de analoga till närapå 92 % (22/24).
Man kunde ju ha delat upp funktionerna på ett antal Nano's också, men jag ville också känna utmaningen att få allt att rymmas i en 328:a

Alla moduler, förutom vakthunden, är färdiga [Kina-]moduler. Märk, att EPROM-minnet AT24C32 finns på RTC-modulen, men har en egen I2C-adress. Det är alltså inte en separat modul.
Vakthunden har två alternativa triggerkällor. Den fungerar inte riktigt ännu, men målet är att den skall triggas via PCF8575:an, för då kommer den också att känna av ifall någon I2C-ansluten modul t.ex. låst I2C-bussen och orsakar så en Reset, vilken i bästa fall kanske också rättar till problemet.

Författare:  Hesabon [ 19.24 2019-08-06 ]
Inläggsrubrik:  Re: Växthusautomation

ELEKTRONIKEN DEL 2

Här kommer en uppsättnig moduler som jag använt mig av:
Bilaga:
Moduler.jpg


Längst till vänster är radiomodulen med antenn och adapter.
Följande är en spänningsomvandlare av vilka jag använt tre stycken. Jag hämtar 24 VDC till växthuset och inne där behöver jag 12V, 5V och 3.3V.
Tredje i övre raden är en modul med 4 analoga ingångar (8 bit). Nedanför den är ju Nanon själv.
Fjärde modulen är en 16 portars kvasi-I/O modul med PCF8575. Nedanför en pytteliten grafisk displaymodul med 64x128 pixel. Den på bilden är dock trasig :( (Brutet hörn)
Femte är Joysticken. Den ger ut två analoga signaler (X och Y) och en digital för tryck på hatten. Nedanför är RTC-modulen med EPROM-minnet. (På baksidan är ett backup-knappbatteri).
Sist och störst modulen med 8 reläer.

(Ifall någon har någon fråga om modulerna, så är det bara att stöta på).


Redan i mars hade jag "centralenhetens" kort så långt färdigt, att jag kunde torrköra:
Bilaga:
Kortet_mars_1.jpg


Bilaga:
Kortet_mars_2.jpg


Eftersom systemet är helt meny-baserat är Joysticken den enda inmatningsgrejen man behöver. Mera om detta när det blir tid för programmet...

Modulen med 8 reläer styr magnetventilerna. För att minimera antalet reläer (och digitala portar, kablar, kontakter, mm.) är magnetventilerna kopplade som en matris:
Bilaga:
Magnetventiler_styrning.png

Således måste två reläer aktiveras samtidigt, ett "plus-relä" och ett "minus-relä", för att en viss magnetventil skall öppna.
(Kopplingen på bilden är endast riktgivande - reläerna har dessutom sin drivelektronik, mm.).

Modulen med 4 reläer styr båda pumparna och luckans motor. Den motorn är kopplad som en s.k. trappljuskoppling till reläerna. Det betyder, att när det ena reläet drar öppnas luckan och när det andra reläet dra stängs den. När båda är i viloläge, eller ifall båda drar, händer ingenting.

Reläerna aktiveras när ingången är LÅG.

PCF8575 är inte en fullblodig I/O-krets, jag valde den främst för att den är liten till formatet.
Utgångarna har inte något tri-state läge och varje ports funktion måste varje gång "konfigureras" i Setup-rutinen. Det betyder, att porten, då man definierar den som OUTPUT, är låg ett kort ögonblick, tills programmet sätter utgången HIGH. Reläet hinner då kort aktiveras. För magnetventilerna har detta inte någon betydelse, eftersom man sätter upp en utgång i taget, och magnetventilen kräver både plus och minus, men för pumpar och luckans motor är det värre. Det rycker i dom, och det är inte elegant nog.
Jag löste detta så, att jag kopplade +12V (till motorerna) går parallellt genom relä 7 och 8:s vilokontakt. Under normal drift kommer dessa aldrig att vara aktiverade samtidigt, d.v.s motorerna kommer alltiid att få ström då deras respektive relä drar.
I Setup-rutinen konfigurerar jag först utgångarna till magnetventilerna, så aktiverar jag relä 7 och 8 och konfigurerar motorstyrningen utan ryckningar, och sedan släpper jag 7 och 8.

(Hoppas jag nu kunde förklara det där förståeligt... :roll: )

Författare:  sodjan [ 20.20 2019-08-06 ]
Inläggsrubrik:  Re: Växthusautomation

> Startar därför försiktigt med en arkitekturbild...

Är det där finska definitionen av "försiktigt"? :-)
Seriösaste schemat på forumet på fler år! Får jag
fråga vad du använder för dokumentations verktyg?

Författare:  Hesabon [ 07.15 2019-08-07 ]
Inläggsrubrik:  Re: Växthusautomation

Tackar för det!
Knappast finsk definition :D, mera kanske livslång erfarenhet av försök och speciellt av många misstag.
Jag brukar ha så många olika projekt på gång samtidigt, att om jag inte dokumenterar så kommer jag själv inte ihåg vad jag hade tänkt - eller ens höll på med.

Jag använder mest nog helt vanlilga Office-program och då främst presentation och kalkyl, mera sällan textbehandling.
För det mesta kör jag Linux och då blir det ju LibreOffice som är en fullgod ersättare (och korsvis kompatibel) till motsvarande Microsoft, förutom presentationsprogrammet där LilbreOffice ännu har sina brister. Där använder jag bara MS PowerPoint, och så är just arkitekturbilden ritad.

LibreOffice Calc / Microsoft Excel är nog något av de mest användbara verktyg som någonsin gjorts. Jag har blivit god vän med det och har även i detta projekt använt det till mycket, allt från dokumentation, till beräkningar och t.o.m. till att skapa kod(!) Återkommer till detta igen senare.

Kopplingsscheman ritar jag med Kicad.

Författare:  Platis [ 14.21 2019-08-07 ]
Inläggsrubrik:  Re: Växthusautomation

Instämmer med Sodjan, snyggt presenterat projekt! :bravo:

Det är alltså meningen att detta ska kunna kopplas upp mot internet sen?

Författare:  Hesabon [ 15.27 2019-08-07 ]
Inläggsrubrik:  Re: Växthusautomation

Platis: Tackar!

Ja, uppkoppling till Internet finns i planerna.
Arduinon skall i första hand regelbundet sända loggdata till en server inne i stugan (Raspberry PI), vilken i sin tur skall samla det i en databas. I följande skede skall det vara möjligt att från servern koppla upp mot Arduinon och titta på logg och parametrar i realtid, samt att ställa in nya värden.
Servern skall kunna nås vi Internet.

Arduinon sänder redan loggdatat och jag har testat att ta emot det med en Raspberry PI (ett kort program i Python3), men inte mera än det. Just nu är det ingen som tar emot de utsända bitggarna, utan de åker ensamma ut i yttre bit-rymden. Ifall bitarna nu tar slut på jorden, så vet ni vem man kan skylla på.... :oops:

Radiomodulen jag använder baserar sig på ett nRF-chip (nRF24L01), men jag har faktiskt också reserverat en kontakt på moderkortet för en WiFi-modul med ESP8266. På den modulen kan man sätta upp en enklare nätserver, och då kunde man kanske gå direkt på bevattningssystemet. Får nu se hur långt jag kommer.

H.

Författare:  Hesabon [ 16.23 2019-08-07 ]
Inläggsrubrik:  Re: Växthusautomation

ELEKTRONIKEN DEL 3

Så kommer det som nästan är det svåraste och alltför ofta blir på hälft, d.v.s. att bygga in allting i en låda.

Jag valde en elinstallationsbox, modell "Cubo" från Ensto. Yttre mått 250 x 175 x 100 mm.
Här med de första kopplingarna:
Bilaga:
Tidig_box.jpg

och med lock:
Bilaga:
Tidig_box_2.jpg

Kontakterna är av typ GX16-4 och GX16-10, (från eBay/kinesien).

Jag sätter in en separat monteringsplatta av akrylplast, på vilken jag sedan monterar moderkortet och 4/8 relä-modulerna.
Notera att jag höjt skruvtornen. Det är för att ge plats för kabeldragning och några feta kondingar á 10 000 uF.
Strömkabeln till växthuset är rätt lång - över 20 m, och vattenpumparna kan nog orsaka störningar. Jag hoppas att kondingarna skall balansera ut det.

Så här ser det sedan ut när allt är inne i boxen:
Bilaga:
Kortet.jpg

Mellanrummet mellan 12V och 3v3 konvertrarna är avsiktiligt, då jag inte var helt säker på om ett st 12V konverter klarar av lasten. Absolut max med tillräcklig kylning är dock ca 3A enligt specen. Pumparna skall dra 0.6-0.7 A och magnetventilerna några hundra mA.
Nu har då en konverter visat sig vara tillräckligt. Dessutoma har jag i programmet sett till, att inte köra flere motorer (pumpar, eller lucka) samtidigt.

"Moderkortet" jag valde är inte någon höjdare precis, men det får nu duga. Det var det enda kortet för prototypbyggande jag hittade i den storleken som har kopparbanorna på tvären (långsida till långsida), vilket var det jag behövde. Jag har funderat på att göra ett "riktigt" kort också, men det är inte aktuellt just nu - om ens någonsin. Får se hur det blir...

Boxen är rätt packad:
Bilaga:
Elektronik.jpg

På bilden skymtar även bottenplattan i akryl (utfräst i CNC:n) och under 4-relä-kortet en kondensator.

Här samma bild med förklaringar:
Bilaga:
Elektronik_expl.png

Ljus-sensorn sitter ännu löst, den väntar på att fästas strax innanför det genomskinliga locket.
Jag blir ändå tvungen att ordna någon slags solskärm framför hela boxen, eftersom den blir mycket varm när solen lyser rakt på. Växthusprincipen fungerar alltså, men elektroniken tycker ju mycket bättre om svalka...

Det finns en del elektronik även utanför "centralenheten". Återkommer till dom i nästa inlägg.

Författare:  MrIzoard [ 17.02 2019-08-07 ]
Inläggsrubrik:  Re: Växthusautomation

Hatten av för detta projekt!
Verkligen skoj att du tar oss med på denna resa. :tumupp:

Författare:  vojnik [ 21.52 2019-08-07 ]
Inläggsrubrik:  Re: Växthusautomation

Vad kommer du använda för fuktsensorer?

Författare:  Hesabon [ 12.53 2019-08-08 ]
Inläggsrubrik:  Re: Växthusautomation

Tackar för frågan! Den leder in oss i följande avsnitt:

ELEKTRONIKEN RUNT OMKRING

All elektronik rymdes inte eller var inte vettigt att placera i den centrala boxen. Det hade inte funnits plats för alla kontaktdonen, ifall jag inte först samlade dom i grupper.
Magnetventilerna är upp till 16 stycken, och eftersom dom är kopplade i en matris, hade det krävt 20 kontakter ifall jag hade placerat också de separerande dioderna i centralboxen.
Jag valde då att dra ut minimalt antalet trådar från c-boxen (2 x 4pin) till en "magnetventil-hub":
Bilaga:
Magnetventil_hub.jpg

Därifrån går jag sedan vidare med en kabel till magnetventilerna (5 poler per fyra magnetventiler).
Nu har jag ju inte tagit i bruk mer än 8 zoner, eftersom jag inte har några vattenodlingshyllor. Med chillina i odlingsbänkarna kommer det inte heller att rymmas några hyllor, chillibuskarna är redan över 140 cm höga..
Från hubben går jag vidare till en liten box (den svarta) som förgrenar kablarna till själva magnetventilerna.
Bilaga:
Delare_2.jpg

Inne i den boxen finns också dioderna som separerar ventilerna. (Se kopplingsschema i tidigare inlägg).

Jag gjorde på motsvarande sätt med fuktsensorerna. Varje fuktsensor ger ut en analog och en digital signal och behöver förstås också drivspänning, alltså fyra ledningar.
Avståndet till givarna längst bort blir närapå fem meter, kortaste ca 2 meter. Jag gjorde därför en "sensor-hub" för fyra fuktsensorer.
Bilaga:
Fuktsensor_hub.jpg

I den samlas spänningsmatningen till två ledningar (+5VDC o GND) och sedan 4+4 signalledningar, inalles 10 ledningar till kontakten på c-boxen. (Kontaktdon GX-16/10).
Kablarna är skärmade, vilket torde minska påverkan av ev. yttre störningar, men jag var inte säker på om det skulle bli störande spänningsfall i ledarna, så jag valde en box som vid behov kan inrymma en likadan spänningskonverter (24VDC till 5VDC) som de i c-boxen.
De två S-formade trådarna mitt i boxen (vit o svart) sammankopplar de pinnar som skulle vara ingångar och utgångar till konvertern, ifall den vore där.
Hittills har jag dock inte kunnat konstatera några störningar, så det var kanske överdriven skepticism... :roll:

Från den huben går det sedan vidare till sjäkva fuktsensorerna vars aktiva komponent ser ut så här:
Bilaga:
fuktsensor.jpg

Redan från början misstänkte jag, att det "mäthuvudet" (PCB) inte kan hållla i längden i jorden.
Då jag dessutom behövde kapsla in dom i en vattentät box beslöt jag göra en egen lösning:
Bilaga:
Fuktsens_hub_magnet.jpg

Mätningen görs m.h.a. två stålspikar ("piggar") genom bottnet på boxen. Jag fick fräsa ut några akrylbitar för att kunna fästa allt stadigt i boxen och till slut tätades hålen med silikonmassa.

Här i användning:
Bilaga:
Jordfuktsensor.jpg

Denna sensor fungerar nog i princip, men dessvärre har det visat sig, att fuktmätningsmetoden (mäta konduktivitet) är fel! :evil: Den ena piggen (med grön tråd) korroderar mycket snabbt. Jag kom inte att mäta spänningen mellan piggarna och då inte heller senare, ifall korrosionen har försämrat själva sensoreringen. Det vore dock enbart av akademiskt intresse, för dessa fuktsensorer är kort sagt värdelösa!

Nu har det kommit ut andra som mäter jordfuktigheten kapacitivt. Jag får nog testa en sådan över vintern och kanske göra om systemet en aning till nästa säsong...

Nu tror jag att jag har beskrivit allt det väsentliga rörande elektroniken. Stöt på ifall något ser ut att ha blivit på hälften...

LUCKAN

Luckan har jag inte allls behandlat. Det visade sig nämligen, att den mekanik jag hade tänkt (d.v.s. planerade hemma i stan på vintern användbara mått på växthuset) inte gick att genomföra. Jag hade blivit tvungen att ha en permanent förbandslåda i växthuset, för alla gånger jag hade slagit huvudet blodigt i mekanismen.
Jag får därför fundera om. Återkommer till detta senare och kommer säkert att fråga om förslag och råd..

Nästa avsnitt blir då att ta en titt på vad som får det hela att fungera... :shock:

Författare:  Platis [ 13.33 2019-08-08 ]
Inläggsrubrik:  Re: Växthusautomation

Går det inte köra syrafast spik(A4) till fuktsensorerna eller det hjälper kanske inte? Annat material till den polen som korroderar?

Författare:  ds77 [ 15.36 2019-08-08 ]
Inläggsrubrik:  Re: Växthusautomation

Mäta med växelström kanske fungerar bättre.

Författare:  Hesabon [ 19.21 2019-08-08 ]
Inläggsrubrik:  Re: Växthusautomation

Jag tror jag skall försöka få tag på syrafasta och prova med dom.
Får nog ändå bli till vintern - kan ju prova i någon vanlig blomkruka...

Den kapacitiva sensorn gör ju ingen galvanisk kontakt till myllan, så den bör ju inte korrodera heller.
Jag måste nog experimentera litet med den principen, kopplingsschemat är ju enkelt:
Bilaga:
Kapacitiv_sensor.jpg

Författare:  farskost [ 20.46 2019-08-08 ]
Inläggsrubrik:  Re: Växthusautomation

Har du matningsspänningen påslagen konstant till sensorerna? I sådana fall borde livslängden öka genom att bara spänningssätta sensorn när du vill mäta och då fuktighet ändrar sig ganska långsamt borde en mätning i minuten eller så räcka?

Författare:  Hesabon [ 07.44 2019-08-09 ]
Inläggsrubrik:  Re: Växthusautomation

Ja det kunde också vara ett alternativ! :tumupp:
Jag har inget ledigt relä, men det finns ju plats ännu lite plats på moderkortet.

Detta skall jag lägga bakom örat!

Författare:  vojnik [ 12.19 2019-08-09 ]
Inläggsrubrik:  Re: Växthusautomation

Läste någonstans att det inte räcker med att stänga av strömmen till givarna mellan mätningarna. Elektroderna blir ändå uppätna med tiden. Man kan då skicka strömmen i en riktning genom elektroderna under en mätning och i den andra riktningen under nästa mätning.

Författare:  Hesabon [ 11.20 2019-08-11 ]
Inläggsrubrik:  Re: Växthusautomation

Idag regnar och blåser det här ute i havsbandet, så jag kan inte fortsätta måla verandan. Varför skall väderleksprognosen stämma just idag?! :?

Får väl då i stället ta itu med PROGRAMMET, en ÖVERSIKT.

Till att börja med får jag ursäkta för att programmet (som jag bifogar ett senare inlägg) med förklaringar är skrivet på svengelska.
Jag gjorde mina första program för en god bit över 40 år sedan, och då var det bara engelska som gällde. Som värst skrev vi programmen direkt i maskinkod (!), men oftast på något mellannivå-språk (Assembler, PL/I, PL/M, eller dylikt) på en Teletype-terminal som stansade en hålremsa, vilken sedan lästes in i minidatorn. Då var det 7-bitar ASCII som gällde, och programmen förstod inte Å, Ä och Ö, så de kunde inte användas.
I en terminal eller på en skrivare kunde man substituera tecknen [, \ och ] med skandinaviska tecken, men i programmen hade de en fördefinierad betydelse, så därför kunde de inte användas där.

Dessutom hade datorerna inte så mycket minne heller - vår "största" dator hade 20 kbyte (!!!) centralminne, så man skulle inte uppta det med onödiga förklaringar eller dylikt.
Trots det lyckades vi faktiskt klämma in avancerade FEM-analyser i den maskinen. Programmet upptog hela programminnet så när som på en byte. Det var bara en kille vars initialer kunde skrivas som en HEX-kod, men det gick inte vi andra med på, så den sista byten förblev oanvänd :D

Jämfört med det är ju en Arduino med 32 kbyte programminne rena lyxen!

Nåja, nu var det ju inte meningen att förfalla i sentimentala memoarer, men det är nu en bortförklaring till språket (det går inte att lära en [så här] gammal hund nya tricks!), samt att beskrivningarna i programmet säkert är bristfälliga och ibland t.o.m. kan vara svårförståeliga.
Vidare är det skäl att nämna, att jag definitivt inte är programmerare. Det var aldrig min inriktning heller - det kom liksom på sidan om. Jag har nog programmerat en hel del sedan dess, men bara för husbehov.
Flere saker kunde säkert göras bättre. Strukturer och flöden och namnen på rutiner och variabler kan synas konstiga och inkonsekventa - och det är de säkert också. Det är saker som det inte finns förklaringar på.
Jag har sett många eleganta programlösningar här på forumet, så jag vet att det finns skickliga programmerare här. Jag tar gärna emot både råd och förslag, det är både lärorikt och uppfriskande att se på något problem på ett nytt sätt. Därför: "Keep them coming!".

Så tillbaka till huvudspåret.

Först en kort redogörelse hur de olika minnena används:

Det finns endast en Joystick med vilken man konfigurerar systemet. Det betyder förstås menyer, menyer betyder mycket text, mycket text tar upp minne, och - tvärt emot min jämförelse med 70-talet - det har inte AVR328:n heller för mycket av.
Menytexterna skall vara enkla att komma åt så därför har jag placerat dom i Arduinons interna EEPROM där de upptar 512 byte (av 1024).

Lösningen möjliggör upp till 64 textsträngar med en sammanlagd längd av 382 byte, inklusive terminator (0x00) efter varje text. 128 byte upptas av vektorerna (till texterna) och två byte är reserverade för systemets pin-kod:
0x000 - 0x07F : Vektorer (64x word)
0x080 - 0x1FD : Textsträngar
0x1FE - 0x1FF : Pin-kod

Fotnot: Det finns en rutin som skriver ut "texsträng nr n" på displayen. "n" syftar till vektorn och vektorn pekar på början av den textsträng som skall skrivas ut. Varje text slutar med en s.k. null-terminator (0x00).

En liten nackdel är förstås, att det interna EEPROMet måste programmeras först m.h.a. ett skilt program, före man laddar ner själva bevattningssystemprogrammet. Bevattningsprogrammet alternerar inte på något sätt textsträngarna.
Att göra upp textsträngarna kan också vara omständigt. Därför har jag gjort upp ett Excel/LibreCalc-"program" där man bara matar in de textsträngar man vill ha, och det allokerar både vektor och minne och genererar färdig kod för EEPROM-laddningsprogrammet. Det är bara att föra över med Copy-Paste.
I det tabellprogrammet sätter man också pin-koden intialt, men den kan man sedan ändra på i programmet. Det finns ingen "factory default" för pin-koden. Ifall man kompilerat programmet för att använda pin-kod och man glömt koden, finns det en speciell input man skall ställa för att göra "pin code override".

En central målsättning var, att systemet skall klara en omstart (reset) utan att tappa tråden. Det betyder, att konfiguration och status måste sparas i icke-flyktigt minne och att programmet efter en reset först läser in dessa värden och på basen av det "hittar tillbaka" till den punkten där avbrottet kom.
Detta med att hitta tillbaka måste förstås på rätt sätt. Ifall systemet falerade onsdag morgon och startar upp igen först på lördag eftermiddag (ex. strömavbrott), så är det inte meningen, att alla bevattningar och statusrapporter mellan onsdag och lördag skall köras i en rad för att komma ifatt.
"Hitta tillbaka" betyder alltså, att:
- Konfigurationerna för zoner och lucka skall finnas kvar
- Ifall systemet var mitt i en bevattningsfas skall den slutföras
- Antalet omstarter loggas, men ifall bevattningar uteblivit under avbrottet, ett meddelande därom skicks till servern

Då jag samtidigt ville, att om Arduinon t.ex. pajade och jag ersatte den med en annan, skulle också den hitta rätt, utan att jag behövde mata in alla parametrar på nytt.
Därmed var det klart, att eftersom RTC-modulen också har ett EEPROM på sig, är det det som skall användas för:
- Inställningar och parametrar (zoner, växthus, system)
- Diverse statusinformation, flaggor, etc.
- Logg
mm.

Fotnot 2: I själva verket brukar jag uppdatera programmet så, att jag laddar ner den nya versionen på en annan Arduino Nano och sedan går jag ut i växthuset och swappar (utan att ens koppla ifrån strömmen, fast det rekommenderar jag ju inte åt andra... :cool: )
Igår tappade jag den ena Arduinon i vattentunnan :oops: men jag plockade upp den, blåste bort överloppsvattnet och värmde över en gasollåga tills fingrarna inte höll, och så var den ok igen.
...det där med tunnan inomhus...

Det externa EEPROMet är 4 kbyte (32 kbit) och där finns det gott om ledigt utrymme ännu. För närvarande använder systemet i princip endast 0x0000 till 0x01FF men inte ens då är alla platser allokerade. Vi får återkomma till allokeringen senare.

En annan utmaning var, att programmet skall sköta många uppgifter parallellt - bevattning, rapportering, självövervakning, interaktion med en eventuell användare, mm. För att klara detta elegant hade det behövts ett realtids-operativsystem, då hade man kunnat köra dom som separate processer och datautbyte mellan dom.
Men det har nu Arduinon inte och det skulle knappast rymmas i det minnet heller. Så det gäller att få ihop det på annat sätt.
Det syns i hur uppgifterna och rutinerna är uppdelade.
För närvarande upptar programmet 78% av minnet och då är långt ifrån allt implementerat ännu. Den andra kritiska faktorn, nämligen SRAM-minnets användning, är, att 33% upptas av globala variabler. Många av dessa kommer från biblioteksrutiner vilka jag inte velat tumma på, eftersom man då får göra det varje gång biblioteket updateras också.
Jag har inte ens försökt förstå var den kritiska gränsen går, d.v.s. hur mycket som vid något tillfälle maximalt upptas av dynamiska variabler och subrutin-call, men jag vill nog inte höja på det där värdet
Är det nån som har en uppfattning om hur man kan försöka ta reda på den saken? [utan en riktigt bra simulator]

Till slut en översikt över "loopen":
Bilaga:
Program_oversikt.png

Programmet loopar alltså igenom:
run30()
En rutin, som kontinuerligt pollar klockan och miljöparametrar för att visa på displayen.
Ifall klockan är en jämn halvtimme kallar den på andra rutiner för loggning, starta bevattning, mm.

tempShow()
Uppdaterar displayen med de värden run30() pollat.

Test: Joystick klickad?
Det betyder användarinteraktion och då öppnas huvudmenyn med rutinen Menu10().

Test: phase > 0
Denna flagga sätts tidigare i loopen antingen i run30() (programmerad bevattning, [1..3]) eller av användaren (manuell bevattning [4])
och då startas själva bevattningen i rutinen watering(). Flaggan nollas efter utförd bevattning.

Författare:  pstrand [ 11.42 2019-08-11 ]
Inläggsrubrik:  Re: Växthusautomation

Hej. Odlar själv ganska mycket i växthuset vi har. Hur gör du med tillsatser av gödning? Vi vattnar nästan varje gång med gödselvatten.

Författare:  Hesabon [ 12.36 2019-08-11 ]
Inläggsrubrik:  Re: Växthusautomation

Nu med chilli blir det där ju litet speciellt.
Buskarna växer sig stora, största f.n. över 140 cm och jag måste slänga dom varje höst, för jag kan inte ha dom och övervintra här ute och inte heller kan jag ta in dom till stan.
De har då under säsongen utvecklat ett ganska omfattande rotsystem, så minst 1/3 av jorden följer obönhörligen med fast jag skakar dom hur mycket som helst.
Här ute finns det inte mylla att ta ifrån, det här är gammal havsbotten, så det kommer bara sten och sand emot om man sätter i spaden.
Det betyder, att jag varje vår får sätta till minst 1/3 prima, färdigt gödslad trädgårdsmylla hämtad i säckar från fastlandet.
Utöver det har jag brukat gödsla i bevattningsvattnet (i sprutkanna) ungefär en gång i månaden och det verkar ha räckt alldeles bra.

Senaste vår bytte jag all mylla, så i år har jag ännu inte satt till något. Måste tänka på det där också till nästa säsong.
Det skall väl gå bra då också att sätta i vattnet ungefär samma mängd som jag gjort tidigare en gång i månaden. :humm:

Det finns gott om gropar och svackor på gårdsplanen som behöver utfyllnad, så den gamla jorden kommer nog väl till användning.

Tidigare, när jag hade örter och grönsaker var det annat. Då blev myllan kvar och då gödslade jag mera regelbundet.

Jag har en bekant som är trädgårdsmästare, så jag brukar fråga henne om råd. Jag kan inte påstå, att jag skulle ha någon grön tumme...
Det som jag gärna vill lära mig, men inte ännu vågat pröva på är hur chillibuskarna skall beskäras så att de producerar mera utan att växa sig för stora.

Författare:  tingo [ 21.27 2019-08-11 ]
Inläggsrubrik:  Re: Växthusautomation

Vedlig bra og detaljert beskrivelse - et fantastisk prosjekt!
Som nevnet tidligere i tråden (ds77, vojnik) så bør kapasitiv fuktighetsmåling skje med bytte av polaritet på spenningen mellom hver måling. Og det er sikkert bra om spenningen er avskrudd når det ikke måles.
Vet ikke om det er mulig å få til med de sensorene du bruker.

Författare:  Hesabon [ 09.07 2019-08-12 ]
Inläggsrubrik:  Re: Växthusautomation

PROGRAMMET DEL 2

Nu vore det kanske riktigt att inte börja med menyerna, utan i stället beskriva hur bevattningen styrs och först sedan hur man styr det via menyerna.
Systemet idag är trots allt ett resultat av många utmaningar, många lösningar, många nya problem och många kompromisser. Därför tycker jag man inte slaviskt behöver följa praxis ”först problemen och utmaningarna, sedan lösningen”, utan kan ta genvägen och beskriva systemet som det är och försöka beskriva de mest avgörande stötestenarna på vägen.

Därför börjar jag alltså med

MENYSYSTEMET

Menysystemet är uppbyggt enligt följande:

Bilaga:
Menyer.jpg


Varje meny hanteras av sin rutin, namngivet MenuXX() där första siffran ’X’x anger nivån och den andra siffran är ett löpande nummer från 0 uppåt. Rutinerna heter alltså typ Menu10(), Menu42(), o.s.v.

I programmet är några olika rutiner centrala för menyhanteringen:
(vissa av dessa vill ha parametrar, kolla i programlistningen för detaljer)

MenuXX() - Skapar själva menyn och tolkar och hanterar användarinteraktionen.
printEstr() - Skriver ut menytexterna på displayen
RollMenu() - "Rullar” igenom menyn så som användaren kommenderar med Joysticken.
ReadJoystick() - Hanterar Joystickens rörelser upp, ner, vänster el. höger, (i programmet benämns dessa North, South, West och East) samt klickningar.

Fotnot: Alla MenuXX()-rutiner använder inte RollMenu(), ty ibland har det krävts en litet avvikande hantering med parametervärdena. Helheten är alltså litet blandad. Ingenting är perfekt.

Jag har försökt förklara det mest centrala i varje rutin i programlistningen, så jag upprepar inte det här. Ifall något är oklart, eller ifall du vill ifrågasätta något, så är det välkommet med frågor och kommentarer!

Då jag skrev dessa rutiner var min avsikt att, om möjligt, göra dom generella och modifierbara för användning i andra program. Det är fritt fram att låna och kopiera, men ifall det på vilket vis eller i vilken form som helst går vidare till någon eller någonstans, så bör du i programlistningen skriftligen hänvisa till mig och till EF!!!

Fotnot: Joysticken är analog, så man kan använda den till mycket noggrannare saker än dom fyra huvudriktningarna. I det här programmet används den dock som en ”digital” joystick och man kan ställa gränsvärdet för när avvikelsen från centrerläget skall räknas som ett väderstreck.
Rutinen returnerar endast ett värde, vilket motsvarar ett av joystickens nio lägen, med eller utan klickning. Totalt alltså 18 olika värden. Titta i programlistningen för detaljer.
Rutinen kan kallas i två olika moder: En absolut mod, d.v.s. då väntar man bestämt på användarinteraktion och en som bara avläser Joysticken ”som den är just nu” utan att vänta på någon explicit interaktion.
Båda moderna behövs i det här programmet.

Normalt då programmet rullar, visar displayen datum, tid, temperatur, lufttryck, luftfuktighet och ljus.
Bilaga:
Display.jpg


Med ett tryck på Joysticken öppnas Meny 10 där användaren sedan går vidare genom att navigera med Joysticken och välja. Avslutningsvis väljer man ”Avsluta” och återgår då till datum/tidsdisplayen.

Medan användaren navigerar och konfigurerar snurrar bevattningsövervakningen i bakgrunden. Ifall det då blir tid för att vattna och/eller sända loggdata hanteras det med prioritet, medan användarinteraktionen pausar, för att sedan återtas då bevattningen är gjord.

Alla menyer återgår till den kallande menyn, utom Menu21() där man skall ge pinkod för att kunna ändra inställningar. Ifall pinkoden är fel avslutas menyn och programmet återgår till datum/tidsdisplayen. På pin kiv!

Menyerna där man ändrar på några parametrar skall man först ”Spara” och efter det skall man explicit välja ”Tillbaka”. Detta för att ex. menyn där man sätter data för olika zoner görs en zon i taget och då vill man inte börja om hela vägen från början för nästa zon.

Övriga förklaringar till menyschemat:
Ord inom klamrar, ex. [Logg] betyder, att då visas loggen, men det finns inget man ändrar på.
Ord inom parentes ”(Tillbaka)” avser, att det finns inget särskilt val ”Tillbaka”, utan det motsvaras av ett klick på Joysticken.
Undantaget är pinkoden i Meny 21. Där matar man pinkoden genom att navigera till och rulla siffrorna, och kvitterar med ett klick. Sedan blev det då rätt eller fel, och då går man antingen vidare, eller så åker man tillbaka till början.

Kort om DISPLAYEN
Displayen är en pytteliten grafisk LCD, 128x64 pixel. Den har ingen inbyggd font så den måste hanteras i programmet.
Sådana fonter tar upp mycket minne. Därför har jag begränsat fonten till en med endast versaler, gemener är knappt läsbara på den lilla displayen.
För displayen har jag använt en biblioteksrutin som heter ” U8X8_SSD1306_128X64_NONAME_HW_I2C”.
Den innehåller massor av alternativ, både för displayer och fonter, men jag valde fonten ” u8x8_font_saikyosansbold8_u”, för läsbarhetens skull.

Nu är det förstås tyvärr så, att en sådan font inte innehåller de skandinaviska tecknen ÅÄÖ! Här är jag alltså tillbaka på 70-talet som jag beskrev tidigare. :doh:
Jag har därför editerat fonten så, att tecknen [\] visas som ÄÖÅ.
Dessvärre är fontdatat i det biblioteket definierat helt vansinnigt. Pixlarna i fonten skrivs ömsom som oktalkoder, ömsom som ASCII-tecken. Dessutom är det besvärligt att hitta rätt pixelkoder och rätt ställe där de skall läggas in, för att åstadkomma de nya tecken man vill.

Det andra problemet är, att varje gång biblioteket uppdateras (du vet, i Arduino utvecklingsmiljön kommer texten ungefär ”Updates to some of your libraries are available”) så skriver uppdatering över de eventuella ändringar du gjort. Det är ett ständigt strul!

Jag gjorde därför ett hjälpprogram med Excel/LibreCalc som visar varje tecken och där jag sedan kan ändra pixelkoderna (oktal eller ASCII) och se verkan. Dessutom ger den ut det slutliga datat som man sedan överför till bibliotekets font fil med Copy-Paste! :vissla:
Bilaga:
Font_converter.jpg

Sedan lönar det sig förstås att spara den filen separat så, att när det kommer uppdateringar, skriver man bara över just den fontfilen.

Fortsätter med mera menyer i nästa inlägg.


...men förstås! Kanske tid att ladda upp programmet nu?
Bilaga:
VH_4v1.txt

Författare:  MrIzoard [ 21.26 2019-08-12 ]
Inläggsrubrik:  Re: Växthusautomation

Än en gång, många tummar upp för ditt projekt :tumupp: :)

Författare:  Lasp [ 21.40 2019-08-12 ]
Inläggsrubrik:  Re: Växthusautomation

Det där är riktigt bra. Både som projekt men kanske mest för idéer och flödet kring detta.
Som jag har sagt, det gläder mig att se andra jobba hårt för en bra lösning! Bevattning eller Bro. Bra gjort!

Författare:  Hesabon [ 16.41 2019-08-13 ]
Inläggsrubrik:  Re: Växthusautomation

Tack för uppmuntringarna!
Jag är uppriktigt förvånad över intresset för saken, överträffar stort vad jag hade väntat mig.

PROGRAMMET, DEL 3

Före vi går till Inställningarna, kort om övriga menyer:

Meny 20 – Logg
”Logg” är nog en mindre överdrift. I själva verket är det som en HEX-dump av det externa EEPROM-minnet. Displayen visar ex.
0000 xx xx xx xx
0004 xx xx xx xx
0008 xx xx xx xx
... osv. sammanlagt 8 rader per skärm.
Inte särskilt klarspråkigt! Det gäller alltså att veta vad varje minnescell har för funktion.

Med Joysticken rullar man uppåt eller neråt en skärm i taget.

Orsaken till detta fusk var, att det blev för omständigt och minneskrävande att klämma in någon form av beskrivande eller förklarande text, plus att det tog mycket längre tid att rulla fram till det man sökte, eftersom det kunde ligga många steg framåt.

En klickning bär tillbaka till föregående meny.

Meny 23 – Status
Anger status på Luckan och vattennivån i reservoaren och i bevattningstanken.
Retur med ett klick.

Meny 22 – Växla nu
Är till för att manuellt beordra bevattning av en, flera eller alla zoner, eller för att manuellt ställa luckan.
Bevattningen startar efter att man valt Avsluta i meny 10.

Så kommer vi då till INSTÄLLNINGAR

Inställningarna är delade i Klocka, Växthus och Zoninställningar. Klockinställningen behöver knappast presenteras närmare.
Växthusinställningarna är vidare delade i Lucka, System och Pinkod.

Meny 52 – Pinkod
Sätter ny pinkod (4 siffror) vilken sparas i det interna EEPROMminnet på minnesplats 0x01FE och 0x01FF i formatet 0x12 resp. 0x34 för pinkod ”1234”.

Meny 50 – Lucka
Luckans styrning är de facto inte implementerad ännu, för jag blir tvungen att tänka om. :humm:
Luckan skall drivas med en motor med utväxling (12VDC, 200 rpm) och halvvägs planerat hade jag tänkt mig en gängstång som skjuter en [lång] mutter fram och tillbaka, och från den medelst en hävarm skulle öppna och stänga luckan.
Konstruktiionen verkade då bli rätt skrymmande och skulle ha kommit i huvudhöjd och därför bara vara i vägen. Utan att ens planera färdigt beslöt jag fundera på någon annan lösning och TAR GÄRNA EMOT UPPSLAG!!

En tanke är ett ”pneumatiskt” system, d.v.s. motorn skulle skjuta en kolv i ett rör, varifrån man drog en slang till en annan kolv under luckan. I alla fall skulle motordelen då kunna placeras mera på sidan om. Har dock inte funderat längre än det på hur det skulle se ut.

Luckan öppnar sig som ett gångjärn uppåt, yttersta kanten rör sig ca. 40 cm. Angreppspunkten behöver knappast vara så långt ut, för luckan är inte tung.
Feedbacken från luckan var tänkt att utgöras av en glidpotentiometer som med en stång fästes vid linjkärrörelsen. Avläsning via en analog ingång.

Hur som helst, parametrarna i menyn är tänkta som följande:

Mode – [0 | 1 | 2]
Fotnot: Ovanstående betyder att parametern kan ges värdena 0, 1 eller 2. Av utrymmesskäl (på displayen) är jag tvungen att använda kodning i stället för klartext. Med bara 16 tecken per rad blir det trångt!

0 – Luckan deaktiverad
1 – Luckan följer temperaturgränserna (Luckan skall vara stängd vid Min och helt öppen vid Max)
2 – Luckan följer tidsinställningarna

Jag har haft i baktanke även ett fjärde alternativ, nämligen en kombination av (1) och (2) så, att luckan följer temperaturen, men endast inom det valda tidsområdet. Utanför det skulle luckan alltid vara stängd. Tänkte ändå att det kan vara onödigt finlir så här i början och vill först hämta erfarenheter med bara de ovannämnda alternativen.

I och med det föregående förklarar sig de andra inställningarna i denna meny sig själva.

Så gör vi ett hopp till
Meny 42 – Zon (n)
I denna meny ställer man parametrarna skilt för varje zon (n):

Aktiv [0 | 1] Ingen bevattning ifall deaktiverad [0].

Digi/Ana [1 | 2] Väljer ifall fuktövervakningen skall följa sensorns digitala eller analoga signal.
Den analoga följer ”globala” inställningar på tröskelvärdena när det är för torrt och när det är för vått och den tröskeln gäller då för alla zoner [som följer analog sensorering] (se Meny 52).
Tröskeln för den digitala signalen kan ställas med en trimmer på sensorn och då kan man ha stora variationer från en zon till en annan.
Den här grejen kommer jag troligen att ta bort och bara kolla den analoga signalen. Med erfarenheterna hittills verkar de vettigare.
Kommer inte ihåg vad jag tänkte tidigare, varför den digitala ens skulle behövas. Kanske var det att man skulle kunna odla kaktus i en zon och ris i en annan (?) :wacko: Tror att de kanske har aningen olika fuktbehov...

Bas ggr [1 | 2 | 3] Här väljer man basbevattningen, d.v.s. hur många gånger om dagen zonen får vatten (1, 2 eller 3 ggr).
Tiden för bevattningen kan inte ställas individuellt, utan den sker vid tre förutbestämda klockslag enligt följande:
1 gång => kl 14
2 ggr => kl 08 och 20
3 ggr => kl 08, 14 och 20
Jag kom nämligen fram till, att, speciellt som systemet skall kunna klara av en Reset utan att tappa tråden och att man därför behöver ett antal signalflaggor vad som är på gång, blir det programmässigt mycket enklare att hantera fasta klockslag.
Återkommer till detta när jag beskriver bevattningsprocessen.

Bas antal [1 | 2] Man kan alltså välja att ge en eller två doser per bevattningsgång. Den totala dagsmängden per zon kan därmed vara 1, 2, 3,4 eller 6 doser.
Hittills har det inte behövts mer än en dos per zon per dygn (ca. 1.2 ltr/dos).

Extra % [10% - 100%] - Tröskeln för tilläggsbevattning, d.v.s. under vilken zonen får extra vetten (anges i 10%). Jag kommer troligtvis att ta bort denna konfiguration också. Den har mer eller mindre ersatts med inställningarna i meny 52.

Extra antal [1 | 2] Antal doser för tilläggsbevattningen.

Den sista menyn att beskriva är:

Meny 52 – System
Den här menyn är den senaste jag lagt till, och det var för jag märkte att det fanns ett behov. Denna meny är ännu på "experimental" -stadiet.

Fukt max [x10] [5..25] – ställer övre tröskelvärdet för jordfuktigheten ovanom vilket bevattning inte sker. Den analoga signalen från fuktsensorerna läses med en 8-bits A/D-konverter, så parametervärdet x10 motsvarar uppmätta värden direkt.

Fukt min [x10] [1..25] – ställer det nedre tröskelvärdet under vilket zonen får en extra dos vatten.

F.n. var det tänkt att fuktighetsövervakningen skulle ske kl 11:00 och kl 17:00, men är i programlistningen i föregående inlägg deaktiverad, för att jag blev förargad över att sensorpiggarna oxiderar så att mätningarna inte ens hålle rstreck :evil:

Tid (timeout) [1..25] – den tid x10 sekunder under vilken en pump är förväntad att ha pumpat färdigt. Om denna tid löper ut stängs pumpen av och ett fel loggas.


Eftersom det nu blev bara torr text utan bilder, lägger jag till en bild som visar på en annan fördel med "ett eget privat växthus".


Jag gjorde en flyttbar bänk och benstöd, att ställa på kanten av odlingsbänkarna.
Där kan jag sitta och läsa en bok och lyssna på hur chillina växer eller hur regnet skvalar - i allsköns ro.
Stolen fick av barnbarnens föräldrar genast namnet "Undanflykten". :lol:
Bilaga:
Undanflykten.jpg

Författare:  Lasp [ 17.01 2019-08-13 ]
Inläggsrubrik:  Re: Växthusautomation

Jag läser just nu en bok
"Han tog ett par höga kliv över ogräsbeståndet och satte sig på huk intill något som mer liknade rader och där plantorna var lägre. Bladen såg smala och stilettliknande ut."
Så vissa odlingar kan vara av mer styrt intresse.
Men helt klart , som sagt, en läsvärd tråd.

Författare:  Vortex [ 08.27 2019-08-15 ]
Inläggsrubrik:  Slangar Re: Växthusautomation

Trevligt projekt med många fina tips till alla och fanstastiskt fin dokumentation.
Men jag tror att du skall direkt byta ut alla slangar till ogenomskinliga.
Erfarenheten visar att det blir bakterie- och algtillväxt i alla vattenledningar och solljus gynnar.
Rätt som det är släpper det iväg och fastnar i en ventil, pump eller munstycke.
Det finns exempelvis svart pneumatikledning hos Festo eller SMC.

Tips från en med mångårig växthuserfarenhet.

Författare:  Hesabon [ 11.21 2019-08-15 ]
Inläggsrubrik:  Re: Växthusautomation

Citera:
...det blir bakterie- och algtillväxt i alla vattenledningar och solljus gynnar.


Tack för det tipset!
Slangarna är förstås genomskinliga, för att man skulle se att och när vattnet strömmar.
En annan orsak varför dom blev valda är, att de är mjuka och böjliga. Pneumatikslangar har jag inte kollat, men skall göra det nu.
Än så länge har jag inte sett någon algtillväxt i dom, men däremot ganska rikligt av det i "saftkannan".
Jag måste säkert försöka "mörklägga" (skugga) den då på något sätt.

Sedan ett tack till alla kommentarer om dokumentationen! Tyvärr ser det nog bättre ut än det är.
Visst finna alla bilder, ritningar, schemor, excel-tabeller mm. sedan länge, men sammanställningen och brödtexten uppstår nog först on-the-fly
när jag skriver inläggen.

Därför kommer det också i delar. För att följande del inte existerar ännu... :eh:

Författare:  MadModder [ 15.45 2019-08-15 ]
Inläggsrubrik:  Re: Växthusautomation

Det näst bästa är gröna slangar om du absolut vill se vattnet. Brukar finnas att köpa där de säljer akvariegrejer.
Gröna växter reflekterar ju grönt ljus för att de inte använder det. Släpper man då bara in grönt ljus så växer det rätt dåligt. :)

Författare:  Hesabon [ 10.42 2019-08-18 ]
Inläggsrubrik:  Re: Växthusautomation

MadModder: WoW! Det var intressant! Det där visste jag inte.
Då i början var det förstås viktigare med de genomskinliga slangarna. Då när man inte ännu visste om systemet ens skulle fungera! :wink:
Tänker nog byta ut dom till andra nu. Måste kolla vad man kan få tag på.


Sol igår och verandan målad! :tumupp: Då kan vi gå till:

PROGRAMMET, DEL 4

Allokeringen i parameterminnet – det externa EEPROMet – framgår ur kommentarerna till respektive rad i #define-delen i programlistningen.

En sammanfattning:
0x0000 – 0x007F: Zonparametrar, 8 bytes per zon. Studera rutinen för Meny 42 för mera exakta uppgifter.
0x0080 – 0x008F: Generella och växthusparametrar.
0x0090 – 0x009F: Signal- och statusflaggor.
0x00A0 – 0x00AF: Den senaste jordfuktmätningen (det analoga värdet, 8 bitars A/D).
0x00B0 – 0x00BF: TBD
0x00C0 – 0x00FF: Bevattningskön. (!)
0x0100 – 0x03FF: ”Under utveckling”, d.v.s. används för logg, meddelanden, felmeddelanden, mm. men den exakta allokeringen och betydelsen kommer med största sannolikhet att ändras.

Logiken i bevattningen ligger i bevattningskön. Den blev och heta ”kö” eftersom jag i början hade tänkt mig en FIFO-buffer där en rutin skuffar på nya uppgifter i bakändan, och en annan rutin betar av dem i framändan. Detta hängde ihop med att jag tänkte göra hela programmet interrupt-drivet.

Det hade säkert varit möjligt att få ett sådant upplägg att fungera, men, av orsaker jag nämnt även förut, d.v.s. att programmet mera skulle fungera som en s.k. ”state machine” och bl.a. närhelst skulle tåla t.o.m. en Reset, så fick jag aldrig någon rätsida på det.
Därför fick jag tänka om.
Det finns dessutom en annan hake! Det är långsamt att skriva till ett EEPROM. Efter varje skrivkommando måste man för säkerhets skull lägga in en ”delay” för att försäkra sig om att minnet hänger med.
Jag märkte detta då programmet gjorde alla möjliga konstiga saker i de mest enkla operationerna. Efter att jag lagt in ett ”delay(10)” efter varje skrivoperation blev det fason.

Enligt vad jag erfar jobbar Interrupt och delay mycket dåligt ihop...

Nu är då bevattningskön i stället en "dagorder" som utgörs av 4 bytes per zon, där de tre första anger bevattning vid de fasta bevattningstiderna (0800, 1400, 2000) och den fjärde är för manuellt beordrad bevattning.
Vid midnatt skrivs följande dags bevattningsschema in i kön (från zon-parametrarna). Noll för ingen bevattning ifrågavarande tidpunkt, etta för en gång och tvåa för två gånger. (Se rutinen presetwatering() i programmet).

Bevattningsprogrammet vet då vid respektive tidpunkt vilka zoner som skall vattnas och hur många doser. När en zon är färdigt vattnad ställs denna byte till noll. Därmed ”vet” bevattningsprogrammet efter en eventuell Reset precis hur långt det kommit i bevattningen.

Dessutom kunde jag konstatera två fördelar som ”bonus”:
- Ifall bevattningen avstannat p.g.a. att vattnet tagit slut, kan man också manuellt (Meny 20, Logg) enkelt se vilka zoner ännu inte blivit vattnade.
- Eftersom displayen rymmer fyra bytes per rad kommer bevattningskön (i Logg-displayen Meny 20) att synas som en prydlig tabell med respektive klockslag i egna kolumner. Med en enda blick ser man hela dygnets [kvarstående] bevattningsschema!

Enbart bevattningskön räcker dock inte till som signalering i fall av en Reset. Det behövs också en signalflagga (EEphasePtr) som berättar att en bevattning har påbörjats men inte slutförts. Det är med hjälp av den som programmet vet ifall det blivit avbrutet mitt i en bevattningsfas.
Signalflaggan antar värdet 1,2 eller 3, för respektive bevattningstillfälle (el. fas), eller 0 då ingen bevattning är på gång.

Ifall man beordrar manuell bevattning (i Meny 22, Växla nu) så sätts det en etta i kolumn 4 i bevattningskön för den valda zonen, och bevattningsfasen sätts till 4.

Det där låter kanske litet krystat, så det är bäst att titta på programflödet. Jag hänvisar först till ett tidigare inlägg där jag beskrev loop()-rutinen.
Den kallar på rutinen run30().
Bilaga:
run30_flow.jpg


Run30() pollar kontinuerligt tid, datum, temperatur, lufttryck, luftfuktighet, ljus och IR-ljus och sparar datat i en global matris hline[16].
Ifall tiden inte är en ”hel halvtimme” återgår kontrollen till loop():en och displayen uppdateras från matrisen hline[].
Run30() är designad att vara möjligast kort så, att sekunderna på displayen skall gå jämnt. Detta är inte ett utfall av fåfänga, utan då sekunderna uppdateras jämnt är det det bästa sättet att med en kort blick på displayen konstatera, att systemet beter sig som det bör.

Ifall tiden å andra sidan är en jämn hel- eller halvtimme, kallar run30() på en annan rutin, int30(), som pollar övriga sensorer och kallar på rutinen som sänder loggdatat över radion till servern. En flagga "Tflag" sätts också, för att förhindra att int30() kallas flera gånger under samma minut som tiden visar "en jämn halvtimme".
Ifall klockan är midnatt kallar den på rutinen som gör upp följande dags schema, och ifall det är tid för en bevattningsfas, sätter den bevattningsflaggan till respektive värde.

Kolla programlistningen för rutinen int30(). Man kan mycket enkelt lägga till en ”krok” även för nya uppgifter som skall hanteras vid speciella klockslag. Ex. kl 17 var satt en koll av jordfuktigheten, vilken eventuellt startat en extra bevattning, men den är f.n. inaktiverad p.g.a. korrosion.

Slutligen återgår då kontrollen till loop():en. Först där kontrolleras ifall en bevattningsfas är annonserad, och då startas den i rutinen watering().

För att en eventuell användarintervention inte skall orsaka försummelse av ett loggnings- eller bevattningstillfälle kallas run30() med jämna mellanrum även i ReadJoystick -rutinen. Tid, temperatur, mm. uppdateras förstås inte då på displayen, men ifall det blir tid för bevattning, får användaren vänta ett slag.

Det finns flera andra rutiner och hjälprutiner i programmet, men jag tror inte alla behöver beskrivas så här i detalj. Kolla listningen.

En sista kommentar om programmet: Allt emellanåt försöker programmet hålla vakthunden i styr.

Vakthunden utgörs av en timer (555) som f.n. tajmar ut efter ca. 80 sekunder ifall den inte matas och klappas. Jag satte tiden ”tillräckligt” lång så att den inte i misstag skall avbryta en pumpning, vilken kan ta en stund.
Sedermera har det ju visat sig, att en pumpning tar max ca 20 sek, så jag kommer nog att förkorta vakthundens tålamod också.


Nästa blir sedan att titta på vad som ännu skall göras. Återkommer.

Författare:  rikkitikkitavi [ 22.09 2019-08-19 ]
Inläggsrubrik:  Re: Växthusautomation

Hesabon skrev:
Citera:
...det blir bakterie- och algtillväxt i alla vattenledningar och solljus gynnar.


Tack för det tipset!
Slangarna är förstås genomskinliga, för att man skulle se att och när vattnet strömmar.
En annan orsak varför dom blev valda är, att de är mjuka och böjliga. Pneumatikslangar har jag inte kollat, men skall göra det nu.
Än så länge har jag inte sett någon algtillväxt i dom, men däremot ganska rikligt av det i "saftkannan".
Jag måste säkert försöka "mörklägga" (skugga) den då på något sätt.


Därför kommer det också i delar. För att följande del inte existerar ännu... :eh:


Verkligen fint bygge och väl dokumenterat.

Utöver algtillväxten- PVC slang åldras och styvnar med tiden. UV ljus skadar även slangen om den inte är skyddad mot detta.

Författare:  Lasp [ 22.21 2019-08-19 ]
Inläggsrubrik:  Re: Växthusautomation

Jag har sagt det tidigare, kan upprepa mig! Djävligt roligt att följa. En tråd som skulle kunna bli del av en bok!
Så jag skäller, i takt med watchdoggen. Viktiga hundar är bäst!

Författare:  Hesabon [ 18.17 2019-08-20 ]
Inläggsrubrik:  Re: Växthusautomation

Tackar igen för feedbacken!

Just nu är det rätt mycket på jobbet och det stör hobbyverksamheten. Det kan nog hända att jag inte hinner skriva den utlovade fortsättningen förrän i början av september.
(Bra att man har ett system som sköter växthuset... :wink: )

Därför tänkte jag i stället bjuda på excel-filen med vilken man kan skapa textsträngar för att sedan ladda upp dem i Arduinons interna EEPROM.
Fungerar både i Excel och i LibreCalc.
(Läs fliken med förklaringar hur tabellen fungerar.)
Bilaga:
HexTex-kalkylator-Nano-20190807.xlsx


Jag bifogar också kompanjonen till tabellen, d.v.s. uppladdningsprogrammet. Listningen innehåller inga förklaringar, men programmet är så simpelt att det nog knappast ens behöver det.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
/* Uploads text strings to the internal EEPROM, Copyright H 2018, 2019 */

#include "stdlib.h"
#include "EEPROM.h"

byte vect01[16] = {0x00,0x80,0x00,0x84,0x00,0x88,0x00,0x8C,0x00,0x90,0x00,0x95,0x00,0x99,0x00,0x9D}; // 0000
byte vect02[16] = {0x00,0xA1,0x00,0xA6,0x00,0xB4,0x00,0xBC,0x00,0xC3,0x00,0xCE,0x00,0xD4,0x00,0xDA}; // 0010
byte vect03[16] = {0x00,0xDF,0x00,0xE7,0x00,0xEC,0x00,0xF5,0x00,0xFC,0x01,0x04,0x01,0x0A,0x01,0x14}; // 0020
byte vect04[16] = {0x01,0x1A,0x01,0x1F,0x01,0x25,0x01,0x2A,0x01,0x30,0x01,0x34,0x01,0x3A,0x01,0x43}; // 0030
byte vect05[16] = {0x01,0x4B,0x01,0x55,0x01,0x5F,0x01,0x69,0x01,0x6D,0x01,0x71,0x01,0x78,0x01,0x82}; // 0040
byte vect06[16] = {0x01,0x88,0x01,0x8E,0x01,0x94,0x01,0x9B,0x01,0xA0,0x01,0xA4,0x01,0xAB,0x01,0xB4}; // 0050
byte vect07[16] = {0x01,0xBA,0x01,0xBD,0x01,0xC1,0x01,0xC6,0x01,0xCB,0x01,0xD0,0x01,0xD4,0x01,0xD9}; // 0060
byte vect08[16] = {0x01,0xDD,0x01,0xE7,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // 0070

byte text01[16] = {0x53,0x5C,0x4E,0x00,0x4D,0x5D,0x4E,0x00,0x54,0x49,0x53,0x00,0x4F,0x4E,0x53,0x00}; // 0080
byte text02[16] = {0x54,0x4F,0x52,0x53,0x00,0x46,0x52,0x45,0x00,0x4C,0x5C,0x52,0x00,0x44,0x41,0x47}; // 0090
byte text03[16] = {0x00,0x4C,0x4F,0x47,0x47,0x00,0x49,0x4E,0x53,0x54,0x5B,0x4C,0x4C,0x4E,0x49,0x4E}; // 00A0
byte text04[16] = {0x47,0x41,0x52,0x00,0x41,0x56,0x53,0x4C,0x55,0x54,0x41,0x00,0x50,0x49,0x4E,0x4B}; // 00B0
byte text05[16] = {0x4F,0x44,0x00,0x5C,0x50,0x50,0x4E,0x41,0x20,0x54,0x45,0x4D,0x50,0x00,0x46,0x55}; // 00C0
byte text06[16] = {0x4B,0x54,0x2E,0x00,0x54,0x52,0x59,0x43,0x4B,0x00,0x4C,0x4A,0x55,0x53,0x00,0x49}; // 00D0
byte text07[16] = {0x52,0x20,0x4C,0x4A,0x55,0x53,0x00,0x41,0x4C,0x4C,0x41,0x00,0x54,0x49,0x4C,0x4C}; // 00E0
byte text08[16] = {0x42,0x41,0x4B,0x41,0x00,0x4B,0x4C,0x4F,0x43,0x4B,0x41,0x00,0x56,0x5B,0x58,0x54}; // 00F0
byte text09[16] = {0x48,0x55,0x53,0x00,0x44,0x41,0x54,0x55,0x4D,0x00,0x5C,0x50,0x50,0x4E,0x41,0x20}; // 0100
byte text10[16] = {0x54,0x49,0x44,0x00,0x4C,0x55,0x43,0x4B,0x41,0x00,0x4D,0x4F,0x44,0x45,0x00,0x53}; // 0110
byte text11[16] = {0x54,0x5B,0x4E,0x47,0x20,0x54,0x45,0x4D,0x50,0x00,0x53,0x54,0x5B,0x4E,0x47,0x20}; // 0120
byte text12[16] = {0x54,0x49,0x44,0x00,0x41,0x4B,0x54,0x49,0x56,0x00,0x44,0x49,0x47,0x49,0x2F,0x41}; // 0130
byte text13[16] = {0x4E,0x41,0x00,0x42,0x41,0x53,0x20,0x47,0x47,0x52,0x00,0x42,0x41,0x53,0x20,0x41}; // 0140
byte text14[16] = {0x4E,0x54,0x41,0x4C,0x00,0x45,0x58,0x54,0x20,0x25,0x20,0x78,0x31,0x30,0x00,0x45}; // 0150
byte text15[16] = {0x58,0x54,0x20,0x41,0x4E,0x54,0x41,0x4C,0x00,0x4D,0x41,0x58,0x00,0x4D,0x49,0x4E}; // 0160
byte text16[16] = {0x00,0x53,0x54,0x41,0x54,0x55,0x53,0x00,0x48,0x55,0x56,0x55,0x44,0x4D,0x45,0x4E}; // 0170
byte text17[16] = {0x59,0x00,0x53,0x50,0x41,0x52,0x41,0x00,0x56,0x5B,0x4E,0x54,0x41,0x00,0x52,0x45}; // 0180
byte text18[16] = {0x4E,0x53,0x41,0x00,0x53,0x59,0x53,0x54,0x45,0x4D,0x00,0x4E,0x49,0x56,0x5D,0x00}; // 0190
byte text19[16] = {0x53,0x59,0x53,0x00,0x41,0x56,0x42,0x52,0x59,0x54,0x00,0x42,0x45,0x4B,0x52,0x5B}; // 01A0
byte text20[16] = {0x46,0x54,0x41,0x00,0x53,0x54,0x41,0x52,0x54,0x00,0x4F,0x4B,0x00,0x45,0x52,0x52}; // 01B0
byte text21[16] = {0x00,0x53,0x5B,0x4E,0x44,0x20,0x44,0x41,0x54,0x41,0x00,0x46,0x55,0x4C,0x4C,0x00}; // 01C0
byte text22[16] = {0x54,0x4F,0x4D,0x00,0x56,0x5B,0x4C,0x4A,0x20,0x5A,0x4F,0x4E,0x00,0x56,0x41,0x54}; // 01D0
byte text23[16] = {0x54,0x4E,0x41,0x20,0x4E,0x55,0x00,0x56,0x5B,0x58,0x4C,0x41,0x20,0x4E,0x55,0x00}; // 01E0
byte text24[16] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x12,0x34}; // 01F0

word vectpnt;
word textpnt;
byte once = 0;

void setup()
{
  Serial.begin(9600);
}

void writeVectors()
{
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt,  vect01[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 16,  vect02[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 32,  vect03[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 48,  vect04[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 64,  vect05[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 80,  vect06[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 96,  vect07[vecpnt]);
    delay(5);
    Serial.println(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x000E; vecpnt++)
  {
    EEPROM.write(vecpnt + 112,  vect08[vecpnt]);
    delay(5);
    Serial.println(" . ");
  }
}

void writeStrings()
{
  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 128,  text01[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 144,  text02[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 160,  text03[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 176,  text04[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 192,  text05[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 208,  text06[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 224,  text07[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 240,  text08[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256,  text09[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 16,  text10[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 32,  text11[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 48,  text12[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 64,  text13[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 80,  text14[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 96,  text15[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 112,  text16[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 128,  text17[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 144,  text18[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 160,  text19[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 176,  text20[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 192,  text21[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 208,  text22[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 224,  text23[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 240,  text24[txtpnt]);
    delay(5);
    Serial.println(" . ");
  }
}


void loop() {
  if (once == 0)
  {
    Serial.print("EEPROM writing starts in 3 seconds ");
    delay(1000);
    Serial.print(" . ");
    delay(1000);
    Serial.print(" . ");
    delay(1000);
    Serial.println(" . EEPROM writing starts now");
    delay(100);
    Serial.print("Writing vectors ");
    delay(100);
    writeVectors();
    Serial.print("Writing strings ");
    delay(100);
    writeStrings();
    Serial.println("Writing done!");
    once = 1;
  }
  while (once != 0) {
  Serial.println("Loading text strings to internal EEPROM is done. You can load the main program now.");
  delay(10000);
  }
}

Man kunde förstås göra programlistan kortare om man kombinerade looparna, men eftersom det är ett program som bara laddas ner och körs en gång, så tyckte jag inte det var viktigt.


Fotnot: Fast jag använder excel ganska mycket blir jag allt emellanåt ändå förvånad över HUR användbart det i själva verket är!
Jag brukar ofta använda excel för att skapa G-kod till CNC-fräsen också. Speciellt då när man behöver göra någon geometrisk figur är det enklast att låta excel räkna koordinaterna och skapa koden, och så bara Copy och Paste till en textfil, och så kör man.
MYCKET användbart!

Författare:  Zhorts [ 07.02 2019-08-28 ]
Inläggsrubrik:  Re: Växthusautomation

Som så många andra redan sagt: Spännande projekt, och väl beskrivet! :)

Jag byggde ett väldigt enkelt bevattningssystem för användning inomhus, vilket gjorde att jag var paranoid när det gällde att systemet låser sig med pump på och skvätter ut allt vatten utan kontroll med fuktskador som följd. Därför satte jag ett andra relä på inkommande spänning till pumpen, styrt av en liten andra-processor. Om inte huvudsystemet sparkar på denna en gång i sekunden så får inte pumpen ström, hur mycket det än försöker.
Däri kan man också enkelt lägga lite gångtidslogik, så att systemet inte kör för länge och vattnar för mycket.
Något liknande skulle ju kunna lösa dina problem med att reläerna klickar till vid uppstart, samt undvika att eventuella tankemissar i programmeringen tömmer ut hela stora tanken...

Författare:  Hesabon [ 19.43 2019-09-10 ]
Inläggsrubrik:  Re: Växthusautomation

Det blev en liten paus i skrivandet p.g.a. jobbet. Under de senaste tre veckorna har jag inte hunnit åka ut till ön mer än två gånger av och an utan övernattning.
Bevattningssystemet har kommit mer än väl till pass.
Så här kommer det nog dessvärre att fortsätta hela september ut, men sedan lättar det.

Senaste söndag åkte jag ut för att fylla på vatten och kunde samtidigt skörda det som var färdig.
Chilin hör ju hemma i betydligt varmare trakter och många i det bälte runt jorden som bara har två årstider, d.v.s. sommar och ”o-sommar”. Dessa arter blommar nästan ständigt och är därför också tacksamma för växthusodling, för de producerar också frukt hela tiden. Ett år satte jag fröna i jorden i slutet på december. Följande vår blev de första chilina färdiga redan i april och sedan fortsatte det ända tills oktober då jag stängde ön för vintern. Buskarna hann dock bli ganska stora hemma på fönsterbrädet i stan, så de var besvärliga att flytta ut till växthuset.

Det problemet finns det två lösningar till: den ena är förstås att inte börja så tidigt, den andra lösningen vore att lära sig beskära buskarna rätt. Det senare alternativet är förstås bättre, men det får jag jobba på när jag har mera tid...

Här är söndagens skörd.
Bilaga:
Chilis-20190908.jpg

Ca. 50 st av arterna Aji Cristal (styrka 5-6 av 10), Cayenne (5-6), Fire Flame (7-8) och India Red (8).
Jag har redan tidigare plockat ungefär lika mycket och upskattar att det finns minst 4 ggr lika mycket på gång - antalsmässigt.

Två arter har än så länge bara börjat rodna: Pequante (5) och Ramiro (0 – barnchili) och de producerar mycket stora och tunga frukter. (Ramiro är stora som avlånga paprikor).
Viktmässigt har jag alltså skördat bara några futtiga procent.

För att sedan övergå till automatiken och det som ännu skall göras eller bör förbättras, d.v.s. en

Återstår att göra-lista:
1. Vädringsluckans mekanik samt styrning i programmet.
2. Nya fuktsensorer (som inte korroderar) + programändringar.
3. Byta ut slangar (till mörka för att förhindra algtillväxt).
4. Förbättra fästena för spridarrören så de fixeras i rätt läge.
5. Konstruera solskydd för elektroniken.
6. Arrangera något slags automatisk vattenpåfyllning, t.ex. regnvatten från stugans takrännor.
7. Datainsamling [programmet i Raspberry PI]
8. Dataöverföring över internet (från RasPI databas till …?)
9. Möjliggöra kontroll och styrning av bevattningsystemet från RasPI och över internet.
10. Fundera över vad jag skall göra med allt insamlat data...

Puh! Den listan blev lång när jag riktigt började fundera...

De punkterna skall jag ta upp i kommande inlägg.

Författare:  Hesabon [ 13.12 2019-10-09 ]
Inläggsrubrik:  Re: Växthusautomation

Hej igen,

Det blev en lååång paus. Augusti och september var jobbiga, men NU!
Nu blev man då pensionerad, så nu är inte arbetet och tar tid från hobbyerna längre. Nu får kunderna själva planera sina stordatorsystem, den här dinosaurusen har lagt av!

Så nu är det frugan, stugan och hobbyerna som gäller.

Vädringsluckan var det, ja:

Förra vintern funderade jag på olika lösningar, men kunde inte göra något konkret, för jag saknade de väsentliga måtten – hade helt enkelt glömt att ta dem förra hösten.

Generellt var planaen den, att med en motor (har en 12 VDC motor med utväxling som ger 200 rpm) snurra på en gängstång och få linjärrörelse genom att på den förskjuta en gängad "kälke" och sedan överföra det till vertikal rörelse som öppnar och stänger luckan.
Det var alltså utgångsläget.

Problemet jag har är, att jag är lång och växthuset inte alltför högt. Jag vill inte ha något utskjutande som man sedan slår huvudet i varje gång man går där.

Bilaga:
VH_taklucka1b.jpg


Det streckade området måste alltså förbli hinderfritt.

Det andra kravet är, att motorn och lägesgivaren inte skall vara direkt under luckan eller dess kant, för vid regn läcker det alltid in en del vatten.

Efter funderande på olika metoder – från vridningar med kugghjul till pneumatiska ställdon – tänker jag ändå tillbaka till att en mekanisk sax kanske trots allt blir enklast.

Principskiss:
Bilaga:
VH_taklucka2b.jpg

Motorn (M) vrider på gängstången, vilket förskjuter saxens ena ben. Det andra benet måste vara fast, eftersom jag inte vill ha djup neråt och för att gängstången har bara en gänga. Det vore ju förstås elegant med en gängstång med vänster gänga för ena benet och höger för det andra, men så blir det nu inte.
Det betyder också, att leden (stödpunkten) mot luckan inte kan vara fast utan flyttas beroende på luckans läge.

När luckan är stängd är saxen i läge ”blå” och fullt öppen i läge ”röd”. (Eventuellt kan det bli bättre att ha saxen åt andra hållet, d.v.s. motorn skjuter på det rörliga benet för att öppna luckan. Det kan hända att man aningen kan förkorta gängstången, samt att upphänginen av den passar bättre in mot mot ramverket. Det där får jag titta närmare på ännu.

Som lägesgivare tänkte jag mig en glidpotentiometer (P). Rörelsen på en sådan är ca 60 mm och det bör vara enkelt att hitta på saxens ena ben.

Vid <15 C skall luckan vara stängd och vid >25 C skall den vara fullt öppen. Gränserna skall förstås vara inställningsbara, men just 15/25 är ganska vanligt.

Däremellan tänkte jag mig 3-4 jämnt fördelade mellanlägen. Kontroll varje halvtimme och ställande av luckan därefter är tillräckligt. Då torde luckan inte stå och fladdra hela tiden heller.

Med M8 gänga (stigning 1.25 mm), 200 rpm och en linjärrörelse nästan 60 cm blir det ju ingen racerfart direkt. Nästan 2,5 minuter (!) mellan ändlägena.
Kunde ju ta en snabbare motor, men då förlorar jag i momentet.

Jag tror ändå inte att det skall vara något problem. Värmen i växthuset kan nog stiga rätt snabbt, speciellt när solen bryter fram genast efter ett åskmoln, men jag tror ändå att man inte behöver ändra mer en ett, absolut högst två steg i taget. En förflyttning mellan de lägsta stegen blir då inte många sekunder och jag uppskattar, att det nog i det temperaturområdet som är känsligast och förorsakar flest lägesändringar..
Mellanrummet mellan de två översta lägena kommer ju att ta betydligt längre tid, eftersom den lodräta rörelsen blir liten, men i sådan värme behövs det inte heller trimmas så ofta. Det läget kommer dessutom att behövas mest då man vill hålla öppet hus för insekterna, och då är temperaturstyrningen vanligtvis ändå urkopplad.

Så ser alltså funderingarna ut just nu, men jag har inte ännu börjat bygga på det. Inget annat finns än motorn och gängstången, så jag tar mycket gärna emot synpunkter, kritik och alternativa förslag.

Författare:  nullebulle [ 20.48 2019-10-09 ]
Inläggsrubrik:  Re: Växthusautomation

inte för att det tillför ärendet nått med visst är det skönt att bli pensionär så man kan hålla på med sina egna hobbisar på heltid :)

Författare:  Hesabon [ 15.09 2019-10-16 ]
Inläggsrubrik:  Re: Växthusautomation

Som jag skrev tidigare, så visade de nuvarande jordfuktsensorerna vara misslyckade. Det går hela tiden en ström mellan elektroderna, och eftersom de inte är rostfria, korroderar den ena elektroden mycket snabbt. Naturligtvis kunde jag byta ut dom till A4:or, eller så koppla strömmen bara för den stund som man gör mätningen, som någon föreslog.
Jag tänkte ändå undersöka hur/om det skulle fungera med en kapacitiv sensor.
En kapacitiv sensor fungerar ju så, att man har en oscillator som oscillerar på en frekvens som bestäms av mätsondens kapacitans. När kapacitansen ändras, ändras också frekvensen. Utsignalen leder man till att ladda en kondensator, högre frekvens ger kommer då att ge högre spänning.
Parallellt med kondesatorn finns ett [rätt stort] urladdningsmotstånd så att spänningen tillräckligt snabbt följer variationerna i frekvensen.
Nu vet jag inte hur mycket kapacitansen ändras med jordfuktigheten, så jag måste experimentera.
Sagt och gjort, jag designade en sond av ett tvåsidgt kretskort. Målet var 100 pF:
Fräsning (måste skruva fast kortet för att kunna få det i position då jag ju skulle fräsa andra sidan också)j:
Bilaga:
Kap_sensor-1.jpg

Autolevelling av sida två:
Bilaga:
Kap_sensor-2-autoleveller.jpg

Nästan färdigt:
Bilaga:
Kap_sensor-3-sid2.jpg

Färdigt fräst.
Bilaga:
Kap_sensor-4-ca100pF.jpg

Måtten är 34 x 135 mm och målet var alltså 100 pF.
Jag ville egentligen ha ännu större kapacitans, men jag hade bara 1.6 mm tjockt kretskort.
Ifall det fungerar skall jag skaffa tunnare kort (högst 0.8 mm) så då blir kapacitansen högre.

Mätning:
Bilaga:
Kap_sensor-5-107pF.jpg

107pF blev det - tillräckligt nära :tumupp:

Till slut några lager båtlack:
Bilaga:
Kap_sensor-6-Lackering.jpg


Bara det torkat skall jag börja laborera.

Författare:  Hesabon [ 19.25 2019-10-28 ]
Inläggsrubrik:  Re: Växthusautomation

Dags för första säsongens FACIT.

Nu har jag stängt växthuset för den här säsongen. Oktober månad har varit eländig – jag kommer inte ihåg när det senast varit lika mörkt och regnigt som i år. Det gjorde, att tillväxten avstannade helt då ljuset inte räcker till.
Jag gav därför upp och igår tog jag bort alla resterande chillin och hela bevattningssystemet, rengjorde slangar, filter, vattenbehållare och pumpar, o.s.v.

Dags alltså att titta på erfarenheterna och vad som bör förbättras eller utvecklas vidare till nästa säsong.

Jag har redan tidigare nämnt de saker som ännu inte blivit förverkligade/implementerade och behandlar inte dom sakerna nu, utan tittar på det som fungerade och hur bra (eller illa) det fungerade:

1. Bevattningen i sig fungerade utmärkt. Tack vare det klarar växhuset sig utan tillsyn i nästan två veckor (jämfört med hur det var förut då jag minst två ggr per vecka måste vattna).

2. Principen för pumpandet, d.v.s. att pumpa från en reservoar till en mindre behållare och därifrån pumpa ”en dos” i taget fungerar bra. Inget behov av att övervaka vattenmängderna desto noggrannare.

3. Vattenspridarna fungerade över förväntan bra, d.v.s. i själva verket precis så som jag högst vågade hoppas. Den mekaniska upphängningen bör dock förädlas en aning för stabilitetens skull.

4. Jordfuktsensorerna fungerar nog ganska bra, men den ena ”sonden” (galvaniserade spikar) korroderar fruktansvärt snabbt då metoden går ut på att mäta resistansen i jorden.
Bilaga:
Fuktsensor-korrosion.jpg

Jag har börjat experimentera med en kapacitiv givare. Jag skall redogöra för rönen i ett skilt inlägg, men så mycket kan jag redan säga, att jag börjar nog luta åt att helt enkelt byta ut de nuvarenade sonderna till syrafasta rostfria dito och dessutom med ett relä koppla strömmen till dom bara då mätningen utförs så som Platis och farskost föreslog i sina inlägg redan 08.08.2019. Tack för de idéerna!

5. Fuktsensorernas boxar har hållit tätt, men skruvarna har rostat. De var alltså inte ens elförzinkade. Jag får byta ut alla dom skruvarna…
Bilaga:
Fuktsensor-skruvar.jpg


6. En dag i augusti haltade systemet och gick inte igång trots att vakthunden gjorde Reset.
Jag lokaliserade hastigt problemet till radiomodulen, kopplade loss den helt och då gick systemet igång igen som vanligt. Jag vet att några riktigt soliga dagar hade det varit alldeles för hett i boxen och misstänkte att isoleringsplasten hade gett efter så att det sedan blev någon kortslutning på radiomodulen.
För att undvika störningar och bättra på sändningseffekten på radiomodulen (en nRF24L01+) måste man skärma elektroniken. Jag gjorde det genom att först linda några lager livsmedels-plastfilm runt som elektrisk isolering, sedan ett lager aluminiumfolie som skärm (som jordas i antennens jord) och därefter ytterligare några lager plastfolie för att hålla allt på plats.
Bilaga:
Radiomodul1.jpg


Radiomodulen är längs inne på bottnen i boxen och man kommer inte åt den utan att först plocka ut allt annat. Därför har jag låtit den vara och väntat på säsongslutet.
Den hade ju faktiskt ingen funktion ännu, eftersom jag inte hunnit göra något åt den server (Raspberry PI) som skall ta emot statistikdatat och lagra det.
Nu när jag tog loss modulen var det bara att konstatera, att isoleringen smultit.
Bilaga:
Radiomodul2.jpg

nRF-chipet hade tydligen blivit så hett, att plasten där ovanpå smält och några komponenter var kortslutna. Jag vet inte ännu om modulens vandrat till gudarna, eller om den fungerar. Får prova det senare.

Summan av kardemumman: Jag måste bygga något slags solskydd för hela boxen. Det betyder också, att jag måste fundera om var jag placerar ljus-sensorn, eftersom den ju inte skall avskärmas.

Men sedan den gången i augusti har systemet varit igång utan störningar! Ganska bra för att, trots allt, vara en [evig?] prototyp!

7. Kina-pumparna fungerar riktigt bra och ”håller trycket”. De är av centrifugaltyp och har inte visat några svaghetstecken.

8. Slangarna skall inte vara genomskinliga, det blir algväxt i dom precis så som Vortex tipsade (inlägg 15.08.2019). Algväxten har dock inte varit så illa som jag befarade, men nog tydlig.
Jag skall byta ut slangarna till nästa säsong. Dessutom bör jag åstadkomma något slags lock till både vattenreservoaren och tanken, för det fanns en massa dränkta myror och gråsuggor på bottnen av dom. Pumparna har dock inte störts av dom, det fanns flera kadaver i vattenfiltret.

9. En Arduino Nano kan inte heller simma.

Totalt sett så har systemet fungerat mycket tillfredställande! Jag har inte stött på några fatala tanke- eller designfel – allt som kommit fram går att åtgärdas och utveckla. Vinterhalvåret är alltså räddat! :D

Ja, så var det förstås skörden.
Igår tog jag bort alla resterande chilin som synes vara nära att börja mogna. Resten slängde jag.
Det blev sex plastpåsar med sammanlagt 484 st (!!)
Jag får ha dom på fönsterbrädet i solen(?) och med konstljus på natten i några dagar för att mogna – de som orkar.
Ifall en chili ens litet börjat få färg kan man bra mogna den inne i värmen med litet extra ljus. Det brukar gå på några dagar. Dessa chilin kan bli aningen mindre eldiga än då de hinner mogna färdigt på busken, men så är det på dessa breddgrader.
De som inte ens hunnit börja mogna blir sedan aldrig röda fast man skulle bada dom i ljus hur länge som helst. En del chilin är goda fastän dom inte mognat (ex. Aji Cristal), medan andra bara är att slänga. Inmget att gråta över.

Slutresultatet för säsongen blir ändå närapå 900 chilin :shock: , eller nästan 8 kg (färskvikt).
Förutom barnchilina vilka äts färska har jag i år torkat hela skörden, torrvikten blir då sammanlagt drygt ett kilogram.

Författare:  Zhorts [ 08.01 2019-10-31 ]
Inläggsrubrik:  Re: Växthusautomation

Roligt att läsa om dina försök!

Det kan säkert bli ganska ordentligt varmt med direkt solinstrålning i ett växthus, men luften generellt borde ju inte bli så fasansfullt varm. Alltså borde det räcka med en platta nånting imellan solen och elektroniken, och så se till att det finns möjlighet till luftflöde mellan.
Ytorna i en bil i gassande solsken kan bli uppåt 70-80 grader på våra breddgrader, vilket fortfarande borde vara lägre än elektronikens specar. Det skulle alltså kunnat gå bra ändå, bara du hade haft ett bättre material än plastfolie. En stump av krympslang, kanske?

Om du behöver få upp antennen så är det ju säkert bättre med en bit antennkabel och sedan gömma elektronikboxen i något skuggigt hörn...

Galen idé: Sätt upp en solpanel som får ladda ett batteripack. Då kan du få ut både solinstrålning (ur panelen) och bli energineutral.

Har du funderat på att montera in tilläggsljus? Jag har en liten blomma hemma som i två år stog och långsamt vissnade på vintern. Köpte en växtlampa för drygt ett år sedan som får stå på lite oregelbundet på vinterhalvåret, och nu har den satt nya friska blad och växer (långsamt). Kanske ett sätt att förlänga säsongen för att få klart mer av sista skörden?

Författare:  Hesabon [ 19.40 2019-11-08 ]
Inläggsrubrik:  Re: Växthusautomation

Ja just något sådant hade jag tänkt mig beträffande solskärmen. Ex. en fanerskiva som man kan vika undan då man skall komma åt boxen.

Någon solpanel i växthuset hade jag dock inte tänkt mig, eftersom det skulle innebära en egen regulator och ytterligare ett batteri. Det är absolut ingen galen idé, men jag har ju nu redan solenergi i stugan och växthuset står så nära (kabeln är ca 15 m), att jag inte får några nämnvärda effektförluster, eftersom jag överför 24 VDC.

Det där med tilläggsljus har funnits med som en "eventuell" framtida vidareutveckling. Det skulle ju förstås innebära LED-belysning - något annat kommer inte på fråga. Måste kanske räkna på det litet... :humm:

Så några kommentarer om den

KAPACITIVA FUKTSENSORN (alltså fortsättning på inlägget 9.10.2019)

Jag satte fem lager båtlack, blev tillsammans ungefär 0.25 mm och började sedan testa.
I fria luften är kapaciteten alltså 107 pF
Nedsänkt i vatten: 333 pF (en matsked koksalt i vattnet gjorde ingen mätbar skillnad).
Nedsänkt i fuktig mylla: 222 pF (myllan just så fuktig som jag skulle uppskatta vara ”100%” ).

På papperet ser det ju ut som att variationen skulle vara tillräckligt stor så att VF-omvandlingen ger maximalt utslag.
...men så blev det ju sedan inte…

Så här designade jag sensoreklektroniken:
Bilaga:
KapSensor.png


Kort om kopplingen:

- U1/LM555 är en astabil oscillator vars frekvens varierar med sondens kapacitans.
- Q1 är en ”pump” som laddar upp kondensatorn C4. Spänningsnivån över C4 kommer att variera med frekvensen, R4 ser till att kondensatorn också urladdas mellan pulserna.
- U2B fungerar som linjeförstärkare med maximal ingångsimpedans för att inte störa pumpen. Linjeförstärkaren behövs. Det går inte att skicka spänningsnivån i en 620 pF kondensator över flere meter kabel utan störningar.
- U2A är kopplad som en komparator för att åstadkomma en digital signal som växlar vid önskat tröskelvärde (ställs in med RV1).

Förutom sonden är de kritiska komponenterna R1, R2, C3, C4 och R4. De värden som finns i ritningen gav det bästa resultatet.Frekvenserna blir då ca 373khz vid snustorr mylla och 775kHz vid "100% fuktig" mylla.

Spänningsskillnaden (över C4) mellan helt torr och 100% fuktig mylla blir trots allt inte större en tiondelar av 1 V. Hur jag än räknade och varierade på C3, C4 och R4 fick jag inte bättre differens.
Dessutyom visade det siga, att variationen är temperaturberoende!

Den kapacitans som tillkommer av den fuktiga myllan (ca 115 pF med den sensoryta jag testat) är beroende på myllans dielektricitetskonstant. Den ändrar med temperaturen, och eftersom spänningsområdet i den analoga utsignalen är så litet blir felet rätt besvärligt.

Detta kan förstås lösas på flere sätt. Det enklaste vore, att höja spänningen till ex. till 12 V och sedan normalisera (förskjuta) utsignalen så den alltid hålls under 5V (så att man inte bränner analogingångarna). Variationen blir ändå ca 2.4x större och skulle göra mätningen exaktare. Detta skulle ju förstås kräva litet extra elektronik.
Det elegantaste vore ändå att göra något slags temperaturkorrigering. Även detta kräver extra elektronik.
I vartdera fallet är det stora problemet, att tilläggselektroniken skall göras separat för varje sensor, och då blir det hela genast mycket omständigare.

Jag kommer därmed fram till, att den bästa lösningen är, att använda de nuvarande fuktsensorerna.
Jag får byta ut sonderna (de oxiderande spikarna) till syrafasta M4 gängstänger. Funderade också på syrafasta spikar, men det blir mycket dyrare.
M4 AISI316 kostar 3.9 € + några muttrar, en ask (minsta 250 st) 100x3.4 mm spikar AISI316 går på flere tior... :doh:

Den kapacitiva sensorn läggs därför på hyllan och avskrivs som en ”erfarenhet”.

...och så är det bara att gå vidare...

Författare:  ToPNoTCH [ 13.03 2019-11-09 ]
Inläggsrubrik:  Re: Växthusautomation

Jag har även jag konstruerat ett automatiserat bevattningssystem som är modul byggt med en WIFI/WEB baserad styrenhet.

Jag har har dock en lite annorlunda approach där jag mäter varje planta och utifrån en algoritm tilldelar vatten baserat på skillnaden mot önskat värde.
Varje modul hanterar 8 plantor (dvs. 8 ventiler och 8 sensorer per modul) och sitter i serie på en RS485 bus.

Motivet var att det skulle skala rejält och i nuvarande utformning klara det av 4095 plantor, men gränssnittet stödjer dock bara 40st i dagsläget.
Systemet är "klart" men kommer monteras först nästa säsong (dock inte hos mig för jag odlar inte) så det är möjligt att jag skriver en tråd om det i framtiden.

Men för att komma till saken.
Jag hade flera utmaningar vad gäller val av sensorer, ventiler osv precis som du.
Jag kollade mycket på just fuktsensorer och konstaterade att egentligen alla billigare förefaller vara förbrukningsvaror, då de förr eller senare ärgar eller på annat sätt påverkas negativt av fukt.
På samma sätt så var de billigaste ventilerna oftast okapslade och med oskyddad mekanik vilket sannolikt inte fungerar över tid i ett växthus med hög relativt luftfuktighet.

Jag pratade mycket med "beställaren" och vi kom fram till att snåla på dessa komponenter sannolikt skulle medföra frustration då felaktiga mätvärden eller "hängande" ventiler sabbar.
Mot den bakgrunden har jag använt följande:
Sensor:
LÄNK
Dessa förefaller vara antingen i någon form av plast eller keramik. Det känns nästan som keramik. Dom är dyrare än de vanliga PCB baserade men tanken är att de kommer ha längre livslängd kopplat till materialet.
Medföljande komparator använder jag ej utan kör dessa direkt på egen A/D omvandlare.

Ventiler:
LÄNK
Dessa finns hos många säljare. Här är jag inte lika övertygad om att valet var perfekt då dessa har ganska lite genomsläpp, samt att de blir ganska varma om man kör dom "torrt"

Som en extra säkerhet så anskaffades dessa LÄNK som jag använder på huvudmatningen av vatten, för att dubbel kontrollera att det inte går något flöde när ventilerna "skall" vara stängda.

Systemet nyttjar självfall från en stor tank som fylls på när nivån är låg.
Här hittade jag en klurig sensor som jag använde för max-min LÄNK
Klurig då den kan känna av rakt genom tanken vägg. Även tankpåfyllningen har en flödessensor som säkerhet för att säkerställa att inte det hänger sig.

Hoppas någon av dessa tankar kan vara till hjälp

Författare:  farskost [ 22.59 2019-11-09 ]
Inläggsrubrik:  Re: Växthusautomation

Den här tråden har nu lyckats inspirera mig till den nivån att jag letat fram mitt egna, sedan många år avsvalnade, projekt för att styra bevattning. Tack för inspirationen! :D

När det gäller fuktsensorer labbade jag då med en kapacitiv sensor som baserades på en xor grind enligt schemat nedan. Den ena sensorplattan kopplades till jord, den andra till "SENS_PLATE_LOW" och ett pulståg skickades in på "EXEC_PULSE". Ut från xor-grinden kommer det komma pulser långa som den tid det tar att ladda upp sensorplattan, genom R7, till den spänning då grinden detekterar etta. Genom att välja periodtiden i pulståget något större än den tiden det tar att ladda upp en sensor dränkt i vatten gick det att få relativt bra analoga signaler som gick från 0 V till 3.3 V (eller vilken matningsspänning man nu väljer) när jorden gick från torr till fuktig.

Om jag kommer ihåg det rätt fick jag den designen från ett gammal schema baserat på en logikkrets med fyra xor-grindar där två agerade oscillator, en drev sensorplattan och den sista mätte pulsen och omvandlade denna till den analoga utspänningen.

Författare:  Hesabon [ 15.25 2019-11-11 ]
Inläggsrubrik:  Re: Växthusautomation

farskost skrev
Citera:
Den här tråden har nu lyckats inspirera mig


Tack för det! Det betyder, att det främsta målet med sådana här trådar är uppnått!

Jag skall absolut kolla den kopplingen och experimentera lite mera...
En annan sak jag tänkte kolla är, att eftersom LM555s utgång är kapabel att både driva och sänka upp till 200 mA så skall jag i min koppling försöka med en omvänd pump (blir väl närmast en elektronisk sugpump då.. :wink: ), d.v.s. koppla C4 mot +5VDC och pumpa med en NPN-transistor i stället.
Skillnaden är den, att då borde jag kunna få spänningen att ligga närmare 0-nivån, vilket betyder att jag på linjeförstärkaren U2B kunde sätta två motstånd så det blir en lämplig förstärkning på utsignalen.
Lite mera experimenterande väntar.

ToPNoTCH: Tack för tipsen. Du har ett mycket mera ambitiöst projekt. Lycka till!
Den fuktsensor du länkade till verkar ha exakt samma elektronik som de jag använt, men själva sensorelementet är då något annat. Jag försökte aldrig med originalen (PCB), eftersom jag var övertygad om att de oxiderar på nolltid. Däremot hade jag inbillat mig, att stålspikarna skulle hålla litet längre, trots att de varken är AISI 304 el. 316.
När jag sökte ventiler kom också de där ventilerna upp, men jag valde "öppna" p.g.a. priset. Priset ca. hälften, plus att de jag valde fanns med gänga som direkt passade till vanliga ("billiga?") slanganslutningar. Tiden får utvisa om jag gjorde rätt.
Första säsongen gick det ju, men vi får se. Kanske det går att smeta in dom med någon tätningssmörja el. dylikt.

Alla tidsangivelser är UTC + 1 timme
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/