понедельник, 21 октября 2013 г.

Воздушное охлаждение raspberry pi

Как известно, 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/bash

temp="40" # Устанавливаем какую хотим поддерживать температуру
while true; do
realtemp=`cat /sys/class/thermal/thermal_zone0/temp`

str2="${realtemp%???}"

if [ "$str2" -gt "$temp" ]
then
echo "1" > /sys/class/gpio/gpio4/value
else
echo "0" > /sys/class/gpio/gpio4/value
fi

sleep 10 # Устанавливаем как часто будем снимать показания температуры

done

Даем права на выполнение

chmod 774 /home/pi/temp.sh

Создадим скрипт инициализирующий порты GPIO при загрузке системы и запускающий скрипт temp.sh

touch gpio.sh
Содержание скрипта

#!/bin/sh

echo "4" > /sys/class/gpio/export
echo "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 секунд. Пример работы можете просмотреть в видео

8 комментариев:

  1. Ваще ребята. Ну спасиба епт! Терь дует зашибись!

    ОтветитьУдалить
  2. Как сменить с 4 пина GPIO на другой пин?

    ОтветитьУдалить
    Ответы
    1. #!/bin/bash

      temp="40" # Устанавливаем какую хотим поддерживать температуру
      while true; do
      realtemp=`cat /sys/class/thermal/thermal_zone0/temp`

      str2="${realtemp%???}"

      if [ "$str2" -gt "$temp" ]
      then
      echo "1" > /sys/class/gpio/gpio17/value
      else
      echo "0" > /sys/class/gpio/gpio17/value
      fi

      sleep 10 # Устанавливаем как часто будем снимать показания температуры

      done

      #!/bin/sh

      echo "17" > /sys/class/gpio/export
      echo "out" > /sys/class/gpio/gpio17/direction
      /home/pi/temp.sh &

      на 17 пин попробуй подключить

      Удалить
    2. спасибо, сменил на 17-й пин - все заработало.

      Удалить
  3. Не пойму: потребление вентилятора 1Вт, ток 200мА, оптрон рассчитан на 50мА. У мегня не работает. Может быть из за этого?

    ОтветитьУдалить
    Ответы
    1. Если есть возможность проверь тестером, или светодиодом, сначала на прямую к малинке, если светодиод загорается, подключай схему и опять проверяй тестером или светодиодом.

      Удалить
    2. Да, получается отличное управление светодиодом :) Поставил более мощный PRAC37S - зажужжал вентилятор. Спасибо за схему и советы. Александр.

      Удалить
  4. пасибо работает на кт315

    ОтветитьУдалить