🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


⚙️ Проект: тахометр оборотов на фотопрерывателе KY-010 и TM1637

Фотопрерыватель KY-010 и дисплей TM1637

Фотопрерыватель KY-010 считает, сколько раз в секунду через его паз проходит лопасть на вращающемся валу — TM1637 сразу переводит это в обороты в минуту.

Как это работает

KY-010 — оптический фотопрерыватель: внутри паза находятся ИК-светодиод и фотоприёмник напротив друг друга. Пока между ними ничего нет, луч доходит до приёмника и сигнал держится на одном уровне; стоит лопасти, зубцу или метке на вращающемся диске пройти через паз — луч на мгновение прерывается, и сигнал переключается. Подсчитав число таких прерываний за известный промежуток времени, легко вычислить скорость вращения.

Формула `pulseCount * 60` переводит число импульсов за секунду в обороты в минуту (умножение на 60 секунд), но это верно только если на каждый полный оборот приходится ровно одно прерывание луча. Если на диске несколько лопастей/прорезей (например, вентилятор с метками на всех 4 лопастях), результат нужно разделить на их число, иначе обороты окажутся кратно завышены.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. Подключите KY-010: сигнал → D2, VCC → 5V, GND → GND.
  2. Подключите TM1637: CLK → D3, DIO → D4, VCC → 5V, GND → GND.
  3. Установите паз фотопрерывателя так, чтобы вращающаяся лопасть/метка свободно проходила через него, не задевая модуль механически.
  4. Если на вашем диске не одна, а несколько лопастей/прорезей — добавьте деление на их число при расчёте оборотов.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

#include <TM1637Display.h>

const int gatePin = 2;
TM1637Display display(3, 4); // CLK, DIO

volatile int pulseCount = 0;
unsigned long lastCalc = 0;
bool lastState = HIGH;

void setup() {
  Serial.begin(9600);
  pinMode(gatePin, INPUT);
  display.setBrightness(5);
}

void loop() {
  bool state = digitalRead(gatePin);

  if (state == LOW && lastState == HIGH) {
    pulseCount++; // луч прервался — засчитываем прохождение лопасти
  }
  lastState = state;

  if (millis() - lastCalc >= 1000) {
    int rpm = pulseCount * 60; // один импульс на оборот (одна прорезь/лопасть)
    display.showNumberDec(rpm);

    Serial.print("Обороты в минуту: ");
    Serial.println(rpm);

    pulseCount = 0;
    lastCalc = millis();
  }
}

Формула `pulseCount * 60` верна для одной прорези на оборот — если на диске несколько лопастей, разделите результат на их число.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🪟 автоматические шторы на шаговом двигателе …🚲 велоспидометр на герконе KY-025 и LCD1602 →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 159 ₽ 143 ₽ (экономия 16 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA