ШИМ управление активным охлаждением на Raspberry Pi, Orange Pi, Banana Pi
Во многих случаях мини-компьютеры, такие как: Raspberry Pi, Orange Pi, Banana Pi и т.п., поставляется с небольшим вентилятором на 5 В, чтобы можно было охлаждать процессор (вернее — СнК/SoC) компьютера. Тем не менее, эти вентиляторы обычно довольно шумные, и многие подключают его к выводу на 3.3 В, чтобы уменьшить шум. Вентиляторы обычно рассчитаны на 200 мА, что довольно много для регулятора на 3.3 В на Raspberry Pi.
Этот проект научит вас, как регулировать скорость вращения вентилятора в зависимости от температуры процессора. В отличие от большинства руководств, охватывающих эту тему, мы не только включим или выключим вентилятор, но и будем контролировать его скорость с помощью ШИМ, как это делается на обычном ПК.
Что такое ШИМ?
Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM)) — процесс управления мощности методом пульсирующёго включения и выключения прибора. Различают аналоговую ШИМ и цифровую ШИМ, двоичную (двухуровневую) ШИМ и троичную (трёхуровневую) ШИМ. Основной причиной применения ШИМ является стремление к повышению КПД при построении вторичных источников питания электронной аппаратуры и в других узлах, например, ШИМ используется для регулировки яркости подсветки LCD-мониторов и дисплеев в телефонах, КПК и т.п..
Управление вентилятором с помощью биполярного NPN-транзистора
Первое что приходит на ум — поставить биполярный NPN-транзистор. Вентилятору требуется 200мА, поэтому ищем транзистор с коллекторным током более 200мА, лучше раза в 2-3. В импортных даташитах этот параметр называется Ic, в наших Iк. Подойдут транзисторы: 2N5550, 2N5551, 2N2222A и т.д.. У транзистора, в первую очередь, надо определить назначение выводов. Где у него коллектор, где база, а где эмиттер. Сделать это лучше всего по даташиту или справочнику.
Схема подключения вентилятора
Берем транзистор и подключаем его по такой схеме:
Таким образом, при подаче «1» на вход нашей схемы ток от источника питания потечёт через резистор R1, базу и эмиттер на землю. При этом транзистор откроется и ток сможет идти через переход коллектор-эмиттер, а значит и через нагрузку (вентилятор).
Резистор R1 играет важную роль — он ограничивает ток через переход база-эмиттер. Если бы его не было, ток не был бы ничем ограничен и просто испортил бы управляющую микросхему (ведь именно она связывает линию питания с транзистором).
Кроме того, нужно помнить, что нагрузка индуктивная и нужен защитный диод D1. Дело в том, что энергия, запасённая магнитным полем, не даёт мгновенно уменьшить ток до нуля при отключении ключа. А значит, на контактах нагрузки возникнет напряжение обратной полярности, которое легко может нарушить работу контроллера или даже повредить его.
Управление вентилятором с помощью МОП транзистора
Вместо биполярного можно использовать полевой транзистор — MOSFET, то есть полевые транзисторы с изолированным затвором (они же МОП, они же МДП). Они удобны тем, что управляются исключительно напряжением: если напряжение на затворе больше порогового, то транзистор открывается. При этом управляющий ток через транзистор пока он открыт или закрыт не течёт. Это значительное преимущество перед биполярными транзисторами, у которых ток течёт всё время, пока открыт транзистор.
В дальнейшем мы будем использовать только n-канальные MOSFET. Это связано с тем, что n-канальные транзисторы дешевле, имеют лучшие характеристики и для управления N-канальным полевиком необходимо приложить положительное напряжение на затвор относительно истока.
Схема подключения вентилятора
Нагрузка подключена к стоку («сверху»). Если подключить её «снизу», то схема работать не будет. Дело в том, что транзистор открывается, если напряжение между затвором и истоком превышает пороговое. При подключении «снизу» нагрузка будет давать дополнительное падение напряжения, и транзистор может не открыться или открыться не полностью.
Резистор R1 на 100 Ом ограничивает ток заряда-разряда, а резистор R2 на 10 кОм — это стягивающий резистор, что в неопределенном состоянии «стягивает» потенциал к земле.
Кроме того, нужно помнить, что нагрузка индуктивная и нужен защитный диод D1.
N-канальные MOSFET с логическим уровнем управления
Один из минусов МОП транзисторов — это высокое пороговое напряжение затвора, больше 3.3 В. Тем не менее, существуют N-канальные транзисторы с логическим уровнем управления, например: IRL2505, FDN337N, ZVN4306A, 2N7000, PMV16XNR, NTZD3155C, IRLZ24NPBF, IRL520NPBF и т.п.
Как получить температуру процессора
Существует несколько способов получить текущую температуру процессора.
Если вы используйте Armbian, вы можете использовать команду:
эта команда будет давать вам время работы, частоту и текущую температуру процессора каждые 6 секунд.
Есть еще одна команда, которая просто возвращает температуру процессора:
Внутри SoC Allwinner есть два датчика, вы можете взять оба значения, чтобы получить среднюю температуру. На Raspberry Pi температура измеряется в миллиградусах, для перевода в градусы Цельсия нужно разделить полученное число на 1000:
В Raspberry Pi можно узнать температуру процессора при помощи ввода консольной команды:
Включение вентилятора при заданной температуре
Ниже приведённые примеры используют WiringPi и, если библиотека у вас не установлена, установите её, инструкции тут: WiringPi, WiringOP или BPI-WiringPi.
Самый простой пример управления вентилятором — это его включение, при достижении критичной температуры, и выключение, если температура ниже. Если шум вентилятора не мешает, тогда можно использовать такой вариант.
Программа работает следующим образом — при достижении заданной температуры (более 55°С) вентилятор включается, и отключается только когда температура снизится более чем на 10°С от максимального порога (менее 45°С).
Компиляция, сборка и запуск программы
Сознаём файл FanPiOnOff.cpp и вставляем вышеприведённый код:
Компилируем и собираем программу:
если хотим запустить программу в фоновом режиме:
ШИМ управление: Пример 1
Логика программы такова — при достижении заданных температур вентилятор включается с определённым коэффициентом заполнения, а отключается только тогда, когда температура ниже минимального порога:
Компиляция, сборка и запуск программы
Сознаём файл FanPiPWM.cpp и вставляем вышеприведённый код:
Компилируем и собираем программу:
если хотим запустить программу в фоновом режиме:
ШИМ управление: Пример 2
Компиляция, сборка и запуск программы
Сознаём файл FanPiPwmLinear.cpp и вставляем вышеприведённый код:
Компилируем и собираем программу:
если хотим запустить программу в фоновом режиме:
Как поместить скрипт в автозагрузку
Остается сделать так, чтобы скрипт, контролирующий работу вентилятора охлаждения, автоматически запускался каждый раз при загрузке системы.
Для этого, в конец файла /etc/rc.local :
Нужно поместить команду запуска скрипта перед строкой exit 0 :
После перезагрузки скрипт будет автоматически запущен и вентилятор будет включаться при наступлении заданных условий.
Чтобы проверить факт запуска, после перезагрузки, нужно переключиться в терминал и проверить наличие процесса:
Как проверить?
Запуск утилиты с задействованием 4 ядер:
Температура процессора сразу начнет повышаться.
Raspberry Pi 3: GPIO ( #3) — умное управление собственным активным охлаждением
У данной статьи есть видеоверсия!
Но поскольку, по умолчанию, вентилятор напрямую подключается к гребенке GPIO — это подразумевает постоянную его работу. Несмотря на относительную бесшумность работы вентилятора, его постоянная работа не является эффективным использованием активной системы охлаждения. В то же время, постоянное шуршание вентилятора может просто раздражать.
Дискомфорта доставляет и тот факт, что даже если Raspberry Pi 3 выключен, при подключенном питании вентилятор все равно будет работать. Да и в конце концов, почему бы просто не сэкономить немного электроэнергии?
В данной статье будет показано, как при помощи нехитрых и не сложных манипуляций превратить существующую систему охлаждения в умную, которая будет включаться только тогда, когда процессору это действительно необходимо.
Вся модификация состоит из 2 частей — аппаратной и программной.
В данном примере используется NPN-транзистор 2N5551. Схема подключения следующая:
Работа скрипта основана на ежесекундном запросе температуры процессора. Из терминала подобную информацию можно получить выполнив команду vcgencmd с параметром measure_temp :
Логика скрипта такова — при достижении заданной температуры ( более 60°С) вентилятор включается, и отключается только когда температура снизится более чем на 10°С от максимального порога ( менее 50°С).
Как поместить Python-скрипт в автозагрузку
Остается сделать так, чтобы скрипт, контролирующий работу вентилятора охлаждения, автоматически запускался каждый раз при загрузке системы.
2 Схемы
Принципиальные электросхемы, подключение устройств и распиновка разъёмов
Raspberry Pi 3: подключение, установка, настройка

Одноплатный компьютер Raspberry уверенно занимает второе место после Arduino в списке самых популярных аппаратных платформ для всевозможных самоделок вроде систем умного дома и автономных роботов. Плату можно купить как отдельно, так и в составе наборов разной комплектации. Данный набор был приобретен на aliexpress.com за 2500 руб.
В комплект поставки входит непосредственно сам одноплатный компьютер Raspberry Pi 3 Model B. Плата упакована в картонную коробку и антистатический пакет.
Данная плата имеет на борту 64-х разрядный процессор с тактовой частотой 1,2 ГГц, 1 Гб оперативной памяти, оснащена разъемом HDMI, 4 портами USB, 40 контактным разъёмом GPIO, а также встроенный передатчиками WiFi и bluetooth.
В приобретенный автором комплект поставки входил корпус из оргстекла.
Корпус оказался качественным, все детали нашли свое место без помощи лобзика и напильника.
К компьютеру прилагался блок питания, который теоретически должен был обеспечить требуемые для питания компьютера 2-2,5 А при напряжении 5 В 2. Следует отметить, что старые версии платы потребляли гораздо меньший ток, около 700 мА [3]. Но со штатным блоком питания компьютер запускаться отказался на отрез, хотя сам по себе блок питания вполне работоспособен. Видимо, дело в том, что у производителя данного устройства какие-то свои маленькие амперы. Особенно осложняет дело, то, что при первом запуске не всегда бывает понятно, в чем именно проблема. В общем, штатный блок питания не подошел категорически, пришлось использовать сторонний блок питания на 5 В 2500 мА (вероятно от старого ноутбука).
Кроме этого в набор входят радиаторы для микросхем с большим энерговыделением.
Также для поддержания теплового режима следует использовать вентилятор, который имеется в комплекте.
Сборка корпуса ПК на Raspberry Pi 3
Сборку компьютера можно начать с закрепления радиаторов.
Радиаторы имею клейкую тыльную поверхность, и закрепить их несложно, благо размер, очевидно, показывает место крепления каждого из радиаторов. Затем собираем корпус, что так же несложно и проблем у автора обзора не вызвало.
На крышке корпуса закрепляем вентилятор.
Как видно на фотографии, крышка корпуса откидывается вбок. Непосредственно, сама плата крепится в корпусе четырьмя винтами, которые тоже входят в комплект.
Вентилятор можно подключить к соответствующим штырьковым контактам 4. Именно эти сорок штырьковых контактов и предназначены для подключения к плате всевозможной периферии, здесь реализованы, такие широко распространенные интерфейсы, как SPI, I2C, последовательный интерфейс.
В целом сборка компьютера не должна вызвать серьезных проблем. После этого нужно озаботиться вопросом подключения периферии. Для первого включения понадобится мышь и клавиатура. Автор использовал комплект из беспроводной клавиатуры logitech K270 и мыши M185, а также клавиатуру с тачтпадом rapoo E2700, никаких проблем при работе не возникло.
Переходник для подключения к монитору
Проще всего к компьютеру подключить монитор через интерфейс HDMI. Поскольку у автора старый монитор, то пришлось использовать переходник HDMI-to-VGA.
Переходник представляет собой отрезок кабеля, длиной 260 мм и массой 33 г с соответствующими разъемами на концах. Можно подключить компьютер Raspberry Pi 3 даже к старому телевизору через переходник HDMI-to-RCA.
Переходник имеет габариты 67 х 54 х 21 мм и массу 35 гр. С одной стороны корпуса располагается три RCA разъема (видео сигнал и два аудиоканала), с противоположной разъем HDMI. На боковой грани располагается разъем питания USB mini-BF и переключатель PAL/NTSC. Данный переходник потребляет 0,18 А при напряжении 5,4 В.
К данному переходнику прилагается инструкция по эксплуатации на английском.
В целом данная компоновка системы работоспособна, но на постоянной основе использовать в качестве монитора телевизор затруднительно.
Слишком низкое разрешение экрана делает мелкие надписи не читаемыми. Использование данного переходника оправдано в условиях, когда телевизор есть, а лишнего монитора нет, и при условии непродолжительной работы. Для первичного изучения операционной системы такой вариант не подходит совершенно. Старый VGA монитор подходит гораздо лучше.
Окончательно собранный компьютер выглядит следующим образом.
На фотографии видно, что блок питания включен через переходник, потому, что автор не стал перепаивать разъем.
Следует отметить, что используемый автором блок питания 5 В на 2500 мА работает на полную мощность с заметным нагревом, а сам компьютер периодически сигнализирует о недоставке мощности (молния в правом верхнем углу экрана).
Для постоянной продолжительной работы следует подобрать более мощный блок питания. При подаче питания на плате загорается красный светодиод.
Схема подключения Raspberry Pi 3
Итак, когда сборка компьютера завершена, периферия первой необходимости подключена 6, следует установить на microSD карту операционную систему. Для данной аппаратной платформы существует целый ряд операционных систем 8. Автор использовал наиболее широко используемую операционную систему Raspbian, которую можно скачать бесплатно с официального сайта [10]. Перед установкой microSD карту следует отформатировать, при этом на диске должна быть файловая система FAT32 [11], это можно сделать средствами Windows, хотя часто рекомендую 12 использовать специальную программу [14]. Затем следует записать образ операционной системы на microSD карту, для чего можно использовать программу Win32DiskImager [13].
В целом сборка этого компьютера и установка операционной системы у автора проблем не вызвала (Во всяком случае, когда автор догадался, что на флешке должна быть именно файловая система FAT32). Судя по предустановленным приложениям, операционная система Raspbian явно подразумевает использование для изучения программирования.
В целом интересная, относительно недорогая платформа, которая по своим возможностям не особо уступает персональному компьютеру десятилетней давности, потребляя на порядок меньшую мощность. Разумеется, существуют и другие более дешевые одноплатные компьютеры, но данное семейство компьютеров подробно описано в огромном количестве русскоязычных источников, что важно при первоначальном знакомстве с данным типом устройств.
Полезные ссылки
Скачать файлы проекта. Обзор подготовил специально для сайта 2 Схемы – Denev.
Интеллектуальное управление вентилятором Raspberry Pi с помощью Python
Скрипт Python будет контролировать температуру процессора Raspberry Pi и управлять вентилятором с помощью температурного гистерезиса.
Шаг 1. Краткий обзор
В этом уроке мы покажем как с помощью простых и несложных манипуляций превратить существующую систему охлаждения в интеллектуальную! Которая будет включена только тогда, когда процессор действительно в ней нуждается. Вентилятор включается только при интенсивной работе, что снижает энергопотребление вентилятора и уровень шума. Также это продлевает срок службы вентилятора, отключая его, когда он не нужен.
Шаг 2. Комплектующие
Для нашего проекта контроля температуры процессора Raspberry Pi и управления вентилятором потребуются следующие детали:
Шаг 3. Схема проекта
Схема довольно проста. Питание вентилятора отключается с помощью NPN-транзистора. В этой конфигурации транзистор действует как выключатель на нижней стороне. Резистор требуется только для ограничения тока через GPIO.
GPIO Raspberry Pi имеет максимальный выходной ток 16 мА. Я использовал 330 Ом, что дает нам базовый ток около:
Я выбрал NPN-транзистор S8050, поэтому переключение нагрузки 400 мА с обоих вентиляторов не является проблемой.
Выполните все соединения, как показано на схеме выше. В итоге мы должны получить вот такой примерный вариант:
Шаг 4. Создаем логи температуры процессора с помощью ThingSpeak
Основные функции ThingSpeak включают сбор данных в реальном времени, обработку данных и визуализацию. ThingSpeak API не только позволяет отправлять, хранить и получать доступ к данным, но также предоставляет различные статистические методы для их обработки.
Зарегистрироваться на сайте можно по этой ссылке.
ThingSpeak может интегрировать популярные устройства и сервисы, такие как:
Но, прежде чем мы начнем, нам нужна учетная запись на ThingSpeak:
Заполните имя, описание и данные, которые вы хотите загрузить.
Нажмите на кнопку Сохранить канал (Save Channel), чтобы сохранить все ваши настройки.
Нам нужен ключ API, который мы позже добавим в код Python, чтобы загрузить температуру нашего процессора в облако Thingspeak.
Нажмите на вкладку API Keys, чтобы получить Write API Key.
Получив ключ API (Write API Key), мы почти готовы выгрузить данные.
Шаг 5. Получение температуры процессора от Raspberry Pi с использованием Python
Скрипт основан на получении температуры процессора, которую фиксируем каждую секунду. Её можно получить из терминала, выполнив команду vcgencmd с параметром measure_temp.
Для выполнения команды использовалась библиотека subprocess.check_output(), а затем использовалось регулярное выражение для извлечения действительного значения из возвращенной строки.
После получения значения температуры данные необходимо отправить в облако ThingSpeak. Используйте свой ключ Write API Key, чтобы изменить переменную myApi в приведенном ниже коде Python.
Шаг 6. Управление вентилятором в зависимости от температуры
Скрипт Python, приведенный ниже, реализует логику, которая включает вентилятор когда температура поднимается выше определенной температуры и выключается только тогда, когда температура падает ниже этого порогового значения. Таким образом, вентилятор не будет включаться и выключаться моментально.
Шаг 7. Финальный код
Финальный код Python ниже. Не забудьте ввести свой собственный ключ Write API Key.
Войдите в свою Raspberry PI.
Запустите следующую команду в терминале:
Через некоторое время откройте свой канал в ThingSpeak, и вы увидите как температура загружается в облако Thingspeak в режиме реального времени.
Запустите скрипт Python при запуске. Для этого в конце файла /etc/rc.local:
Вам нужно поместить команду запуска скрипта перед строкой выхода 0:
После перезагрузки скрипт автоматически запустится, а вентилятор включится, когда указанные условия будут выполнены.



















































