Adela-Corina ISTRATE (24900) - Smart Plant

Introducere

Proiectul meu consta in realizarea unui sistem de supraveghere a unei plante. Scopul este de a o ajuta sa creasca autonom, oferindu-i apa si lumina atunci cand are nevoie.

Am pornit de la ideea ca fiecare dintre noi avem acasa o planta pe care uitam sau nu avem timp sa o ingrijim. Ar fi util sa existe un sistem care sa se ocupe de aceasta.

Descriere generală

Schema bloc

Descriere

  • Senzorii de umiditate si lumina trimit valori catre microcontroller
  • Microcontroller-ul prelucreaza datele primite de la senzori si porneste poma de apa si/sau sursa de lumina daca e nevoie

Hardware Design

Lista de piese

Piese necesare pe langa componentele de baza:

Piesa Distribuitor Cod Cantitate Pret (buc.)
Senzor umiditatea solului Robofun SEN-VRM-31 1 28
Pompa de apa micro Robofun MCN-ALT-03 1 18
Senzor de lumina cu fotorezistor Optimus Digital 0104110000000330 1 10
Leduri Optimus Digital 0104110000006448 2 1
Rezistente Optimus Digital 0104110000010070 2 0.5
Breadboard Optimus Digital 0104110000000156 1 13
Tranzistor de putere Comet IRLML2502 1 0.5
Diode Conex Electronic 1N4007 4 1
Fire conexiune tata-tata (20 buc) Robofun ACS-CAB-11 1 9

Schema electrica

Software Design

Am folosit ca mediu de dezvoltare Atmel Studio 7.0.

Senzorul de umiditate are output analogic. Am folost Convertorul Analogic-Digital pe portul A, canalul 0. Daca umiditatea devine critica, setez pinul aferent pompei pe 1.

Senzorul de lumina are output digital. Acesta este implementat cu o fotorezistenta, care permite curentul sa treaca sau nu. Daca senzorul nu detecteaza lumina, setez portul aferent sursei de lumina pe 1.

/*
 * main.c
 *
 * Created: 21.05.2016 00:03:07
 * Author : Adela*/

#ifndef F_CPU
#define F_CPU 16000000UL // 16 MHz clock speed
#endif

#include <avr/io.h>
#include <util/delay.h>

void InitADC()
{
	ADMUX=(1<<REFS0);                         // For Aref = AVcc;
	ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Prescalar div factor = 128
}

uint16_t ReadADC(uint8_t ch)
{
	//Select ADC Channel ch must be 0-7
	ch=ch&0b00000111;
	ADMUX|=ch;

	//Start Single conversion
	ADCSRA|=(1<<ADSC);

	//Wait for conversion to complete
	while(!(ADCSRA & (1<<ADIF)));

	//Clear ADIF by writing one to it
	//Note you may be wondering why we have write one to clear it
	//This is standard way of clearing bits in io as said in datasheets.
	//The code writes '1' but it result in setting bit to '0' !!!

	ADCSRA|=(1<<ADIF);

	return(ADC);
}

void Wait()
{
	uint8_t i;
	for(i=0;i<20;i++)
	_delay_loop_2(0);
}


int main(void)
{
	DDRD |= (1 << PD3); //Sets PD3 as Output
	DDRD |= (1 << PD4); //Sets PD4 as Output
	DDRD &= ~(1 << PD5); //Sets PD5 as Input
	uint16_t adc_result;
	
	//Initialize ADC
	InitADC();
	
	while(1) //infinite loop
	{
		adc_result=ReadADC(0); // get adc data
		Wait();
		if(adc_result > 500){
			PORTD &= ~(1 << PD3); // off
			_delay_ms(500);
		} else {
			PORTD |= (1 << PD3); // on
			_delay_ms(500);
		}
		if(PIND & (1<<PD5)) {
			PORTD |= (1 << PD4); // on
		} else {
			PORTD &= ~(1 << PD4); // off
		}
	}
}

Rezultate Obţinute

Concluzii

Proiectul a fost simplu de realizat dar a rezultat un sistem practic pe care pot sa il folosesc in viitor. :-D

Inbunatatiri care s-ar putea aduce:

  • o lampa puternica in loc de ledul albastru, pentru lumina
  • un studiu pentru a determina valoarea exacta a umiditatii la care pompa trebuie sa porneasca
  • senzor pentru temperatura si un sistem de incalzire

Bibliografie/Resurse

pm/prj2016/drugescu/smartplant.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