Простой способ считать обороты кулера с помощью Arduino

Распиновка проводов кулера. Сегодня о том, как считывать обороты компьютерного кулера с помощью его встроенного тахометра. На фото обыкновенный компьютерный вентилятор с трехпроводным подключением. Два провода красный и черный это питание с массой, и желтый, по которому комп определяет с какой скоростью крутится пропеллер.

Простой способ считать обороты кулера с помощью Arduino

Работает этот выход довольно просто, выход соединяется с массой, когда крыльчатка находится в определенном положении, можно даже подключить тестер и посмотреть, как это происходит. Только без питания ничего работать не будет, поэтому я его подключил к 5 вольтам от пальчиковых батареек.  Конкретно этот кулер замыкает выход 2 раза на 1 оборот, соответственно к нему можно подключить оттягивающий резистор и снимать показания как с энкодера.

Простой способ считать обороты кулера с помощью Arduino

Схема подключения кулера к Arduino

Простой способ считать обороты кулера с помощью Arduino

+12 вольт подключается только к кулеру, к его красному проводу и никуда больше. Выход тахометра, желтый провод, подключается к нулевому прерыванию Arduino на UNO это второй вход и он же подтягивается резистором к ардуиновским 5 вольтам. Ну и, конечно же, у нас общая масса с кулером и его питанием. Теперь можно подавать питание.

Описание кода.

В коде заводим переменную

volatile int val;

 и функцию обработчика прерываний, которая будет плюсовать к переменной единицу.

void rpm(){
 val++;
}

В setup конфигурируем прерывания, оно у нас CHANGE,

attachInterrupt(0, rpm, CHANGE);

то есть будет выполняться когда состояние на входе изменится и когда будет изменяться состояние на входе будет прибавляться единица к переменной val.

В цикле сбрасываем переменную на 0 и ждем пол секунды пока набежит значение, ждем пол секунды а не секунду  потому что прерывание срабатывает 2 раза за 1 импульс  от чего можно считывать в 2 раза чаще.

val = 0; // сбрасываем счетчик и ждем.
delay(500); // так как прерывание CHANGE, срабатывает два раза

После рассчитываем обороты в минуту и отправляем в serial, то есть количество импульсов в секунду множим на 60 и делим на 2, так как у нас 2 импульса за оборот. И еще отправляем значения из переменной val.

Serial.print((val*60)/2); // количество импульсов на 60 секунд и делим на количество импульсов на оборот
Serial.print(" rpm ");
Serial.print(val);
Serial.println(" val");

volatile int val;
void rpm(){
val++;
}
void setup() {
Serial.begin(9600);
attachInterrupt(0, rpm, CHANGE);
}
void loop() {
val = 0; // сбрасываем счетчик и ждем.
delay(500); // так как прерывание CHANGE, срабатывает два раза
// то и считываем каждые пол секунды.
Serial.print((val*60)/2); // количество импульсов на 60 секунд
// и делим на количество импульсов на оборот
Serial.print(" rpm ");
Serial.print(val);
Serial.println(" val");
}

Простой способ считать обороты кулера с помощью Arduino

Так же можете посмотреть видео как подключить куллер к Arduino и определить его обороты.

Понравилась статья? Поделиться с друзьями: