Buzzer
6.1 Katse (Buzzer)
Используемые компоненты:
- Arudiono Uno 1 шт
- Плата 1 шт
- Пьезо-элемент 1 шт
- Провода 4 шт
Схема соединения:

Код:
// 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);
}
Пояснение кода:
6.2 Katse (DHT11 andur)
Используемые компоненты:
- Arudiono Uno 1 шт
- Плата 1 шт
- Резистор
- Датчик температуры и влажности 1 шт
- Провода 6 шт
Схема соединения:

Код:
DHT11 (ülal)
#include <DHT.h>
#define DHTPIN 2 // signaal Arduino D2-s
#define DHTTYPE DHT11 // määrame anduri tüübi
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("Anduri lugemine ebaõnnestus!");
return;
}
Serial.print("Temperatuur: ");
Serial.print(temp);
Serial.print(" °C | Niiskus: ");
Serial.print(hum);
Serial.println(" %");
delay(2000);
}
DHT22 (all)
#include <DHT.h>
#define DHTPIN 2 // signaal Arduino D2-s
#define DHTTYPE DHT22 // määrame õigeks tüübiks 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("Anduri lugemine ebaõnnestus!");
return;
}
Serial.print("Temperatuur: ");
Serial.print(temp);
Serial.print(" °C | Niiskus: ");
Serial.print(hum);
Serial.println(" %");
delay(2000);
}
Пояснение кода:
Ülesanne 6 – Buzzeri kasutamine “Väike Alarm Süsteem”
Описание работы:
Создать умную миниатюрную систему сигнализации, которая собирает данные с различных датчиков, выводит их на ЖК-экран и подает звуковые сигналы зуммером в зависимости от ситуации. Систему можно активировать и деактивировать с помощью переключателя или потенциометра. В обычных условиях в фоновом режиме играет музыка, но в случае угрозы музыка останавливается, а зуммер подает сигнал тревоги.
Используемые компоненты:
- Arudiono Uno 1 шт
- Плата 1 шт
- Температурный датчик 1 шт
- Фоторезистор 1 шт
- Резистор 220 Om 2 шт
- Резистор 10 кOm 2 шт
- Потенциометр 10 кОм 1 шт
- Провода 28 шт
- LCD экран 1 шт
Схема соединения:

