10 Ottobre 2024

Benvenuti nel BLOG di Vincenzo

Il blog realizzato mattoncino su mattoncino…!

Centralina per un Impianto di Termoventilazione con un TTGO ESP32


L’idea di una centralina per gestire un mini-impianto di termoventilazione nasce dalla volontà di riscaldare maggiormente un ambiente domestico munito del tradizionale sistema di riscaldamento ove la classica caldaia provvede a riscaldare dei radiatori di alluminio.

Dunque, grazie all’impiego di una ventola tangenziale da 12v (rimediata da una modesta stampante laser — come in foto) posta al di sotto del radiatore, mi è stato possibile convertire un tradizionale termosifone in un termoconvettore di tutto rispetto munito persino di un termistore di controllo (10kΩ) in grado di monitorare la temperatura del circuito d’acqua della caldaia affinché la ventola si accenda solo quando necessario.

Inoltre ho ritenuto necessaria, ai fini della dimostrazione dell’effettiva utilità di tale progetto, l’aggiunta di un sensore di umidità e temperatura ambientali (DHT22) onde misurare i vantaggi tutt’altro che fittizi che comporta un termoconvettore rispetto a un tradizionale termosifone in termini di resa e consumi energetici.

Infine la centralina (il cui alloggiamento è stato progettato in 3D su misura), oltre che a mostrare sul display di cui è munita tutti i dati raccolti quali temperatura e umidità dell’ambiente e temperatura del termosifone, è stata programmata per inviarli anche a una server di raccolta dati, di cui -in questo progetto- fa le veci per comodità il servizio gratuito Blynk.cloud offerto da Blynk Iot. Quest’ultimo mi ha permesso di creare anche una web dashboard (come dalla foto in basso) dove poter visualizzare tutte le informazioni prima dette e modificare eventualmente la soglia di temperatura alla quale voler far accendere il sistema di termoventilazione.

A seguire dei settaggi utili per inizializzare le variabili all’interno di Blynk:


HARDWARE:


Progetto in 3D:


Software:


//www.vincenzonet.it
#define BLYNK_TEMPLATE_ID  "TMPLxxxxxx"
#define BLYNK_DEVICE_NAME  "Device"
#define BLYNK_AUTH_TOKEN   "YourAuthToken"
#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <TFT_eSPI.h>
#include <SPI.h>
#include <DHT.h>
#include "icone.h"  //lo trovi in fondo all'articolo ;)

char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Tu WiFi L'Americano";
char pass[] = "psw per Tu WiFi L'Americano";

const double VCC = 3.3;             // NodeMCU on board 3.3v vcc
const double R2 = 10000;            // 10k ohm series resistor
const double adc_resolution = 4095; // 10-bit adc

const double A = 0.001129148;   // thermistor equation parameters
const double B = 0.000234125;
const double C = 0.0000000876741; 

float soglia=1;
double temp_fin=0;
double t;
double h;

#define DHTPIN 15
#define DHTTYPE DHT22
#define termo 33

DHT dht(DHTPIN, DHTTYPE);
TFT_eSPI tft = TFT_eSPI();
BlynkTimer timer;

/***************************************************/

BLYNK_WRITE(V0)
{
  soglia=param.asInt();
  showdis();
}

/***************************************************/
//www.vincenzonet.it
void showdis(){
  tft.fillScreen(TFT_BLACK);
  tft.setCursor(0, 23);
  tft.println("Temp      Umidita'");
  tft.drawLine(0, 28, 250, 28, TFT_BLUE);
  
  tft.setCursor(0, 53);
  tft.print(t);
  tft.print(F("c"));
  
  tft.setCursor(125, 53);
  tft.print(h);
  tft.print(F("%"));

  tft.setCursor(0, 90);
  tft.println("Termo");
  tft.drawLine(0, 95, 100, 95, TFT_BLUE);
  
  tft.setCursor(0, 120);
  tft.print(constrain(round(temp_fin),0,90));
  tft.print(F("c"));
  if (temp_fin>soglia){
    tft.pushImage(125,55,96,96,on);
    digitalWrite(17, HIGH);
  }
  else{
    tft.pushImage(125,55,96,96,off);
    digitalWrite(17, LOW);
  }
  }
//www.vincenzonet.it
void update_temp(){
  t = dht.readTemperature();
  h = dht.readHumidity();
  double Vout, Rth, temp, adc_value; 
    
  adc_value=analogRead(termo);
  Vout = (adc_value * VCC) / adc_resolution;
  Rth = (VCC * R2 / Vout) - R2;
/*  Steinhart-Hart Thermistor Equation:
 *  Temperature in Kelvin = 1 / (A + B[ln(R)] + C[ln(R)]^3)
 *  where A = 0.001129148, B = 0.000234125 and C = 8.76741*10^-8  */
  temp = (1 / (A + (B * log(Rth)) + (C * pow((log(Rth)),3))));   // Temperature in kelvin
  temp_fin = temp - 273.15;
  
  Blynk.virtualWrite(V1, constrain(round(temp_fin),0,90)); 
  Blynk.virtualWrite(V2, t); 
  Blynk.virtualWrite(V3, h); 
  showdis();
}


BLYNK_CONNECTED(){
  Blynk.syncVirtual(V0);
}
//www.vincenzonet.it

void setup()
{ pinMode(17, OUTPUT);
  pinMode(termo,INPUT);
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
  dht.begin();
  tft.init();
  tft.setRotation(1);
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_BLUE, TFT_BLACK);
  tft.setFreeFont(&Orbitron_Light_24);
  tft.setSwapBytes(true);
  timer.setInterval(10000L, update_temp);
  showdis();
  }
//www.vincenzonet.it
void loop()
{
  Blynk.run();
  timer.run();  
}

Vincenzo D’Ambrosio – Classe 2006