Имитация сирены гражданской обороны
- Войдите на сайт для отправки комментариев
Пт, 08/08/2014 - 23:24

Всем привет, уже давно хотелось сделать имитатор сирены ГО(гражданской обороны), ну и вот наконец-то дошли руки, сделал по быстренькому на ардуино про мини(Arduino Pro Mini), вот видео:
https://www.youtube.com/watch?v=rQLVEKmnAcQ
Вот код:
#define Speaker 10 // пин к которому подключен динамик
#define Speed_up_down_frequency 800 // скорость наростания и убывания частоты
#define Vooooo_wait_sec 10 // сколько с. длиться гудение на макси мальной частоте
void setup() {
pinMode(Speaker, OUTPUT);
}
void loop()
{
for(int f = 7000; f >= 800; f--){
Vooooo(f,Speed_up_down_frequency);
}
Vooooo(800, Vooooo_wait_sec*1000000);
for(int f = 800; f <= 7000; f++{
Vooooo(f,Speed_up_down_frequency);
}
//delay(5000); // 5 сек пауза, для тестов
}
void Vooooo(int freq, long duration){
long time = duration/2/freq;
for(long t = 0; t < time; t++)
{
digitalWrite(Speaker, HIGH);
delayMicroseconds(freq);
digitalWrite(Speaker, LOW);
delayMicroseconds(freq);
}
}
Как видите код не сложный, цифры 7000 и 800 подобрал экспериментальным путём.
Нетленка.. ))
класс ! :)
#define Speaker_pin 10 // пин к которому подключен динамик #define Speed_up_down_frequency 8000 // скорость нарастания и убывания частоты #define Vooooo_wait_sec 10 // сколько с. длиться гудение на макс. частоте void setup() { pinMode(Speaker_pin, OUTPUT); } void loop() { for(int f = 7000; f >= 800; f--){ // нарастание частоты Vooooo(f,Speed_up_down_frequency); } Vooooo(800, Vooooo_wait_sec*1000000); // сколько с. длиться гудение на максимальной частоте for(int f = 800; f <= 7000; f++){ // убывание частоты Vooooo(f,Speed_up_down_frequency); } //delay(5000); // 5 сек пауза, для тестов } void Vooooo(int freq, long duration){ // первый параметр частота, чем ниже он тем выше частота, второй длительность long time = duration/2/freq; for(long t = 0; t < time; t++) { digitalWrite(Speaker_pin, HIGH); delayMicroseconds(freq); digitalWrite(Speaker_pin, LOW); delayMicroseconds(freq); } }Ну, скажем честно, на сирену ГО не очень похоже, но....
Таки "классика", это да :)
pc спикер, 1840, первые строки на gw-basic, освоение циклов ... и вот ЭТО когда хочешь достать всех в комнате :)
Чтобы было больше похоже на сирену нужно генерить наверное синус или же генерить несколько частот...
Может у кого-то получиться подобрать более реалистические параметры для функции Vooooo - пишите.
Чтобы было больше похоже на сирену нужно генерить наверное синус или же генерить несколько частот...
"генерить несколько частот" - ближе к истине.
в свое время, на PC спикире вообщем-то проигрывали даже wav-вы :)
хотя, у него тоже было только два состояния "включить и выключить". За счет инерции самого динамика..
Вообщем "добится похожести", можно, но потеряется "простота".
В любом случае у вас получилась замечательная "теплая лампова штука". Думаю те кто помнят времена когда частоты процессора измерялись единицами мегагерц - оценят ее.
Вообщем "я бы ничего не менял". Просто не называл бы ее "сиреной ГО" и все. Просто сирена, жужалка, мозго-выносилка и т.п.
В третьем посте немого поправил скетч + добавил комментарии, которые надеюсь, будут понятны не только мне.
Клёвая сирена !
надо с сайлент хилла сирену
Вот нужно эту сирену - на открытие дверцы холодильника прикрутить. Вот это будет "умный дом".... :)
Автору спасибо!
Если кому-то, как мне, не нужна сильно мелодичная тревога, работающая с Active Buzzer, которую я подключил напрямую, т.к. она слаботочная.
Осторожно - если Вы используете пищалку с током потребления больше 40 миллиампер - спалите порт!!!
#define BuzzerPin 6 // пин, управляющий пищалкой #define BuzzerGndPin 9 // пин, минусового питания пищалкой void setup() { // включаем минус питания пищалки pinMode(BuzzerGndPin, OUTPUT); digitalWrite(BuzzerGndPin, LOW); pinMode(BuzzerPin, OUTPUT); // пин управления пищалкой } void BeepAlarm() // тревожный бип { for (int f = 1500; f >= 600; f--) { digitalWrite(BuzzerPin, HIGH); delayMicroseconds(f); digitalWrite(BuzzerPin, LOW); delayMicroseconds(f); } for (int f = 600; f <= 1500; f++) { digitalWrite(BuzzerPin, HIGH); delayMicroseconds(f); digitalWrite(BuzzerPin, LOW); delayMicroseconds(f); } } void loop() { BeepAlarm(); // тревожный бип }