Ventola 12v regolata da temperatura

Buongiorno a tutti, sto utilizzando Arduino Due per un'applicazione che funziona regolarmente. Ora vorrei integrare un'altra funzione che dovrebbe regolarmi la velocità di una ventola a 12V in funzione di una temperatura. La ventola è da PC senza pwm (2 fili) e la sonda è una DS18B20.
Seppur banale non riesco a scrivere il codice e avrei bisogno di aiuto.
Se qualcuno mi può aiutare..
Grazie

Roberto

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

Salve se ho capito bene lei ha una ventola a 2 fili che vorrebbe utilizzare per raffreddare quando la temperatura raggiunge una temperatura troppo alta giusto?

Niente di più semplice... partiamo con la spiegazione del funzionamento per poi poter passare al lato programmazione.

Si tratta di una ventola con velocità non regolabile e quindi che o si accende o si spegne. Si ha un sensore di temperatura che rileva la temperatura attuale. Si dovranno dunque settare 2 temperature, la minima e la massima ovvero quando la temperatura si trova al di sotto di 20° per esempio, la ventola dovrà spegnersi mentre quando la temperatura rilevata si troverà al di sopra dei 20° la ventola si dovrà accendere. Questa procedura di controllo dovrà ripetersi ogni "x" secondi.

Per fare ciò consiglierei l'utilizzo di un semplice modulo relay che pilotato da arduino faccia da interruttore automatico collegato a un estremo della ventola e un estremo della tensione 12V mentre gli altri due estremi restanti verranno collegati tra loro così si avrà un polo già collegato alla corrente mentre l'altro scollegato dal relay il quale quando eccitato dalla 5V dell'arduino e GND, tramite l'impulso della scheda proveniente da un pin digitale andrà a chiudere il circuito permettendo il passaggio di corrente nella ventola.

Ora ti ho spiegato un po' il funzionamento e cosa dovrà fare lo sketch. Mentre provo a crearti uno sketch prova anche tu in base a ciò che ti ho scritto a realizzarne uno anche perchè ammetto di non essere un vero programmatore ma me la cavicchio :wink:

Allora, cercando un po’ su internet ho trovato delle guide per fare ciò che serve a lei e le condivido qui sperando che non sia un problema:

Nel primo le mostra il collegamento, le librerie che deve scaricare e inserire nell’IDE prima di caricare lo sketch e lo sketch per leggere la temperatura;
Nel secondo le dice come fare ad accendere una ventola collegata ad un relay e che codice implementare nella guida del primo link.

Ora io facendo un copia e incolla un po’ di qua e un po’ di là, e qualche modifica di adattamento al suo scopo ho provato a ricreare uno sketch SPERIAMO FUNZIONANTE che le lascio qui sotto… se non dovesse andare o ho sbagliato qualcosa potranno correggermi gli altri che saranno sicuramente più bravi di me:

/********************************************************************/
// First we include the libraries
#include <OneWire.h> 
#include <DallasTemperature.h>
/********************************************************************/
// Data wire is plugged into pin 2 on the Arduino 
#define ONE_WIRE_BUS 2 
/********************************************************************/
// Setup a oneWire instance to communicate with any OneWire devices  
// (not just Maxim/Dallas temperature ICs) 
OneWire oneWire(ONE_WIRE_BUS); 
/********************************************************************/
// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
/********************************************************************/ 
//Il risultato della temperatura calcolata dalla sonda lo chiamiamo "temperatura" così da utilizzarlo dopo per il relay
int temperatura = sensors.getTempCByIndex(0);
//Pin al quale dovrai collegare il relay (in questo caso il "3")
const int VENTOLE = 3;

void setup(void) 
{ 
 // start serial port 
 Serial.begin(9600); 
 Serial.println("Dallas Temperature IC Control Library Demo"); 
 // Start up the library 
 sensors.begin(); 
} 
void loop(void) 
{ 
 // call sensors.requestTemperatures() to issue a global temperature 
 // request to all devices on the bus 
/********************************************************************/
 Serial.print("Leggo Temperatura..."); 
 sensors.requestTemperatures(); // Send the command to get temperature readings 
 Serial.println("FINE"); 
/********************************************************************/
 Serial.print("Temperatura: "); 
 Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"?  
   // You can have more than one DS18B20 on the same bus.  
   // 0 refers to the first IC on the wire
   // Leggere le stringhe di sopra IMPORTANTISSIME per il funzionamento della sonda... se si cambia il numero 0 assicurarsi di averlo fatto anche alla stringa:17
   
 //FUNZIONAMENTO VENTOLA
 if (temperatura >= 20)

 {
 digitalWrite (VENTOLE, HIGH);
 } else {
 digitalWrite (VENTOLE, LOW);
 }
 //1 Secondo = 1000 per cui 500 = mezzo secondo di aggiornamento. Da modificare in base alle proprie esigenze
   delay(500); 
}

Ho preferito rimandarla ai link originali in quanto non ne sono l’autore e non mi voglio prendere alcun merito, l’unica cosa che ho fatto io e adattare i codici degli autori dei link di sopra per ciò che serve a lei.

Ci facci sapere se è tutto ok o ci sono problemi…

se dovesse andare tutto bene ma la sonda dà una temperatura pari a -175° in questo link c’è la soluzione a questo problema:

Google aiuta a risolvere i problemi ahah :grinning:

>Ryan0497: ... prima di tutto, cortesemente NON rispondere ad un nuovo utente che NON si è ancora presentato e NON ha rispettato il REGOLAMENTO , poi ... magari faresti bene a ripassarlo anche tu, specie il punto 16.13. :wink:

Guglielmo

Chiedo scusa, in effetti non si è più avuto alcun tipo di aggiornamento... nemmeno un semplice:"Funziona grazie!"

Ahahah chi tace acconsente, la prossima volta vedrò di evitare di dare la pappa bella pronta e calda 8) :smiley:

La prossima volta che risponderò a un utente sarà mia premura assicurarmi che si sia regolarmente presentato.