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:

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äsningsperioderna
  • Tidsintervall mellan avläsningsperioderna medan vi vattnar
  • Vilken typ av automation vi vill ha
  • Min/Max värde från fuktsensorerna
  • Tidslängd för bevattning
  • Torrhetsgrad 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ätning
  • 65 – 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 + standarden
  • 66 – Automationstyp:
    • 0 = All automatik avstängd
    • 1 = Bevattning sker om fuktighet är under värdet inställt i parameter 80 – 83. Tid för bevattning är enligt parameter 69
    • 2 = 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 1
  • 70 – Fuktighetsgraden i % för start av bevattning med pump 1
  • 71 – Fuktighetsgraden i % för start av bevattning med pump 2
  • 72 – Fuktighetsgraden i % för start av bevattning med pump 3
  • 73 – Fuktighetsgraden i % för start av bevattning med pump 4
  • 80 – Fuktighetsgraden i % för stopp av bevattning med pump 1
  • 81 – 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 4
  • 90 – 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

Lämna ett svar