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

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

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

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

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

 

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

Простой способ считать обороты кулера с помощью ArduinoПростой способ считать обороты кулера с помощью 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 и определить его обороты.


Эта статья была добавлена при поддержке нашего спонсора, лучшего онлайн кинотеатра, Megogo.net. На котором можно поднять настроение себе и своим детям при просмотре мультфильмов бесплатно и онлайн. А самое главное там можно увидеть последние серии любимых мультиков ваших детей, таких как Маша и медведь, Фиксики, Барбоскины и другие.

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

  1. Цитата: locodriver
    код с ощибками. как подключить транзистор — не понятно.

     

    Только что перепроверил код, компилируется без ошибок.
    Транзистор, что стоит на макетной плате, не используется. 

  2. Одно из двух: либо прерывания считать в чечении 1000 мс, либо (если как в схеме 500 мс) не нужно делить на 2. Или я не прав?

  3. Антонио

    Приветствую! Только сегодня начал изучать ардуино при помощи Blynk. Мигать светодиодом, отключать и включать его я научился. Не понятно только с шим модуляцией. В программе Blynk включаю виджет Value, питание подаю на кулер + — через ЛБП, провод тахометра подцепляю к D3. Но показания очень странные что-то вроде HI LO и все. А мне бы хотелось именно обороты увидеть. В чем может быть ошибка? Минус вентилятора обязательно должен подключаться через ардуино? И обязательно ли использовать резистор? Ногами не пинайте — я новичок в этом деле и набор у меня самый минимальный — ардуинка и вентилятор 🙂 Хотелось бы научиться.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector