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
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN 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
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...
>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.