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);
}
TSla