Buongiorno a tutti, dopo parecchio tempo torno ad usare arduino, sto progettando un temostato con isteresi e una termocoppia.
Perchè la termocoppia è un fornetto che arriva 1000 gradi per cui usata termocoppia k con max 6675. Procedo a montare il circuito lo sto testando solo con monitor seriale ma noto che non viene letto il valore del potenziometro difatti ho aggiunto un serial print sulla variabile potenziometro.
riporto il codice scritto se potete aiutarmi . Grazie mille del tempo dedicatomi.
#include <MAX6675_Thermocouple.h>
// costanti
#define SCK_PIN 10
#define CS_PIN 9
#define SO_PIN 8
int Pot = A1;
int Rele = 5;
//variabili
int temp = 0; //valore discreto temperatura
int valpot = 0; //valore letto dal potenziometro
int Tamb = 0; //valore letto dalla temocoppia
int Tset = 0; //variabile per temperatura impostata
bool Statorele = HIGH;
MAX6675_Thermocouple tc = MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
void setup() {
Serial.begin(9600);
pinMode (Rele, OUTPUT);
}
void loop() {
Tamb = tc.readCelsius();
temp =analogRead (Pot);
Serial.println ("POTENZIOMETRO" + String(Pot));
Tset = map(valpot, 0, 1023, 300, 1000);
Serial.println ("temperatura settata=" + String(Tset) + "C");
Serial.println ("temperatura ambiente=" + String (Tamb) + "C");
if (Tamb<Tset-50) {
Statorele=LOW;
Serial.println ("rele ACCESO");
}
if (Tamb>Tset+50) {
Statorele=HIGH;
Serial.println ("rele SPENTO");
}
digitalWrite(Rele, Statorele);
Serial.println ("");
delay (5000);
}
Scusate se rompo nuovamente, ho modificato il codice da potenziometro all'utilizzo di due pulsanti, il codice per i pulsanti non è il mio ma l'ho trovato veramente valido e per cui ho inserito nel mio tutto il codice e aggiunto lcd ma ho un problema da cui non vengo a capo:
sembra funzionare tutto tranne l'aggiornamento del dato della termocoppia, appena accendo arduino rileva la temperatura ambiente tipo 25 gradi scaldando la termocoppia non cambia. Potete aiutarmi a trovare l'errore perchè sono 2 giorni che mi sfugge. Grazie mille.
#include <LiquidCrystal.h>
#include <MAX6675_Thermocouple.h>
// costanti
#define SCK_PIN 9
#define CS_PIN 8
#define SO_PIN 7
int Rele = 13;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//variabili
int temp = 0; //valore discreto temperatura
int Tamb = 0; //valore letto dalla temocoppia
int Tset = 0; //variabile per temperatura impostata
bool Statorele = HIGH;
const int buttonUpPin = 6; //numero pin a cui è collegato il pulsante di UP
const int buttonDownPin = 10; //numero pin a cui è collegato il pulsnte di DOWN
int buttonUpState; //stato attuale del pulsante di UP
int buttonDownState; //stato attuale del pulsante di Down
long UpDebounceTime; //Variabilie di appoggio per calcolare il tempo di cambio di stato del pulsante di UP
long DownDebounceTime; //Variabilie di appoggio per calcolare il tempo di cambio di stato del pulsante di Down
long timerButtonPushed; //tempo che indica da quanto è stato premuto il pulsante
long timerPauseRepeat; //tempo che indica da quanto è stata fatta l'ultima ripetizione
long time_add_10 = 1000; //costante per attivare ripetizione da +10
long time_add_100 = 5000; //costante per attivare ripetizione da +100
long time_pause = 250; //costante che determina il tempo di ripetizione di UP e di DOWN
long debounceDelay = 80; //Tempo di debounce per i pulsanti UP e DOWN
boolean repeatEnable = LOW; //memoria che indica il repeat del pulsante attivo
const int varMax = 1000; //limite massimo valore della variabile
const int varMin = 0; //limite minimo valore della variabile
MAX6675_Thermocouple tc = MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
void setup() {
Serial.begin(9600);
pinMode (Rele, OUTPUT);
pinMode (buttonUpPin, INPUT); //impostazione buttonUpPin come ingresso
pinMode (buttonDownPin, INPUT); //impostazione buttonDownPin come ingresso
lcd.begin(16, 2);
}
void loop (){
readButtonState(); //Lettura stato buttons con controllo antirimbalzo
if (buttonUpState == HIGH || buttonDownState == HIGH) {
if ((repeatEnable == HIGH && ((millis() - timerPauseRepeat) > time_pause)) || repeatEnable == LOW) {
if ((millis() - timerButtonPushed) > time_add_10) {
if ((millis() - timerButtonPushed) > time_add_100) {
if (buttonUpState == HIGH) Tset = Tset + 100;
if (buttonDownState == HIGH) Tset = Tset - 100;
} else {
int resto = 0;
if (buttonUpState == HIGH) resto = 10 - (Tset % 10);
if (buttonDownState == HIGH) resto = (Tset % 10);
if (resto == 0){
if (buttonUpState == HIGH) Tset = Tset + 10;
if (buttonDownState == HIGH) Tset = Tset - 10;
} else{
if (buttonUpState == HIGH) Tset = Tset + resto;
if (buttonDownState == HIGH) Tset = Tset - resto;
}
}
} else {
if (buttonUpState == HIGH) Tset++;
if (buttonDownState == HIGH) Tset--;
}
timerPauseRepeat = millis();
repeatEnable = HIGH;
if (Tset > varMax) Tset = varMax;
if (Tset < varMin) Tset = varMin;
}
} else {
timerButtonPushed = millis();
timerPauseRepeat = millis();
repeatEnable = LOW;
}
}
void readButtonState() {
int readingUp = digitalRead(buttonUpPin); //Lettura ingresso digitale del pulsante di UP
int readingDown = digitalRead(buttonDownPin); //Lettura ingresso digitale del pulsante di Down
if (readingUp == HIGH) {
if ((millis() - UpDebounceTime) > debounceDelay) {
buttonUpState = HIGH;
}
} else {
buttonUpState = LOW;
UpDebounceTime = millis();
}
if (readingDown == HIGH) {
if ((millis() - DownDebounceTime) > debounceDelay) {
buttonDownState = HIGH;
}
} else {
buttonDownState = LOW;
DownDebounceTime = millis();
}
Tamb = tc.readCelsius();
Serial.println ("temperatura settata=" + String(Tset) + "C");
Serial.println ("temperatura ambiente=" + String (Tamb) + "C");
lcd.setCursor(0,0);
lcd.print ("Tsettata=" + String(Tset) + "C");
lcd.setCursor(0,1);
lcd.print ("Tambiente=" + String (Tamb) + "C");
if (Tamb<Tset-50) {
Statorele=LOW;
Serial.println ("rele ACCESO");
}
if (Tamb>Tset+50) {
Statorele=HIGH;
Serial.println ("rele SPENTO");
}
digitalWrite(Rele, Statorele);
Serial.println ("");
}