Имитация сирены гражданской обороны

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Всем привет, уже давно хотелось сделать имитатор сирены ГО(гражданской обороны), ну и вот наконец-то дошли руки, сделал по быстренькому на ардуино про мини(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 подобрал экспериментальным путём.

Araris
Offline
Зарегистрирован: 09.11.2012

Нетленка.. ))

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

класс ! :)

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013
#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);
  } 
}

 

leshak
Offline
Зарегистрирован: 29.09.2011
Hе боялась сирены соседка
И привыкла к ней мать, понемногу.
И плевал я, здоровый трехлетка
Hа воздушную эту тревогу.

Ну, скажем честно, на сирену ГО не очень похоже, но....
Таки "классика", это да :)

pc спикер, 1840, первые строки на gw-basic, освоение циклов ... и вот ЭТО когда хочешь достать всех в комнате :)
 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Чтобы было больше похоже на сирену нужно генерить наверное синус или же генерить несколько частот...

Может у кого-то получиться подобрать более реалистические параметры для функции Vooooo - пишите.

leshak
Offline
Зарегистрирован: 29.09.2011

HWman пишет:

Чтобы было больше похоже на сирену нужно генерить наверное синус или же генерить несколько частот...

"генерить несколько частот" - ближе к истине.
в свое время, на PC спикире вообщем-то проигрывали даже wav-вы :)
хотя, у него тоже было только два состояния "включить и выключить". За счет инерции самого динамика..

Вообщем "добится похожести", можно, но потеряется "простота".

В любом случае у вас получилась замечательная "теплая лампова штука". Думаю те кто помнят времена когда частоты процессора измерялись единицами мегагерц - оценят ее.

Вообщем "я бы ничего не менял". Просто не называл бы ее "сиреной ГО" и все. Просто сирена, жужалка, мозго-выносилка и т.п. 

 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

В третьем посте немого поправил скетч + добавил комментарии, которые надеюсь, будут понятны не только мне.

egor77711 (не проверено)

Клёвая сирена !

stels
Offline
Зарегистрирован: 03.01.2014

надо с сайлент хилла сирену

leshak
Offline
Зарегистрирован: 29.09.2011

Вот нужно эту сирену - на открытие дверцы холодильника прикрутить. Вот это будет "умный дом".... :)

Ermakil
Offline
Зарегистрирован: 12.03.2018

Автору спасибо!

Если кому-то, как мне, не нужна сильно мелодичная тревога, работающая с 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(); // тревожный бип
}