Administre el soporte de su computadora portátil con digispark

Decidí escribir un artículo sobre un dispositivo muy simple hecho en dos noches. Solucionó un problema de larga data, del cual estoy muy feliz y lo uso hasta el día de hoy. Funcionó correctamente durante unos 3 meses. En realidad, esto es lo que sucedió al final. ¿Quiénes están interesados, por favor, debajo del gato?



Entonces viste el resultado. Comencemos la historia desde lejos.

Tengo un soporte para computadora portátil (para mí sirve como computadora principal y, por lo tanto, siempre está encendido). Y el soporte no es simple, para enfriarse, puede conectar 3 enfriadores, conectar el soporte al USB y los enfriadores girarán. Si los enfriadores se instalan correctamente, entonces cae 7 grados desde el procesador. En general, la cosa es necesaria. Todo estaría bien, pero los refrigeradores en el stand, francamente, siempre giran a toda potencia, lo que implica que en silencio hay un susurro constante y monótono. Era como si alguien hubiera comenzado una pequeña motosierra en el stand. Aquí está el verdadero culpable del artículo:



Una buena tarde, mientras los paquetes venían con aliexpres, "disfruté" el canto del stand en silencio. Y él decidió firmemente, suficiente para mí. Se decidió gestionar el stand en usb. La mano ya se extendió para golpear algún tipo de stm32f1 con hardware usb. Y luego me di cuenta: hay digispark (el mismo attiny85, solo en el tablero) Barato, ya con un enlace para software usb, ideal para esta tarea: hacer clic en un transistor. Le extendió una pequeña bufanda rápida con un mosfet controlado por uno de los pines y un lugar para un LED RGB.

Resultó así:


Debajo del spoiler hay una explicación de los detalles en la pizarra y una imagen para imprimir si alguien va a repetir:
Lista de piezas e imagen de placa de circuito impreso

U2 - irlml6244trbpf - mosfet
R3-0603 10k resistencia
R1, R2 - 0603 Resistencia de 220 ohmios
R4 - resistencia de 0.25 W 220 ohm
U6 es un LED RGB, pero no se solda. En mi opinión, él es superfluo.
¡Tenga en cuenta que la madre usb en este foro está divorciada en la capa incorrecta!
Debajo de la imagen a imprimir hay un ancho de impresión de 0.93 pulgadas.



Lo imprimí en papel transparente para impresoras láser en 2 copias, lo pegué en una máscara fotográfica completamente opaca. Este es un truco para aquellos con problemas de fotorresistencia. Corté un trozo de fibra de vidrio, pegué una fotoprotección en agua, la alisé con una tarjeta de plástico y la planché a 60 grados. Foto:



Luego vino la exposición y el grabado en un limón y peróxido, y después de quitar la fotorresistencia y finalmente perforar y estañar. El resultado final antes del sellado de componentes:



Los componentes estaban soldados (sí, qué soldar: un conector USB, un par de smd, sí, digispark en sí). No había jambas en el cableado: marqué a mi madre USB en la capa incorrecta, lo que la puso patas arriba. En general, preferiría haber conectado la placa a la computadora con un cable delgado, pero esto es así, por cierto. El resultado que viste en la primera foto.

Quedaba por escribir el código. Al principio quería usar makefile y C puro, pero decidí que arduino ide es más rápido. Lo hice Lo único es que el digispark chino no quería pasar por USB hasta que parcheé el gestor de arranque hexadecimal oficial con mi programador. Después de eso, quería escribir código con control pid y una cuña de ventilador, pero cambié de opinión. Como resultado, en digispark, el código que solo escucha el puerto serie virtual, y si aparece uno allí, enciende los ventiladores, si cero lo apaga.

Ahora había una parte para la computadora. Tengo una computadora portátil en Linux, así que escribí un script bash y lo introduje en la carga automática, todo lo que hace es buscar nuestro digispark en la lista de dispositivos, analiza la salida del comando de los sensores cada N minutos y si la temperatura> 80 envía 1, si <60 envía 0 .

El dispositivo funcionó de manera estable durante 3 meses. La vida se ha vuelto más placentera. A continuación se muestra el código del script bash.

#!/bin/bash FLAG=1 while [ true ] do for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do ( syspath="${sysdevpath%/dev}" devname="$(udevadm info -q name -p $syspath)" [[ "$devname" == "bus/"* ]] && continue eval "$(udevadm info -q property --export -p $syspath)" [[ -z "$ID_SERIAL" ]] && continue if [ $ID_SERIAL = "digistump.com_Digispark_Serial" ] then #echo "/dev/$devname - $ID_SERIAL" #echo "$FLAG" >> /dev/$devname CORE_0=$(sensors | grep 'Core 0' | awk '{print int($3)}') CORE_1=$(sensors | grep 'Core 1' | awk '{print int($3)}') #Phys_1=$(sensors | grep 'Physical id 0' | awk '{print int($3)}') #TEMP1=$(sensors | grep 'temp1' | awk '{print int($3)}') #TEMP2=$(sensors | grep 'temp2' | awk '{print int($3)}') #echo "$CORE_0" #echo "$CORE_1" let "TEMP = (CORE_0 + CORE_1) / 2 " #echo "$TEMP" if [ $TEMP -gt 80 ] then #echo HIGH #notify-send "HIGH TEMP, fan on, T="$TEMP echo "1" >> /dev/$devname echo "1" >> /dev/$devname fi if [ $TEMP -lt 60 ] then #echo LOW echo "0" >> /dev/$devname echo "0" >> /dev/$devname fi sleep 1 fi ) done sleep 4 done 

Source: https://habr.com/ru/post/462273/


All Articles