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.