Распиновка проводов кулера. Сегодня о том, как считывать обороты компьютерного кулера с помощью его встроенного тахометра. На фото обыкновенный компьютерный вентилятор с трехпроводным подключением. Два провода красный и черный это питание с массой, и желтый, по которому комп определяет с какой скоростью крутится пропеллер.
Работает этот выход довольно просто, выход соединяется с массой, когда крыльчатка находится в определенном положении, можно даже подключить тестер и посмотреть, как это происходит. Только без питания ничего работать не будет, поэтому я его подключил к 5 вольтам от пальчиковых батареек. Конкретно этот кулер замыкает выход 2 раза на 1 оборот, соответственно к нему можно подключить оттягивающий резистор и снимать показания как с энкодера.
Схема подключения кулера к 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 и определить его обороты.