Een Garduino

Een Garduino

Okee, wat is een Garduino?

Een garduino is een apparaat wat de tuin in de gaten houdt en waar nodig in grijpt.

In mijn geval wordt dit met name gebruikt om de tuin te bewateren.

Afgelopen periode heb ik mijn tuin anders ingericht en mijn kleine kas een stuk vergroot. Ook is er naast de kas een moestuintje van 3 x 1 m gekomen.

Mijn garduino moet dus het waterniveau in de gaten houden. Dit wil ik doen met 15 verschillende zone’s die worden gemeten op vochtigheid en op temperatuur.

Hoe is het idee ontstaan

Ik ben niet echt een tuinier, maar wel een automatiseerder. Mijn tuin is dus omgebouwd en ik vindt het wel leuk om ook groenten en fruit te verbouwen en dan weer te gebruiken in soepen enz.

Afgelopen periode heb ik een voedseldroger gekocht. Meer informatie kun je hier vinden. Door middel van deze voedseldroger kan ik nu mijn tomaten enz drogen en voor langere tijd bewaren.

Ook wecken doe ik al een poosje, maar dat is nogal een tijdrovend en arbeidsintensief klusje. Ook daar zul je op mijn website Voedsel drogen en wecken vast wel meer van gaan lezen. Maar goed nu verder met het idee

Ik heb dus een moestuin en een kas en wil hier toch wel goed gebruik van gaan maken. Hiervoor moet ik regelmatig alle planten nalopen op ongedierte, bladbederf, teveel blad enz. Dit zijn allemaal dingen die naast het bewateren van de planten er nog bij komen kijken. Mijn doel was dus om ervoor te zorgen, dat dit (bewateren) automatisch zou worden gedaan. Dit is ook van mij kant een stukje luiigheid 🙂 Ja, ik geef het eerlijk toe.

Aansluiten

Ik heb een Arduino Uno (DccDuino- uit China) die als Garduino gaat werken. Op deze Garduino is een CD74HC4067 CMOS 16 CH Analog Digital MUX Breakout Board Arduino compatible aangesloten die er voor zorgt, dat ik 16 analoge poorten kan gebruiken.

74HC4067 Breakout Board
74HC4067 Breakout Board

Op zich is dit helemaal niet zo moeilijk. Er wordt namelijk van poort gewisseld door de 74HC4067.  S0-S1 worden aangestuurd door 4 digitale poorten van de Arduino, EN wordt op GND aangesloten evenals GND en VCC op 5V. Door gebruik te maken van binaire telling, is het mogelijk om door S0-S3 te wisselen tussen HIGH en LOW (5v en 0v) de verschillende poorten c0-c15 aan te spreken.

De SIG poort wordt aangesloten op bijvoorbeeld A0 van de Arduino die dan wordt uitgelezen.

Selection diagram 74hc4067
Selection diagram 74hc4067

Hierboven staat hoe deze poorten worden aangestuurd door gebruik te maken van S0-S3. Dus om poort C9 aan te sturen, moeten S0-S3 als volgt zijn geconfigureerd

S0 = HIGH

S1 = LOW

S2 = LOW

S3 = HIGH

Door van deze tabel gebruik te maken is het makkelijk om 16 verschillende analoge meters aan te sluiten op 1 poort van de Arduino.

Ik maak gebruik van het volgende aansluitschema

74HC4067 en Arduino Uno
74HC4067 en Arduino Uno

Door nu SIG aan te sluiten op A0 komt dit signaal ook binnen.

Voor het programma maak ik gebruik van het volgende:

//Mux control pins
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;

//Mux in "SIG" pin
int SIG_pin = 0;


void setup(){
  pinMode(s0, OUTPUT); 
  pinMode(s1, OUTPUT); 
  pinMode(s2, OUTPUT); 
  pinMode(s3, OUTPUT); 

  digitalWrite(s0, LOW);
  digitalWrite(s1, LOW);
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);

  Serial.begin(9600);
}


void loop(){

  //Loop through and read all 16 values
  //Reports back Value at channel 6 is: 346
  for(int i = 0; i < 16; i ++){
    Serial.print("Value at channel ");
    Serial.print(i);
    Serial.print("is : ");
    Serial.println(readMux(i));
    delay(1000);
  }

}


int readMux(int channel){
  int controlPin[] = {s0, s1, s2, s3};

  int muxChannel[16][4]={
    {0,0,0,0}, //channel 0
    {1,0,0,0}, //channel 1
    {0,1,0,0}, //channel 2
    {1,1,0,0}, //channel 3
    {0,0,1,0}, //channel 4
    {1,0,1,0}, //channel 5
    {0,1,1,0}, //channel 6
    {1,1,1,0}, //channel 7
    {0,0,0,1}, //channel 8
    {1,0,0,1}, //channel 9
    {0,1,0,1}, //channel 10
    {1,1,0,1}, //channel 11
    {0,0,1,1}, //channel 12
    {1,0,1,1}, //channel 13
    {0,1,1,1}, //channel 14
    {1,1,1,1}  //channel 15
  };

  //loop through the 4 sig
  for(int i = 0; i < 4; i ++){
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  //read the value at the SIG pin
  int val = analogRead(SIG_pin);

  //return the value
  return val;
}

Dit programma projecteerd de gemeten waarden van de poorten C0-C15 op de Serial Monitor van de Arduino IDE

De test

De test is al volgt gegaan:

Ik heb de Arduino en de 74HC4067 aangesloten zoals hierboven beschreven en scan 3 poorten met name C13-C15 omdat ik dan echte waarden krijg.

Ik heb namelijk zelf probes gemaakt die de vochtigheid in de grond meten.

Deze zijn op de volgende manier in elkaar gezet

De zelfgemaakte vochtigheidssensor (diy soil humidity sensor)
De zelfgemaakte vochtigheidssensor (diy soil humidity sensor)

Uiteraard er zijn leuke sensoren te koop zoals onderstaande, maar die kosten ongeveer $1,= per stuk en aangezien ik er 16 nodig heb wordt me dat een beetje teveel

soil humidity sensor
soil humidity sensor

Dus heb ik gebruik gemaakt van spijkers 125 mm lang, wat piepschuim wat ik nog had liggen en een oude UTP kabel

Mijn testopstelling ziet er als volgt uit:

testopstelling humidity in de grond
testopstelling humidity in de grond

Ik heb aangegeven op het piepschuim welke sensor op welke poort zit zodat ik makkelijk kan aflezen hoe en wat.

Dit is dus totaal geen rocket science. Je moet het even aansluiten en werken met die hap 🙂

De resultaten

De resultaten zijn veelbelovend

Hieronder een tabel uit excel gekopieerd die de vochtigheid aangeeft in de drie potten over een periode van 30 min.

 photo probe13-15_zps9bqos4m0.png

Hier is duidelijk te zien, dat het een redelijk constante meting is en er is ook goed te zien dat de blauwe (probe 13) het meest vochtig is.

Hoe vochtiger de grond hoe hoger de grafieklijn ligt.

Tot zover even mijn Garduino verhaal. Zodra er meer is, laat ik het jullie weer weten


 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *