Go Down

Topic: termostato caldo/freddo con data log  (Read 111 times) previous topic - next topic

ilario

salve a tutti, ho realizzato un termostato per la gestione della temperatura del mosto di birra utilizzando arduino uno, un modulo a 2 relè, un display 16 segmenti e 2 linee ed una sonda di temperatura DS18B20. Il progettino sembra funzionare bene ed ora vorrei abbinargli un modulo RTC e una microSd per poter memorizzare ad intervalli magari di 5/10 minuti il tempo e la relativa temperatura. Siccome non ho ancora acquistato il modulo RTC e il modulo microSd cosa mi consigliate di acquistare? ho visto che è possibile acquistare un modulo che in realtà ha entrambe le funzionalità. Sapreste indicarmi un modello che fa al caso mio? attualmente ho impiegato quasi tutte le uscite perchè il display non è con il modulo seriale. Sto facendo girare questo codice, preso dalla rete e modificato un po' per il mio utilizzo.

Code: [Select]

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <secTimer.h>

#define CALDO 0
#define FREDDO 1
#define ONE_WIRE_BUS 13

secTimer myTimer;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int RAFFREDDAMENTO = 2;
int RISCALDAMENTO = 3;
int tmin = 21;
int tmax = 25;
int TIME;
int ULTIMOSTATO = 0; //0 per spento, 1 caldo, 2 freddo
int ULTIMOFF = 0;
int SALVAFRIGO = 600;

//dichiarazione pulsanti
const int tminsu = 11;
const int tmingiu = 10;
//const int tmaxsu = 14;
//const int tmaxgiu = 15;

int statoTminsu = 0;
int statoTmingiu = 0;
//int statoTmaxSu = 0;
//int statoTmaxGiu = 0;

byte state = 1;
unsigned long seconds = 0;

void setup(void)
{
 lcd.begin(16, 2);
 pinMode(RAFFREDDAMENTO, OUTPUT);
 pinMode(RISCALDAMENTO, OUTPUT);
 pinMode(tminsu,INPUT);
 pinMode(tmingiu,INPUT);
 myTimer.startTimer();
 seconds = myTimer.readTimer();
 sensors.begin();
}

void loop(void)
{
 
//imposto le temperature con i pulsanti
statoTminsu = digitalRead (tminsu);
if( statoTminsu == HIGH)
{tmin++;}

statoTmingiu = digitalRead (tmingiu);
if( statoTmingiu == HIGH)
{tmin--;}

//statoTmaxSu = digitalRead (tmaxsu);
//if( statoTmaxSu == HIGH)
//{tmax++;}

//statoTmaxGiu = digitalRead (tmaxgiu);
//if( statoTmaxGiu == HIGH)
//{tmax--;}

 sensors.requestTemperatures();
 lcd.setCursor(0, 0);
 lcd.print("FhB mosto:");
 lcd.setCursor(11, 0);
 lcd.print(sensors.getTempCByIndex(0));
 lcd.setCursor(0, 1);
 lcd.print(tmin);
 lcd.setCursor(2, 1);
 lcd.print("-");
 lcd.setCursor(3, 1);
 lcd.print(tmax);
 //lcd.setCursor(6, 0);
 //lcd.print(SALVAFRIGO);
 TIME = myTimer.readTimer(); //prendo il tempo attuale


if (sensors.getTempCByIndex(0) < tmin)
  {
  digitalWrite(RISCALDAMENTO, LOW);
  digitalWrite(RAFFREDDAMENTO, HIGH);
  lcd.setCursor(6, 1);
  lcd.print("Caldo ON  ");
  ULTIMOSTATO = 1;
  }
  else if (sensors.getTempCByIndex(0) > tmax && (TIME -= SALVAFRIGO) > ULTIMOFF) //time = time - salvafrigo
  {
  digitalWrite(RISCALDAMENTO, HIGH);
  digitalWrite(RAFFREDDAMENTO, LOW);
  lcd.setCursor(6, 1);
  lcd.print("Freddo ON ");
  ULTIMOSTATO = 2;
  }

 else if (TIME<ULTIMOFF) //indica tra quanto si attiva il freddo
  {
  digitalWrite(RISCALDAMENTO, HIGH);
  digitalWrite(RAFFREDDAMENTO, HIGH);
  lcd.setCursor(10, 1);
  lcd.print("F:");
  lcd.setCursor(12, 1);
  lcd.print(TIME);
  }

 else if (sensors.getTempCByIndex(0) > tmin || sensors.getTempCByIndex(0) < tmax)
  {
  digitalWrite(RISCALDAMENTO, HIGH);
  digitalWrite(RAFFREDDAMENTO, HIGH);
  lcd.setCursor(6, 1);
  lcd.print("OFF       ");
   
  if (ULTIMOSTATO == 2)
   {
    ULTIMOFF = myTimer.readTimer();
    ULTIMOSTATO = 0;
   }
  }
  delay(1500);
 }


docdoc

Io ho preso uno di QUESTI, e funziona, ed ha anche spazio per montare componenti.
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito ;-) **

ilario

ordinato.. grazie. farò delle prove

Go Up