🛒
0 товар.
0 руб.
Логотип

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

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

🚲 Проект: велоспидометр на герконе KY-025 и LCD1602

Геркон KY-025 и LCD1602

Магнит на спице проходит мимо геркона KY-025 раз за оборот — Arduino считает скорость и пробег на LCD1602.

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

Геркон — это механический контакт, замыкающийся под действием магнитного поля: магнит, закреплённый на спице колеса, при каждом обороте проходит рядом с герконом и на мгновение замыкает цепь. Зная длину окружности колеса и время между двумя соседними замыканиями, легко вычислить скорость (расстояние за оборот, делённое на время оборота), а суммируя пройденные обороты — общий пробег.

Если с последнего импульса прошло больше 2 секунд, код считает, что велосипед остановился, и показывает скорость 0 — иначе, после остановки, на экране навечно оставалось бы последнее зафиксированное значение скорости.

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

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

  1. KY-025: сигнал → D2, VCC → 5V, GND → GND.
  2. LCD1602 с I2C: SDA → A4, SCL → A5.
  3. Закрепите магнит на спице и сам геркон на вилке так, чтобы магнит проходил в 2-5 мм от геркона при каждом обороте колеса.
  4. Измерьте рулеткой длину окружности колеса и подставьте в `wheelCircumferenceM`.
  5. Прокрутите колесо вручную и убедитесь, что показания скорости и пробега меняются.

Скетч

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

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int reedPin = 2;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const float wheelCircumferenceM = 2.1; // измерьте рулеткой свою окружность колеса
volatile unsigned long lastPulse = 0;
volatile unsigned long interval = 0;
float totalDistanceKm = 0;
bool lastState = HIGH;

void setup() {
  pinMode(reedPin, INPUT);
  lcd.init();
  lcd.backlight();
}

void loop() {
  bool state = digitalRead(reedPin);
  if (state == HIGH && lastState == LOW) { // геркон замкнулся
    unsigned long now = millis();
    interval = now - lastPulse;
    lastPulse = now;
    totalDistanceKm += wheelCircumferenceM / 1000.0;
  }
  lastState = state;

  float speedKmh = (interval > 0 && millis() - lastPulse < 2000)
    ? (wheelCircumferenceM / 1000.0) / (interval / 3600000.0) : 0; // 0, если велосипед стоит

  lcd.setCursor(0, 0);
  lcd.print("Speed: ");
  lcd.print(speedKmh);
  lcd.print("   ");
  lcd.setCursor(0, 1);
  lcd.print("Dist: ");
  lcd.print(totalDistanceKm);
  lcd.print("km  ");
  delay(200);
}
                

`wheelCircumferenceM` нужно измерить рулеткой — от этого зависит точность показаний.

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

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

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

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

← ⚙️ тахометр оборотов на фотопреры…🎲 электронный кубик на кнопке и … →

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

Все 2 товара сразу: 312 ₽ 281 ₽ (экономия 31 ₽)

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

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

Корзина

Поиск


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