You are on page 1of 3

http://coderi.

net/438/arduino-termostat/

Arduino Termostat
Jan 27 under General | Leave a comment
A trecut Anul Nou i uite c e timpul s ie im din ntuneric, deja e februarie. Deci pentru desert v-am
pregtit un articol, despre mblnzirea destoinic a unui termocuplu de tip K (Alumel Chromel)
folosind platforma ARDUINO, un controller ATmega8, un circuit integrat MAX6675, un pic de fantezie,
vreo 20 de ore de Counter Strike 1.6, nc tot attea cuvinte vulgare i ciocanul de lipit.
Astfel c mi-am creat de la nceput un plan de aciuni i mi-am pus scopuri ce le voi realiza:
1. Afiarea temperaturii setate(0-500 C)
2. Afiarea temperaturii de la termocuplu()
3. Utilizarea unui triac conectat la microcontroler prin optocuplu
4. Realizarea acestui dispozitiv ntr-o carcas relativ mic
5. Curentul maximal prin nclzitor = 10 A
Pentru c mrimea sketch-ului binar este de: 5148 bytes (din 7168 byte ) nu am avut o necesitate de
200 de supercomputere i am hotrt s folosesc ATmega8. Cum e se ncarc bootloader-ul am scris
aici : http://coderi.net/381/arduino-burn-bootloader/.

Schema principial a blocului de msur i comand


nregistrarea temperaturii de pe termocuplu.
Precum am menionat anterior, am utilizat un circuit specializat MAX6675, care comunic prin ina SPI
cu procesorul, valoarea temperaturii poate fi n grade Celsius sau Farenheit i nc multe interesante
pe care le putei citi n descrierea tehnic a circuitului.

Conectarea LCD de tip WH0802


Din motiv c MAX6675 utilizeaz unii pini ai controllerului pe care n mod standart se utilizau i pentru
conectarea LCD la ARDUINO UNO am hotrt s schimb aa cum vreau, pentru c LiquidCristal este o
clas i numrul pinului poate fi setat n felul urmtor: LiquidCrystal(rs, enable, d4, d5, d6, d7) , unde
se n paranteze se va indica numrul pinilor utilizai n ordinea admis.
Codul pentru acest proiect:
1 #include <SPI.h>
2 #include <LiquidCrystal.h>
3 #include <MAX6675.h>
4 LiquidCrystal lcd(6, 7, 5, 4, 3, 2);
5
6 int heater = 9; // PWM output
7 int CS = 10; // CS pin on MAX6675
8 int SO = 12; // SO pin of MAX6675
9 int SCK = 13; // SCK pin of MAX6675
10 int units = 1; // Units to readout temp (0 = raw, 1 = C, 2 = F)
11 float temperature = 0.0; // Variabila temperaturii
12 double setTemp;
13 // Iniializm biblioteca MAX6675
14 MAX6675 temp(CS,SO,SCK,units);
15 // setm conectarea
16 // MAX6675 Library already sets pin modes for MAX6675 chip!
17 void setup(){
18 lcd.begin(8, 2);
19 pinMode(heater, OUTPUT);
20 }
21 int x;
22 void loop() {
23 int i=x;
24 temperature = temp.read_temp();
25 setTemp = analogRead(A5);
26 setTemp = map(setTemp, 0, 1023, 0, 500);
27 lcd.setCursor(0, 0);
28 lcd.print(setTemp);
29 lcd.setCursor (0,1);
30 lcd.print(temperature);
31 delay(200);
32 float tempDiff = setTemp - temperature;
33 if (tempDiff > 0.1)
34 {
35 analogWrite(heater,255);
36 }
37 else { analogWrite(heater,0 ); }
38 if (tempDiff = 0) {
39 digitalWrite(heater,HIGH );
40 delay (200);
41 digitalWrite(heater,LOW );
42 delay (300);
43 }
44 }

V propun un asemnea cod prost scris pentru c am dorin a ca cel ce va repeta construc ia s poat
s-l optimizeze i s mbunteasc ntr-o msur acest dispozitiv.
n ce privete partea fizic a dispozitivului am hotrt s folosesc un triac BT139 (Imax = 16 A) i un
optocuplu MOC3083 (l aveam n rezervele de conserve pentru iarn). Schema de conexiune poate fi
gsit cutnd pe google, de asemenea poate fi schimbat triacul i MOC-ul. Curentul prin optocuplu
trebuie s fie 10 % din curentul prin sarcin.
Setarea temperaturii eu am realizat prin utilizarea unei rezisten e variabile cu 3 tura ii.
n circuit am utilizat un stabilizator pe LM 317, acesta a fost utilizat pentru a alimenta MAX6675 cu 3,3
V n scop de experiment, deci el trebuie omis, eu am fcut scurtcircuit ntre input i output al
stabilizatorului.
Toate fiierele acestui proiect le voi trimite la prima solicitare a celui ce vrea s repete circuitul,
scriindu-mi un mesaj prealabil la adresa : constantinlindemann@yahoo.com
Video cu lucrul acestui dispozitiv: http://www.youtube.com/watch?v=AF6t6rseJb0