Как организовать подсчет импульсов?

Здравствуйте. Подскажите как организовать подсчет импульсов датчика скорости ? Хочу вывести отображение скорости на семи сегментном индикаторе для проверки эбу. На датчике скорости написано 6 импульсов = 1метр. Сами имульсы будут или на таймере NE555. Или ,если возможно, на самом ардуино. Надо как-то подсчитать импульсы и перевести все в скорость. Сам в программировании не особо. Пните в нужном направлении.

Видимо, направлять нужно в раздел “Ищу исполнителя”

Подождите. Может кто подскажет. Дальше сам начну.

Пожалейте ЭБУ !!!

Датчик скорости связан с его оборотами, но никак не связан с метрами !!!

V=S/t, (V- скорость, t- время , S- расстояние) в мое случае S=6*i (где i-импульсы). Получается V=6*i/t. Как подсчитать импульсы?

На датчике скорости написано 6 импульсов на 1 метр.

На датчике скорости написано 6 импульсов на 1 метр.

Прекрасно! 1 импульс 1/6. Классно.

не начнете…

Благодарю.

Спасибо.

6 импульсов на метр означает, что частота импульсов вряд ли превысит 400-500 импульсов в секунду. Это вообще не о чем, для любого МК это черепашья скорость.
Тут подойдет практически любой метод подсчета, хотя бы даже тупой опрос пина в цикле…

Вот примерный код от ИИ Яндекса

const int inputPin = 8; // Пин для входа импульсов
unsigned long previousMillis = 0;
const unsigned long interval = 1000; // интервал измерения в миллисекундах

volatile unsigned long pulseCount = 0;
int lastPinState = LOW;
int currentPinState;

void setup() {
  Serial.begin(9600);
  pinMode(inputPin, INPUT);
 
}

void loop() {
  unsigned long currentMillis = millis();

  // Опрашиваем состояние пина
  int pinState = digitalRead(inputPin);

  // Если пришел фронт импульса (т.е. изменение с LOW на HIGH)
  if (lastPinState == LOW && pinState == HIGH) {
    pulseCount++;
  }

  lastPinState = pinState;

  // Проверяем, пришло ли время выводить результат
  if (currentMillis - previousMillis >= interval) {
    Serial.print("Импульсов за ");
    Serial.print(interval);
    Serial.print(" мс: ");
    Serial.println(pulseCount);
    pulseCount = 0; // сброс счётчика
    previousMillis = currentMillis;
  }
}

Пожелание ТС - сейчас вокруг столько вариантов ИИ, что стыдно напрягать подобной ерундой живых людей. Учитесь пользоваться новой технологией, она просто спасение для лентяев и неучей

1 лайк

Спасибо.

Когда с ии сталкиваюсь или пользуюсь, почему то вот этот рассказ в журнале Пионер из деЦтва вспоминается. Ссылку и название Алиса подсказала.

Вам нужно считать импульсы в течении, скажем, секунды. Начитали 12 импульсов, например. Это означает 2 метра в секунду. Если скорость предполагается большой - возьмите интервал времени поменьше, например, 200 мсек. Если скорость супер маленькая, наОборот возьмите интервал в несколько секунд.

Чтобы посчитать скорость нужно и расстояние и время. Время выдумайте себе сами.

Направление пинка: прерывания, обработчик прерывания от пина, таймер.

Можно делать и наоборот: измерять время, в течение которого придет заранее заданное количество импульсов.

С чем столкнулся я в своё время с датчиком скорости:

Датчик а/м Subaru - 12 импульсов на один оборот датчика.

Время между двумя соседними импульсами ОЧЕНЬ сильно отличается !!!

Пришлось организовать кольцевой буфер на 12 значений и суммировать время полного оборота …

Измерял число тактов через Input Capture таймера с учётом возможных переполнений на малой скорости вращения.

Всем спасибо. Направление понял.