Хабрахабр

[Из песочницы] Управление подставкой для ноутбука с помощью digispark

Решил написать статью об очень простом устройстве, сделанным за два вечера. Решило оно давнюю проблему, чему я сильно рад и использую его по сей день. Отработало исправно оно около 3 месяцев. Собственно вот что получилось в итоге. Кого заинтересовало, прошу под кат.

Начнем рассказ издалека.
Итак результат вы видели.

А подставка не простая, для охлаждения вниз можно прикрепить 3 кулера, подставку воткнуть в USB, и кулеры закрутятся. Есть у меня подставка для ноутбука(у меня он выполняет функции основного компа, и включен он поэтому постоянно). Вообщем вещь нужная. Если кулеры поставить удачно, то градусов 7 с процессора она скидывает. Как будто в подставке кто-то завел маленькую бензопилу. Все бы хорошо, но кулеры в подставке, откровенно говоря так себе, и крутятся всегда на полную мощь — из чего следует что в тишине постоянный монотонный шелест. Вот собственно виновница статьи:

И твердо решил — с меня хватит. В один прекрасный вечер, пока с aliexpres шли посылки, я в тишине «наслаждался» пением подставки. Рука уже потянулась влепить какой нибудь stm32f1 с аппаратным usb. Решено было управлять подставкой по usb. Развел для него по-быстрому небольшую платку с mosfet'ом управляемым одним из пинов, и местом для RGB светодиода. А потом меня озарило — есть же digispark(та же attiny85, только на плате) Дешевый, уже с обвязкой для программного usb, идеальный для данной задачи — щелкать транзистором.

Вышло вот так:

Это такая хитрость для тех, у кого с фоторезистом проблемы. Распечатал на прозрачной бумаге для лазеров принтеров в 2-ух экземплярах, склеил в один, совершенно непрозрачный фотошаблон. Фото: Вырезал кусок стеклотекстолита, наклеил фоторезист в воде, разгладил пластиковой карточкой, прогладил утюгом на 60 градусах.

Итоговый результат до запайки компонентов: Дальше предстояла засветка и травление в лимонке и перекиси, а после снятие фоторезиста и наконец сверление и лужение.

И вообще я бы лучше сделал плату подключаемой к компу на тонком шнуре, но это так, к слову. Компоненты были запаяны(да что там паять — usb разъем, пара smd, да сам digispark) Без косяков в разводке не обошлось — я разметил usb маму не на том слое, из за чего она стала перевернута. Результат вы видели на первом фото.

Вначале я хотел использовать makefile и чистый C, но решил что arduino ide быстрее. Оставалось написать код. Единственное что китайский digispark не хотел шиться по usb пока я не зашил официальный загрузчик hex своим программатором. Так и поступил. В итоге на digispark'е код который просто слушает виртуальный serial порт, и если там появляется единица, то включает вентиляторы, если ноль выключает. После этого я хотел написать код с пид регуляцией и шимом вентилятора но передумал.

Ноут у меня на linux, поэтому я написал bash скрипт и запихнул его в автозагрузку, все что он делает это ищет в списке устройств наш digispark, раз в N минут парсит вывод команды sensors и если температура > 80 шлет 1, если < 60 шлет 0. Теперь предстояла часть для компа.

Жить стало приятнее. Устройство стабильно проработало 3 месяца. Ниже — код скрипта на bash.

#!/bin/bash
FLAG=1
while [ true ] do
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do ( syspath="$" 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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть