ITCooky Recetas

Vamos a cocinar it cositas

¡Como encender ventiladores adicionales en la PC a través de Arduino!

дата octubre 16, 2020

¡Jugué Assassin’s Creed Odyssey y nuevamente me asusté de cómo se está calentando la PC! Tengo Windows exclusivamente para los games, así que decidí encender ventiladores adicionales allí, a través de Arduino, y en Ubuntu, donde disfruto del «silencio», ¡los apagaré automáticamente! ¡Nos comunicaremos con Arduino a través del puerto Serila!

Necesitamos el siguiente equipo:

1. Un cable USB de 9 pines a micro USB – lo tenía, de Thermaltake Riing Trio 12 – al principio lo usé en el circuito con Arduino, ya que hay dos micro USB en este cable, pero el controlador Thermaltake deja de funcionar si en mismo USB se cuelga Arduino! Sí y no ventiladores de 80 mm para ese controlador …
2. 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)
3. Doble relé, asíRelay Module 2 relays, 5V
4. Case para Arduino
5. 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
6. Cable Molex to Molex
7. Y los ventiladores de PC solo añadi dos ventiladores de 120 mm y 80 mm


Conecto 8-9 pines de Arduino al relé, fuente de alimentación 5V y tierra, respectivamente. En un cable Molex, corto los cables amarillo y rojo y los conecto al relé, cables del mismo color en un relé.

¡Lograre meterlo en el PC case de manera más o menos decente!

Programación de Arduino
Resulta que Arduino se reinicia si intentas conectarte a él por primera vez a través del puerto serie, ¡dicen que esto es una funcion, no un error! Por lo tanto, programaremos con esto en mente, escribiremos el estado en la memoria, pero no hay memoria en el Arduino, pero de alguna manera aparece allí con la biblioteca EEPROM.

#include <EEPROM.h>

const int PIN9 = 9; 
const int PIN8 = 8; 
bool value;
String sdata="";  // Initialised to nothing.

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
   pinMode(PIN8, OUTPUT);
   pinMode(PIN9, OUTPUT);
   Serial.begin(9600);
   value = EEPROM.read(0);
}


void loop(void ) {
byte ch;
//Serial.println(value);

  if (value == 0) {
digitalWrite(PIN9, HIGH);
digitalWrite(PIN8, HIGH);
}
if (value == 1) {
digitalWrite(PIN9, LOW);
digitalWrite(PIN8, LOW);
}

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

      sdata += (char)ch;

      if (ch=='\r') {  // Command recevied and ready.
         sdata.trim();
         // Process command in sdata.
         switch( sdata.charAt(0) ) {
           case 'n':
             EEPROM.write(0, 0);
             value = 0;
            break;
         case 'y':
             EEPROM.write(0, 1);
             value = 1;
            break;
         } // switch

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

Si Arduino recibe n , apaga el relé y escribe 0 en la memoria
Si recibe y enciende rele y escribe 1 en la memoria
Al cargar, el Arduino lee lo que está en la memoria y cambia el relé por este valor

Interruptor de encendido / apagado en Arduino en Ubuntu a través del puerto serie
Primero, miro de dónde esta Arduino
dmesg | grep ttyUSB

[    5.100813] usb 3-5: ch341-uart converter now attached to ttyUSB0

Voy a obtener ese valor automaticamente, aunque lo más probable es que siempre esté en ttyUSB0

Creo un archivo, en mi carpeta, uested tensran otra
vi /home/alexandr/.win_fan_off
con code

#!/usr/bin/bash
utty=`dmesg | grep "ch341-uart converter now attached to" | awk '{printf $10}'`
cat /dev/$utty & > /dev/null
sleep 10
echo -e 'n\r' > /dev/$utty

Arduino en puerto serie en Ubuntu funciona de manera extraña (y no solo con él). Hay una especie de chamanismo, no sé lo que hace cat , pero no funciona sin él. Después de un cat así, puedes enviar n y y en cualquier momento a través de eсho ¡lo procesará!

Sleep agregado para esperar a que Arduino se reinicie; sucede, ¡pero no siempre!

Haciéndo script ejecutable
sudo chmod +x /home/alexandr/.win_fan_off

Probé systemd y otros «poner el script en esta carpeta» ¡no funciona! Solo a través ventanas de Ubuntu si lo agrega funciona

En Startup Aplications Preference agregar así

Y todo funciona, después de cargar se escucha el primer clic, luego, después de 10 segundos, ¡el segundo y se apaga! ¡Si ya ha estaba apagado los clics del relé no se escucharan!

También quería que el scripts hiciera que los fans trabajaran al cerrar la sesión, ¡pero ninguna de las formas oficiales de hacerlo funcionó!

Interruptor de encendido / apagado en Arduino en el puerto serie de Windows 10
Ejecute Windows PowerShell ISE con derechos de administrador

Cree un archivo llamado fan_on.ps1 y texto

$port= new-Object System.IO.Ports.SerialPort COM4,9600,None,8,one #opens serial port - adjust parameters accordingly
$port.open() #opens serial connection
$port.Writeline("y`r") #writes your content to the serial connection
$port.Close() #closes serial connection
Start-Sleep -s 15
$port= new-Object System.IO.Ports.SerialPort COM4,9600,None,8,one #opens serial port - adjust parameters accordingly
$port.open() #opens serial connection
$port.Writeline("y`r") #writes your content to the serial connection
$port.Close() #closes serial connection

Tengo Arduino en COM4 y esto no cambiará ya que está conectado internamente, en su caso es posible que tenga otro
Enviamos el comando para encender dos veces, porque después de la primera llamada al puerto serie, el Arduinoa suele reiniciarse.

Crear una tarea en Schedule Task Manager

chequea – ejecutar con la máxima prioridad

Triger

chequa – ejecute cuando cualquier usuario inicia sesión

Accion

Ejecute el script, es importante con qué argumentos

Command: powershell
Arguments: -ExecutionPolicy Bypass -File C:\Users\Alexandr\fan_on.ps1
WorkingDirectory:

¡Ura y también funciona en Windows, los ventiladores se encienden! Una cosa, cuando ingresas aparece una ventana azul de PowerShell, no puedo encontrar una forma funcional de ejecutar el script sin una ventana …

Aquí están los ventiladores adicionales en mi case Coguar QBX

1 – 120 mm pa fuera
2-80 mm pa dentro
En total, 6 ventiladores están girando en Windows 10. El fabricante del case prometió que deberían caber otras 3 ventiladores de 120 mm, pero esto resultó ser falso. El segundo 120 arriba choca contra el cable de fuente de alimentación. Y en la parte inferior dos 120 no quepan debido a la tarjeta de video, aparentemente solo si la tarjeta es de un slot, ¡encajan!


One Response to “¡Como encender ventiladores adicionales en la PC a través de Arduino!”

  1. […] del articulo ¡Como encender ventiladores adicionales en la PC a través de Arduino! 1. Un cable USB de 9 pines a micro USB – lo tenía, de Thermaltake Riing Trio 12 – al […]

Deja una respuesta

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