come far pilotare con sensore di temperatura le ventole del pc

Buongiorno a tutti ho arduino mega 25 60
DS18B20
e due ventole di raffreddamento

sto guardando in giro ma non capisco come collegare il sensore con le ventole, vorrei che a 26 gradi le ventole si accendono e a meno di 26 si spengono come posso fare? grz a tutti per l'aiuto

Ciao,
devi fornire più informazioni.

intanto, digitando il "nomesensore + arduino + wiring " trovi tantissimi schemi di collegamento, ad esempio, questo è il primo che ho trovato.

Inoltre , mancano un po di specifiche sulle ventole. Che ventole sono? a quanti V funzionano? quanti cavi hanno?
Difficilmente potrai alimentare delle ventole direttamente da arduino senza danneggiarlo. Fornisce troppa poca corrente, quindi avrai bisogno di un'alimentazione esterna.
Data per scontata l'alimentazione esterna, torniamo al problema cavi. Quanti sono ? se sono 2 quasi sicuramente avrai bisogno di un transistor per ogni ventola, se sono 3 forse potresti alimentarle esternamente e pilotarle in pwm

ciso ho delle ventole da pc a 3 fili sono da 12 v

Se la ventola la vuoi solo accendere o spegnere puoi fregartene del terzo filo ( quello di pwm).

Io userei un transistor. Un collegamento del tipo : +12V ---> positivo ventola , negativo ventola mandato al collettore del transistor, emettitore transistor a massa, e base transistor collegata a una pin di arduino tramite una resistenza . Poi sta a te scrivere il programma, una cosa del tipo :

controlla temperatura
if ( temperatura > soglia) scrivi il pin di base del transistor HIGH
else if ( temperatura < soglia ) scrivi il pin di base del transistor LOW

quando sulla base del transistor metti una tensione HIGH il transistor si attiva e lascia scorrete corrente tra collettore ed emettitore facendo girare la ventola

Non ho mai lavorato con le ventole in pwm ma questo è uno schema di base che si utilizza in molte applicazioni

quindi collego il + e - al ds18b20 sul vcc e gnd? e poi il pin in mezzo del ds ad arduino cosi devo fare?

ho provato a collegare il ds solo arduino ma mi da solo 0

#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);
 
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(" Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");

  Serial.print("Temperature for Device 1 is: ");
  Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? 
    // You can have more than one IC on the same bus. 
    // 0 refers to the first IC on the wire

anche con questo mi da lo stesso

#include <OneWire.h>
#include <Wire.h>
#include <RTClib.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 14
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);

RTC_DS1307 rtc;

int oraAlba=7;
int minAlba=0;
long albas;
int durataAlbas=720;
int oraTramonto=9;
int minTramonto=0;
long tramontos;
int durataTramontos=720;
long nows;
int delayR=0;
int delayG=120;
int delayB=240;
int delayUV=360;
int delayW=360;

int pinR=2;
int pinG=3;
int pinB=4;
int pinW=5;
int pinUV=6;



void setup(){
  Serial.begin(57600);
  Wire.begin();
  rtc.begin();
  pinMode(pinR,OUTPUT);
  pinMode(pinG,OUTPUT);
  pinMode(pinB,OUTPUT);
  pinMode(pinW,OUTPUT);
  pinMode(pinUV,OUTPUT);


delay(1000);
Serial.begin(9600);
Serial.println("Misura la temperatura con sensore DS18B20");
Serial.println("CFP Manfredini Este PD");
delay(1000);
sensors.begin();
}

