Для воспроизведения звука через пьезоэлемент подключи его к цифровому выходу платы. Ножку + присоедини к пину D9, а − к GND. Если нужна громкость выше, добавь резистор 100 Ом между контактами.
Для сложных мелодий используй массив с нотами и длительностями. Каждый элемент должен содержать частоту и время в миллисекундах. Цикл for перебирает массив, передавая значения в tone() и delay(). Пример: int melody[] = {262, 294, 330}; для нот До, Ре, Ми.
Как заставить пищалку работать с микроконтроллером
Простейший код для генерации звука:
void setup() {
pinMode(8, OUTPUT);
}
void loop() {
tone(8, 1000, 500); // Частота 1 кГц, длительность 0.5 сек
delay(1000);
}
Для изменения тональности замените значение 1000 (частота в герцах). Диапазон – от 31 Гц до 65535 Гц, но большинство устройств реагируют на 2–4 кГц.
Чтобы отключить звук без задержки, используйте noTone(8). Для воспроизведения мелодий применяйте массив с частотами и длительностями нот, вызывая tone() в цикле.
Пассивные модели позволяют менять тон программно, активные – работают только на фиксированной частоте. Проверьте спецификации вашего компонента перед написанием кода.
Схема соединения звукового излучателя с микроконтроллером
Проверка работоспособности
Загрузите скетч с функцией tone(), указав частоту от 31 Гц до 65 кГц. Пример для сигнала 1 кГц длительностью 500 мс:
void setup() {
pinMode(9, OUTPUT);
}
void loop() {
tone(9, 1000, 500);
delay(1000);
}
Особенности настройки
Для изменения громкости добавьте ШИМ-сигнал через analogWrite() с коэффициентом заполнения 50-80%. Избегайте длительной работы на максимальной мощности – это сокращает срок службы элемента.
Генерация звуковых сигналов
Чтобы остановить сигнал, примените noTone(). Без этой функции звук будет воспроизводиться бесконечно. Пример:
tone(8, 1000, 500);
delay(500);
noTone(8);
Для мелодий создайте массив частот и длительностей. Цикл for перебирает ноты, а delay() задает паузы:
int freqs[] = {262, 294, 330, 349};
int durations[] = {200, 200, 200, 400};
for (int i = 0; i < 4; i++) {
tone(8, freqs[i], durations[i]);
delay(durations[i] + 50);
}
Для сложных паттернов комбинируйте tone() и delay(). Например, сигнал SOS в азбуке Морзе:
void loop() {
// Три коротких сигнала
for (int i = 0; i < 3; i++) {
tone(8, 800, 100);
delay(200);
}
// Три длинных
for (int i = 0; i < 3; i++) {
tone(8, 800, 300);
delay(400);
}
}


