Проект 7: Пассивный зуммер

Описание
Пассивный зуммер — это распространённый электронный компонент, который широко используется в различных электронных устройствах для подачи звуковых сигналов или тревог. В отличие от активного зуммера, пассивный зуммер сам по себе не содержит генератор колебаний и требует внешней схемы для подачи импульсного сигнала для работы.
Цель этого проекта — управлять пассивным зуммером через плату Arduino, чтобы издавать звуки разной частоты и воспроизводить простую мелодию.
Аппаратное обеспечение
1. Плата разработки UNO R3 (ch340) x1
2. Пассивный зуммер x1
3. Макетная плата x1
4. Соединительные провода
Принцип работы
Пассивный зуммер — это распространённый электронный компонент, который широко используется в различных электронных устройствах для подачи звуковых сигналов или тревог. Его принцип работы основан на пьезоэлектрическом эффекте.
Внутри пассивного зуммера находится пьезоэлектрический керамический элемент. При подаче напряжения пьезоэлемент механически деформируется, вызывая вибрацию и издавая звук. Когда частота переменного напряжения совпадает с собственной частотой пьезоэлемента, зуммер издаёт максимальный звуковой сигнал.

Пассивные зуммеры требуют внешней схемы для подачи управляющего сигнала, обычно это прямоугольный или импульсный сигнал. Частота управляющего сигнала определяет высоту звука зуммера, а амплитуда сигнала влияет на громкость. Изменяя частоту и скважность управляющего сигнала, можно управлять звуковыми эффектами зуммера.
По сравнению с активными зуммерами, пассивные имеют простую конструкцию и низкую стоимость, но требуют внешних схем для подачи управляющих сигналов. В практических применениях необходимо выбирать подходящий пассивный зуммер в зависимости от конкретных требований и проектировать соответствующую схему управления для достижения нужного звукового эффекта.
Технические характеристики
Минимальное/максимальное рабочее напряжение: 1.5В до 5В постоянного тока
Ток: <25мА
Частота: <20Гц до >2.5кГц
Распиновка

Схема подключения
1. Подключите положительный вывод пассивного зуммера к цифровому пину D8 платы разработки.
2. Подключите отрицательный вывод пассивного зуммера к GND.

Пример кода
/*
Electronics Learning Starter Kit for Arduino
Project 7
Passive Buzzer
Edit By Keyes
*/
const int buzzerPin = 8; // Define the digital pin to which the buzzer is connected
// Define the frequency corresponding to the note
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
// Define a melody array containing notes and duration
int melody[] = {
NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, 0, NOTE_B4, NOTE_C5
};
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4
};
void setup() {
pinMode(buzzerPin, OUTPUT); // Set the buzzer pin to output mode
}
void loop() {
// Play a melody in a loop
for (int thisNote = 0; thisNote < 8; thisNote++) {
int noteDuration = 1000 / noteDurations[thisNote]; // Calculate note duration
tone(buzzerPin, melody[thisNote], noteDuration); // Play notes
int pauseBetweenNotes = noteDuration * 1.30; // Calculate the pause time between notes
delay(pauseBetweenNotes); // Wait for pause time
noTone(buzzerPin); // Stop playing notes
}
}
Объяснение кода
1. Определение пина зуммера
const int buzzerPin = 8; // Define the digital pin that the buzzer is connected to
Эта строка кода определяет константу buzzerPin и устанавливает её равной 8. Это означает, что зуммер подключён к цифровому пину 8 на плате Arduino. Использование констант в программировании Arduino улучшает читаемость и удобство сопровождения кода.
2. Определение частот нот
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
Эти директивы препроцессора задают частоты (в герцах) различных музыкальных нот. Эти значения представляют стандартные частоты нот, например, нота До первой октавы (C4) — 262 Гц. Такие определения делают код более понятным и удобным для использования нот.
3. Определение мелодии и ритма
int melody[] = {
NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, 0, NOTE_B4, NOTE_C5
};
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4
};
Два массива определяют последовательность нот мелодии и длительность каждой ноты соответственно. Массив melody хранит частоты нот, а noteDurations задаёт относительную длительность каждой ноты. Например, 4 — это четвертная нота, а 8 — восьмая.
Инициализация в setup
void setup() {
pinMode(buzzerPin, OUTPUT); // Set the buzzer pin as an output
}
В функции setup() мы устанавливаем пин buzzerPin как выход с помощью функции pinMode(). Это необходимо, так как зуммер должен получать электрические сигналы от Arduino для воспроизведения звука.
Основной цикл воспроизведения мелодии
void loop() {
for (int thisNote = 0; thisNote < 8; thisNote++) {
int noteDuration = 1000 / noteDurations[thisNote]; // Calculate the note duration
tone(buzzerPin, melody[thisNote], noteDuration); // Play the note
int pauseBetweenNotes = noteDuration * 1.30; // Calculate the pause between notes
delay(pauseBetweenNotes); // Wait for the pause duration
noTone(buzzerPin); // Stop playing the note
}
}
Код в функции loop() — это ядро всей программы. Он перебирает каждую ноту из массива melody в цикле и воспроизводит её на зуммере с помощью функции tone(). Реальная длительность каждой ноты вычисляется делением 1000 миллисекунд на соответствующее значение из массива noteDurations. После воспроизведения каждой ноты программа делает паузу с помощью функции delay(). Эта пауза немного длиннее длительности ноты, чтобы создать промежуток между звуками. Функция noTone() останавливает воспроизведение текущей ноты, после чего программа переходит к следующей.
Результат проекта
После загрузки кода пассивный зуммер будет воспроизводить простую мелодию последовательно в соответствии с нотами и длительностями из массива мелодии.
