Sisukord:
Katse 6.1

Kirjeldus:
Projekt, mis kasutab Buzzerit, mis tekitab erineva kõrgusega helisid, mis moodustavad meloodia.
Programm:
// Meloodiate mängimine tone()-funktsiooniga
// Nootide sagedused (Hz):
// c = 262, d = 294, e = 330, f = 349
// g = 392, a = 440, b = 494, C = 523
const int buzzerPin = 9;
// Meloodia ja rütm
const int songLength = 18;
char notes[] = "cdfda ag cdfdg gf "; // Noodid, ' ' = paus
int beats[] = { 1,1,1,1,1,1,4,4,2, 1,1,1,1,1,1,4,4,2 };
int tempo = 150; // Mida väiksem, seda kiirem
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
for (int i = 0; i < songLength; i++) {
int duration = beats[i] * tempo;
if (notes[i] == ' ') {
delay(duration); // Paus
} else {
int freq = getFrequency(notes[i]);
tone(buzzerPin, freq, duration);
delay(duration);
}
delay(tempo / 10); // Lühike paus nootide vahel
}
while (true) {} // Peatame loopi kordumise
}
// Funktsioon noodi sageduse leidmiseks
int getFrequency(char note) {
const int numNotes = 8;
char names[numNotes] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int frequencies[numNotes] = { 262, 294, 330, 349, 392, 440, 494, 523 };
for (int i = 0; i < numNotes; i++) {
if (names[i] == note) {
return frequencies[i];
}
}
return 0; // Kui noot pole tuntud
}
Kuidas programm töötab:
Programm mängib meloodiat buzzeril, kus iga noot on seotud oma sageduse ja kestusega, mis arvutatakse vastavalt tempo väärtusele. Pausid on tähistatud tühikutega. Funktsioon getFrequency leiab iga noodi sageduse, et saaks mängida õiget heli. Meloodia mängimine toimub järjest, kuni kogu tsükkel on läbi.
Katse 6.2

Kirjeldus:
Mõlemad, DHT11 ja DHT22, on populaarsed digitaalsed temperatuuri- ja niiskusandurid, mida kasutatakse sageli koos mikrokontrolleritega nagu Arduino. Nad mõõdavad ümbritseva õhu temperatuuri ja suhtelist niiskust.
Katse 6.3 (Ülesanne “Väike Alarm Süsteem”)
Töö kirjeldus:
„Alarm system“ häiresüsteem, kus Buzzer kasutatakse helisignaali, kui temperatuur on üle 25 või on vähe valgust.
Töö protsess:
Programm jälgib temperatuuri ja valguse taset. Kui temperatuur ületab 25°C või valguse tase langeb alla 800, siis aktiveerub alarm: ekraanil kuvatakse hoiatus (“Temperatuur liiga kõrge” või “Valgus liiga nõrk”), LED põleb ja kõlab helisignaal. Kasutaja saab süsteemi sisse ja välja lülitada nupuga. Kui alarm on välja lülitatud, kuvatakse ainult temperatuur ja valguse tase. Alarmi olek muutub vastavalt temperatuurile ja valgusele, iga kontrollimine toimub iga 5 sekundi tagant.
Kasutatud komponenid:
Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (25tk)
Takisti (3tk 10 kΩ, 2tk 220Ω)
LED (1tk punane)
LCD (1tk 16×2)
Fotoristor (1tk)
Temperatuuriandur (1tk)
Nupp (1tk)
Buzzer rakendamine:
Buzzerit kasutatakse näiteks hoiatussignaalide andmiseks, köögiseadmetes (ahjud, mikrolaineahjud) ülekuumenemise või valmisoleku märkimiseks, samuti autodes parkimisandurites või kiiruspiirangute hoiatustes.
Skeem:

Programm:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int BUZZER_PIN = 8;
const int BUTTON_PIN = 13;
const int LED_PIN = 7;
const int PHOTO_PIN = A1;
const int TEMP_PIN = A0;
int lightLevel;
float temp;
bool isTemp = false;
int lastNum = 0;
bool systemEnabled = true;
bool alarm = false;
bool lastAlarm = false;
int lastButtonState = HIGH;
const float ALARM_TEMP = 25.0;
const int ALERM_SILINCE_LIGHT = 800;
unsigned long alarmLcdTime = 0;
unsigned long lastAlarmSound = 0;
unsigned long lastTempCheck = 0;
const unsigned long TEMP_DELAY = 5;
void setup()
{
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
noTone(BUZZER_PIN);
lcd.begin(16, 2);
Serial.begin(9600);
delay(500);
lcd.setCursor(0, 0);
lcd.print("Alarm System");
for(int i = 0; i < 16; i++)
{
lcd.setCursor(i, 1);
lcd.write(1);
delay(150);
}
lcd.clear();
}
float readTemp()
{
int sensorValue = analogRead(TEMP_PIN);
float voltage = (sensorValue * 5.0) / 1023.0;
float temperatureC = (voltage - 0.500) * 100.0;
return temperatureC;
}
int readLight()
{
return analogRead(PHOTO_PIN);
}
void loop()
{
unsigned long seconds = millis() / 1000;
temp = readTemp();
lightLevel = readLight();
int buttonState = digitalRead(BUTTON_PIN);
Serial.println("C: "+(String)temp
+", Brightness: "+(String)lightLevel);
if (buttonState == LOW && lastButtonState == HIGH)
{
lcd.clear();
systemEnabled = !systemEnabled;
delay(100);
}
lastButtonState = buttonState;
if(systemEnabled)
{
if (!alarm)
{
lcd.setCursor(0, 0);
lcd.print("Alarm System ON");
}
}
else
{
alarm = false;
noTone(BUZZER_PIN);
digitalWrite(LED_PIN, LOW);
lcd.setCursor(0, 0);
lcd.print("Alarm System OFF");
return;
}
if( (temp >= ALARM_TEMP || lightLevel < ALERM_SILINCE_LIGHT ) && (seconds - lastTempCheck) > TEMP_DELAY)
{
alarm = true;
}
else if ((temp < ALARM_TEMP || lightLevel >= ALERM_SILINCE_LIGHT ))
alarm = false;
if (lastAlarm != alarm)
{
lastAlarm = alarm;
lcd.clear();
}
if(alarm)
{
if (alarmLcdTime < seconds)
{
lcd.clear();
alarmLcdTime = seconds + 1;
digitalWrite(LED_PIN, LOW);
}
else
{
lcd.setCursor(0, 0);
lcd.print("Alarm!!!Alarm!!!");
digitalWrite(LED_PIN, HIGH);
}
lcd.setCursor(0, 1);
if(temp >= ALARM_TEMP)
lcd.print("Temp liiga korge");
else if (lightLevel < ALERM_SILINCE_LIGHT)
lcd.print("Valg liiga nork");
if(lastAlarmSound < seconds)
{
tone(BUZZER_PIN, 34, 200);
lastAlarmSound = seconds + 1;
}
}
else
{
noTone(BUZZER_PIN);
digitalWrite(LED_PIN, LOW);
lcd.setCursor(0, 1);
lcd.print("C ");
lcd.print(temp, 1);
lcd.print(" Valg ");
lcd.print(lightLevel);
}
delay(300);
}
Video:
Uued funktsioonid:
tone() – Mängib heli kindlal viigul, sagedusel ja (valikuliselt) kestusel.
noTone() – Peatab heli mängimise viigul.