ESP32 и модуль датчика Холла A3144

OOM
Offline
Зарегистрирован: 07.01.2017

Может кто подскажет как к NodeMCU ESP32S подключить модуль датчика Холла А3144.

Нужно считывать и контролировать обороты мотора. Поиски в просторах Инета результата не дали.  

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

А чего там такого? Это почти как кнопка, при превышении определенного значени магнитного поля выход закорачивается на землю.

sadman41
Offline
Зарегистрирован: 19.10.2016

Как-то всё кувырком пошло в этом мире... Си палёный попадаться стал - то for() не работает, то if(). Теперь вот Гугль пустой подкидывают ардуинщикам...

OOM
Offline
Зарегистрирован: 07.01.2017

Вопрос по другому.

В Arduino_Mega2560 я это решал так:

[code]
// Установки для датчиков Холла моторов
byte n = 2;      // число магнитов
float r_L = 7.0;   // радиус левого тела в сантиметрах
float r_R = 7.0;   // радиус левого тела в сантиметрах
float r_speed_L, rev_time_L, r_speed_R, rev_time_R, r_speed; // 
volatile unsigned long lastflash, flash;
unsigned int RPM_L, RPM_R;

//Начало программы
void setup()
{
   //Подключение прерывания 
attachInterrupt(2,sens,RISING); //подключить прерывание на 21 пин при повышении сигнала на левом моторе
attachInterrupt(3,sens,RISING); //подключить прерывание на 20 пин при повышении сигнала на правом моторе

}

// Основной цикл программы
void loop() {
   
  // Расчет и вывод значений оборотов и скорости моторв
if (micros() - lastflash > 1000000) { // если сигнала нет больше секунды
    RPM_L = RPM_R = 0;                            // считаем, что всё стоит и не крутится
    r_speed = r_speed_L = r_speed_R = 0;
  } else {
    rev_time_L = (float) flash / 1000000 * n;                       // время одного оборота в секундах левого мотора, с учётом числа магнитов
    rev_time_R = (float) flash / 1000000 * n;                       // время одного оборота в секундах правого мотора, с учётом числа магнитов
    RPM_L = (float) 60 / rev_time_L;                                // обороты в минуту левого мотора
    RPM_R = (float) 60 / rev_time_R;                                // обороты в минуту правого мотора
    r_speed_L = (float) 2 * 3.1415 * r_L / 100 / rev_time_L * 3.6;  // скорость точки на радиусе левого мотора, км/ч
    r_speed_R = (float) 2 * 3.1415 * r_R / 100 / rev_time_R * 3.6;  // скорость точки на радиусе правого мотора, км/ч
    r_speed = (float) r_speed_L + r_speed_R /2;                     // средняя скорость моторов, км/ч
    }
  }

//(Функция расчета оборотов
void sens() {
  flash = micros() - lastflash;   // вычислить время между двумя оборотами
  lastflash = micros();           // запомнить время последнего оборота
}
[/code]

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Тогда вам надо искать не как датчик Холла прицепить, а как прерывания на ESP использовать.