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