Ülesanne 6 Buzzer

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

Существуют два типа пищалок:

  • Активная — издаёт звук сама, при подаче питания.
  • Пассивная — требует подачи сигнала определённой частоты (PWM).

6.1 Katse Buzzer

Цель:

Научиться подключать buzzer к Arduino и создать простую систему сигнализации, которая срабатывает при наступлении определённого условия (например, темнота, высокая температура, движение).

Используемые компоненты:

  • Arduino Uno
  • Пищалка (buzzer)
  • Макетная плата (breadboard)
  • Провода

Схема подключения:

Код:

const int buzzerPin = 9;

// pikkus on nootide ja pausite koguste summa

const int songLength = 18;

char notes[] = "cdfda ag cdfdg gf "; // tähed on noodid ja tühik on paus

// Rütmi seadistamine.

int beats[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2};

// "tempo" meloodia kiirus. Kui väiksem tempo_ siis suurem kiirus.

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] == ' ')          // kui noot puudub

    {

      delay(duration);          

    }

    else                         

    {

      tone(buzzerPin, frequency(notes[i]), duration);

      delay(duration);          

    }

    delay(tempo/10);              // väike paus nootide vahel

  }

  while(true){}

}

int frequency(char note) 

{

  int i;

  const int numNotes = 8;  // nootide kogus

  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };

  int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523};

  // kui noot on olemas, siis tagastame selle tiheduse 

  for (i = 0; i < numNotes; i++)  

  {

    if (names[i] == note)       

    {

      return(frequencies[i]);    

    }

  }

  return(0); 

}


6.2 DHT11 andur

Цель:

Научиться подключать цифровые датчики DHT11 и DHT22 к Arduino Uno и считывать с них данные о температуре и влажности.

Датчики:

DHT11

  • Диапазон температур: 0–50°C (точность ±2°C)
  • Влажность: 20–90% (точность ±5%)
  • Недорогой, менее точный, чем DHT22
  • Использует цифровой выход

Пины подключения:

  • VCC – 5V
  • DATA – D2 на Arduino
  • GND – GND

Схема подключения:

Код:

#include <DHT.h>

#define DHTPIN 2        // подключение сигнала к D2
#define DHTTYPE DHT11   // тип датчика

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float temp = dht.readTemperature();
  float hum = dht.readHumidity();

  if (isnan(temp) || isnan(hum)) {
    Serial.println("Ошибка чтения с датчика!");
    return;
  }

  Serial.print("Температура: ");
  Serial.print(temp);
  Serial.print(" °C | Влажность: ");
  Serial.print(hum);
  Serial.println(" %");

  delay(2000);
}


DHT22 (AM2302)

  • Диапазон температур: –40 до +80°C (точность ±0,5°C)
  • Влажность: 0–100% (точность ±2–5%)
  • Более точный и надёжный, чем DHT11
  • Также использует цифровой выход

Пины подключения:

  • VCC – 5V
  • DATA – D2 на Arduino
  • GND – GND
  • NC – не подключается (если 4 пина)

Схема подключения:

Код:

#include <DHT.h>

#define DHTPIN 2        // подключение сигнала к D2
#define DHTTYPE DHT22   // тип датчика

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float temp = dht.readTemperature();
  float hum = dht.readHumidity();

  if (isnan(temp) || isnan(hum)) {
    Serial.println("Ошибка чтения с датчика!");
    return;
  }

  Serial.print("Температура: ");
  Serial.print(temp);
  Serial.print(" °C | Влажность: ");
  Serial.print(hum);
  Serial.println(" %");

  delay(2000);
}

Необходимые библиотеки:

  • DHT sensor library от Adafruit
  • Adafruit Unified Sensor (устанавливается автоматически)

📥 Установка:
Arduino IDE > Скетч > Подключить библиотеку > Управление библиотеками > Поиск: DHT sensor library

Buzzeri kasutamine «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).
  • Отображает на дисплее актуальные данные: температура, освещённость, статус системы.
  • Поддерживает переключатель (switch), с помощью которого можно отключить всю систему.
  • При нормальных условиях играет фоновая мелодия, состоящая из нот.
  • В тревожном режиме выводится сообщение и срабатывает сигнализация.

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