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




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

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

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