Kategori: Vattensensor
Z-Uno-baserad växtbevattning för Z-wave
Sommaren är snart här och det är hög tid att planera för bevattningen av sina blommor.
Här på kontoret har vi två amplar med murgröna i fikarummet, som hängt med ett bra tag. För närvarande ser de dock väldigt trötta ut, troligtvis för att vi slarvat med bevattningen. Det bevattningssystem vi tidigare byggt av en WeMos D1 Mini har tagits ur bruk, men tanken nu är att bygga en Z-wave-enhet som kan ta över detta göra istället. Så här går vi igenom hur man kan bygga en sådan enhet med Z-Uno, en slags korsning mellan Z-wave-enhet och Arduino! Den har ett flertal pinnar, och kan därför användas till flera olika enheter samtidigt. Exempelvis till att vattna flera olika blommor samtidigt.
Planeringsfas
Oftast när man ska bygga ett system, som kanske blir aningen komplext, bör man planera arbetet i förväg så man inte rör till det under arbetets senare del. I vårt fall har vi två amplar och den befintliga hårdvaran som finns är två stycken fuktsensorer och två relän som styr pumparna som pumpar fram vattnet. Vår lista med hårdvara är alltså följande:
En Z-Uno, själva hjärtat i hårddiskenTvå stycken peristaltiska pumparTvå stycken fuktsensorer En reläbräda med två relänKablage för anslutning, breadboards och vad man nu kan tänkas vilja använda
Hur man representerar detta i Z-wave-styrenheten går att välja själv, men jag tänker mig en av/på-enhet per relä (för manuell styrning av pumparna) och ett sensorvärde per fuktsensor. Även en enhet för att slå på och av den automatiska bevattningen kanske är roligt att implementera.
Fuktsensorerna bör inte vara spänningssatta konstant, då de korroderar i fuktig jord när de spänningssätts. Därför kommer de endast aktiveras korta stunder i samband med avläsning, så bör livslängden bli åtminstone ett halvår/år. Detta gör vi med en av de digitala utgångarna på vår Z-Uno som endast aktiveras när det är dags att läsa.
Vi läser av sensorerna analogt för att få ett roligare värde än 0 eller 1, detta resulterar, när sensorn går på 3.3V, i ett digitalt värde mellan 0~1000 som vi omvandlar till procent (högre värde = torrare jord). OBS – kom ihåg att fuktig jord leder ström bättre än vatten, och torr jord sämre än luft. Så när man försöker hitta de faktiska värdena som sensorn kommer läsa av gäller det att testa den i dess rätta element.
Nu kan vi börja skissa upp “komponenterna” som ska anslutas till Z-Unon!
Pumpar/relän – IN1/IN2 ansluts till en varsin digital utgång på Z-Uno. Dessa sätts till “låg” för att aktivera respektive relä:Jordfuktsensorer – där en digital utgång på Z-Uno styr spänningen till sensorkortet för att öka livslängden
Eftersom vi har två uppsättningar av allt kan vi då konstatera att vi behöver 3 outputpinnar (en per pump, en för spänningsmatningen), två analoga inputs (för fuktsensorerna). Totalt 5 pinnar, förutom spänningsmatning av Z-Uno osv. Efter en koll på Z-Unons referenskort (finns på sida 11 här) har jag beslutat att använda följande pinnar:
ADC1 + ADC2 (vi undviker ADC0 då den är Interrupt pin)Pinnar 9-11 för de digitala behoven
Nu går vi över på de mjuka bitarna istället!
Parametrar
Innan vi börjar skriva mjukvaran vill vi definiera vilka parametrar enheten ska ha. Jag har kommit fram till följande:
Tidsintervall mellan avläsningsperiodernaTidsintervall mellan avläsningsperioderna medan vi vattnarVilken typ av automation vi vill haMin/Max värde från fuktsensorernaTidslängd för bevattningTorrhetsgrad för att starta bevattning, pump 1 respektive pump 2 (0-100%, default 30%, 0 = av)Fuktighetsgrad för att stoppa bevattning, pump 1 respektive pump 2 (0-100%, default 60%, 0 = av)Slå på/av automatiken
Mjukvara
Nu har det blivit dags att hugga tag i programmeringen. Eftersom vi använder Arduino IDE är upplägget bekant. Vi kodar i C, med en setup-fas och en loop-fas (som körs om och om igen så länge enheten är på). Värt att notera är att Z-Uno har några funktioner som särskiljer sig, men det finns en uppsjö exempel på exempelsidan för Z-Uno. Jag har tittat på exemplen Multilevel Sensor (för fuktsensorerna) och Control Relay (för pumparna).
Koden är ganska lång, så att gå igenom den i blogginlägget kommer vi inte att göra, möjligtvis i ett separat inlägg i så fall. Men den finns bifogad här. Den är utökad med kod för att kunna koppla in upp till fyra uppsättningar med fuktsensorer och pumpar. Följ bara instruktionerna i koden för att kunna styra fler blommor.
Register över tillgängliga parametrar
64 – Tid i minuter mellan varje fuktmätning65 – Tid i sekunder mellan varje fuktmätning vid bevattning. OBS – sätt aldrig till lägre än 30 sekunder då det är ett hårt krav i Z-Wave + standarden66 – Automationstyp:0 = All automatik avstängd1 = Bevattning sker om fuktighet är under värdet inställt i parameter 80 – 83. Tid för bevattning är enligt parameter 692 = Bevattning sker om fuktighetsvärdet är under parameter 70-73 och vattnar tills värdet i parameter 80-83 är uppnått.67 – Det lägsta motståndet som kan uppmätas (i.e värdet i blöt jord)68 – Det högsta motståndet som kan uppmätas (i.e värdet i torr jord)69 – Tiden i minuter som bevattning skall ske i automationsläge 170 – Fuktighetsgraden i % för start av bevattning med pump 171 – Fuktighetsgraden i % för start av bevattning med pump 2 72 – Fuktighetsgraden i % för start av bevattning med pump 373 – Fuktighetsgraden i % för start av bevattning med pump 4 80 – Fuktighetsgraden i % för stopp av bevattning med pump 181 – Fuktighetsgraden i % för stopp av bevattning med pump 2 82 – Fuktighetsgraden i % för stopp av bevattning med pump 3 83 – Fuktighetsgraden i % för stopp av bevattning med pump 490 – Om automationen skall gå igång automatiskt vid uppstart 91 – Antal minuter som bevattningen max får köras. Prioriteras alltid över parameter 69 och parameter 80-83
Källor
Arduino + YL-69Z-Uno introduction
Inga granar ska behöva dö – Kodexempel
Många är ni som efterfrågat hur man gör för att få sin julgran att blinka när den behöver vatten – frukta inte, vi har ett kodexempel!
(Förutom en Fibaro HC2 behöver du även en vattensensor och en brytare)
--[[
%% properties
407 value
%% events
%% globals
--]]
local brytare = 412 -- Fjärrströmbrytarens idnummer - ska även skrivas in högst upp i scenen
local sensor = 407 -- Vattensensorns idnummer
local delay = 2000 -- Hur snabbt ska granen blinka?
if ( tonumber(fibaro:getValue(sensor, "value")) < 1 ) then -- Om sensorn är torr...
while (tonumber(fibaro:getValue(407, "value")) < 1 ) do -- Så länge sensorn är torr
fibaro:debug("Tick tack"); --debug
fibaro:call(brytare, "turnOff");
fibaro:sleep(delay);
fibaro:call(brytare, "turnOn");
fibaro:sleep(delay);
end
end

Kul att du gillar vår blogg!
Skriv upp dig på vår maillista för att få allt det senaste från m.nu - Nya produkter, kampanjer och mycket mer!
Wohoo! Du är nu med på maillistan!