I finally got around(started almost a decade ago) to finishing this project and blogging about it. I made a post on my own self-hosted blog here because I prefer decentralization over centralized platforms like Hackaday, Hackster.io, Medium, etc. But I thought I could at least finish up what I started.

All the project files can also be found on GitHub here.


Schematic



PCB


Build




Attiny Firmware

int relayControllPin = 0;
int moistureDetectionPin = 7;

int dispenseTime = 1000;
int dispenseThreshold = 600;
int timesDispensed = 0;
int maxTimesDispensed = 10;
int minutesPassed = 0;
int moistureLevel = 0;

void setup() 
{
  pinMode(relayControllPin, OUTPUT);
  //pinMode(moistureDetectionPin, INPUT); //Don't use pinMode() for ADC.
}

void loop()
{

  if(minutesPassed > 30 && maxTimesDispensed <= timesDispensed)
  {
    delay(60000);
    return;
  }

  if(maxTimesDispensed <= timesDispensed)
  {
    int newMoistureLevel = analogRead(moistureDetectionPin);
    
    //If the new moisture level is within +/- 50 of the old moisture level assume there is no change in the moisture level.
    if((moistureLevel+50) > newMoistureLevel && (moistureLevel-50) < newMoistureLevel)
      timesDispensed = 0;

      minuteDelay();
      return;
  }
  
  moistureLevel = analogRead(moistureDetectionPin);
  
  if(moistureLevel < dispenseThreshold)
  {
    dispense();
  }
  /*else if(moistureLevel > 900)
  {
    //Sennsor pads probably shorted.
  }*/
  else
  {
    minuteDelay();
  }
}

void minuteDelay(){
  delay(60000); //Delay for a minute.
  minutesPassed++;
}

void dispense(){
    digitalWrite(relayControllPin, HIGH);
    delay(dispenseTime);
    digitalWrite(relayControllPin, LOW);
    
    timesDispensed++;
    
    delay(1000);  
}