Ciao, hai perfettamente ragione...
Ecco lo sketch:
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#include <PID_v1.h> //Per controllo riscaldamento e raffreddamento
#include <OneWire.h> //Per sensore temperatura DALLAS DS18B20
#include <DallasTemperature.h> //Per sensore temperatura DALLAS DS18B20
#include <BlynkSimpleEthernet.h>
#define W5100_CS 10
#define SDCARD_CS 4
#define PIN_INPUT A5
#define PIN_OUTPUT 3
#define PIN_OUTPUT2 6
#define ONE_WIRE_BUS_1 A1 //Sonda temperatura INGRESSO
#define ONE_WIRE_BUS_2 A2 //Sonda temperatura USCITA
OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);
DallasTemperature sensor_in(&oneWire_in);
DallasTemperature sensor_out(&oneWire_out);
//Define Variables we'll be connecting to
double Setpoint_HOT, Setpoint_COLD, Input, Output_HOT, Output_COLD;
//Specify the links and initial tuning parameters
double KpH = 1, KiH = 3, KdH = 5;
PID myPID_HOT(&Input, &Output_HOT, &Setpoint_HOT, KpH, KiH, KdH, DIRECT);
double KpC = 7, KiC = 3, KdC = 3;
PID myPID_COLD(&Input, &Output_COLD, &Setpoint_COLD, KpC, KiC, KdC, REVERSE);
// INGRESSI
DHT dht(A0, DHT22);
#define fin A3 //Finecorsa coperchio
// USCITE
#define alimentatori 2 //Accensione alimentatori riscaldatori
int riscaldatore1 = 3; //Riscaldatore 1
#define ledrosso 4 //Led ROSSO accensione riscaldamento
int riscaldatore2 = 5; //Riscaldatore 2
int ventole12 = 6; //Gruppo ventole aspirazione/espulsione 1-2
#define ledblu 7 //Led BLU accensione gruppi ventole
int ventole34 = 9; //Gruppo ventole aspirazione/espulsione 3-4
int ventoleR = 8; //Controllo ventole riscaldatori
// VARIABILI
int tempcaldo = 15; //Temperatura MAX riscaldatori
int tempfreddo = 25; //temperatura accendione ventilazione raffreddamento
char auth[] = "";
IPAddress arduino_ip ( 192, 168, 0, 10);
IPAddress gateway_ip ( 192, 168, 0, 1);
void setup()
{
// Debug console
Serial.begin(9600);
// Inizializzazione libreriua sensore
dht.begin();
sensor_in.begin();
sensor_out.begin();
Serial.print("Requesting temperatures...");
sensor_in.requestTemperatures();
sensor_out.requestTemperatures();
Serial.println(" done");
//initialize the variables we're linked to
//Input = analogRead(PIN_INPUT);
//turn the PID on
myPID_HOT.SetMode(AUTOMATIC);
myPID_HOT.SetOutputLimits(0, 255);
myPID_COLD.SetMode(AUTOMATIC);
myPID_COLD.SetOutputLimits(0, 255);
//Inizializzazioni IO
pinMode(fin, INPUT);
pinMode(ledrosso, OUTPUT);
pinMode(ledblu, OUTPUT);
pinMode(alimentatori, OUTPUT);
pinMode(ventoleR, OUTPUT);
/*
digitalWrite(ledblu, LOW);
digitalWrite(ledrosso,LOW);
delay(10000); //attendo tempo per accensione ROUTER 3G
digitalWrite(ledblu, HIGH);
digitalWrite(ledrosso, HIGH);
delay(2000);
digitalWrite(ledblu, LOW);
digitalWrite(ledrosso,LOW);
delay(2000); //Segnale accensione 1
digitalWrite(ledblu, HIGH);
digitalWrite(ledrosso, HIGH);
delay(2000);
digitalWrite(ledblu, LOW);
digitalWrite(ledrosso,LOW);
delay(2000); //Segnale accensione 2
digitalWrite(ledblu, HIGH);
digitalWrite(ledrosso, HIGH);
delay(2000);
digitalWrite(ledblu, LOW);
digitalWrite(ledrosso,LOW);
delay(2000); //Segnale accensione 3
digitalWrite(ledblu, HIGH);
digitalWrite(ledrosso, HIGH);
*/
pinMode(SDCARD_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card
Blynk.begin(auth); //Inizializzo BLYNK
}
void loop()
{
Blynk.run();
// WidgetLED led1(V6);
// WidgetLED led2(V8);
//Richiesta temperatura da sonde esterne
sensor_in.requestTemperatures();
sensor_out.requestTemperatures();
//Lettura temperatura ed umidità da DHT
float H = dht.readHumidity(); // Leggo il valore di umidità
float T = dht.readTemperature(); // Leggo il valore di temperatura
Input = T;
Serial.println(" ");
Serial.print("Temperatura interna: ");
Serial.println(T);
Serial.print("Umidità interna: ");
Serial.println(H);
//Input = (analogRead(PIN_INPUT) / 25);
Blynk.virtualWrite(V1, H); // Definisco variabili Blynk Umidità
Blynk.virtualWrite(V0, T); // Definisco variabili Blynk TEMPERATURA
Setpoint_COLD = tempfreddo;
Setpoint_HOT = tempcaldo;
boolean stato = 0;
if (digitalRead(fin) == LOW)
{
/*Led ROSSO e BLU lampeggianti */
digitalWrite(alimentatori, LOW);
digitalWrite(ledrosso, HIGH);
digitalWrite(ledblu, HIGH);
analogWrite(riscaldatore1, LOW);
analogWrite(riscaldatore2, LOW);
analogWrite(ventole12, LOW);
analogWrite(ventole34, LOW);
delay(500);
digitalWrite(ledrosso, LOW);
digitalWrite(ledblu, LOW);
}
else if (digitalRead(fin) == HIGH)
{
digitalWrite(ledrosso, HIGH);
digitalWrite(ledblu, HIGH);
digitalWrite(alimentatori, HIGH);
digitalWrite(ventoleR, HIGH);
//QUI Aggiungo il PID
//2. calcolo i suoi valori di output assegnando la temp misurata
myPID_COLD.Compute();
myPID_HOT.Compute();
//3. applico il controllo
analogWrite(riscaldatore1, Output_HOT);
analogWrite(riscaldatore2, Output_HOT);
analogWrite(ventole12, Output_COLD);
analogWrite(ventole34, Output_COLD);
if (Output_HOT > 5)
{
digitalWrite(alimentatori, LOW);
digitalWrite(ledrosso, LOW);
digitalWrite(ventoleR, LOW);
digitalWrite(ledblu, HIGH);
// led1.on();
}
else if (Output_HOT = 0)
{
digitalWrite(alimentatori, HIGH);
digitalWrite(ledrosso, HIGH);
digitalWrite(ventoleR, HIGH);
// led1.off();
}
if (Output_COLD > 5)
{
digitalWrite(ledblu, LOW);
digitalWrite(ledrosso, HIGH);
digitalWrite(alimentatori, HIGH);
digitalWrite(ventoleR, HIGH);
// led2.on();
}
else if (Output_COLD = 0)
{
digitalWrite(ledblu, HIGH);
digitalWrite(ledrosso, HIGH);
// led2.on();
}
}
Serial.print("Valore PWM Caldo: ");
Serial.println(Output_HOT);
Blynk.virtualWrite(V2, Output_HOT); // Definisco variabili Blynk
Serial.print("Valore PWM Freddo: ");
Serial.println(Output_COLD);
Blynk.virtualWrite(V3, Output_COLD); // Definisco variabili Blynk
//Serial.print("Temperatura aria aspirazione: ");
//Serial.println(sensor_in.getTempCByIndex(0));
Blynk.virtualWrite(V4, sensor_in.getTempCByIndex(0));
//Serial.print("temperatura aria estrazione: ");
//Serial.println(sensor_out.getTempCByIndex(0));
Blynk.virtualWrite(V5, sensor_out.getTempCByIndex(0));
Serial.println(" ");
//delay(1000);
}
Il codice di Blynk nel sketch caricato lo ho inserito :grinning:
Grazie :sweat_smile: