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

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


🎵 Проект: метроном с регулировкой темпа на потенциометре

Потенциометр WH148 и зуммер

Потенциометр WH148 плавно задаёт темп от 40 до 200 ударов в минуту — пассивный зуммер отбивает короткий щелчок ровно в такт, без необходимости лезть в настройки через кнопки.

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

Потенциометр — это переменный резистор: поворот ручки меняет напряжение на среднем выводе от 0 до 5V, а Arduino через `analogRead()` переводит это напряжение в число от 0 до 1023. Функция `map()` дальше просто пересчитывает этот диапазон 0-1023 в диапазон 40-200 ударов в минуту (BPM) — чем правее крутанули ручку, тем больше BPM и тем чаще щёлкает зуммер.

Сам темп в тактах удобнее для человека, но программе нужен интервал времени между ударами в миллисекундах, поэтому BPM переводится в `beatInterval` по формуле 60000 (миллисекунд в минуте) делённое на BPM. Скетч не "спит" между ударами через `delay()`, а в каждом проходе `loop()` проверяет, прошло ли уже `beatInterval` миллисекунд с последнего щелчка (через `millis()`) — такой подход позволяет менять темп потенциометром прямо во время работы, без рывков и перезапуска.

Функция `tone(buzzerPin, 1500, 50)` заставляет пассивный зуммер сыграть короткий звук на частоте 1500 Гц длительностью 50 мс — в отличие от активного зуммера (который либо просто пищит на своей фиксированной частоте, либо молчит), пассивный зуммер через `tone()` можно заставить издавать разные ноты разной длины.

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

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

  1. Подключите потенциометр WH148: средний вывод (сигнал) → A0, один крайний вывод → 5V, другой крайний вывод → GND.
  2. Подключите пассивный зуммер: сигнал → D8, второй контакт → GND.
  3. Убедитесь, что используется именно пассивный зуммер, а не активный — активный зуммер не умеет менять частоту через `tone()` и будет работать некорректно (либо постоянно пищать на одной ноте, либо молчать).

Скетч

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

const int potPin = A0;       // средний вывод потенциометра
const int buzzerPin = 8;     // пассивный зуммер
unsigned long lastBeat = 0;  // время последнего щелчка

void setup() {
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  int potValue = analogRead(potPin);              // 0-1023 от положения ручки
  int bpm = map(potValue, 0, 1023, 40, 200);       // перевод в удары в минуту
  unsigned long beatInterval = 60000UL / bpm;      // интервал между ударами, мс

  if (millis() - lastBeat >= beatInterval) {       // пора делать щелчок?
    tone(buzzerPin, 1500, 50);                     // звук 1500 Гц, 50 мс
    lastBeat = millis();                           // запоминаем момент щелчка
  }
}

`beatInterval` в миллисекундах пересчитывается из BPM каждый цикл `loop()`, поэтому темп можно крутить прямо во время работы метронома, без перезапуска.

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

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

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

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

← ⚡ тестер скорости реакции на кнопке, зуммере…🎶 музыкальная шкатулка на кнопке и пассивном… →

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

Все 2 товара сразу в корзину: 137 ₽ 123 ₽ (экономия 14 ₽)

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

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

Корзина


Поиск



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