eridano bertini
Termostato proporzionale
Tutorials -
Venerdì 17 Dicembre 2010 17:47
Scritto da eridano bertini

Termostato proporzionale

Per evitare quei fastidiosi pendolamenti della temperatura che inevitabilmente un riscaldamento ON - OFF produce ho risolto il problema utilizzando un ATMEGA 328 debitamente programmato.Il semplice programma provvede a ridurre il tempo di riscaldamento in funzione della differenza fra la temperatura impostata e quella raggiunta.

Per la programmazione ho utilizzando la scheda e l’IDE di ARDUINO poi con un ATMEGA con Bootloader,(Robot Italy 4,80 €) è stato  possibile realizzare il tutto con pochissimi componenti.

In fase di collaudo è possibile modificare i tempi delle varie TAB in base alle proprie necessità, onde ridurre al minimo

(ansi eliminare) le pendolazioni della temperatura.

Come sensore ho usato il classico LM35 , ma nessuno vieta l’utilizzo di altri sensori.

Per impostare la temperatura ho usato un potenziometro a dieci giri da 10 Khom

Il display utilizzato e il classico Display LCD STN retroilluminato cdice Robot Italy (LCD162)

Il pilotaggio del carico può essere fatto con i soliti Relè, oppure Triac, ecc ecc. la scelta è legata

alle proprie esigenze ed alle potenze impegnate.Nel mio caso ho usato un triac da 400V.pilotato

da un separatore ottico tipo MOC3020.

 

Per inserire le tab nel programma procedere nel modo seguente:

1) --Aprire l’IDE di ARDUINO

2) --Fare clik sul quadratino in alto a destra con freccia interna.

3) --Si apre un menu a discesa

4) --Selezionare New Tab nella casella che compare in basso a destra digitare il nome della TAB

5) --Esempio dieci_percento poi OK.

6) --Nella schermata vuota che compare  fare copia / incolla  in questo caso  " void dieci_percento()" ecc.ecc.

Fare cosi anche per le altre TAB ripetendo dal punto (2)

TAB  da inserite nel programma

void dieci_percento()

{

digitalWrite(RIS, HIGH);   // accende il RIS

delay(100);               // aspetta 0,1 secondi

digitalWrite(RIS, LOW);    // spegne il RIS

delay(900);               // aspetta 0,9 secondi

}

void trenta_percento()

{

digitalWrite(RIS, HIGH);   // accende il RIS

delay(300);                // aspetta 0,3 secondi

digitalWrite(RIS, LOW);    // spegne il RIS

delay(700);               // aspetta 0,7 secondi

}

void cinquanta_percento()

{

digitalWrite(RIS, HIGH);   // accende il RIS

delay(500);               // aspetta 0,5 secondi

digitalWrite(RIS, LOW);    // spegne il RIS

delay(500);               // aspetta 0,5 secondi

}

void settanta_percento()

{

digitalWrite(RIS, HIGH);   // accende il RIS

delay(700);                // aspetta 0,7 secondi

digitalWrite(RIS, LOW);    // spegne il RIS

delay(300);               // aspetta 0,3 secondi

}

void novanta_percento()

{

digitalWrite(RIS, HIGH);   // accende il RIS

delay(900);                // aspetta 0,9 secondi

digitalWrite(RIS, LOW);    // spegne il RIS

delay(100);               // aspetta 0,1 secondi

}

void cento_percento()

{

digitalWrite(RIS, HIGH);   // accende il RIS

delay(990);                // aspetta 0,99 secondi

digitalWrite(RIS, LOW);    // spegne il RIS

delay(10);               // aspetta 0,01 secondi

}

Confrontare il codice con quello in formato DOC allegato e corregere eventuali errori.

Il codice

/*       Termostato proporzionale
Il riscaldamento viene erogato in modo proporzionale
tenendo conto della differenza tra la temperatura 
impostata e quella letta dal sensore (LM35) in questo caso.
Realizzato da Eridano Bertini Ottobre-2010

*/


#include 
LiquidCrystal lcd(2, 3, 4,  5, 6, 7);//indichiamo i pin digitali  collegati
// al LCD,è importante seguire l'ordine
#define temp 0 // Pin LM35 analogico 
#define set 1  // Pin dove è collegato il cursore del potenziometro
#define RIS 13 // Pin pilota riscaldamento

float tempC;  // variabile in cui viene salvata la temperatura in gradi centigradi
float RIF;    // variabile in cui viene salvata la tensione di riferimento
float DIF;    // variabile in cui viene salvata la differenza

void setup()
{
pinMode(RIS, OUTPUT);    // imposta il pin digitale 13 come uscita
lcd.begin(16, 2);        //Indichiamo il tipo di LCD 16 colonne ,2 righe  
Serial.begin(9600);      //inizializzazione della comunicazione seriale
}
void loop()
{ 
RIF=analogRead(set);           //assegno alla variabile RIF il valore di analogRead(set)(0-1024)
tempC=analogRead(temp);  //assegno alla variabile tempC il valore di analogRead(temp)(0-1024)
DIF=(RIF - tempC);             //assegno alla variabile DIF il valore della differenza tra tempC e RIF

tempC = (5.0 * tempC * 100.0)/1024.0;  //converto il valore analogico in gradi C
RIF = (5.0 * RIF * 100.0)/1024.0;      //converto il valore analogico in gradi C
DIF = (5.0 * DIF * 100.0)/1024.0;      //converto il valore analogico in gradi C

//Stabilisco l'intensità del riscaldamento
//creando delle soglie

if (RIF   digitalWrite(RIS, LOW);//spegne il riscaldamento
delay(900);
}else if (DIF <1){   //se la DIF e minore di...gradi 
dieci_percento();
}else if (DIF <2){   //se la DIF e minore di...gradi 
trenta_percento();
}else if (DIF <3){   //se la DIF e minore di...gradi 
cinquanta_percento();
}else if (DIF <4){   //se la DIF e minore di...gradi 
settanta_percento(); 
}else if (DIF <5){   //se la DIF e minore di...gradi 
novanta_percento();
}else{              //se la DIF e maggiore di...gradi,  riscaldamento continuo
digitalWrite(RIS, HIGH);
delay(900); 
}
lcd.clear();         //ripulisce il display LCD
lcd.setCursor(1,0);  //Posiziona il cursore sulla prima casella della prima riga
lcd.print(" Temperatura  = ");//qui possiamo scrivere quello che ci pare
lcd.print(tempC,1);  //visualizza su display il valore dei gradi temC + un decimale
lcd.setCursor(0,1); //sposta il cursore sulla seconda riga
lcd.print(" Temp IMPOSTATA = "); //qui possiamo scrivere quello che ci pare
lcd.print(RIF,1); //visualizza su display il valore dei gradi RIF + un decimale

delay(100);
}
 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi