Go Down

Topic: Comandare ventilatore con arduino + sensore umidità  (Read 3463 times) previous topic - next topic

albatros1993

Buonasera a tutti,volevo chiedere un paio di consigli a voi esperti.
La mia intenzione è quella di far azionare tramite arduino e un sensore di umidità un ventilatore posto in bagno alimentato a 220v.
Grazie per gli eventuali consigli

brunello22

Un Arduino ( qualunque versione ) un sensore di umidità ( ad esempio il DHT22 ) ed una schedina relè.

Lo sketch è banale, leggi il valore di umidità e se e' superiore ad una soglia imposta azioni la ventola 8 se poi ce la faccia ad abbassare il tasso di umidità è un'altra storia ).

ps. dimenticavo...     un alimentatore per arduino

albatros1993

Grazie sei stato gentilissimo .
Io ho già in mio possesso un Arduino uno.
Per il rele' dovrò acquistare la shield apposita giusto?
Grazie ancora

federicosibella

ciao, non serve per forza uno shield li puoi comprare anche montati su basette, per dire qualche cosa tipo questo

albatros1993

il sensore di umidita che hpo acquistato e' questo:

http://www.ebay.it/itm/DHT21-AM2301-Digitale-Temperatura-Sensore-Umidita-Sostituire-SHT11-SHT15-Arduino-/191172282420



brunello22


albatros1993

ora ho tutto,arduino /sensore umidita' /rele' consigliatomi nel post precedente da federicosibella.
Come collego il tutto?
La ventola e' una normalissima collegata alla rete 220
grazie

brunello22

vanno collegati cosi'
Per i pin su Arduino scegli quelli che vuoi


Il problema è sempre lo stesso comunque, un'applicazione del genere violerebbe le norme di sicurezza degli apparati ed impianti elettrici a 220V, se non adeguatamente progettato e realizzato, si potrebbe rischiare grosso se qualcosa andasse davvero molto male, magari provocando incendi e/o ingiurie a persone, ed in tal caso, come la mettiamo? chi si prenderebbe la responsabilità?

Di discussioni di questa tematica ce ne sono tantissime sul forum, ed io, personalmente credo che si faccia bene a metterlo in chiaro, a meno che si faccia solo per uso didattico o dimostrativo, non consiglio la realizzazione di tali progetti a meno di non sapere bene cosa si sta facendo (io personalmente, rimango nel campo della bassa tensione, i "ricci" non mi stanno molto bene :) ).

 
"The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle" Steve Jobs

"Se gommo tiene, io vince gara. Se gommo non tiene, io come bomba dentro montagna." Markku Alen

albatros1993

Sono accordo con te in tutto.Il progetto e' a scopo didattico nulla di piu'.
Alla fine quando parliamo di tensioni 220v non siamo piu' nel campo dell'elettronica.

Ho eseguito i collegamenti di brunello.
un programmino che potrei inserire per attivare la ventola ad una certa quantita' di umidita'?
Grazie per l'aiuto:-)



Sono accordo con te in tutto.Il progetto e' a scopo didattico nulla di piu'.
Alla fine quando parliamo di tensioni 220v non siamo piu' nel campo dell'elettronica.

Ho eseguito i collegamenti di brunello.
un programmino che potrei inserire per attivare la ventola ad una certa quantita' di umidita'?
Grazie per l'aiuto:-)



Visto che i valori di umidità non credo (spero non sbagliarmi) varino molto velocemente da richiedere un controllo PID, se così fosse, sarebbe una complicazione ulteriore.  

Partiamo dal presupposto che non ci serve, lo considererò come viene usata la logica di attivazione della ventola di raffreddamento del motore con controllo da centralina.

In una centralina di gestione motore, vi sono memorizzati due punti distinti dove la raggiungimento di tali valori misurati di temperatura motore, parte o si spegne la ventola.  

Solitamente viene usato un valore di Ventola_ON, diciamo 97,5 °C, poi vi è un secondo parametro Ventola_OFF che viene settata a  93°C  (questi sono i setpoint presenti nelle centraline EDC15 presenti su molte Fiat/Alfa/lancia JTD per esempio).

