Общее описание
Программа воспроизводит мелодию с помощью пьезоизлучателя (buzzer), подключенного к пину D9.
Мелодия записана как строка из буквенных обозначений нот, а длительность каждой ноты хранится в отдельном массиве.
Функция tone()
создаёт звук нужной частоты, соответствующий ноте. Если символ — пробел (' '
), то это пауза
🟢 Что делает код:
- Воспроизводит мелодию, заданную в массиве
notes[]
- Каждой ноте соответствует ритм из
beats[]
- После завершения — программа останавливается

// 🎵 МЕЛОДИЯ НА ARDUINO С ПОМОЩЬЮ BUZZER
#include <Arduino.h> // (необязательно, добавляется автоматически в Arduino IDE)
// ==================== НАСТРОЙКИ ====================
// Пин, к которому подключён зуммер (пьезо)
const int buzzerPin = 9;
// Количество звуков (нот + пауз) в мелодии
const int songLength = 18;
// Строка с нотами: каждая буква — нота, пробел — пауза
// Возможные ноты: c d e f g a b C (C — высокая "до")
char notes[] = "cdfda ag cdfdg gf ";
// Длительность каждой ноты (1 = короткая, 4 = длинная и т.д.)
int beats[] = {
1, 1, 1, 1, 1, 1, 4, 4, 2,
1, 1, 1, 1, 1, 1, 4, 4, 2
};
// Темп (множитель ритма). Чем меньше значение — тем быстрее играет.
int tempo = 150;
// ==================== НАСТРОЙКА ПИНА ====================
void setup() {
pinMode(buzzerPin, OUTPUT); // Устанавливаем пин для зуммера как выход
}
// ==================== ОСНОВНОЙ ЦИКЛ ====================
void loop() {
int i, duration;
// Проходим по всем нотам
for (i = 0; i < songLength; i++) {
duration = beats[i] * tempo; // Вычисляем длительность звучания
if (notes[i] == ' ') {
// Если в строке пробел — делаем паузу
delay(duration);
} else {
// Если есть нота — играем её
tone(buzzerPin, frequency(notes[i]), duration);
delay(duration); // ждём окончания звучания
}
delay(tempo / 10); // короткая пауза между нотами
}
// Остановить воспроизведение (или можно убрать для повторения)
while (true) {
// ничего не делаем — мелодия проиграна
}
}
// ==================== ПЕРЕВОД НОТ В ЧАСТОТЫ ====================
// Принимает символ ноты и возвращает частоту (в герцах)
int frequency(char note) {
const int numNotes = 8; // количество возможных нот
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int frequencies[] = { 262, 294, 330, 349, 392, 440, 494, 523 };
for (int i = 0; i < numNotes; i++) {
if (names[i] == note) {
return frequencies[i];
}
}
return 0; // если символ не распознан
}
Заключение
Проект демонстрирует базовые принципы воспроизведения мелодий с помощью Arduino и пьезозуммера. Реализована система перевода буквенных обозначений нот в частоты, управление ритмом и воспроизведение мелодии с паузами. Отлично подходит как вводный музыкальный проект на Arduino.
Projektiülesanne: Väike Alarm Süsteem
Цель:
Создать простую звуковую сигнализацию с использованием buzzer и датчика освещённости (фоторезистора). При наступлении темноты должна срабатывать пищалка.
Используемые компоненты:
- Arduino Uno
- Пищалка (buzzer)
- Фоторезистор
- Резисторы 10 кОм, 220 Ом
- Макетная плата (breadboard)
- Провода

Подключение:
- Фоторезистор к аналоговому пину A0 через резистор 10 кОм (делитель напряжения).
- Пищалка:
- (длинная ножка) → цифровой пин D8
- (короткая ножка) → GND
Принцип работы:
Arduino считывает показания с фоторезистора.
Если уровень освещённости падает ниже определённого значения (например, 300), то срабатывает сигнализация — включается пищалка.
Когда становится светло — сигнализация выключается.
#include <LiquidCrystal.h>
// LCD пины: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Пины
const int tempPin = A0;
const int ldrPin = A1;
const int systemSwitchPin = A5; // свич (analogRead)
const int buzzerPin = 9; // зуммер
// Мелодия
#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
int melody[] = { NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5 };
int durations[] = { 4, 4, 4, 4, 4, 4, 4, 4 };
int noteIndex = 0;
unsigned long lastNoteTime = 0;
void setup() {
lcd.begin(16, 2);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int controlValue = analogRead(systemSwitchPin);
bool systemOn = controlValue < 500;
float tempC = getTemperature();
int lightLevel = analogRead(ldrPin);
bool dark = lightLevel < 200;
bool hot = tempC > 30;
// Дисплей: строка 1 — температура и свет
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(tempC, 1);
lcd.print((char)223); // °C
lcd.print("C L:");
lcd.print(lightLevel);
if (lightLevel < 100) lcd.print(" ");
// Дисплей: строка 2 — статус
lcd.setCursor(0, 1);
if (!systemOn) {
lcd.print("System OFF ");
noTone(buzzerPin);
} else if (dark || hot) {
if (dark && hot) lcd.print("Hot & Dark Alarm!");
else if (hot) lcd.print("Too Hot! Alarm!! ");
else lcd.print("Dark! Alarm!!! ");
tone(buzzerPin, 1000, 500); // сигнал тревоги
} else {
lcd.print("All OK ");
playMelodyStep(); // фоновая мелодия
}
// Отладка в Serial Monitor
Serial.print("Temp: ");
Serial.print(tempC);
Serial.print(" C | Light: ");
Serial.print(lightLevel);
Serial.print(" | A5: ");
Serial.print(controlValue);
Serial.print(" | systemOn: ");
Serial.println(systemOn);
delay(100);
}
// TMP36
float getTemperature() {
int analogValue = analogRead(tempPin);
float voltage = analogValue * 5.0 / 1023.0;
return (voltage - 0.5) * 100.0;
}
// Мелодия по одной ноте
void playMelodyStep() {
static bool isPlaying = false;
unsigned long now = millis();
if (!isPlaying && now - lastNoteTime >= 300) {
int duration = 1000 / durations[noteIndex];
tone(buzzerPin, melody[noteIndex], duration);
lastNoteTime = now;
isPlaying = true;
} else if (isPlaying && now - lastNoteTime >= 400) {
noTone(buzzerPin);
noteIndex++;
if (noteIndex >= sizeof(melody) / sizeof(int)) {
noteIndex = 0;
}
lastNoteTime = now;
isPlaying = false;
}
}
В рамках этого проекта мы создали компактную охранную систему на базе Arduino, способную отслеживать несколько параметров одновременно — уровень освещённости и температуру. При возникновении тревожной ситуации система активирует звуковое оповещение и отображает предупреждение на экране LCD.
Основные функции устройства:
- Определяет пониженное освещение с помощью фоторезистора и повышение температуры благодаря датчику TMP36.
- Отображает текущие значения температуры, освещённости и статус работы на дисплее.
- Оснащена переключателем, позволяющим полностью отключить систему при необходимости.
- Во время нормальной работы воспроизводится фоновая мелодия, собранная из музыкальных нот.
- При тревоге подаётся сигнал и выводится сообщение о нарушении.
Такое устройство может стать элементом системы «умного дома» — например, использоваться как ночной охранник, сигнализация при перегреве помещения или простое средство оповещения. Проект объединяет работу с датчиками, управлением выводом информации и звука, а также демонстрирует, как реализовать синхронную работу дисплея и звуковых компонентов.