Proiectul constă în realizarea unui sistem care să monitorizeze umiditatea solului uneia sau mai multor plante, iar când solul se usucă sub un anumit prag, sistemul o să ude automat pământul. În paralel, sistemul va măsura temperatura locului în care este plasat, informațiile fiind afișate pe un ecran LCD.
Motivația din spate a venit principal de la faptul că am vrut să lucrez cu componente pe care deja le aveam, ca o provocare pentru mine. De asemenea, am vrut să lucrez cu componente pe care nu prea le-am folosit (senzorul de umiditate, pompa de apă, ecranul LCD), pentru a afla mai mult despre ele. Specific, am ales acest proiect pentru că mi s-a părut că pot să-l folosesc și după ce este prezentat și că are loc suficient pentru a îl îmbunătăți și dezvolta ulterior.
Sistemul funcționează astfel:
Bibliotecile folosite sunt:
Prezentarea codului:
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(buttonPin), turnPumpOnOff, CHANGE);
pinMode(rainPin, INPUT);
pinMode(relayPin, OUTPUT);
bool status;
status = mpu.begin();
if (!status) {
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
while (1);
}
lcd.init();
lcd.backlight();
}
void turnPumpOnOff() {
buttonFlag = 1;
}
sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp);
if((millis() - previousPress) > buttonDebounce && buttonFlag)
{
previousPress = millis();
if(digitalRead(buttonPin) == LOW && previousState == HIGH)
{
pumpToggle =! pumpToggle;
Serial.println("pressed button");
previousState = LOW;
}
else if(digitalRead(buttonPin) == HIGH && previousState == LOW)
{
previousState = HIGH;
}
buttonFlag = 0;
}
double sensorValue = (1023 - analogRead(rainPin)) * (100.0 / 1023);
if (sensorValue > thresholdValue) {
Serial.print(sensorValue);
Serial.println(" - Doesn't need watering");
digitalWrite(relayPin, LOW);
}
else if (pumpToggle) {
Serial.print(sensorValue);
Serial.println(" - Time to water your plant");
digitalWrite(relayPin, HIGH);
} else if (!pumpToggle) {
digitalWrite(relayPin, LOW);
}
analogWrite(pwmPin, 255 - sensorValue * 3.7);
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp.temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(sensorValue);
lcd.print("%");
delay(100);
lcd.clear();
A fost un proiect din care am învățat destul de multe și mi-am solidificat cunoștințe de hardware. Am avut câteva probleme care m-au făcut să caut mai amănunțit informații despre cum funcționează unele componente și consider că a fost un milestone pentru mine să realizez sistemul acesta.