Buzzer

Общее описание

Программа воспроизводит мелодию с помощью пьезоизлучателя (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)
  • Провода

Подключение:

  1. Фоторезистор к аналоговому пину A0 через резистор 10 кОм (делитель напряжения).
  2. Пищалка:
    • (длинная ножка) → цифровой пин 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.
  • Отображает текущие значения температуры, освещённости и статус работы на дисплее.
  • Оснащена переключателем, позволяющим полностью отключить систему при необходимости.
  • Во время нормальной работы воспроизводится фоновая мелодия, собранная из музыкальных нот.
  • При тревоге подаётся сигнал и выводится сообщение о нарушении.

Такое устройство может стать элементом системы «умного дома» — например, использоваться как ночной охранник, сигнализация при перегреве помещения или простое средство оповещения. Проект объединяет работу с датчиками, управлением выводом информации и звука, а также демонстрирует, как реализовать синхронную работу дисплея и звуковых компонентов.