Daniela Andreea DUMITRACHE (78729) - GreenCare

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

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.

Descriere generală

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.

Hardware Design

Schema Electrica

1. Listă de piese:

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

Software Design

Mediul de dezvoltare folosit a fost Visual Studio. Pentru incarcarea programului pe placuta am folosit HIDBootFlash

Bibliotecile folosite:

#include <avr/io.h
#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;
}

Rezultate Obţinute

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:

400

Pagina care controleaza LED-ul:

 600 |

Scurt video rezultate

Disclaimer: scuzati claritatea proasta a pozelor si filmuletului, am avut decat telefonul la dispozitie =)

Concluzii

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.

Download

Jurnal

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

Bibliografie/Resurse

pm/prj2018/adraghici/greencare.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0