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

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

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

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

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

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

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

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

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

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

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

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

  1. Потенциометр: средний вывод (сигнал) → 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` пересчитывается каждый цикл, поэтому темп можно крутить прямо во время работы.

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

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

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

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

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

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

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

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

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

Корзина

Поиск


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