Autorul poate fi contactat la adresa: Login pentru adresa
Scopul acestui proiect este sa vina in ajutorul celor care isi doresc sa tina diverse plante in casa, dar nu timpul sau priceperea necesara pentru a avea grija de ele.
Proiectul presupune plasarea unui senzor de umiditate in sol, la radacina plantei, senzor care va prelua date la intervale regulate de timp. Datele vor fi trimise catre microcontroller si interpretate, iar cand se va constata ca planta nu mai are suficienta apa microcontroller-ul va actiona o pompa electrica pentru a uda planta. Datele se vor prelua la intervale regulate de timp, iar pentru actionarea pompei se va compara o medie a valorilor citite de la senzor cu o valoare de prag determinata in prealabil.
De asemenea, microcrontroller-ul va folosi si un modul de Ethernet pentru a comunica datele culese si actiunile facute catre un server, la care utilizatorul placutei are acces pentru a vedea datele.
Denumire Componentă | Număr | Preț |
---|---|---|
Placă de bază | x1 | 8 RON |
ATmega 324A + piese obligatorii | x1 | 27 RON |
Modul Ethernet ENC28J60 | x1 | 17.99 RON |
Senzor de umiditate sol FC-28 | x1 | 4.99 RON |
Pompa submersibila | x1 | 9.99 RON |
Releu cu un canal | x1 | 7.99 RON |
LCD 1602 | x1 | 14.99 RON |
Cablu USB | x1 | 3.49 RON |
Fire tată - tată | x10 | 4 RON |
Fire mamă - tată | x10 | 4 RON |
Fire mamă - mamă | x20 | 8 RON |
Acumulator pompa | x1 | 10 RON |
Total | 120.5 RON |
Mediul de dezvoltare folosit a fost Visual Studio. Pentru incarcarea programului pe placuta am folosit HIDBootFlash
Bibliotecile folosite:
#include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include "ip_arp_udp_tcp.h" #include "enc28j60.h" #include "avr_compat.h" #include "net.h" #include "lcd.h" #include <string.h> #include <math.h> #include <stdio.h>
Pentru controlul modulului de Ethernet am folosit bibliotecile din vechiul Laborator 5 si am modificat paginile afisate corespunzator proiectului meu. Transimia si receptia datelor se face la fel ca in laborator.
Datele de la senzor sunt preluate folosind ADC la interval de o secunda, dat de declansarea intreruperii pentru timer 1.
ISR(ADC_vect) { /* store new result */ static uint8_t channel = ADC_INIT_CHANNEL; /* get the result */ ADC_value[channel] = ADC; } ISR(TIMER1_COMPA_vect) { /* start an ADC conversion when the timer expires */ static uint8_t channel = ADC_INIT_CHANNEL; ADC_value[channel] = ADC; ADCSRA |= (1 << ADSC); channel = (channel + 1) % num_chn; ADMUX = (ADMUX & ~(0x1f << MUX0)) | channel; if (channel != ADC_INIT_CHANNEL) ADCSRA |= (1 << ADSC); }
Pentru actionarea pompei se face media unui anumit numar de masuratori, iar daca media depaseste valoarea de prag atunci pompa este pornita. Controlul pompei se realizeaza prin intermediul unui releu. Pentru a porni pompa trebuie pornit switchul intern al releului, lucru care se face punand pinul corespunzator pe 0.
/* check the avarage */ if (i == LIMIT) { avg_val = avg_val / LIMIT; if (avg_val > TRESHOLD) { /* retain the time of the irrigation */ minut_udare = minute; secunda_udare = secunde; udat = 1; /* start the pump */ PORTD ^= (1 << PD7); PORTD &= ~(1 << PD5); _delay_ms(2500); PORTD |= (1 << PD5); /* print info on LCD */ sprintf(irrigated, "Irrigated %d:%d", minut_udare, secunda_udare); LCD_printAt(0x40, irrigated); } i = 0; }
Prioectul este functional. Rezultatele se pot observa mai jos
LCD-ul si placa de baza:
Modulul de Ethernet si senzorul de umiditate
Releul si controlul pompei de apa
Pagina principala a serverului:
Pagina care controleaza LED-ul:
Disclaimer: scuzati claritatea proasta a pozelor si filmuletului, am avut decat telefonul la dispozitie
Cea mai mare problema am avut-o cu modulul de Ethernet. Desi in datasheet era specificat ca se alimenteaza la 3.3V a fost nevoie de 5V pentru a fi functional. De asemenea, a mers doar in prima zi mai bine, apoi a inceput sa incarce paginile foarte greu. Abia afisa o pagina la cateva minute. Mi-a fost astfel aproape imposibil sa realizez proiectul, deoarece nu puteam vedea valorile citite de senzor. Acesta a fost motivul pentru care am achizitionat si LCD-ul, care nu facea parte initial din proiect: pentru a putea afisa valorile citite si seta astfel un prag potrivit la care sa inceapa irigarea. De asemenea, senzorul citeste valori destul de diferite de la un tip de sol la altul, asa ca, fara a vedea constant datele citite, ar fi fost aproape imposibil de setat un prag comun tuturor mediilor pe care am efectuat testarea.
In afara de asta a fost un proiect chiar frumos, din care simt ca am invatat multe si la care mi-a placut sa lucrez. Pe langa faptul ca mi-am perfectionat cunostintele acumulate in cadrul laboratorului simt ca am captat mai multa experienta in lucrul cu sisteme embedded in ceea ce tine de electronica si simt ca am obtinut ceva util si cu care pot sa ma mandresc.
Cod sursa: dumitracheandreea_greencare.zip
Schema electrica:dumitrache_andreea_greencare_update.sch
4.05.2018: finalizarea placutei de baza
19.05.2018: lipire divizoare de tensiune pentru modulul de Ethernet si constatarea ca trebuie defapt alimentat la 5V
20.05.2018: corectat si adaptat codul din vechiul laborator de Ethernet pentru a afisa informatiile utile mie
21.05.2018: comanda releu si pompa si citire date senzor
22.05.2018: analiza datelor citite de la senzor. Modulul de Ethernet a inceput sa nu prea mai mearga bine
23.02.2018: achizitie LCD si afisarea datelor citite si pe LCD pentru usurinta de verificare. Finalizare proiect