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

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


🔊 Проект: звуковая сигнализация отклонения по оси Y джойстика KY-023

В другом проекте на сайте джойстик KY-023 включает реле резким отклонением по оси X в одну конкретную сторону. Здесь используется другая ось (Y) и другая логика: зуммер подаёт сигнал при отклонении от центра в ЛЮБУЮ сторону, а не только в одну, — например, как сигнализация о том, что рычаг механизма вышел за безопасные пределы хода в любом направлении.

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

Считывание оси Y такое же, как и в проекте с реле: `analogRead()` даёт число от 0 до 1023, где центр соответствует примерно середине диапазона. Разница — в способе сравнения с порогом: вместо проверки "больше одного конкретного числа" код сравнивает АБСОЛЮТНОЕ отклонение от центра (`abs(yValue - center)`) с порогом, срабатывая одинаково при отклонении и в одну, и в другую сторону от середины.

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

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

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

  1. KY-023: VRy → A1 Arduino, VCC → 5V, GND → GND (ось X и кнопка SW в этом проекте не используются).
  2. Зуммер: сигнал → D8, GND → GND.

Скетч

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

const int Y_PIN = A1;
const int BUZZER_PIN = 8;
const int CENTER = 512; // проверьте реальное значение покоя в мониторе порта
const int DEVIATION_THRESHOLD = 300; // подберите по месту

void setup() {
  Serial.begin(9600);
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  int yValue = analogRead(Y_PIN);
  int deviation = abs(yValue - CENTER);

  if (deviation > DEVIATION_THRESHOLD) {
    tone(BUZZER_PIN, 2000, 100);
  }

  delay(50);
}

Дополнительных библиотек не требуется — только `analogRead()` и `tone()`. Распечатайте в мониторе порта реальное значение в покое перед использованием — у многих экземпляров джойстика `CENTER` заметно отличается от 512, и это стоит учесть при подборе `DEVIATION_THRESHOLD`.

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

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

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

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

← 🌈 цветовой индикатор уровня на RGB-светодиод…🎛️ точная настройка порога отключения многооб… →

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

Все 2 товара сразу в корзину: 148 ₽ 133 ₽ (экономия 15 ₽)

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

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

Корзина


Поиск



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