Problema con il collegamento a dei relay per la domotica

Salve, ho un problema con il mio progetto; avevo pensato di collegare un sensore di temperatura al mio arduino per poi attivare un relay collegato ad una stufa per riscaldare l’ambiente se fosse stato troppo freddo. (e di impostare la temperatura di accensione della stufa tramite un potenziometro…)

quando però imposto la temperatura con il potenziometro, se la temperatura dell’ambiente è più bassa il relè si accende ad intermittenza!! qualcuno può darmi una mano perfavore? E’ poco che uso arduino e sto ancora imparando, grazie in anticipo!!

qui sotto metto il codice…

//programma che gestisce un termostato; la temperatura viene letta dal sensore dht11, viene stampata su un lcd comandato da un modulo i2c.
//è possibile impostare la temperatura ad un certo livello (che deve essere scritto sull’lcd) tramite un potenziometro 5k; se la temperatura impostata è piu alta della temperatura
//ambientale allora arduino invierà un segnale ad un relay che permetterà l’accensione di una stufa per riscaldare l’ambiente

/*collegamenti hardware
potenziometro:pin A0
sensore dht11:pin 2
schermo lcd:pin A5(scl) pin A4 (sda)
relay: pin 8
*/

#include <dht11.h> //lireria dht11
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //lireria i2c
dht11 DHT11;
#define DHT11PIN 2 //definiamo il pin 2 il collegamento dati al sensore di temperatura
LiquidCrystal_I2C lcd(0x27,16,2);

int temp; //temperatura letta dal sensore
int tempset; //temperatura impostata dal potenziometro
int pot; //lettura del valore del potenziometro
const int minpot=15; //temperatura minima impostabile
const int costp=95; //costante per il calcolo di tempset
const int pin=7; //pin di attivazione del relè

void setup() {

Serial.begin(9600);
pinMode(A0, INPUT); //pin lettura potenziometro
pinMode(pin, OUTPUT); //pin attivazione relè

lcd.init(); //inizializzazione lcd
lcd.backlight();

}

void loop() {

int chk = DHT11.read(DHT11PIN);

temp=(int)DHT11.temperature;
//Serial.print("\ntemperatura="); Serial.print(temp); //stampa di controllo sulla temperatura

pot=analogRead(A0);
// Serial.print("\npot="); Serial.print(pot); delay(500);

tempset=minpot+(pot/costp);
// Serial.print("\ntempset="); Serial.print(tempset);

if (tempset<temp) { digitalWrite(pin, LOW); } //spegnimento relè se tempset<temp
else {digitalWrite(pin, HIGH);} //accensione relè se temp min di tempset

//stampa su lcd di temperatura ambientale e temperatura impostata
lcd.print(“Temp: “);
lcd.print(temp);
lcd.print(” C”);

lcd.setCursor(0,1);
lcd.print("Temp set: “);
lcd.print(tempset);
lcd.print(” C ");

} //fine

ciao potrebbe succedere quando tempset e temp sono prossimi, per ovviare devi impostare un intervallo di intervento, tempset+/-delta se temp maggiore di +delta spengni la stufa altrimenti se più bassa di -delta accendi

Detto in pratica, non puoi far accendere una stufa a 10 gradi e spegnerla se la temperatura è 10,0001 ! Solitamente si mette uno 0,5 gradi di differenza: accende a 10 e spegne a 10.5 e si riaccende a 10...