Тахометр с датчиками Холла

Всем привет)
Я новичок в мире Ардуино и мне нужна ваша помощь.
У меня робот с 4мя двигателями. На каждом двигателе, с другой стороны от колеса, установлены по 2 датчика Холла и круглый магнит на валу.
Помогите, пожалуйста написать код для измерения оборотов двигателя. Мне нужно только чтобы загорался LED, если хотя бы один или все двигатели не крутились.

//Назначаем пины датчиков и LED
#define PIN_Hall_A 31 
#define PIN_Hall_B 38
#define PIN_Hall_C 49
#define PIN_Hall_D A1
#define PIN_LED 47

void setup() {
// Режим работы пинов
pinMode(PIN_Hall_A, INPUT);
pinMode(PIN_Hall_B, INPUT);
pinMode(PIN_Hall_C, INPUT);
pinMode(PIN_Hall_D, INPUT);
pinMode(PIN_LED, OUTPUT);
}


void loop() {
//  Переменные
int Wheel_A = digitalRead(PIN_Hall_A);
int Wheel_B = digitalRead(PIN_Hall_B);
int Wheel_C = digitalRead(PIN_Hall_C);
int Wheel_D = digitalRead(PIN_Hall_D); 

// Условие
if(Wheel_A == HIGH || Wheel_B == HIGH || Wheel_C == HIGH || Wheel_D == HIGH){
digitalWrite(PIN_LED, HIGH);
}
else{
digitalWrite(PIN_LED, LOW);
}
}

*Ссылкам с рабочими примерами буду тоже рад.

Какая ардуина?

PCINT в помощь, только у меги датчики на другие пины перетащить придётся

MEGA2560-PCINT

В таком виде задача неразрешима в принципе.

Попробуйте прояснить у себя в голове, что же Вам на самом деле надо. Иначе ничего не получится.

1 лайк

то-есть?

Мега 2560

Да это тебя Садман троллил, неужели ты думаешь он не знает какая )))

Я 4 дня как знаком с C++ и ардуино. Еще не улавливаю подколы.

Ну, что значит “то-есть?”.

Задача

неразрешима.

Как Вы планируете определять крутится двигатель или не крутится? По отсутствию срабатывания датчиков?

И сколько времени Вы намерены ждать “а не сработает ли датчик” прежде, чем определите, что двигатель не крутится? Микросекунду? Миллисекунду? Минуту? Час? Год? Век? В любом случае Вы не знаете, он у Вас “не крутится” или “крутится медленно и датчик не успел сработать”.

До тех пор пока не будет определено что такое “не крутится” (например, "не крутится" == "крутится не быстрее, чем X оборотов в минуту") задача будет оставаться неразрешимой.

1 лайк

Это не просто. Но я понимаю о чем вы говорите. Я попробую.

Очень рекомендую не игнорировать моё сообщение. Это не подкол.

Секунда, оптимальный отрезок, если за это время колесо не провернулось ни на дюйм, то значит не крутится

Холлы вешаешь на прерывания, в них считаешь кол-во срабатываний. Потом, в теле лупа вычисляешь скорость. После сравниваешь вычисленную скорость с эталонной, как Петрович намекает, и принимаешь решение - зажигать светодиод или нет.

Простите, но не зная задачи - это пальцем в небо. Для каких-то задач секунда - очень много, а для каких-то и минуты мало.

А вот это …

блин, ну, Вы ж не первый раз замужем! У Вас есть “дюймометр”? Давайте рассуждать в понятиях имеющейся аппаратуры и говорить о срабатывании датчиков. Иначе мы ТС мозг совсем вынесем.

Спасибо. Начну читать, изучать и понимать)

Я бы не советовал обсуждать с генератором белого шума какие-то осмысленные вещи, иначе можно к Наполеонам отправиться.

так пятница жеж )))
PS с датчиком таким не знаком, оптический на оборот даёт импульсов десять, это как раз в районе дюйма на импульс

так включи псофометрический фильтр, делов то…

Или зачем тогда форум? :slight_smile: