ITСooky

IT-рецепты съедобные и не очень!

Контролер вентилятора своими руками на Orange Pi PC Plus

дата 20.10.2018

Схема уже отработана на другой апельсине, но только сейчас взялся за паяльник, и Orange Pi PC Plus становится основной апельсиной благодаря eMMC и вообще стабильная и электричества мало ест(теперь важно, все теперь становится важным).

Вот схема подключения. Транзистор S9012, все сопротивления 220 ОМ. На плате вентилятор подключается к разъему, красное черное имеет значение, но на схеме этого разъема нет так как черчение в Fritzing и без того невыносимая боль.

А вот фото готовой платки, сопротивления одинаковые маркировка разная

Ссылки на компоненты, возможно уже устарели но покупал давненько
Вентилятор 5V 0.2A
https://ru.aliexpress.com/item/Raspberry-PI-Fan-Active-Cooling-Fan-for-Customized-Acrylic-Case-5V-plug-in-and-play-Support/32294328071.html
Вот такие платки для паяния ссылки уже нет ‘Dropshipping 12 Шт. 5×7 4×6 3×7 2×8 см двойной Бортовой медь прототип печатной платы Универсальная Доска Стекловолокна доска для Arduino’
Ассорти из транзисторов https://ru.aliexpress.com/item/15Values-TO-92-Transistor-Assorted-Kit-S9012-S9013-S9014-S8050-S8550-2N3904-2N3906-BC327-BC337-Tl431/32384690394.html

Чтобы общаться с GPIO надо поставить WiringOP

git clone https://github.com/zhaolei/WiringOP.git -b h3
cd WiringOP
chmod +x ./build
sudo ./build

Самый простой способ запускать через cron скрипт который будет смотрим температуру и запускать кулер
вот такой

Тут еще включается лампочка, если больше 45 градусов красный, если меньше синий. Проверяйте путь к скрипту
whereis bash
что интересно если путь не правильный то из консоли скрипт будет работать, а из cron нет и вот длшадывайся что к чему

Создаем файл в root директории

vi cool.sh

Добавляем в него код

#!/bin/bash
C=`/bin/cat /sys/class/thermal/thermal_zone0/temp`
if [ $C -ge 45000 ]
then
  /usr/local/bin/gpio mode 1 out&&/usr/local/bin/gpio write 1 off&&/usr/local/bin/gpio mode 3 out&&/usr/local/bin/gpio write 3 on&&/usr/local/bin/gpio write 2 off
else
/usr/local/bin/gpio write 1 on&&/usr/local/bin/gpio write 3 off&&/usr/local/bin/gpio mode 2 out&&/usr/local/bin/gpio write 2 on
fi

делаем его исполняем
chmod +x cool.sh
и добавляем в расписание
crontab -e
строчку

*/1 * * * * /root/cool.sh

и это работает

Но всего лишь раз в минуту… но можно сделать на С и будет стописят раз в секунду опрашивать придется даже притормаживать

Идем в папку с примерами от WiringOP
cd /root/WiringOP/examples
Делаем файл
vi acool.c
Добавляем в файл этот код

#include <stdio.h>
#include <wiringPi.h>


#define LEDB 3
#define LEDR 2
#define COOLER 1
#define WARNING_TEMP 45000

int main (void)
{
  int number1;

  wiringPiSetup ();
  pinMode (LEDB, OUTPUT);
  pinMode (LEDR, OUTPUT);
  pinMode (COOLER, OUTPUT);
 for (;;)
  {

FILE *in_file;


  in_file = fopen("/sys/class/thermal/thermal_zone0/temp", "r");
  if (in_file == NULL)
    {
        printf("Can't open file for reading.\n");
    }
    else
    {
        fscanf(in_file, "%d", &number1);
        fclose(in_file);
    }
 if ( number1 <= WARNING_TEMP)
{
    digitalWrite (LEDB, HIGH);  // On
    digitalWrite (COOLER, HIGH);   // Off
    digitalWrite (LEDR, LOW);   // Off
    delay (500);               // mS
    digitalWrite (LEDB, LOW);   // Off
    delay (500);

}
else
{
    digitalWrite (LEDR, HIGH);  // On
    digitalWrite (COOLER, LOW);  // On
    delay (50000);               // mS

}


  }
  return 0 ;
}

Это путь к файлу с температурой в Armbian /sys/class/thermal/thermal_zone0/temp

ОСТОРОЖНО: Оказывается программы на С с циклами грузят на 100% процессор, если подумать то ничего удивительного тут нет. Но в этом скрипте мигание лампочки обеспечивает торможение цикла так что нагрузки не случается… но надо быть готовым

Собираем
make acool

И запускаем
./acool

И программа работает. Когда температура меньше 45000 (45 по Цельсиусу) мигает синий огонек, проверяет раз в секунду(это время задает интервалом мигания — лампочки важную роль играют тут такто), когда поднимается выше включается красный и вентилятор и скрипт замирает на 50 секунд, ну что бы не дергать вентилятор.

Это просто программа на С, как её сделать демоном не понял. Но её просто можно запустить на старте и она будет работать сама по себе

скомпелированный файл я скопировал в root директорию
cp /root/WiringOP/examples/acool /root/acool
идем в крон
crontab -e
добавляем эту строчку (старую убираем)

@reboot /root/acool

и это работает