1° Forum di Astronomia Amatoriale Italiano

Il primo forum di astrofili per astrofili, nato nel 2000!
Oggi è venerdì 4 luglio 2025, 4:50

Menu

* Home
* Iscriviti
* La Bacheca
* F.A.Q.
* Cerca
* Login/Logout 

Login

Nome utente:
Password:

 Ho dimenticato la password

In Linea

Visitano il forum: Nessuno e 15 ospiti

Regolamento

regolamento

Links

*
Astrocafè

Segnala bolide
* Meteoblue.com
* Previsioni seeing
* Il Meteo.it
Help Forum
 

Tutti gli orari sono UTC + 1 ora




Apri un nuovo argomento Rispondi all’argomento  [ 4 messaggi ] 
Autore Messaggio
 Oggetto del messaggio: Dew Point controller arduinico
MessaggioInviato: mercoledì 2 maggio 2018, 14:52 
Non connesso
Avatar utente

Iscritto il: martedì 6 maggio 2008, 11:59
Messaggi: 9269
Località: San Francesco al Campo [TO]
Tipo di Astrofilo: Visualista e Fotografo
Ciao a tutti, non sto proprio facendo il controllo per la temperatura di rugiada ma più o meno l'ambito è lo stesso. Sto giocando con l'arduino relay shield e un DHT22 (sensore di temperatura e umidità).

Così ho pensato ad uno skecth di Arduino che legga l'umidità e la temperatura dell'aria e, quando si avvicina al punto di rugiada, chiuda un relay a cui è collegata la fascia anticondensa: ne ho impostati due di relay, il 5 e il 6, volendo uno dei due si può disabilitare.
Ho impostato anche una temperatura massima (25°C) oltre la quale i relay non si attivano.
Codice:
/* Dew Point controller
  HW:
  - Arduino UNO
  - Arduino Relay Shield
  - DHT22 (AM2302)

  SW:
  - Adafruit Sensor: https://github.com/adafruit/Adafruit_Sensor
  - DHT22 library: https://github.com/adafruit/DHT-sensor-library

  Simone Martina - 2018/05/02
  https://creativecommons.org/licenses/by/4.0/
*/

#include <DHT.h>;

//Max temperature
const int maxTemp = 25;
//Pause between readings
const long intervallo = 300000; //5 minutes

//Constants
const int DHTPIN=4;    // DHT22 Pin
const int RELAY5=5;
const int RELAY6=6;


// initaliaze variables
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for normal 16mhz Arduino

double hum;  //Stores humidity value
double temp; //Stores temperature value

void setup()
{
  Serial.begin(9600);
  pinMode(RELAY5,OUTPUT);
  pinMode(RELAY6,OUTPUT);
  dht.begin();
  digitalWrite(RELAY5,LOW);
  digitalWrite(RELAY6,LOW);

}

void loop()
{
    //Read data and store it to variables hum and temp
    hum = dht.readHumidity();
    temp = dht.readTemperature();
    //calculate dew point
    double gamma = log(hum / 100) + ((17.62 * temp) / (243.5 + temp));
    double dp = 243.5 * gamma / (17.62 - gamma);
   
    //Print temp and humidity values to serial monitor
    Serial.print("Humidity: ");
    Serial.print(hum);
    Serial.print(" %, Temp: ");
    Serial.print(temp);
    Serial.print(" °C, Dew point: ");
    Serial.print(dp);
    Serial.print(" °C: ");
    if(temp < maxTemp && temp < dp) {
      Serial.println("Relays ON");
      digitalWrite(RELAY5, HIGH);
      digitalWrite(RELAY6, HIGH);
    } else {
      Serial.println("Relays OFF");
      digitalWrite(RELAY5, LOW);
      digitalWrite(RELAY6, LOW);
    }
   
    delay(intervallo); //Delay 5 minutes
}

Nella speranza che sia utile.

_________________
Simone Martina
(a.k.a. gaeeb)
- - - - - - - - - - - - - - - - - - - -
Gruppo Astrofili Edward Emerson Barnard
Home Page: www.gaeeb.org
Facebook: facebook.com/gaeeb
Twitter: twitter.com/gaeeb_org

autocostruttite.wordpress.com


Top
  Profilo   WWW  
 
 Oggetto del messaggio: Re: Dew Point controller arduinico
