Îngrijitorul automat de plante monitorizeaza umiditatea solului, temperatura și lumina la care se expune planta și o udă atunci cand umiditatea este sub un anumit prag. Informațiile măsurate de senzori vor fi afișate pe un LCD și vor fi semnalate corespunzător prin LED-uri.
Plant Caretaker este util pentru toți posesorii de plante. Ideea de la care am pornit este că studenții iși petrec timpul în locații diferite (facultate, acasa, camin, în chirie, în vacanțe, etc.) iar plantele lor sunt lăsate în urma. Am dezvoltat aceasta idee și am adus cateva îmbunătățiri astfel încât, Plant Caretaker este un ajutor constant în îngrijirea plantelor.
Lista de piese
Am folosit atât biblioteci disponibile în standardul C, cât și biblioteci create special, ale căror fisiere sursă sunt incluse în arhiva proiectului.
#include <util/delay.h> #include "lcd.h" #include <string.h> #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #include <stdio.h> #include "ADC_sensors.h" #include <math.h>
- Constante alese de mine experimental care insa se pot adapta la tipul plantei.
#define LUMINA_SLABA 200 #define NIVEL_APA_SCAZUT 300 #define UMIDITATE_SCAZUTA 8 #define TEMPERATURA_SCAZUTA 10
- Constante folosite in implemntarea ecuatiei Steinhart-Hart pentru a determina temperatura in grade Celsius.
#define SERIESRESISTOR 10000 #define NOMINAL_RESISTANCE 10000 #define NOMINAL_TEMPERATURE 25 #define BCOEFFICIENT 3950 #define ACOEFICIENT 90 #define CELSIUS 273.15
Am folosit 4 senzori analogici prin care obtin masuratori cu privire la: lumina ambientala, umiditatea solului, nivelul apei si temperatura. Folosesc convertorul analog-digital si sistemul de intreruperi integrate in microcontroller.
Functia initializeaza Timer1 pentru a genera o intrerupere care sa porneasca ADC-ul la fiecare 100ms.
void TIMER1_init() { // initializare timer pentru COMPA la 100ms TCCR1B = (5 << CS10) | (1 << WGM12); TIMSK1 |= (1 << OCIE1A); OCR1A = 1561; }
Conversia temperaturii Ecuatia Steinhart–Hart
int convert_temperature(int adc_value_temperature) { float Resistance; Resistance = (1023 / adc_value_temperature) - 1; Resistance = SERIESRESISTOR / Resistance; float steinhart; steinhart = Resistance / NOMINAL_RESISTANCE; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) steinhart += 1.0 / (NOMINAL_TEMPERATURE + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // Invert steinhart -= CELSIUS + ACOEFICIENT; // conversie la grade celsius return steinhart; }
Proiectul este functional.
Imagini cu toate piesele asamblate ce intră în componența proiectului.
Acest proiect a fost o adevarata provocare intrucat a fost realizat de la zero: idee, hardware, software, testare, etc.. Cel mai mult mi-a placut sa iau fiecare senzor in parte, sa il testez, sa ma gandesc la niste valori potrivite pentru planta pe care am testat. Anterior am avut cateva impedimente in ceea ce privesc senzorii, dar pana la urma, cu rabdare, le-am rezolvat, iar satisfactia este pe masura.
In concluzie, consider ca proiectul este util avand in vedere ce am invatat pe parcursul realizarii lui.