ITCooky Recetas

Vamos a cocinar it cositas

¡Como encender con Arduino automáticamente los ventiladores de PC según su temperatura!

дата octubre 24, 2020

Anteriormente, organicé en forma de software el encender/apagar los ventiladores a través de un relé en el Arduino al ingresar al sistema operativo. Funciona en Ubuntu (apagado), funcionó en Windows a través de PowerShell (encendido), pero ahora ya no quiere funcionar… entonces, ¿por qué deberíamos vincularnos al sistema operativo si podemos colgar un sensor de temperatura en el Arduino?

El Arduino controlará la temperatura en sí y encenderá ventiladores adicionales. Usando el puerto serial, será posible encender/apagar los ventiladores manualmente, encender/apagar el modo automático, observar la temperatura.

Tomo del articulo ¡Como encender ventiladores adicionales en la PC a través de Arduino!
1. Arduino con micro USB y pin 5V. El Arduino Nano original serviría, pero yo no lo tenía, tenia eseRobotDyn UNO R3 CH340G (R3-ATmega328/CH340G)
2. Doble relé, asíRelay Module 2 relays, 5V
3. Case para Arduino
4. Adaptador Molex para 4 conectores de ventilador (2x5V 2x12V). Tenía un viejo Zalman ZM-MC 1, tuve que cortar los conectores del ventilador para que encajaran con los conectores PWM
5. Cable Molex to Molex

Añado
6. Sensor de temperatura en DS18B20, sus ventajas ya está calibrado y se pueden conectar varios a una línea, pero tengo uno como este Módulo de Sensor de temperatura DS18B20, 2 uds, placa de módulo de sensor de detección para Arduino DC 5V 18B20, salida de señal digital
7. Adaptador de USB a placa base a un connector normal como este USB 2.0 9 pines hembra kebidu 2 puertos adaptador convertidor placa base placa base expansor interno PC
Conecto Arduino a el y esta muy cerca a la tarjeta de video, incluso tuve que aislarlo, ¡espero que la cinta aislante no se encienda!

El diagrama de conexión es el siguiente

En el app Arduino Software (IDE) necesitas agregar dos bibliotecas One Wire library by Paul Stoffregen y Dallas Temperature library aqui todo esta explicado randomnerdtutorials.com

Vamos al Sketch > Include Library > Manage Libraries y ahí buscamos e instalamos

Scetch

#include <EEPROM.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is conntec to the Arduino digital pin 4
#define ONE_WIRE_BUS 7
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

const int PIN9 = 9; 
const int PIN8 = 8; 
const int tempOFF = 40; 
const int tempON = 45; 
bool value;
bool autostate;
String sdata="";  // Initialised to nothing.
String version="    Arduino Fan Temperature Control by itcooky.com v1.0"; 
int con = 0;
int coff = 0;


void setup() {
  // initialize digital pin LED_BUILTIN as an output.
   pinMode(PIN8, OUTPUT);
   pinMode(PIN9, OUTPUT);
   Serial.begin(9600);
   sensors.begin();
   value = EEPROM.read(0);
   autostate = EEPROM.read(1);
   Serial.println(version);
   Serial.print("    Started with ");
      if (autostate == 1)
    {
          Serial.println("AUTO ON");
    } else {
          Serial.println("AUTO OFF");      
    }
   Serial.println("---> Type \"help\" + [enter] for Help");


}


void loop(void ) {
byte ch;

sensors.requestTemperatures(); 
int tempCUR = sensors.getTempCByIndex(0);

if (value == 0) {
digitalWrite(PIN9, HIGH);
digitalWrite(PIN8, HIGH);
}
if (value == 1) {
digitalWrite(PIN9, LOW);
digitalWrite(PIN8, LOW);
}
if (autostate == 1)
{
if ( tempCUR <= tempOFF) {
coff++;
con = 0;
if (coff == 100)
{
value = 0;
}
}
if ( tempCUR >= tempON) {
con++;
coff = 0;
if (con == 100)
{
value = 1;
}
}




}
   if (Serial.available()) {
      ch = Serial.read();

      sdata += (char)ch; 

      if (ch=='\r') {  // Command recevied and ready.
         sdata.trim();
         
     if (sdata == "help") 
        { 
          Serial.println("    HELP");
          Serial.println("on - FANs on (set auto off)");
          Serial.println("off - FANs off (set auto off)");
          Serial.println("temp - see sensor temperature");
          Serial.print("autoon - auto start FANs than temp is more than ");
          Serial.print(tempON);
          Serial.print("°C and stop than its less than ");
          Serial.print(tempOFF);
          Serial.println("°C");
          Serial.println("autooff - stop auto FANS control");
        } 
     if (sdata == "autoon") 
        { autostate = 1;
          EEPROM.write(1, 1);
          Serial.println("    AUTO ON");
          Serial.print("FANs on temp ");
          Serial.print(tempON);
          Serial.println("°C");
          Serial.print("FANs off temp ");
          Serial.print(tempOFF);
          Serial.println("°C");
          Serial.print("Temperature now: ");         
          Serial.print(tempCUR); 
          Serial.println("°C");
        }       
      if (sdata == "autooff") 
        { autostate = 0;
          EEPROM.write(1, 0);
          Serial.println("    AUTO OFF");
          Serial.print("FANs on temp ");
          Serial.print(tempON);
          Serial.println("°C");
          Serial.print("FANs off temp ");
          Serial.print(tempOFF);
          Serial.println("°C");
          Serial.print("Temperature now: ");         
          Serial.print(tempCUR); 
          Serial.println("°C");  
        }        
     if (sdata == "temp") 
        {           
          Serial.print("Temperature now: "); 
          Serial.print(sensors.getTempCByIndex(0)); 
          Serial.println("°C");   
        }
     if (sdata == "off") 
        {       
          EEPROM.write(0, 0);
          EEPROM.write(1, 0);
          value = 0;
          autostate = 0;
          Serial.println("    FANs off (AUTO OFF)");
          Serial.print("Temperature now: ");         
          Serial.print(tempCUR); 
          Serial.println("°C"); 
        }
     if (sdata == "on") 
        {
          EEPROM.write(0, 1);
          EEPROM.write(1, 0);
          value = 1;
          autostate = 0;
          Serial.println("    FANs on (AUTO OFF)");
          Serial.print("Temperature now: ");         
          Serial.print(tempCUR); 
          Serial.println("°C"); 

        }   
         sdata = ""; // Clear the string ready for the next command.
        }
     }
}

Aquí solo necesitas cambiar las constantestempOFF tempON emperaturas a las que los ventiladores se apagarán y encenderán, entonces debe tener en cuenta el lugar donde estará el sensor, ¡analisa las temperatura de el!

Juntamos todo de acuerdo con el esquema, uploadea scetsh a tu arduino y instalalo en la computadora. Tengo un case Coguar QBX, gracias a fuente de alimentación SFF, tiene un gran lugar para poner Arduino


El sensor en sí está ubicado sobre la memoria, al lado de la tarjeta de video, el lugar más caliente de la PC.

Puede conectarse a Arduino a través del puerto serie a través del programa en Arduino Software (IDE) por el menu Tools > Serial Monitor! ¡Pero en Windows 10 me conectaré a través de Putty!

Descarga Putty aquí www.chiark.greenend.org.uk

En Windows, mira aquí Select Start > Settings > Devices > Bluetooth & other devices en qué puerto COM apareció el Arduino, lo tengo COM4 con esta configuración me conecto, la velocidad es 9600

En la ventana que aparece, escribo help, presiono [enter]! En la pantalla no se ve lo que estoy ingresando!

Obtengo una lista de comandos disponibles

    HELP
on - FANs on (set auto off)
off - FANs off (set auto off)
temp - see sensor temperature
autoon - auto start FANs than temp is more than 45°C and stop than its less than 40°C
autooff - stop auto FANS control

Luego miro la temperatura, el comando temp y [enter], muestra la temperatura con centésimas
Enciendo los ventiladores, esto apaga inmediatamente el control automático.
Apago los ventiladores y enciendo el control automatico – aquí se tiene en cuenta la temperatura sin centésimas

El relé hace clic cuando se activa, por lo que siempre está claro que los ventiladores se han encendido; bueno, igual está claro eso por el ruido de ventiladores!


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *