Ebben a cikkben leírom egy tűzoltó sziréna készítését Arduino segítségével.

 

 

 

/*
 *  ez a tuzolto SAM szirenajanak kialakitasa Arduino segitsegevel
 */

// Alaphangok definialasa
#define NOTE_C4  262
#define NOTE_D4  294
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_G4  392
#define NOTE_A4  440
#define NOTE_B4  475
#define NOTE_H4  495

// Cisz hangok definialasa
#define NOTE_C5  523
#define NOTE_D5  587
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_G5  784
#define NOTE_A5  880
#define NOTE_B5  988

// #define COMMON_ANODE

int led_b1 = 5; // Blue led 01
int led_b2 = 6; // Blue led 02
int led_rgb1_1 = 7; // RGB led 01 red
int led_rgb1_2 = 8; // RGB led 01 green
int led_rgb1_3 = 9; // RGB led 01 blue
int led_rgb2_1 = 10; // RGB led 02 red
int led_rgb2_2 = 11; // RGB led 02 green
int led_rgb2_3 = 12; // RGB led 02 blue
int speaker = 4; // hangszoro bekotesenek a helye
volatile int state = LOW; // megszakitasos nyomogomb erteke
/*
 * Kiskaracsony hangjegyekkel
 */
int melody[] = { NOTE_G4, NOTE_D4, NOTE_G4, NOTE_H4, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_D4, NOTE_G4, NOTE_H4, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_A4,
        NOTE_H4,NOTE_C5,NOTE_D5,NOTE_G4,NOTE_C5,NOTE_H4,NOTE_A4,NOTE_A4,NOTE_H4,NOTE_C5,NOTE_D5,NOTE_G4,NOTE_H4,NOTE_A4,NOTE_G4,NOTE_G4 };
/*
 * Kiskaracsony utemezese
 */
int noteDurations[] = {8,8,4,4, 8,8,4,4,8,8,4,4, 8,8,4,4,8,8,4,4,8,8,4,4,8,8,4,4,8,8,4,4};

void setup() {                
  // Serial.begin(9600); //soros kijelzes bekapcsolasa az ellenorzeshez
 
  pinMode(led_b1, OUTPUT);
  pinMode(led_b2, OUTPUT);
  pinMode(led_rgb1_1, OUTPUT);
  pinMode(led_rgb1_2, OUTPUT);
  pinMode(led_rgb1_3, OUTPUT);
  pinMode(led_rgb2_1, OUTPUT);
  pinMode(led_rgb2_2, OUTPUT);
  pinMode(led_rgb2_3, OUTPUT);
  pinMode(speaker, OUTPUT);    
  attachInterrupt(1, szirena, RISING); // megszakitasos nyomogomb meghivasa a 0, D2 porton Arduino nano eseten

// a kiskaracsony lejatszasa 1x az elejen, indulaskor  
  for (int thisNote = 0; thisNote < 32; thisNote++) {
    int noteDuration = 1000/noteDurations[thisNote];
    tone(speaker, melody[thisNote],noteDuration);
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    noTone(speaker);
  }
   delay(300);   
  noTone(speaker);
}

void loop() {
 
  // RGB ledek villogtatasa mindig
  setColor(255, 0, 0);
  delay(50);
  setColor(0, 255, 0);
  delay(50);
  setColor(0, 0, 255);
  delay(50);
  setColor(255, 255, 0);
  delay(50);
  setColor(80, 0, 80);
  delay(50);
  setColor(0, 255, 255);
  delay(50);
 
  // ha a state LOW akkor menjenek a kek ledek es ne szirenazzon!
  if (state == LOW) {
  digitalWrite(led_b1, HIGH);
  delay(100);
  digitalWrite(led_b1, LOW);
  delay(100);
  digitalWrite(led_b2, HIGH);
  delay(100);
  digitalWrite(led_b2, LOW);
  delay(100);
  }
 
  // ha a state HIGH, akkor bekapcsol a szirena es meskeppen mennek a kek ledek
 if (state == HIGH) {
   for( int i=1; i<999; i++)
  {
    light(i);
  }
  for( int i=999; i>1; i--)
  {
    light(i);
  }
 }
  noTone(speaker);

// Serial.print("Status erteke 0: ");
// Serial.println(state); //nyomgomb eretekenek kiirasa

}

void light(int bright)
{
  tone(speaker,500+bright*3);
 int wait=1000-bright;
  on1();
  off2();
  delayMicroseconds(bright);
  off1();
  on2();
  delayMicroseconds(wait);
  // noTone(4);
}
 

void on1()
{
  digitalWrite(led_b1, HIGH);
}

void on2()
{
  digitalWrite(led_b2, HIGH);
}

void off1()
{
  digitalWrite(led_b1, LOW);
}
void off2()
{
  digitalWrite(led_b2, LOW);
}

void setColor(int red, int green, int blue)

{
// ez a ciklus csak akkor lép érvénybe ha definiálva van a COMMON_ANODE
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 – green; // common_anode-nál visszafelé számlálunk
blue = 255 - blue;
#endif //common_anode ciklus vége
analogWrite(led_rgb1_1, red);
analogWrite(led_rgb1_2, green); //a függvény értékeinek kiíratása a kimenetekre
analogWrite(led_rgb1_3, blue);
analogWrite(led_rgb2_1, red);
analogWrite(led_rgb2_2, green); //a függvény értékeinek kiíratása a kimenetekre
analogWrite(led_rgb2_3, blue);
}

void szirena()

{
  state = !state;
}

 

 

További fejlesztési lehetőségek a programba:

Ha ajándékba lesz, akkor az elején lejátszhatna valami ünnepi zenét pl:

/* Zenei hangoki a kiskarácsony nagy karácsony -hoz*/

nt melody[] = { NOTE_G4, NOTE_D4, NOTE_G4, NOTE_H4, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_D4, NOTE_G4, NOTE_H4, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_A4,
        NOTE_H4,NOTE_C5,NOTE_D5,NOTE_G4,NOTE_C5,NOTE_H4,NOTE_A4,NOTE_A4,NOTE_H4,NOTE_C5,NOTE_D5,NOTE_G4,NOTE_H4,NOTE_A4,NOTE_G4,NOTE_G4 };

/* Ütemezettség: */

int noteDurations[] = {8,8,4,4, 8,8,4,4,8,8,4,4, 8,8,4,4,8,8,4,4,8,8,4,4,8,8,4,4,8,8,4,4};


Ez az oldal is sütiket használ, hogy jól működhessen.
Ok