Home Monitoring System

Introducere

  • Proiectul realizeaza monitorizarea temperaturii dintr-o incapere, la distanta, prin accesarea unei pagini web.
  • Scopul este acela de a dezvolta, in timp, un sistem complex de monitorizare al locuintei prin adaugarea unor senzori de umiditate,fum,etc, dupa preferinte.
  • De ce ar fi util un astfel de sistem? Sa presupunem ca plecam din oras pentru o lunga perioada din timp. Prin accesarea unei pagini web, putem vizualiza daca s-au intamplat evenimente majore in locuinta, putand astfel fi prevenite consecintele dezastruoase.

Descriere generala

  • Schema bloc - module hardware

Hardware Design

  • Schema de baza proiect
  • Modul ethernet:
    • Lista Componente:
      • 1 integrat ENC28J60
      • 1 mufa TS8P8C-PCB ETH TRAF
      • 1 quart 25MHz
      • 4 * R47
      • 2 * R10k
      • 1 * R2k7
      • 2 * C18pF
      • 3 * C10nF
      • 1 * LM2937
      • 1 * slot pentru integrat

  • Modul senzori:
    • Senzor temperatura LM335 : masurare valori intre -40 si 100 grade C.
    • 1 R2k2

Software Design

  • Limbaj de programare: C
  • Mediu dezvoltare: WinAVR Programmers Notepad
  • Detalii implementare:
    • Am pornit de la laboratorul 5
    • Variatia tensiunii LM335 este de 10mV pe 1 grad Kelvin
    • Datele de la senzorul de temperatura sunt preluate prin ADC. Am gasit o corespondenta intre tensiunea furnizata de senzor si valoarea corespunzatoarea a temperaturii,astfel: am aflat valoarea furnizata de ADC pentru o tensiune de 5V, afland apoi ce valoare furnizeaza cu senzorul conectat. Am calculat valoarea tensiunii furnizate de senzor, pe baza datelor obtinute anterior. Intrucat, variatia tensiunii LM335 este de 10mV pe 1 grad Kelvin, din tensiunea obtinuta se scade 2.73 si se inmulteste cu 100 pentru a obtine temperatura in grade Celsius. In final,am obtinut urmatoarea formula: temp=(46*ADC_get(0))/10-2730;
    • Nu am conectat si pinul de calibrare al senzorului.

void ADC_init(void)

ADMUX |= _BV(REFS0);	
ADCSRA |= _BV(ADEN) | _BV(ADATE) |_BV(ADPS1) |_BV(ADPS2)| _BV(ADPS0);

int ADC_get(uint8_t channel)

ADMUX = _BV(REFS0);
ADMUX |= channel;
ADCSRA |= _BV(ADSC);
loop_until_bit_is_set(ADCSRA, ADIF);

return ADC;

Aflare temperatura:

      int temp;   
temp=(46*ADC_get(0))/10;
temp=temp-2730;			
// autmatically reload page every minute:
plen=fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\nRefresh: 60\r\n\r\n"));
plen=fill_tcp_data_p(buf,plen,PSTR("</h2>\n"));
plen=fill_tcp_data_p(buf,plen,PSTR("<pre>\n"));
plen=fill_tcp_data_p(buf,plen,PSTR("<h2>Temperatura in acest moment este:</h2> "));
	
itoa(temp,buffer,10);
Point(buffer);	
	
plen=fill_tcp_data(buf,plen,buffer);		
plen=fill_tcp_data_p(buf,plen,PSTR("'C "));		
plen=fill_tcp_data_p(buf,plen,PSTR("</pre>\n"));

Rezultate Obtinute

Concluzii

Probleme intampinate:

  • Conectarea mufei de ethernet cu integrat, intrucat nu mi-a fost usor sa gasesc, corespondenta pinilor din schema cu cei de pe placa
  • Aflarea corespondentei dintre valoarea furnizata si ADC a durat ceva mai mult, pana am inteles exact cum functioneaza LM335.
  • De asemenea, am intampinat probleme in momentul incarcarii programului, prin intermediul bootloader-ului.Pe placuta se mai gaseste un senzor de temperatura DB18S20 (senzor digital care elimina folosirea convertorului analog-digital) si un LCD. In momentul in care incercam sa incarc functiile necesare senzorului DB18S20, pornind de la programul webserver, apareau erori la scriere, si bootloader-ul era suprascris. L-am reinstalat folosind PonyProg. Incarcand un program pentru LCD pe portul serial, am observat ca nu apar erori.

LCD-ul a fost implementat pentru a ma ajuta la debugging si a-mi da seama mai usor unde intampineam probleme.

Download

Resurse

pm/prj2011/dtudose/home_monitoring_system.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