Код:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int temperaturePin = A1;
const int lightPin = A0;
const int buzzerPin = 9;
float voltage, degreesC;
char* tempText[] = {
"Cold weather!", // < 15
"Nice weather!", // 15–25
"Heat rising!", // 25–30
"Hot! Drink water!" // >30
};
char* lightText[] = {
"Sunny", // < 85
"Cloudy", // 85–170
"Rainy" // >170
};
byte smile[8] = {
0b00000, 0b01010, 0b01010, 0b00000,
0b10001, 0b01110, 0b00000, 0b00000
};
byte rain[8] = {
0b00100, 0b00100, 0b01010, 0b01010,
0b10001, 0b10001, 0b10001, 0b01110
};
byte degrees[8] = {
0b01110, 0b01010, 0b01110, 0b00000,
0b00000, 0b00000, 0b00000, 0b00000
};
byte sun[8] = {
0b00100, 0b01010, 0b11111, 0b11111,
0b00100, 0b00100, 0b00000, 0b00000
};
byte sad[8] = {
0b00000, 0b01010, 0b01010, 0b00000,
0b01110, 0b10001, 0b00000, 0b00000
};
const int songLength = 18;
char notes[] = "cdfda ag cdfdg gf ";
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() {
Serial.begin(9600);
pinMode(buzzerPin, OUTPUT);
lcd.begin(16, 2);
lcd.createChar(1, degrees);
lcd.createChar(2, smile);
lcd.createChar(3, rain);
lcd.createChar(4, sun);
lcd.createChar(5, sad);
lcd.setCursor(0, 0);
lcd.print("Weather Station");
lcd.setCursor(0, 1);
lcd.print("Initializing...");
delay(1000);
}
void loop() {
// Считываем температуру (предполагаем LM35 или аналогичный)
voltage = analogRead(temperaturePin) * 0.004882814;
degreesC = (voltage - 0.5) * 100.0;
// Считываем освещенность
int lightLevel = analogRead(lightPin);
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
Serial.print("Temp: ");
Serial.print(degreesC);
Serial.print(" C | Light: ");
Serial.println(lightLevel);
// Проверка тревоги: температура > 25 °C
if (degreesC > 20) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("!!! ALARM !!!");
lcd.setCursor(0, 1);
lcd.print("Temp:");
lcd.print(degreesC, 1);
lcd.write(byte(1)); // значок градуса
lcd.print("C");
tone(buzzerPin, 1000); // Постоянный тон
delay(500);
noTone(buzzerPin);
delay(200);
} else {
noTone(buzzerPin);
displayData(degreesC, lightLevel);
playMelody();
}
}
void displayData(float temp, int light) {
char* tempTextToDisplay;
if (temp < 15) tempTextToDisplay = tempText[0];
else if (temp < 20) tempTextToDisplay = tempText[1];
else if (temp < 30) tempTextToDisplay = tempText[2];
else tempTextToDisplay = tempText[3];
char* lightTextToDisplay;
byte lightIcon;
if (light > 170) {
lightTextToDisplay = lightText[2];
lightIcon = 3;
} else if (light > 85) {
lightTextToDisplay = lightText[1];
lightIcon = 4;
} else {
lightTextToDisplay = lightText[0];
lightIcon = 2;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(tempTextToDisplay);
lcd.setCursor(14, 0);
lcd.write(byte(1)); // значок градуса
lcd.setCursor(0, 1);
lcd.print(lightTextToDisplay);
lcd.setCursor(strlen(lightTextToDisplay) + 1, 1);
lcd.write(lightIcon);
delay(2000);
}
void playMelody() {
for (int i = 0; i < songLength; i++) {
int duration = beats[i] * tempo;
if (notes[i] == ' ') {
delay(duration);
} else {
tone(buzzerPin, frequency(notes[i]), duration);
delay(duration);
}
delay(tempo / 10);
}
}
int frequency(char note) {
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int freqs[] = {262, 294, 330, 349, 392, 440, 494, 523};
for (int i = 0; i < 8; i++) {
if (names[i] == note) return freqs[i];
}
return 0;
}
Пояснение кода:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Подключается библиотека LiquidCrystal, управляющая LCD-дисплеем 16×2. Указаны пины подключения: RS=12, E=11, D4=5, D5=4, D6=3, D7=2.
const int temperaturePin = A1;
const int lightPin = A0;
const int buzzerPin = 9;
A1 — пин подключения датчика температуры.
A0 — датчик освещённости (например, фоторезистор).
9 — пин для подключения пьезоизлучателя.
float voltage, degreesC;
Переменные для хранения напряжения и пересчитанной температуры.
char* tempText[] = { ... };
char* lightText[] = { ... };
Массивы строк для отображения описаний температуры и освещённости.
byte smile[8] = { ... };
byte rain[8] = { ... };
...
Создаются пользовательские символы (иконки) для отображения на дисплее: смайлик, дождь, солнце, грусть и значок градуса. Каждый символ задан массивом из 8 байт, описывающим пиксели 5×8.
char notes[] = "cdfda ag cdfdg gf ";
int beats[] = { ... };
int tempo = 150;
Массив notes
содержит символы нот, beats
— длительность каждой ноты, tempo
— базовая скорость воспроизведения.
void setup() {
Serial.begin(9600);
pinMode(buzzerPin, OUTPUT);
lcd.begin(16, 2);
lcd.createChar(...);
lcd.setCursor(...);
lcd.print(...);
delay(1000);
}
Инициализируется последовательный порт.
Устанавливается режим пина пищалки.
Запускается LCD и загружаются пользовательские символы.
Отображается начальное сообщение “Weather Station” / “Initializing…”.
voltage = analogRead(temperaturePin) * 0.004882814;
degreesC = (voltage - 0.5) * 100.0;
Считывается аналоговое значение с датчика температуры, пересчитывается в напряжение и далее — в градусы Цельсия (предполагается LM35/LM335).
int lightLevel = analogRead(lightPin);
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
Считывается уровень света, преобразуется к диапазону 0–255.
if (degreesC > 20) {
...
tone(buzzerPin, 1000);
delay(500);
noTone(buzzerPin);
delay(200);
} else {
...
}
Если температура превышает 20°C, включается звуковая тревога и отображается предупреждение на дисплее. Иначе отображаются данные и воспроизводится мелодия.
void displayData(float temp, int light)
Определяет текст описания температуры и освещённости в зависимости от диапазона.
Отображает на дисплее строку с описанием температуры (1-я строка) и освещённости (2-я строка).
Также отображаются соответствующие иконки (градусы, солнце и т.д.).
playMelody()
- Проходит по массиву нот:
- Задержка между нотами зависит от
tempo
иbeats
. - Если символ ноты — пробел, воспроизводится пауза.
- Иначе — воспроизводится соответствующая частота через
tone()
.
- Задержка между нотами зависит от
int frequency(char note)
Возвращает частоту в Гц для указанной ноты (латинская буква). Используется для преобразования символа в соответствующую звуковую частоту.
Процесс работы:
Программа представляет собой простую метеостанцию, реализованную на платформе Arduino. Она измеряет температуру воздуха и уровень освещённости, отображает соответствующую информацию на LCD-дисплее, а также включает звуковое оповещение при повышенной температуре.
Инициализация компонентов
При запуске устройства происходит настройка:
- запускается серийный порт для передачи данных на компьютер
- задаются режимы работы пинов
- инициализируется LCD-дисплей
- в память дисплея загружаются пользовательские символы
- на экран выводится приветственное сообщение.
Чтение данных с датчиков
В основном цикле программа:
- считывает значение с температурного датчика, пересчитывает его в градусы Цельсия;
- получает данные с фоторезистора и переводит уровень освещённости в шкалу от 0 до 255.
Анализ и реагирование
Если температура превышает определённый порог, включается тревожный режим:
- на экране появляется предупреждение;
- срабатывает звуковой сигнал (пищалка).
Если температура в пределах нормы, данные выводятся на дисплей:
- в первой строке — описание состояния погоды по температуре;
- во второй строке — информация об освещённости;
- отображаются соответствующие иконки.
Обобщение
Таким образом, система:
- автоматически измеряет температуру и освещённость;
- анализирует полученные значения;
- реагирует на критические значения температурой звуковым сигналом;
- информирует пользователя визуально на дисплее;
- использует дополнительные элементы (иконки и мелодию) для улучшения восприятия данных.
Программа демонстрирует принципы интеграции датчиков, вывода на дисплей, пользовательских символов и простого звукового оповещения.
Видео:
Применение пьезо-элемента в разных проектах:
Учебные и хобби-проекты
- Погодная тревога — пищалка срабатывает при перегреве или заморозках.
- Секундомер с сигналом — подаёт звуковой сигнал при старте/остановке отсчёта.
- Тестовая мелодия Arduino — проигрывание простых мелодий на кнопке.
- Игра «Угадай мелодию» — распознавание мелодий на слух, обратная связь через звук.
- Звуковой индикатор нажатий — подтверждение клика/выбора в меню.
Умный дом
- Оповещение о температуре — звуковой сигнал при перегреве в комнате.
- Сигнализация окна/двери — срабатывание buzzer при открытии.
- Система утечки газа — аварийный звуковой сигнал.
- Напоминание о поливе — звуковое оповещение по расписанию или по датчику влажности.
- Интерактивный дверной звонок — собственная мелодия при нажатии кнопки.
Автомобильные проекты
- Сигнализация авто — срабатывание звука при попытке проникновения.
- Система парковки — увеличение частоты сигнала по мере приближения к препятствию.
- Напоминание о включённых фарах — звуковой сигнал при выходе из машины с фарами.
- Перегрев двигателя — предупреждающий звук при превышении температуры.
- Диагностика авто — звуковая индикация ошибок или режимов.
Робототехника и мехатроника
- Голосовой стиль робота — звуковые «реплики» в зависимости от режима.
- Режим «боевой тревоги» — сигнал при обнаружении противника или начала атаки.
- Звуковая диагностика — звуковая индикация ошибок при инициализации.
- Обратная связь управления — звук при переключении режимов движения.
- Мелодия приветствия — проигрывается при включении робота.
Арт и инсталляции
- Реакция на приближение — короткий звук при приближении зрителя.
- Интерактивная картина — проигрывание нот при нажатии сенсорных зон.
- Мелодия рассвета — автоматическое включение музыки утром.
- Звуковая скульптура — генерация тона в зависимости от освещённости.
- Музейный экспонат — звуковое сопровождение при активации.
Научные и лабораторные приборы
- Тревога превышения температуры — сигнал при превышении допустимого значения.
- Интервальный таймер — звуковое уведомление о завершении измерений.
- Сигнал завершения логгирования — короткий звук при окончании записи данных.
- Обнаружение радиации — каждый импульс с датчика Гейгера сопровождается щелчком.
- Пороговый сигнализатор — оповещение при достижении заданного порога (напряжение, pH и др.).