Gerencie seu suporte para laptop com o digispark

Eu decidi escrever um artigo sobre um dispositivo muito simples feito em duas noites. Ele resolveu um problema de longa data, pelo qual estou muito feliz e o uso até hoje. Funcionou corretamente por cerca de 3 meses. Na verdade, foi o que aconteceu no final. Quem estiver interessado, por favor, sob o gato.



Então você viu o resultado. Vamos começar a história de longe.

Eu tenho um suporte para laptop (para mim, ele serve como o computador principal e, portanto, está sempre ligado). E o suporte não é simples: para esfriar, você pode conectar 3 coolers, conectar o suporte ao USB e os coolers girarão. Se os resfriadores forem instalados com sucesso, eles cairão 7 graus do processador. Em geral, a coisa é necessária. Tudo ficaria bem, mas os resfriadores na bancada, francamente mais ou menos, sempre giram com força total - o que implica que, em silêncio, há um farfalhar monótono constante. Era como se alguém tivesse iniciado uma pequena motosserra no suporte. Aqui está o verdadeiro culpado do artigo:



Uma bela noite, enquanto as encomendas chegavam com aliexpres, eu "gostei" do canto do estande em silêncio. E ele firmemente decidiu - o suficiente para mim. Foi decidido gerenciar o suporte em usb. A mão já estendeu a mão para bater em algum tipo de stm32f1 com o hardware usb. E então me dei conta - existe um digispark (o mesmo attiny85, apenas no quadro) Barato, já com uma ligação para o software usb, ideal para esta tarefa - clicar em um transistor. Espalhei para ele um lenço pequeno e rápido com um mosfet controlado por um dos pinos e um lugar para um LED RGB.

Aconteceu assim:


Sob o spoiler, há uma explicação dos detalhes no quadro e uma imagem para impressão, se alguém repetir:
Imagem da lista de peças e da placa de circuito impresso

U2 - irlml6244trbpf - mosfet
R3-0603 10k resistor
R1, R2 - 0603 resistor de 220 ohm
R4 - Resistor de 0,25 W 220 ohm
O U6 é um LED RGB, mas não solda. Na minha opinião, ele é supérfluo.
Observe que a mãe usb nesta placa está divorciada na camada errada!
Abaixo da imagem a ser impressa, há uma largura de impressão de 0,93 polegadas.



Imprimi-o em papel transparente para impressoras a laser em 2 cópias, colei-o em uma máscara fotográfica completamente opaca. Esse é um truque para quem tem problemas fotorresistentes. Cortei um pedaço de fibra de vidro, colei um fotorresistente na água, alisei com um cartão de plástico e passei a ferro a 60 graus. Foto:



A seguir, veio a exposição e a gravação em um limão e peróxido, depois de remover o fotorresistente e, finalmente, perfurar e estanhar. O resultado final antes da vedação do componente:



Os componentes foram soldados (sim, o que soldar - um conector usb, um par de smd, sim o próprio digispark) Não havia ombreiras na fiação - marquei minha mãe usb na camada errada, o que a fez virar de cabeça para baixo. Em geral, eu preferiria ter feito a placa conectada ao computador por um fio fino, mas é assim, a propósito. O resultado que você viu na primeira foto.

Restava escrever o código. No começo, eu queria usar makefile e C puro, mas decidi que o arduino ide é mais rápido. Eu fiz isso A única coisa é que o digispark chinês não quis ir via usb até que eu remendasse o bootloader hexadecimal oficial com meu programador. Depois disso, quis escrever código com controle pid e calço de fã, mas mudei de idéia. Como resultado, no digispark, o código que apenas escuta a porta serial virtual e, se uma aparecer lá, liga os ventiladores, se zero a desativa.

Agora havia uma peça para o computador. Eu tenho um laptop no linux, então escrevi um script bash e o coloquei no autoload, tudo o que ele faz é procurar nosso digispark na lista de dispositivos, ele analisa a saída do comando dos sensores a cada N minutos e se a temperatura> 80 envia 1, se <60 envia 0 .

O dispositivo funcionou de forma estável por 3 meses. A vida se tornou mais agradável. Abaixo está o código do 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/pt462273/


All Articles