const int hallPin = 13; // Пин, к которому подключен датчик Холла
const unsigned int numMagnets = 6; // Количество магнитов на роторе
unsigned long lastPulseTime = 0;
unsigned long currentMillis = 0;
unsigned long lastPrintTime = 0; // Время последнего вывода значений в серийный порт
const unsigned long printInterval = 500; // Интервал времени между выводами в серийный порт (в миллисекундах)
float rpm = 0;
bool hallState = false; // Текущее состояние датчика Холла
bool lastHallState = false; // Предыдущее состояние датчика Холла
void setup() {
Serial.begin(9600); // Инициализация серийного соединения для вывода данных
pinMode(hallPin, INPUT_PULLUP); // Настройка пина как вход с подтягивающим резистором
}
void loop() {
currentMillis = millis();
// Чтение текущего состояния датчика Холла
hallState = digitalRead(hallPin) == LOW;
// Проверка на переход состояния с высокого на низкий
if (hallState && !lastHallState) {
unsigned long timePerRevolution = currentMillis - lastPulseTime;
lastPulseTime = currentMillis;
// Рассчитываем количество оборотов в минуту (RPM)
rpm = 60000.0 / (timePerRevolution * numMagnets); // 60000 мс в минуту
}
lastHallState = hallState;
// Дополнительный вывод значений RPM в серийный порт через регулярные интервалы времени
if (currentMillis - lastPrintTime >= printInterval) {
lastPrintTime = currentMillis;
Serial.println(rpm); // Дополнительный вывод значений RPM в серийный монитор
}
}
Расчет оборотов датчики холла Arduino
Расчет оборотов двигателя на основании датчика холла, с учетом количества магнитов.
(0 голосов)
Также смотри
Скачать вложения:
- hall_rpm_arduino.ino (21 Загрузки)