Katse 6.1.

// 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);
}
const int songLength = 18; — Määrab laulu pikkuse, ehk kui palju noote laulus on. Siin on 18 nooti. // Определяет длину мелодии, то есть количество нот в песне. Здесь 18 нот.
char notes[] = "cdfda ag cdfdg gf "; — See on string, mis sisaldab noote. Tähed vastavad nootidele ja tühik on paus. // Это строка, содержащая ноты. Буквы соответствуют нотам, а пробел представляет паузу.
int beats[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2}; — Rütm, mis määrab iga noodi kestuse. Arvud tähistavad nootide väärtusi: 1 — veerand, 4 — täisnoot, 2 — poole noodi kestus jne. // Ритм, который определяет длительность каждой ноты. Числа обозначают длительности нот: 1 — четвертная, 4 — целая, 2 — половинная и так далее.
int tempo = 150; — Määrab meloodia tempo // Определяет темп мелодии.
for (i = 0; i < songLength; i++)
{
duration = beats[i] * tempo; — Silmus, mis läbib iga noodi, alustades esimesest ja lõpetades viimasega (songLength pikkus). Kestus arvutatakse vastavalt noodi väärtusele (beats[i]) ja tempole. // Цикл, который проходит по каждой ноте, начиная с первой и заканчивая последней (songLength). Продолжительность вычисляется в зависимости от значения ноты (beats[i]) и темпа.
if (notes[i] == ‘ ‘)
{
delay(duration); — Kui tähemärk on tühik (paus), siis programm ootab määratud kestuse (duration). // Если символ — пробел (пауза), программа делает задержку на рассчитанную продолжительность (duration).
}
else
{
tone(buzzerPin, frequency(notes[i]), duration); — Kui tähemärk pole tühik, siis mängitakse nooti määratud sagedusel (tone()) ja kestusel. // Если символ не пробел, то воспроизводится нота с определенной частотой (tone()) и продолжительностью.
delay(duration);
}
delay(tempo/10); — Pärast iga nooti on väike paus (tempo/10), et eraldada noodid üksteisest. // После каждой ноты делается маленькая пауза (tempo/10), чтобы разделить ноты друг от друга.
Katse 6.2.

#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);
}
include DHT.h — Подключаем библиотеку // Lisame teegi
define DHTPIN 2 — Määrame, et andur on ühendatud Arduino D2 jalaga // Определяем, что датчик подключён к пину D2 на Arduino
define DHTTYPE DHT11 — Määrame, et kasutame DHT11 tüüpi andurit. // Указываем, что используем датчик типа DHT11
DHT dht(DHTPIN, DHTTYPE); — Loome objekti dht, määrates anduri jala ja tüübi. // Создаём объект dht, указывая пин и тип датчика
dht.readTemperature(); — loeme temperatuuri // считываем температуру
dht.readHumidity(); — loeme õhuniiskust. // считываем влажность.
if (isnan(temp) || isnan(hum)) {
Serial.println(«Anduri lugemine ebaõnnestus!»); — Kontrollime, kas andur tagastas vea (NaN).Kui jah, kuvame veateate ja katkestame funktsiooni // Проверяем, не вернул ли датчик ошибку (NaN).Если ошибка, выводим сообщение и выходим из функции.
———————————-Buzzeri kasutamine «Väike Alarm Süsteem»——————————————
Töö kirjeldus:
Meteostatsioon koos häirega. See mõõdab temperatuuri TMP-anduriga ja valgustugevust fotoresistori abil. Kõik andmed kuvatakse LCD-ekraanil. Süsteem lülitatakse sisse potentsiomeetri abil. Kui temperatuur langeb alla 25 °C, käivitub häire, mängides pala keiserlikust marssist. Normaalse temperatuuri korral ei mängita midagi.
Kasutatud komponenid:
Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (25tk)
Takisti (2tk, 220Om ja 10000Om)
PHOTORESISTOR (1tk)
Temperature Sensor TMP (1tk)
Potentiometer (1tk)
LCD ekraan 16×2 (1tk)
Buzzer (1tk)
Töö protsess:
Temperatuuri mõõdetakse TMP-anduriga ja valgustust fotoresistori abil. Kõik andmed kuvatakse LCD-ekraanil Temperatuur: ja C | Valgus: . Süsteem lülitatakse sisse potentsiomeetri abil, kui režiim on välja lülitatud, näitab ekraan System off ja kui see on sisse lülitatud, näitab see kõike. Kui temperatuur langeb alla 25 °C, käivitub häire, mängides meloodiat „Imperial March“. Kui temperatuur on normaalne, ei mängita midagi.
LED-ide rakendamine:
Temperatuuri ja valguse kontrollimine tööks. Täpseks kontrollimiseks on olemas häiresüsteem!
Skeem:

Programm:
#include <LiquidCrystal.h>
// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(11, 12, 4, 5, 6, 7);
// Pins
const int potPin = A3;
const int tempPin = A4;
const int ldrPin = A5;
const int alarmPin = 9; // signalisatsioon
const int switchThreshold = 512; // Potentsiomeeter > 512 → sisse
const float tempThreshold = 25.0; // Häiretemperatuur
// Keiserlik marss
int melody[] = {
440, 440, 440, 349, 523, 440, 349, 523, 440,
659, 659, 659, 698, 523, 415, 349, 523, 440
};
int noteDurations[] = {
500, 500, 500, 350, 150, 500, 350, 150, 650,
500, 500, 500, 350, 150, 500, 350, 150, 650
};
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(alarmPin, OUTPUT);
}
void loop() {
int controlVal = analogRead(potPin);
bool systemOn = controlVal > switchThreshold;
if (!systemOn) {
noTone(alarmPin);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System off");
delay(500);
return;
}
// Temperatuuri näitamine
int rawTemp = analogRead(tempPin);
float voltage = rawTemp * 5.0 / 1023.0;
float tempC = (voltage - 0.5) * 100.0;
// Valguse lugemine
int lightRaw = analogRead(ldrPin);
int lux = map(lightRaw, 200, 900, 0, 1000);
lux = constrain(lux, 0, 1000);
// Väljundi kuvamine
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Light: ");
lcd.print(lux);
lcd.print(" lx");
Serial.print("Temperatur: "); Serial.print(tempC);
Serial.print(" C | Light: "); Serial.println(lux);
if (tempC > tempThreshold) {
playImperialMarch();
} else {
noTone(alarmPin);
}
delay(2000); // paus mõõtmiste vahel
}
void playImperialMarch() {
for (int i = 0; i < sizeof(melody) / sizeof(int); i++) {
tone(alarmPin, melody[i], noteDurations[i]);
delay(noteDurations[i] * 1.3);
noTone(alarmPin);
}
}
Video:
https://drive.google.com/file/d/1QVTa_kbhktMrMjgcAfhYck47WihrNFXB/view?usp=sharing
Uued funktsioonid :
noTone(pin) — Lõpetab igasuguse heli mängimise määratud pordis. // Останавливает воспроизведение звука на указанном пине.
playImperialMarch() — Funktsioon, mis mängib lihtsustatud versiooni Keiserlikust marsist. Iga noot mängitakse kindla pikkusega ja väikese viitega. // Функция, которая проигрывает упрощённую версию Имперского марша. Каждая нота звучит определённое время с паузой между.
map(lightRaw, 200, 900, 0, 1000) — teisendab LDR-i toorväärtuse vahemikust 200–900 uueks vahemikuks 0–1000, et seda oleks lihtsam kuvada «lüksidena». // переводит значение освещённости из диапазона 200–900 в условный диапазон 0–1000 (для отображения в «люксах»)
constrain(lux, 0, 1000) — tagab, et väärtus ei läheks alla 0 ega üle 1000. // ограничивает результат, чтобы он не вышел за границы 0–1000.
tone(pin, freq, duration) — Mängib helisignaali kindlal sagedusel ja kestusel. // Воспроизводит звуковой сигнал на заданной частоте и длительности.


