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

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

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

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

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



// read RPM

volatile int rpmcount = 0;//see http://arduino.cc/en/Reference/Volatile
int rpm = 0;
unsigned long lastmillis = 0;

void setup(){
Serial.begin(9600);
attachInterrupt(0, rpm_fan, FALLING);//interrupt cero (0) is on pin two(2).
}

void loop(){

if (millis() - lastmillis == 1000){ /*Uptade every one second, this will be equal to reading frecuency (Hz).*/

detachInterrupt(0); //Disable interrupt when calculating

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

Serial.print("RPM =\t"); //print the word "RPM" and tab.
Serial.print(rpm); // print the rpm value.
Serial.print("\t Hz=\t"); //print the word "Hz".
Serial.println(rpmcount); /*print revolutions per second or Hz. And print new line or enter.*/

rpmcount = 0; // Restart the RPM counter
lastmillis = millis(); // Uptade lasmillis
attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
}
}

void rpm_fan(){ /* this code will be executed every time the interrupt 0 (pin2) gets low.*/
rpmcount++;
}

hall



1 комментарий

Оставить ответ

Обязательные поля помечены*

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