MessaggioInviato: mercoledì 2 maggio 2018, 23:58 
Non connesso

Iscritto il: martedì 7 novembre 2006, 11:25
Messaggi: 72
Ciao Simone,

io ho preferito optare per due uscite PWM con duty cycle impostato manualmente da PC in funzione di temperatura e punto di rugiada riportati dal mio controller.
In realtà l'ideale sarebbe un ulteriore sensore di temperatura per regolare automaticamente il duty cycle al fine di tenere la lente o lo specchio a temperatura di poco maggiore di quella ambiente...
Ma con la batteria al litio che uso ormai non mi pongo troppi problemi, tengo le fasce sempre accese a potenza ridotta. In casi estremi aumento un po' il duty cycle...

CS
Armando


Top
  Profilo    
 
 Oggetto del messaggio: Re: Dew Point controller arduinico
MessaggioInviato: lunedì 5 agosto 2024, 10:57 
Non connesso

Iscritto il: martedì 16 luglio 2013, 21:37
Messaggi: 1
Prima versione di programma con arduino di gestione tramite scheda PWM, proporzionale in base a Delta T tra T esterna e Punto di Rugiada

Codice:
/* controllo proporzionale della fascia anti condensa
  in base alla temperatura di rugiada e la temperatura misurata
  con scheda di controllo arduino nano e MOS Module 1,5A
  sensore di temperatura DS18B20, umidità DHT22, pressione bmp280 (non utilizzata), buzzer passivo
  preso spunto da progetto di Simone Martina - 2018/05/02
  **  update by Giorgio Anzelini ** 2024/08/05
*/
#define DHT22_S1 3       // assegno PIN per sonda Temp. Umidità
#define DS18B20_1 4      // assegno PIN sonde temperatura DS18B20
#define DewHeather 9     // assegno PIN regolatore PWM
#define Buzzer_1 10      // assegno PIN Buzzer, avvisa che siamo prossimi alla temperatura di rugiada

// ******* LIBRERIE UTILIZZATE *******
#include <OneWire.h>                        // sonde DS18B20
#include <DallasTemperature.h>              // sonde DS18B20
#include "DHT.h"                            // sonda DHT11 +-2° +-5% / DHT22 +-0,5° +-2%
#include <Adafruit_BMP280.h>                // sonda BMP280 i2C pressione +-12hPa
DHT dht(DHT22_S1, DHT22);

OneWire oneWire(DS18B20_1);
DallasTemperature sensore(&oneWire);
#define precision 12 // OneWire precision Dallas Sensor
float temperaturaSonda;

//Pausa tra le letture
unsigned long intervallo = 300;  //default 300 (secondi) = 5minuti

float t1, h1, hic1, tempsonda;  // valori da sensore DHT22 e sonda Temperatura
float gamma, PuntoRugiada;      // variabili calcolo temperatura di rugiada (DewPoint)
byte buzzON = 0;                // abilita buzzer

//******** VARIABILI PRESSIONE BMP280 ********
Adafruit_BMP280 bmp; // I2C Interface
#define SEALEVELPRESSURE_HPA (1013.25)  // definisci la pressione standard s.l.m.
float PressureRead;

byte MaxTemp  = 25; // assegnare valore temperatura massimo di intervento oltre la quale PWM si spegne
byte differenziale = 10; // temperatura di sicurezza per la prevensione della condensa
byte minDiff = 2; // soglia di intervento, PWM al 100%
byte maxScarto = 5; // soglia di non intervento, PWM a 0%
byte PWM_powerOUT = 0;   // 0-255 variabile regolazione potenza PWM di uscita regolatore 12V
byte PWM_minPower = 30;  // minima potenza percentuale OUT
byte PWM_maxPower = 100; // massima potenza percentuale OUT
float deltaT;

void setup() {
Serial.begin(9600);
sensore.begin();                  // inizializza i sensori su linea BUS DS18B20
sensore.setResolution(DS18B20_1, precision); // definisci la precisione del sensore (12bit = 0,0625°)
pinMode( DHT22_S1, INPUT );     //NON NECESARI
pinMode( DewHeather, OUTPUT );  //NON NECESARI
pinMode( Buzzer_1, OUTPUT );    //NON NECESARI

dht.begin();
bmp.begin(0x76);                  // inizializza il sensore pressione BMP280 e definisci l'indirizzo I2C = 0x76
/* Default settings from datasheet.  */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500);  /* Standby time. */
intervallo = intervallo*1000; //trasforma in millisecondi
PWM_minPower = map(PWM_minPower, 0, 100, 0, 255);  // conversione minima potenza 0-255 di OUT
PWM_maxPower = map(PWM_maxPower, 0, 100, 0, 255);  // conversione massima potenza 0-255 OUT
}

void loop() {
sensore.requestTemperatures();  //  richiedi lettura sensori temperatura su BUS OneWire dei DS18B20 //will take about 750ms to run
temperaturaSonda = getTempSonda();
umidity1();     // richiama i cicli sotto
Pressure();

    //calcolatore Punto di Rugiada (dew point), utilizza la formula di Magnus-Tetens
    gamma = log(h1 / 100) + ((17.62 * temperaturaSonda) / (243.5 + temperaturaSonda));
    PuntoRugiada = 243.5 * gamma / (17.62 - gamma);

deltaT = temperaturaSonda-PuntoRugiada;
if(temperaturaSonda > MaxTemp || deltaT > (differenziale+maxScarto))
  { PWM_powerOUT = 0;
    buzzON=0;
  }
else if (deltaT>= minDiff)
  PWM_powerOUT = map(deltaT, minDiff, differenziale, PWM_maxPower, PWM_minPower); // mappa deltaT in PWM 20%-100%
else if (deltaT<minDiff)
    { PWM_powerOUT = PWM_maxPower;
      for(buzzON=0; buzzON<3; buzzON++)
      { analogWrite( Buzzer_1, 100 );
        delay(350);
        analogWrite( Buzzer_1, 0 );
        delay(350);
      }
    }
analogWrite(DewHeather, PWM_powerOUT);

serialPrint();
delay(intervallo);
}

//****************** FUNZIONE: LETTURA TEMPERATURE SONDE ******************
float getTempSonda()
{ float tempsonda = sensore.getTempCByIndex(0);
  return tempsonda;
}

void umidity1()
{ t1 = dht.readTemperature();
  h1 = dht.readHumidity();
  hic1 = dht.computeHeatIndex(t1, h1, false);  // Compute heat index in Celsius (isFahreheit = false)
  return t1;
  return h1;
  return hic1;
}

void Pressure()
{ PressureRead=(bmp.readPressure()/100); //(bme.readPressure() / 100.0F)
  return PressureRead;
}

void serialPrint()
{ Serial.print("TemperaturaSonda: "); Serial.print (temperaturaSonda,2);  Serial.println("°C");

  Serial.print("Temp DHT22:       "); Serial.print (t1,1);  Serial.println("°C");
  Serial.print("Humidity:         "); Serial.print (h1,1);  Serial.println("%");
  Serial.print("T percepita:      "); Serial.print (hic1,1);  Serial.println("°C");
 
  Serial.print("Temperatura BMP280 = "); Serial.print(bmp.readTemperature());  Serial.println("°C");
  Serial.print("Pressure BMp280 =    ");  Serial.print(PressureRead);  Serial.println("hPa");

  Serial.print("PWM out:    "); Serial.print (PWM_powerOUT*0.392,1);  Serial.println("%");

  Serial.print("Temperatura di rugiada: "); Serial.print (PuntoRugiada,1);  Serial.println("°C");

  Serial.println();
}


Top
  Profilo    
 
 Oggetto del messaggio: Re: Dew Point controller arduinico
MessaggioInviato: lunedì 5 agosto 2024, 14:34 
Non connesso
Avatar utente

Iscritto il: mercoledì 9 maggio 2012, 13:59
Messaggi: 2437
Località: Provincia di Sondrio
Grazie, ottimo primo messaggio :ook:

_________________
ES ULD 16' Gen II
Bresser Messier 6'
Vixen A70Lf su Porta Mini
APM XWA 100° 20, 13, 9, 7, 5, 3.5
ES 82° 30, 18, 11
PLOSSL Vixen 20 6,3 Tecnosky 9
Kellner Bresser 25 9
ES UHC OIII e ND variabile da 2"
Radiant SQML GSO Coma Corr.


Top
  Profilo    
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 4 messaggi ] 

Tutti gli orari sono UTC + 1 ora


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzione Italiana phpBBItalia.net basata su phpBB.it 2010