void loop(){
  // Calcolo inizio alba in secondi
  albas=oraAlba*3600+minAlba*60;
  
  // Calcolo inizio tramonto in secondi
  tramontos=oraTramonto*3600+minTramonto*60;
  
  // prendo ora attuale
  DateTime now=rtc.now();
  
  // Calcolo attuale in secondi
  nows=now.hour()*3600+now.minute()*60+now.second();
  
  
  // Notte
  if (nows<albas||nows>tramontos+durataTramontos){
    digitalWrite(pinR,LOW);
    digitalWrite(pinG,LOW);
    digitalWrite(pinB,LOW);
    digitalWrite(pinUV,LOW);
    digitalWrite(pinW,LOW);
  }
  
  // Alba
  if (nows>albas && nows+delayR<albas+durataAlbas){
    analogWrite(pinR,65*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayR)));
  }
  if (nows>albas && nows+delayG<albas+durataAlbas){
    analogWrite(pinG,65*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayG)));
  }
  if (nows>albas && nows+delayB<albas+durataAlbas){
    analogWrite(pinB,65*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayB)));
  }
  if (nows>albas && nows+delayUV<albas+durataAlbas){
    analogWrite(pinUV,65*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayUV)));
  }
  if (nows>albas && nows+delayW<albas+durataAlbas){
    analogWrite(pinW,65*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayW)));
  }

  // Giorno
  if (nows>albas+durataAlbas && nows<tramontos){
    digitalWrite(pinR,HIGH);
    digitalWrite(pinG,HIGH);
    digitalWrite(pinB,HIGH);
    digitalWrite(pinUV,HIGH);
    digitalWrite(pinW,HIGH);
  }
  
  // Tramonto
  if (nows>tramontos && nows+delayR<tramontos+durataTramontos){
    int v = 65 - (255*(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayR)));
    analogWrite(pinR,v);
  }
  if (nows>tramontos && nows+delayG<tramontos+durataTramontos){
    int v = 65 - (255*(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayG)));
    analogWrite(pinG,v);
  }
  if (nows>tramontos && nows+delayB<tramontos+durataTramontos){
    int v = 65 - (255*(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayB)));
    analogWrite(pinB,v);
  }
  if (nows>tramontos && nows+delayUV<tramontos+durataTramontos){
    int v = 65 - (255*(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayUV)));
    analogWrite(pinUV,v);
  }
  if (nows>tramontos && nows+delayW<tramontos+durataTramontos){
    int v = 65 - (255*(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayW)));
    analogWrite(pinW,v);
  }

  Serial.println();
sensors.requestTemperatures();
Serial.print("Temperatura = ");
Serial.print(sensors.getTempCByIndex(0));
Serial.println(" gradi C");
 
}

buonasera a tutti io non sono ancora riuscito a trovare una soluzione, mi hanno detto che devo trovare id del mio dispositivo e poi metterlo nello skech

la l'hai messa la resistenza da 4,7K tra il +5V e il pin centrale del sensore ?

Senza resistenza non va? , a cosa serve quella resistenza?

no, senza non va'.
E' una resistenza di PullUp. Serve per avere un livello logico positivo visto che l'uscita della sonda e' in Open Collector
In pratica, senza quella, non ti passa da livello logico Low a livello High, questo perche' si possono mettere piu' sonde sullo stesso BUS

io ho il ds18b20 no s20 cambia qulacosa?

finalmente ho messo al resistenza e mi dice il valore che legge , ora come collego le ventole a 12 volt ad arduino per far si che quando al temperatura supera 26 gradi si accendono le ventole?

Ti servono dei transistor ( con relativa resistenza in base) . Il transistor lo devi scegliere in base alla corrente che scorrerà in quelle ventole ( cercalo sul datasheet).
Transistor molto famosi sono i BC337 ( corrente massima 0,7-0,8 A) e i tip120( fino a 5A se non ricordo male)
Se cerchi su google "Arduino fan wiring" trovi milioni di esempi schemi.

Per far si che si accendano se la temperatura è > 26°, devi scrivere il tuo sketch e inserire questa condizione.

stavo leggendo del fotocopiatore cny75 potrebbe andare bene per me? e quale devo prendere?

come ti hanno già detto, ti basta o un transistor o un Mosfet

Un fotoaccoppiatore è un dispositivo che disaccoppia due circuiti ( generalmente con caratteristiche di corrente e tensione diverse) . Ok che contiene un transistor ma non puoi pilotarci una ventola ( la massima corrente di collettore è 50mA, un po pochi per una ventola). Puoi usarlo per disaccoppiare l'arduino dal circuito della ventola, ma per accenderla e spegnerla hai comunque bisogno di un transistor. fai riferimento ai due che ti ho gia indicato

con il transistor sembra più facile ma non capisco che transistor ci vuole e come collegarlo non mi sono chiare quelle porte not

ora che lho guardato 100 volte è quasi più chiaro, i 4 fori dove va collegata la ventola cosa sono? la resistenda da 10 k dove va? a cosa serve il diodo li?

il diodo (veloce, shotky) serve a eliminare i transistori dovuti al forte carico induttivo della ventola, che se non eliminati potrebbero daneggiare il transistor.

i 4 fori della ventola.... bhe dipende dalla ventolo cha hai
1 +vcc
2 gnd

poi optional (se le hai)
3 lettura velocità rotazione
4 cotrollo per pwm

la resistenza da 10K è messa come da schema schema tra base ed emettitre (massa)