This is an old revision of the document!
Grupa: 336CA
Garduino este un proiect ce are ca scop îmbinarea tehnologiei cu natura. În zilele noastre, oamenii petrec mai mult timp acasă și plantele de interior au devenit o modalitate populară de a aduce un pic de natură în locuințe. Plantele nu sunt, însă, doar elemente decorative, ele oferind și multe beneficii pentru sănătatea și bunăstarea noastră. Cu toate acestea, lipsa timpului și neatenția sunt cei mai des întâlniți factori care duc la dispariția prematură a plantelor de interior.
Garduino își propune să rezolve această problemă. Proiectul constă într-un sistem automatizat de întreținere a plantelor și de monitorizare a mediului ambiant în care acestea se află, urmărind parametrii precum temperatura și intensitatea luminoasă. Astfel, acesta reprezintă o soluție ideală pentru îngrijirea plantelor de interior, reducând riscul neglijenței și creând un mediu optim pentru creșterea și dezvoltarea lor.
Sistemul va folosi date primite de la diverși senzori pentru a monitoriza parametrii mediului ambiant și a satisface nevoile plantei. Cele două funcționalități principale constau în automatizarea irigării plantei și afișarea pe ecranul LCD a unor informații legate de încăperea în care se află planta.
Sistemul va utiliza date primite de la senzorii de umiditate a solului, de luminozitate și de temperatură și umiditate, iar la nevoie va activa automat o pompă pentru udarea plantei. În momentul în care parametrii detectați de senzor vor fi reglați, sistemul va înceta acționarea pompei.
Cei doi senzori de intensitate luminoasă și temperatură și umiditate vor înregistra constant parametrii mediului înconjurător, temperatura și umiditatea fiind afișate constant pe LCD pentru a facilita monitorizarea mediului în care se află planta.
În timpul simulării, circuitul a prezentat comportamentul așteptat, captând cu precizie condițiile de mediu.
Senzorul de temperatură a înregistrat citiri în intervalul 20-25 de grade Celsius și un nivel constant de umiditate de aproximativ 50%, valorile rămânând relativ stabile pe toată perioada simulării. Senzorul de umiditate a solului și senzorul de intensitate luminoasă au afișat citiri cuprinse în intervalul 0-1023 de unități, care vor fi mapate într-un interval de 0-100 pentru a reprezenta procente.
Modulul releu a funcționat conform intenției, activând pompa de apă în funcție de relația dintre datele preluate de senzori și valorile de prag predefinite, asigurând o irigare corespunzătoare. Ecranul LCD a oferit feedback în timp real, prezentând citirile senzorului de temperatura și umiditate, facilitând astfel monitorizarea sistemului.
În general, componentele hardware au demonstrat performanță și interacțiune fiabile, validând funcționalitatea sistemului Garduino.
Pentru a avea o modularitate mai bună și a facilita reutilizabilitatea codului, programul a fost organizat în mai multe funcții:
void loop() { // Automatic pump control based on time elapsed if (!pumpBroken) checkPump(); if (pumpBroken) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Pump broken!"); } else { // Read sensor values readSensors(); // Display sensor values on LCD printStatus(); // Check the conditions for pump control checkConditions(); } delay(2500); // Delay between iterations }
// ADC interrupt service routine for Timer1 ISR(TIMER1_COMPA_vect) { // Start a new ADC conversion for soil moisture ADMUX = (ADMUX & 0xF0) | (0x00 & 0x0F); // Set ADC input to ADC0 (pin A0) ADCSRA |= (1 << ADSC); // Start ADC conversion while (ADCSRA & (1 << ADSC)); // Wait for ADC conversion to complete uint16_t rawSoilMoisture = ADC; interruptSoilMoisture = map(rawSoilMoisture, 0, 1023, 100, 0); // Map ADC reading to soil moisture range // Start a new ADC conversion for light sensor ADMUX = (ADMUX & 0xF0) | (0x01 & 0x0F); // Set ADC input to ADC1 (pin A1) ADCSRA |= (1 << ADSC); // Start ADC conversion while (ADCSRA & (1 << ADSC)); // Wait for ADC conversion to complete uint16_t rawLight = ADC; interruptLight = map(rawLight, 0, 1023, 100, 0); // Map ADC reading to light range }
In ciuda numeroaselor dificultati pe care le-am intampinat (senzori stricati, pompa infundata, bug-uri in cod, mini inundatii etc.), proiectul a fost unul foarte interesant si extrem de satisfacator odata cu ajungerea la produsul final. Fiind primul proiect la care a trebuit sa lucrez de una singura si la partile hardware, software si la design, am avut de-a face cu destul de multe incercari, pe care fie am reusit sa le rezolv, fie pentru care am fost nevoita sa caut alternative.
In primul rand, pentru partea de hardware a fost esential faptul ca am comandat piesele din timp, intrucat unele din acestea au ajuns defecte si au trebuit comandate din nou. De asemenea, faptul ca am inceput implementarea suficient de devreme m-a ajutat mult in momentul in care am realizat ca aveam cateva componente lipsa (rezistente, fire). Din procesul de legare a componentelor am invatat cat de importanta e alimentarea la sursa de tensiune potrivita si cum interfereaza alimentarea necorespunzatoare cu restul componentelor.
Pentru partea de software, cel mai complicat a fost lucrul cu registrii si intreruperi si debugging-ul problemelor generate in timpul acestui proces. De asemenea stabilirea pragurilor pentru valorile senzorilor a fost putin mai delicata, deoarece senzorii nu au o acuratete prea buna, deci valorile definite nu necorespund neaparat cu valori reale.
Stabilirea design-ului a fost o parte foarte distractiva, avand cel putin trei idei diferite de implementare. Intr-un final am luat decizia design-ului final punand in balanta atat practicabilitatea, cat si existenta unui model care sa scoata in evidenta planta.
Atât codul sursă, cât și pozele cu schemele proiectului pot fi descărcate aici: garduino.zip
Un demo de funcționare al proiectului poate fi descărcat aici: garduino_demo.zip (nu am putut uploada direct videoclipul)