Quindi per il tuo progetto, potresti adoperare lo stesso concetto, ma ovviamente, il valore di umidità dove accendere e spegnere lo dovrai trovare sperimentalmente.  Ho solo qualche perplessità se riuscirebbe una ventola ad abbassare il tasso di umidità, ma, questo tocca a te stabilirlo empiricamente.

Qualche esempio di codice:

Code: [Select]


int Umidità_ADC_Value;  //variabile che conterrà la lettura del sensore

int Ventola_ON_Setpoint = 800;  //ipotetico valore di umidità rilevato dal sensore, da trovare con test.
int Ventola_OFF_Setpoint = 700; //idem come sopra ma come punto in cui la ventola si spegne.

int Sensore_Umidità_Pin= A1; //pin dove metti il sensore collegato.
int Ventola_Pin = 10;   //pin digitale sul quale metti l'uscita al relè.

#define Ventola_ON HIGH
#define Ventola_OFF LOW


//***************************************************************
void setup(){

//fai tutto quello che devi fare qui solitamente...

pinMode(Ventola_Pin,OUTPUT);  

}

//**************************************************************
void loop(){

Controllo_Umidità();   //chiama la funzione che legge il valore del sensore umidità.
Controllo_Ventola();

}
//***************************************************************
void Controllo_Umidità(){

Umidità_ADC_Value = analogRead(Sensore_Umidità_Pin);

}

//***************************************************************
void Controllo_Ventola(){         //funzione per il controllo ventola

  

  if (Umidità_ADC_Value >= Ventola_ON_Setpoint)
   {
     digitalWrite(Ventola_pin, Ventola_ON) ;
    }  

  else if (Umidità_ADC_Value <= Ventola_OFF_Setpoint )
    {
      digitalWrite(Ventola_pin, Ventola_OFF) ;
     }

  
}



Ragazzi, se trovate errori per favore correggetemi, l'ho fatto su due piedi direttamente qui, quindi non l'ho verificato.

In linea di massima, con quello che ti ho postato, dovresti eseere in grado di accendere e spegnere la ventola in base a due letture del sensore, sperando che esse siano il più lontane tra di loro o ti ritroverai a vedere la ventola "impazzita" accende e spegne in continuazione, in tal caso, distanzia i due valori di setpoint.  

Comunque, io ti consiglierei di valutare anche la possibilità/utilità di implementare anche un sensore di temperatura, e mescolare i due parametri, così credo possa funzionare ancora meglio, ma non so, io con i sensori di umidità non ci ho mai giocato...

ciao! :smiley-wink:




"The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle" Steve Jobs

"Se gommo tiene, io vince gara. Se gommo non tiene, io come bomba dentro montagna." Markku Alen

albatros1993

Ciao a tutti,scusate la latitanza per questo progettino,ma ho subito un piccolo intervento...
Tornando a noi ,per usare il programma che mi ha postato  hiperformance71,devo cambiare i collegamenti del circuito postato da Brunello giusto?
grazie

brunello22

Auguri per l'intervento

No, lo sketch che ha postato @hiperformance71  è fatto per un sensore di temperatura analogico, il tuo è digitale e va' gestito in modo diverso

Scaricati e installa Questa libreria

e po prova lo sketch seguente

Code: [Select]

#include "DHT.h"
#define DHTPIN 4     // Pin di Arduino dove è collegato il sensore
#define rele 5       //  Pin di Arduino dove è collegato il relè
float val_umid_max = 75.0 ;  // valore umidità a cui si attiva la ventola
float val_umid_min = 50.0 ;  // valore umidità a cui si spegne la ventola
#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  pinMode(rele, OUTPUT);
  digitalWrite ( rele, HIGH ); // Spegne la ventola
  dht.begin();
}

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) ) {
    Serial.println("Errore nella lettura del sensore !");
    return;
  }
  Serial.print("Umidita': ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.println(" *C ");

  if (h >= val_umid_max )  {
    digitalWrite(rele, LOW) ;  // Accende la ventola
  }
  else if ( h <= val_umid_min )  {
    digitalWrite(rele, HIGH) ; // Spegne la ventola
  }
}

albatros1993

ok perfetto...grazie per l'augurio.
Quindi utilizzo il circuito da te utilizzato+sketch da te postato scaricando prima le opportune librerie.
Ti ringrazio e ti aggiorno in questi giorni che provo il tutto.
:-)

Go Up