Praktika 6: Buzzeri kasutamine “Väike Alarm Süsteem”

Katse 6: -Buzzer-

Komponendid:

Piezo buzzer

x1

Juhtmed

x4

Kirjeldus:

Piesoelement (buzzer) on ühendatud Arduino digitaalse väljundiga D9 ja maandusega (GND). Buzzerit kasutatakse helisignaalide ja alarmi edastamiseks.

Skeem:

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); 

}


Interaktiivne Arduino skeem

Ülesanne 6: Buzzeri kasutamine “Väike Alarm Süsteem”

NUKKA : Nutikas Kliimakontrolli- ja alarmsüsteem

Kirjeldus:

NUKKA on nutikas kliimakontrolli- ja alarmsüsteem, mis jälgib reaalajas keskkonna temperatuuri ning kohandub dünaamiliselt vastavalt valgustasemele (päeva/öö või avatud/suletud ukse režiim).

Süsteemi põhilised olekud ja tööloogika:

  • Käivitus: Sisselülitamisel kõlab üks lühike piiks ja ekraan kuvatab tervitusteksti.
  • Süsteem väljas (OFF): Ekraanile kuvatakse “NUKKA: VALJAS” ja buzzer vaikib.
  • Pime režiim (Uks kinni): Kui ruumis on pime, kuvatakse andmed ekraanile ja süsteem töötab täielikus vaikuses.
  • Valge režiim (Uks lahti / Pre-alarm): Kui valgustase tõuseb, hakkab buzzer tegema harva ja pehmet hoiatussignaali, tuletades meelde ukse sulgemist.
  • Kriitiline häire (ALARM): Kui temperatuur väljub lubatud piiridest (< 5°C või > 25°C), katkeb tavarežiim, ekraanile ilmub veateade ja buzzer lülitub valjule kahetoonilisele sireenile.
  • Kriitiline häire (ALARM): Kui temperatuur väljub lubatud piiridest (< 5°C või > 25°C), katkeb tavarežiim, ekraanile ilmub veateade ja buzzer lülitub valjule kahetoonilisele sireenile.

Komponendid:

Arduino Uno

x1

Breadboard

x1

LCD 16x2

x1

Potentsiomeeter

x1

TMP36

x1

Fototakisti

x1

Piezo buzzer

x1

slaidlüliti

x1

330 Ω takisti

x1

10 kΩ takisti

x1

Juhtmed

x22

Skeem:

Simulatsioon väljas:
Simulatsiooni tööl:

Kood:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Viigud
const int temperaturePin = A1;
const int lightPin = A0;
const int buzzerPin = 9;
const int switcherPin = 6;

// Muutujad
float voltage, degreesC;
bool firstStartDone = false;

void setup() {
  Serial.begin(9600);

  pinMode(buzzerPin, OUTPUT);
  pinMode(switcherPin, INPUT_PULLUP);

  lcd.begin(16, 2);

  // Käivitusekraan
  lcd.clear();
  lcd.setCursor(5, 0);
  lcd.print("NUKKA");
  lcd.setCursor(1, 1);
  lcd.print("Susteem valmis");

  tone(buzzerPin, 2000, 150);

  delay(1500);
  lcd.clear();
}

void loop() {

  // Süsteemi oleku kontroll
  bool systemOn = digitalRead(switcherPin) == LOW;

  // Süsteem on välja lülitatud
  if (!systemOn) {
    noTone(buzzerPin);

    lcd.setCursor(0, 0);
    lcd.print("NUKKA: VALJAS   ");
    lcd.setCursor(0, 1);
    lcd.print("                ");

    firstStartDone = false;
    delay(200);
    return;
  }

  // Andurite lugemine
  voltage = analogRead(temperaturePin) * 0.004882814;
  degreesC = (voltage - 0.5) * 100.0;
  int lightLevel = analogRead(lightPin);

  // Andmete saatmine Serial Monitori
  Serial.print("Temp: ");
  Serial.print(degreesC);
  Serial.print(" C | Light: ");
  Serial.println(lightLevel);

  bool alarm = false;
  String alarmMessage = "";

  // Temperatuuri kontroll
  if (degreesC > 25) {
    alarm = true;
    alarmMessage = "Liiga kuum!     ";
  }
  else if (degreesC < 5) {
    alarm = true;
    alarmMessage = "Liiga kulm!     ";
  }

  // Häirerežiim
  if (alarm) {
    lcd.setCursor(0, 0);
    lcd.print("ALARM!          ");
    lcd.setCursor(0, 1);
    lcd.print(alarmMessage);

    tone(buzzerPin, 1500, 150);
    delay(200);
    tone(buzzerPin, 1000, 150);
    delay(200);
  }

  // Tavarežiim
  else {
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(degreesC, 0);
    lcd.print(" C        ");

    lcd.setCursor(0, 1);

    // Valguse kontroll
    if (lightLevel >= 200) {
      lcd.print("Olek: Pime      ");
    } else {
      lcd.print("Olek: Valge     ");
    }

    // Esimene käivitus
    if (!firstStartDone) {
      delay(1000);
      firstStartDone = true;
    }

    // Helisignaalid
    else {
      if (lightLevel >= 200) {
        noTone(buzzerPin);
        delay(1000);
      } else {
        tone(buzzerPin, 600, 80);
        delay(1500);
      }
    }
  }
}

Video:

Interaktiivne Arduino skeem

Uuritud funktsioonid

Funktsioon Tüüp Kirjeldus Kasutus koodis
analogRead() Standard Loeb analoogsisendi väärtuse (0 kuni 1023) Temperatuurianduri ja fototakisti näitude lugemine
digitalRead() Standard Loeb digitaalsisendi oleku (HIGH või LOW) Slaidlüliti asendi kontrollimine (süsteem SEES/VÄLJAS)
tone() Standard Genereerib määratud sagedusega heli (ruutlaine) viigul Käivituspiiksu, hoiatussignaali ja häiresireeni loomine
noTone() Standard Peatab heli genereerimise määratud viigul Buzzeri vaigistamine pime-režiimis või kui süsteem on väljas
delay() Standard Peatab programmi töö määratud millisekunditeks Tervitusteksti kuvamise aja ja helipauside juhtimine
lcd.begin() LiquidCrystal Määrab LCD-ekraani veergude ja ridade arvu 16×2 tähemärgiga LCD-ekraani alglaadimine seadistuses
lcd.clear() LiquidCrystal Kustutab ekraanilt kogu teksti ja viib kursori nurka Ekraani täielik puhastamine käivitamisel ja režiimi vahetusel
lcd.setCursor() LiquidCrystal Määrab kursori asukoha (veeru ja rea) ekraanil Teksti täpne paigutamine ekraani esimesele või teisele reale
lcd.print() LiquidCrystal Kuvab teksti, muutujaid või väärtusi LCD-ekraanil Temperatuurinäidu, olekute ja hoiatusteadete kuvamine

Kasutamisvõimalused tavaelus

🌱 Nutikad kasvuhooned

NUKKA aitab hoida eksootiliste taimede jaoks stabiilset mikrokliimat. Kui uks unustatakse lahti (valgus tõuseb), teavitab seade kasutajat pehme signaaliga, et soojus välja ei voolaks. Kriitilise kuuma või külma korral käivitub alarmsireen.

❄️ Professionaalsed külmkambrid

Toiduainete või ravimite hoiustamisel on temperatuuri režiim kriitilise tähtsusega. Seade tuvastab koheselt, kui külmiku uks on jäänud paokile, ning annab valju häiresignaali enne, kui tooted jõuavad üles sulada või rikneda.

🔒 Serveriruumid ja andmekeskused

Serverid nõuavad pidevat jahutust ja pimedust. NUKKA suudab valvata IT-infrastruktuuri: kui keegi siseneb ruumi (valgus lülitub sisse) ja konditsioneer rikkisoleku tõttu temperatuur tõuseb üle 30°C, käivitub koheselt turvaalarm.

🍷 Eriti tundlikud hoiulaod

Kallite veinide, kunstiteoste või keemiliste reaktiivide hoidmisel on vaja pimedat ja rangelt kontrollitud keskkonda. NUKKA tagab, et hoiutingimused oleksid ööpäevaringselt täidetud, reageerides igale valguse ja temperatuuri muutusele.

🏡 Autonoomne koduvalve

Süsteemi saab kasutada lihtsa turvaelemendina suvilates või garaažides. Kui lüliti on asendis ON, valvab seade ruumi: valguse andur märkab sissetungijat (ukse avamist või taskulampi) ja temperatuuriandur reageerib tulekahjule.

🔬 Laborid ja inkubaatorid

Meditsiinilistes või bioloogilistes uuringutes, kus testitakse näidiseid kindlal temperatuuril. NUKKA kahetasemeline hoiatussüsteem aitab teadlastel hoida eksperimendi keskkonda stabiilsena ja märgata kõrvalekaldeid õigeaegselt.