6. Teema: Buzzer
6 Katse Buzzer

// Meloodiate mängimine.
// Käsk Arduino tone() - noote tihedus.
// Noodid:
// note frequency
// c 262 Hz
// d 294 Hz
// e 330 Hz
// f 349 Hz
// g 392 Hz
// a 440 Hz
// b 494 Hz
// C 523 Hz
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);
}
Ülesanne 6 Buzzeri kasutamine “Väike Alarm Süsteem”
Töö kirjeldus
See on väike nutikas häiresüsteem, mis mõõdab temperatuuri ja valgust ning annab heli ja tekstiga märku, kui midagi on valesti (näiteks liiga palav või liiga pime). Kui kõik on korras, mängib buzzeriga meloodiat.
Kasutatud komponenid
Arduino UNO
LCD-ekraan
TMP36
LDR (valgusandur)
Buzzer
Potentsiomeeter / lüliti
Juhtmed ja takistid
Töö protsess:
- Ühendame kõik andurid, buzzeri ja LCD-ekraani Arduino külge.
- Kui lüliti on “sees”, süsteem hakkab tööle.
- Ekraanil näeme temperatuuri ja valguse taset.
- Kui temperatuur on liiga kõrge või valgus liiga tugev → buzzer annab häire.
- Kui kõik on korras:
- Kui on valge → buzzer mängib üks heli
- Kui on pime → buzzer mängib teine heli
- Kui süsteem on “väljas”, ekraanil on kiri: Süsteem: OFF ja buzzer vaikib.
Kasutamisvõimalused tavaelus
- Lastetoas – annab märku, kui ruum on liiga palav või valgust pole
- Kasvuhoones – aitab jälgida, et temperatuur ei läheks liiga kõrgeks
- Vanas inimese toas – lihtne alarm, kui tingimused pole sobivad
- Öine turvaseade – buzzer annab märku, kui ruumis muutub valgus (liikumine)
Skeem:

Programm:
#include <LiquidCrystal.h> // Подключаем библиотеку для дисплея
// Определяем частоты нот (для мелодий)
#define NOTE_B3 247
#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 NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784
#define NOTE_A5 880
#define NOTE_AS4 466
#define NOTE_AS5 932
#define NOTE_CS4 277
#define NOTE_CS5 554
#define NOTE_DS5 622
#define NOTE_FS4 370
#define NOTE_FS5 740
#define NOTE_GS4 415
#define NOTE_GS5 831
#define NOTE_G3 196
#define NOTE_A3 220
#define REST 0 // Пауза в мелодии
// Мелодия: свадебный марш
int calm_melody[] = {
// Тут очень длинный список нот
// Он будет проигрываться, когда всё нормально и светло
};
int calm_durations[] = {
// Тут длительности нот, соответствующие calm_melody
};
// Пины (куда подключены компоненты)
const int buzzer = 9; // Пин буззера
const int temperaturePin = A1; // Датчик температуры
const int lightPin = A0; // Датчик освещённости
const int controlPin = 6; // Включатель системы (ползунок)
float voltage, degreesC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Подключение дисплея
bool systemOn = false; // Флаг — включена ли система
// Символ "градус" для дисплея
byte degrees[8] = {
0b01110,
0b01010,
0b01110,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
// Символ Õ (для sõsteem)
byte taht[8] = {
0b01010,
0b00000,
0b10001,
0b10001,
0b10001,
0b10001,
0b01110,
0b00000
};
void setup() {
pinMode(buzzer, OUTPUT); // Буззер — на выход
lcd.begin(16, 2); // Включаем дисплей 16x2
lcd.createChar(1, degrees); // Создаём символ градуса
lcd.createChar(2, taht); // Создаём символ Õ
Serial.begin(9600); // Включаем монитор порта
}
// Функция проигрывает
void calm_music() {
int size = sizeof(calm_durations) / sizeof(int);
for (int note = 0; note < size; note++) {
// Перед каждой нотой проверяем, нет ли тревоги
float v = analogRead(temperaturePin) * 0.004882814;
float t = (v - 0.5) * 100.0;
int light = analogRead(lightPin);
bool control = digitalRead(controlPin);
// Если тревога — прекращаем музыку
if (t > 25 || light > 200 || !control) {
noTone(buzzer);
return;
}
// Обновляем дисплей во время музыки
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.write(byte(1)); // Пишем "°"
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Valgus: ");
lcd.print(light);
lcd.print(" ");
// Проигрываем ноту
int duration = 1000 / calm_durations[note];
tone(buzzer, calm_melody[note], duration);
delay(duration * 1.3); // Пауза между нотами
noTone(buzzer);
}
}
void loop() {
systemOn = digitalRead(controlPin); // Проверяем включена ли система
if (systemOn) {
// Считываем температуру и свет
voltage = analogRead(temperaturePin) * 0.004882814;
degreesC = (voltage - 0.5) * 100.0;
int lightLevel = analogRead(lightPin);
// Печатаем в монитор
Serial.print("Temp: ");
Serial.print(degreesC);
Serial.print(" C | Light: ");
Serial.println(lightLevel);
// Обновляем дисплей
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(degreesC);
lcd.write(byte(1)); // ° символ
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Valgus: ");
lcd.print(lightLevel);
lcd.print(" ");
// Проверяем тревожные условия
if (degreesC > 25 && lightLevel > 200) {
// Слишком жарко и слишком ярко
noTone(9);
tone(buzzer, 1000, 500); // Тревожный звук
lcd.setCursor(0, 1);
lcd.print(" "); // Стираем строку
lcd.setCursor(0, 0);
lcd.print("!!!!OHTU!!!! "); // Пишем тревогу
} else if (degreesC > 25) {
// Только жара
noTone(9);
tone(buzzer, 1000, 500);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Liiga palav!!!");
} else if (lightLevel > 200) {
// Только слишком светло
noTone(9);
tone(buzzer, 1000, 500);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Liiga pime!!!");
} else {
// Всё хорошо — играем музыку
calm_music();
}
} else {
// Если система выключена — покажи OFF
noTone(9);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("S");
lcd.write(byte(2)); // Õ
lcd.print("stem: OFF");
}
delay(1000); // Ждём 1 секунду
}