Introducere

Incinta termostatata reprezinta o camera izolata unde temperatura interioara este mentinuta la un nivel constant, ales de catre utilizator. Incinta are doua mecanisme de control a temperaturii: racire si incalzire. Pentru racire este folosit un cooler alimentat la 12 V iar pentru incalzire sunt folosite trei becuri de 20W. Temperatura din interiorul camerei este afisata real-time pe un LCD. Temperatura poate fi setata prin intermediul a doua butoane si a unui contact cu cheie, fara de care butoanele sunt inactive. Odata realizat contactul cu cheie, camera trece in modul de programare a temperaturii, iar pe LCD va fi afisata temperatura curenta ce va putea fi incrementata/decrementata prin intermediul butoanelor. Odata scoasa cheia din contact dispozitivul trece in modul de operare si prin mecanismele de racire/incalzire va obtine temperatura ceruta. Incinta are si un modul de alarma, astfel daca usa incintei este deschisa se va lansa un avertisment sonor.

Dispozitivul este ideal pentru a crea medii controle climateric: incubatoare, camere pentru inmultire in vitro, etc.

Descriere generală

Schema bloc:

Dispozitivul este organizat intr-un minitower din plexiglass pe trei nivele:

  • la nivelul 0 se afla o sursa pc de 400W
  • la nivelul 1 se afla cele doua placi, front-panelul (format din dispozitivul de afisare, butoanele de comanda si contactul cu cheie), si buzzerul pentru alarma
  • la nivelul 2 se afla incinta ce contine senzorul de temperatura, senzorul pentru usa (microintrerupator), coolerul si dispozitivul de incalazire format din trei becuri de 20w legate in paralel pentru a asigura redundanta sistemului.

Hardware Design

Scheme circuit

Circuitul de comanda

Unde R2 poate fi : buzzer, cooler, 3 becuri de 20W legate in paralel

LCD

Circuitul pentru intrari

schema este folosita pt: butoane, contactul cu cheie microintrerupator

Circuitul pentru statusul placutei

Circuitul pentru senzorul de temperatura

Componente Hardware

  • 4 x Rezistente 1K
  • 4 x Rezistente 30K
  • 1 x Potentiometru 10k
  • 3 x BUZ11A (tranzistoare)
  • 1 x microintrerupator
  • 1 x buzzer
  • 3 x bec masina 20W sau sarma de nichelina. (se masoara sa aiba 3 ohmi - pt 50W).
  • 1 x cooler 12V
  • 1 x led
  • 1 x LM35 (senzor de temperatura)
  • 2 x buton
  • 1 x contact cu cheie
  • 1 x sursa pc 400W (pt ca are si 12V si 5V ambele folosite)

Software Design

Software Design

Programul va fi scris folosind limbajul de programare C cu ajutorul mediului de dezvoltare AVR Studio 4.

  • daca se apasa unul dintre butoane crestere/scadere temperatura (pd7,pd6) se verifica starea contactului cu cheie (pd5)
  • daca este contactul este activ se incrementea/decrementeaza valoarea temperaturii, si se afiseaza valoarea temperaturii setate pe lcd.
  • odata oprit contactul cu cheia se trece in modul de operare
  • pe lcd se afiseaza temperatura din incinta
  • se compara temperatura intoarsa de senzorul de temperatura (PA0) cu temperatura ceruta.
  • in functie de rezultat este data comanda catre cooler sau catre becuri.
  • se verifica starea (pd4) microintrerupatorul. dc nu este contactul se comanda buzzerul.
  • se verifica permanent temperatura citita de senzor si este afisata pe lcd.

LCD API

void LCD_init(); // Initializare modul LCD.. trebuie apelata inainte de a se face orice operatie cu LCD-ul. 
                 // Initializarea este facuta considerand o interfatare pe 4 fire !!!.
void LCD_writeInstruction(unsigned char _instruction); // Trimite o instructiune catre lcd (vezi datasheet)
void LCD_writeData(unsigned char _data); // Trimite date catre LCD pentru afisare
void LCD_write(unsigned char _byte); // Trimite un byte catre LCD pe pinii D4-7 in 2 timpi, intai bitii mai semnificativi si apoi cei mai putin semnidifcativi.
void LCD_waitNotBusy(); // Functia asteapta pana cand lcd-ul devine disponibil pt o noua comanda.
void LCD_print(char* _msg); // Afiseaza imformatia pe LCD (doar 1 linie, primele 16 caractere din msg)
void LCD_print2(char* _msg1, char* _msg2); // Afisare pe 2 lini pe LCD. Pe prima linie afiseaza _msg1 si pe a 2-a _msg2.
void LCD_printDecimal2u(unsigned int _n); // Afisare numar in baza 10 pe LCD
void LCD_printHexa(unsigned int _n); // Afisare numar in baza 16 pe LCD
void LCD_waitInstructions(unsigned char _instructions); // Asteapta un numar de cicli de tact.. loop

Senzor Temperatura API

void InitADC(){
ADMUX=(1<<REFS0);// For Aref=AVcc;
ADCSRA=(1<<ADEN)|(7<<ADPS0);
}

uint16_t ReadADC(uint8_t ch) {
   ch=ch&0b00000111;
   ADMUX|=ch;
   ADCSRA|=(1<<ADSC);
   while(!(ADCSRA & (1<<ADIF)));
   ADCSRA|=(1<<ADIF);
   return(ADC);
}

void main(){
	  ....
	  //aflarea temperaturii
      adc_value=ReadADC(0);      	  
      t=adc_value/2;
	  ...
}

Rezultate Obţinute

itab1.jpg itab5.jpg itab3.jpg itab4.jpg itab2.jpg itab6.jpg

Bibliografie/Resurse

pm/prj2010/dloghin/incintatermostatata.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