Arduino и датчик Холла (измерение скорости вращения)

Используя Arduino и датчик Холла можна измерять скорость вращения.
RPM (Revolutions per minute) – количество оборотов в минуту. Обороты в минуту – единица измерения частоты вращения: количество полных оборотов, совершенных телом (валом, колесом, шкивом т.д.) вокруг фиксированной оси. Используется для характеристики скорости вращения механических компонентов в механизмах и машинах. Это можно реализовать с помощью Arduino и датчик Холла.

Подключение датчика Холла к Arduino показано на рисунке 1 (S (данные) -> pin 2, GND -> Arduino GND, VCC -> Arduino + 5V, резистор 1 кОм).

hall sensor connection scheme

Рисунок 1 – Поключение цифрового датчика Холла к Arduino

Для измерения скорости вращения на диске должен быть закреплен магнит, который будет влиять на датчик Холла после каждого полного оборота диска. Таким образом, после каждого оборота диска получаем импульс, который можем трактовать как один оборот.
Программа для Arduino, которая считывает показания датчика Холла и считает количество оборотов в минуту и частоту вращения показана ниже. При наличии магнитного поля включается светодиод.
КОД ПРОГРАММЫ

// read RPM
//see http://arduino.cc/en/Reference/Volatile

volatile int rpmcount = 0;
int rpm = 0;
unsigned long lastmillis = 0;

void setup(){

Serial.begin(9600);

//interrupt cero (0) is on pin two(2)
attachInterrupt(0, rpm_fan, FALLING);
}

void loop(){

/*Uptade every one second, this will be equal to reading frecuency (Hz).*/

if (millis() - lastmillis == 1000){

detachInterrupt(0); //Disable interrupt when calculating

/* Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use rpmcount * 30.*/
rpm = rpmcount * 60;

//print the word "RPM" and tab.
Serial.print("RPM =\t");

// print the rpm value.
Serial.print(rpm);

//print the word "Hz".
Serial.print("\t Hz=\t");

/*print revolutions per second or Hz. And print new line or enter.*/
Serial.println(rpmcount);

// Restart the RPM counter
rpmcount = 0;

// Uptade lasmillis
lastmillis = millis();

//enable interrupt
attachInterrupt(0, rpm_fan, FALLING);
}
}

/* this code will be executed every time the interrupt 0 (pin2) gets low.*/
void rpm_fan(){
rpmcount++;
}
В результате получим следующее:
hall sensor results

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

Your email address will not be published. Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.