6 Katse Buzzer
Tinkercad

Uued funktsioonid:
frequency(char note) – See funktsioon võtab argumendiks muusikalise noodi tähe (näiteks 'c', 'd', 'e' jne) ja tagastab selle noodi sageduse hertsides. Kui tähemärk ei vasta ühelegi tuntud noodile, tagastab funktsioon väärtuse 0.tone(pin, frequency, duration) – See sisseehitatud Arduino funktsioon esitab helisignaali määratud sagedusega ja kestusega valitud pinnil. Antud koodis kasutatakse seda piezosummeri kaudu meloodia mängimiseks.
Kood
// 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);
}
Koodi töö:
See programm mängib meloodiat piezosummeri abil, mis on ühendatud Arduino 9. pinnile. Meloodia noodid on salvestatud massiivi notes[], ning iga noodi või pausi kestus on määratud massiivis beats[]. Iga kestust korrigeeritakse tempo abil. Funktsioon frequency() tagastab vastava noodi sageduse, mida tone() funktsioon kasutab heli esitamiseks summeril.
Ülesanne 6 Buzzeri kasutamine “Väike Alarm Süsteem”

#include <LiquidCrystal.h>
// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(11, 12, 4, 5, 6, 7);
// Пины
const int potPin = A3;
const int tempPin = A4;
const int ldrPin = A5;
const int musicPin = 3; // фоновая музыка
const int alarmPin = 9; // тревога
const int switchThreshold = 512; // Потенциометр > 512 → включено
const float tempThreshold = 35.0; // Температура тревоги
// Имперский марш (упрощённый фрагмент)
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(musicPin, OUTPUT);
pinMode(alarmPin, OUTPUT);
}
void loop() {
int controlVal = analogRead(potPin);
bool systemOn = controlVal > switchThreshold;
if (!systemOn) {
noTone(musicPin);
noTone(alarmPin);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System off");
delay(500);
return;
}
// Считывание температуры
int rawTemp = analogRead(tempPin);
float voltage = rawTemp * 5.0 / 1023.0;
float tempC = (voltage - 0.5) * 100.0;
// Считывание света
int lightRaw = analogRead(ldrPin);
// Маппинг в условные "люксы" — подгонка по диапазону
int lux = map(lightRaw, 200, 900, 0, 1000);
lux = constrain(lux, 0, 1000);
// Вывод на экран
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) {
noTone(musicPin);
playImperialMarch();
} else {
noTone(alarmPin);
tone(musicPin, 440); // фоновый звук
}
delay(2000); // пауза между измерениями
}
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);
}
}
Koodi töö
See kood mõõdab temperatuuri ja valgusintensiivsust andurite abil ning kuvab tulemused LCD-ekraanil. Süsteemi sisse- ja väljalülitamine toimub potentsiomeetri kaudu. Kui temperatuur ületab etteantud piiri, käivitub häire, mis mängib valjuhääldist tuntud meloodiat – „Impeeriumi marss“. Tavalistes oludes mängib taustal vaikne toon. Valgustaset kuvatakse tinglikult luksides ning ekraani teave uueneb iga kahe sekundi järel.
Uued funktsioonid
lcd.begin(16, 2)– initsialiseerib LCD-ekraani 16 tähemärgi ja 2 rea jaokslcd.setCursor(x, y)– seab kursori positsiooni ekraanillcd.print(...)– kuvab teksti või arvu ekraanilelcd.clear()– puhastab ekraanianalogRead(pin)– loeb analoogväärtuse määratud pin’ist (vahemikus 0–1023)noTone(pin)– lülitab heli määratud pin’il välja
Kuidas elus kasutada
- Õppematerjalina elektroonika ja keskkonnaandurite õpetamisel.
Seda projekti saab kasutada koolitunnis või töötoas, et õpetada algajatele temperatuurisensorite, valgustaseme lugemise ja buzzerite tööpõhimõtteid ning LCD-ekraani kasutamist. - Lihtsa koduse ilmajaamana.
Seade mõõdab temperatuuri ja valgust ning kuvab need väärtused reaalajas ekraanil. Sobib näiteks kasvuhoonesse või aknalauale, et hinnata, millal on liiga külm või pime. - Targa kodu elemendina.
Robotit saab kasutada väikese koduautomaatika süsteemina, kus temperatuur alla 25 °C põhjustab helihoiatussignaali (võib ka muuta nt radiaatori juhtimiseks).
Video
https://drive.google.com/file/d/1QVTa_kbhktMrMjgcAfhYck47WihrNFXB/view?usp=sharing