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.
Schema bloc:
Dispozitivul este organizat intr-un minitower din plexiglass pe trei nivele:
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
Software Design
Programul va fi scris folosind limbajul de programare C cu ajutorul mediului de dezvoltare AVR Studio 4.
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; ... }
Documentatie:
Datasheet: