Как известно, Raspberry pi можно разогнать до 1 Ггц без потери гарантии, но после разгона возникает проблема с нагревом процессора.
Один из вариантов - поставить небольшой радиатор, что собственно я и сделал, но как показала практика, даже с радиатором Raspberry pi сильно грелся, поэтому возник вопрос о дополнительном охлаждении.
Первое что пришло в голову - это поставить небольшой вентилятор от старой видеокарты, и запитать его от самой Raspberry pi, благо, на это есть порты на самой плате. После установки вентилятора температура не поднималась выше 31С, но хоть вентилятор и несильно шумящий, он создавал шум.
Т.к. малинка у меня находится рядом с спальным местом, было принято решение, что постоянно охлаждать процессор необязательно, а можно его включать по достижению какой-либо температуры.
Сразу возник вопрос о том, что нужно подключать датчик температуры, снимать с него показания, и в зависимости от его показаний, включать или выключать охлаждение.
После небольших поисков в
интернете оказалось, что температуру
можно узнать и без датчика. Для этого в
консоли вводим команду:
cat /sys/class/thermal/thermal_zone0/temp
или визуально
более удобная:
vcgencmd measure_temp
Я решил
написать небольшой скрипт на Bash,
который проверяет температуру
каждые 10 секунд, и если температура
поднялась выше, чем задано в скрипте,
будет включаться вентилятор, управляемый
4 GPIO портом на малинке.
Создадим скрипт
temp.sh
touch temp.sh
с следующим
содержанием:
#!/bin/bashtemp="40" # Устанавливаем какую хотим поддерживать температуруwhile true; dorealtemp=`cat /sys/class/thermal/thermal_zone0/temp`str2="${realtemp%???}"if [ "$str2" -gt "$temp" ]thenecho "1" > /sys/class/gpio/gpio4/valueelseecho "0" > /sys/class/gpio/gpio4/valuefisleep 10 # Устанавливаем как часто будем снимать показания температурыdone
Даем права на
выполнение
chmod 774 /home/pi/temp.sh
Создадим
скрипт инициализирующий порты GPIO
при загрузке системы и запускающий
скрипт temp.sh
touch gpio.sh
Содержание скрипта
#!/bin/shecho "4" > /sys/class/gpio/exportecho "out" > /sys/class/gpio/gpio4/direction/home/pi/temp.sh &
Даем права на
выполнение
chmod 774 /home/pi/gpio.sh
и добавляем в
/etc/*rc.local
/home/pi/gpio.sh
имейте ввиду,
что он должен быть добавлен до строки
exit 0
Далее приступим
к подключению вентилятора к самой
raspberry pi. Подключать
вентилятор напрямую к порту GPIO
4 нельзя, во-первых, не
достаточно напряжения; во-вторых, его
можно просто сжечь под нагрузкой, поэтому
лучше подключать через транзистор или
через оптрон, что более безопасно. Ниже
приведены две схемы включения.
В схеме 1
используется оптрон РС817 и резистор на
1 килоом. Выводы, обозначенные Ground,
должны быть соединены
вместе и подключены к соответствующему
порту на плате.
На схеме 2
используется транзистор КТ315 или любой
аналог, например,
2SC641, 2SC634,
BFP722
Подключаем
схему к raspberry pi и перезагружаем
ее. Теперь при достижении температуры
40С будет включаться вентилятор на 10
секунд.
Копипаста отсюда
круть, работает, спасибо
ВідповістиВидалитиАвтор видалив цей коментар.
ВідповістиВидалитиИзвиняюсь я чайник. Просто интересно есть печатная плата ПЕЧАТНОЙ Платы MB-102 MB102. а нее можно будет оптрон или транзистор воткнуть и потом как кулер установить?
Видалитине работает, пишет: sh: line 6: [cat /sys/class/thermal/thermal_zone0/temp: integer expression expected
ВідповістиВидалитиВозможно, скорее всего что инструкция устарела.
ВидалитиНе подскажите, а оптрон pc817 с какой маркировкой используется? pc817c подойдет?
ВідповістиВидалитиНикакой не подойдет. Схема с оптроном работать не будет - через оптрон нельзя напрямую коммутировать кулер. Оптрон рассчитан на очень маленький ток и сгорит сразу после включения.
ВидалитиСпасибо, работает. А можно сделать чтобы вентилятор включался при заданной температуре и охлаждался до заданной температуры?
ВідповістиВидалитиtemp_max="65" # Устанавливаем максимальную температуру
Видалитиtemp_min="55" # Устанавливаем минимальную температуру
while true; do
realtemp=`cat /sys/class/thermal/thermal_zone0/temp`
str2="${realtemp%???}"
if [ "$str2" -gt "$temp_max" ]
then
echo "1" > /sys/class/gpio/gpio17/value
if [ "$str2" -lt "$temp_min" ]
echo "0" > /sys/class/gpio/gpio17/value
fi
sleep 10 # Устанавливаем как часто будем снимать показания температуры
done
День добрый. а можно приложить фото что из всего этого получилось. На основном фото не очень видно. спасибо
ВідповістиВидалити