Пьезозвук мелодия ардуино для автосигнализации
Я хотел бы воспроизвести звук автосигнализации через зуммер Arduino - что-то вроде этого https://youtu.be/nuPHwijMsIg
Есть ли у кого-нибудь библиотека для такой мелодии?
@Name, 👍0
Обсуждение2 ответа
Лучший ответ:
Я думаю, что то, о чем вы действительно просите, - это библиотека звуков (в виде кода), а не библиотека кода в обычном смысле. Я бы тоже хотел такую вещь (в частности, лазерный шум в стиле ретро-игр), но тщательный поиск в Google ничего не нашел, хотя кто-то сделал набросок темы Тетриса.
Автомобильная сигнализация, вероятно, довольно проста - пара циклов for изменяет частоту сигнала ()
; Мой Arduino и пьезозвук находятся дома, но я играю на этом YouTube и использую приложение для анализа спектра на телефоне, которое выглядит так (используя режим отображения водопада):
- Первый сигнал тревоги зацикливается с 1000 Гц до 2200 Гц примерно на 250 мс, а затем снова падает. - Следующие 2 - это понижающиеся тона, от 1 кГц до примерно 500 в течение 250 или 500 мс.
- Затем мы получаем повышающийся тон от 500 Гц до 1 кГц в течение 2 секунд
- Звуковой сигнал с частотой около 2,2 кГц, включение/выключение 250 мс
- Двухтональная сирена с частотой 1 и 1,5 кГц, по 1 сек. каждая.
Времена и частоты действительно были немного отклонены, и многие изменения частоты не являются линейными, но здесь есть с чем поиграть. Там есть более интересные сигналы тревоги, а также пара лазерных защелок. Прямоугольный привод пьезо (приводящий к интересным гармоникам) и полное отсутствие низкочастотной характеристики (ничего ниже нескольких сотен Гц на той, что у меня здесь) немного ограничивают ситуацию, но она хорошо сравнивается с сиреной Lego, которая у меня есть
int beep_pin=10;
int gap=1000;
void setup() {
// put your setup code here, to run once:
pinMode(beep_pin, OUTPUT);
}
void zap1()
{
for (float f=3000;f>40;f=f*0.93){
tone(beep_pin,f);
delay(10);
}
}
void zap2()
{
for (float f=3000;f>10;f=f*0.85){
tone(beep_pin,2*f);
delay(5);
tone(beep_pin,f);
delay(5);
}
}
void risefall()
{
float rise_fall_time=180;
int steps=50;
float f_max=2600;
float f_min=1000;
float delay_time=rise_fall_time/steps;
float step_size=(f_max-f_min)/steps;
for (float f =f_min;f<f_max;f+=step_size){
tone(beep_pin,f);
delay(delay_time);
}
for (float f =f_max;f>f_min;f-=step_size){
tone(beep_pin,f);
delay(delay_time);
}
}
void fall(float rise_fall_time)
{
int steps=50;
float f_max=2000;
float f_min=500;
float delay_time=rise_fall_time/steps;
float step_size=0.97;
for (float f =f_max;f>f_min;f*=step_size){
tone(beep_pin,f);
delay(delay_time);
}
}
void rise()
{
float rise_fall_time=2000;
int steps=100;
float f_max=1500;
float f_min=500;
float delay_time=rise_fall_time/steps;
float step_size=1.012;
for (float f =f_min;f<f_max;f*=step_size){
tone(beep_pin,f);
delay(delay_time);
}
noTone(beep_pin);
delay(100);
}
void twotone()
{
float f_max=1500;
float f_min=1000;
float delay_time=800;
tone(beep_pin,f_max);
delay(delay_time);
tone(beep_pin,f_min);
delay(delay_time);
}
void loop() {
// put your main code here, to run repeatedly:
for (int count=1;count<=10;count++)
{
risefall();
}
noTone(beep_pin);
delay(gap);
for (int count=1;count<=10;count++)
{
fall(300);
}
noTone(beep_pin);
delay(gap);
for (int count=1;count<=5;count++)
{
fall(600);
}
noTone(beep_pin);
delay(gap);
for (int count=1;count<5;count++)
{
rise();
}
noTone(beep_pin);
delay(gap);
for (int count=1;count<5;count++)
{
twotone();
}
noTone(beep_pin);
delay(gap);
for (int count=1;count<10;count++)
{
zap1();
}
noTone(beep_pin);
delay(gap);
for (int count=1;count<10;count++)
{
zap2();
}
noTone(beep_pin);
delay(gap);
}
Он также есть на GitHubи выпущен в общественное достояние под нелицензией, так что любой может использовать его по своему усмотрению
https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody Смотрите этот пример, чтобы получить код для каждой музыкальной ноты. Это должно сработать очень хорошо!
- Пассивный зуммер работает с AnalogWrite(), но не с DigitalWrite(). Он также имеет постоянный статический шум.
- Как включить и выключить зуммер
- Плохое качество звука при использовании пьезоэлемента в TinkerCad
- Не выходит из цикла for
- Как сделать так, чтобы мой пьезо-зуммер гудел только один раз без повторения?
- все работает независимо, но не вместе. Пьезо не генерирует тон
- Цепь с зуммером не работает
- Tone() конфликтует с библиотекой IRremote (множественное определение `__vector_7')
зачем вам нужна библиотека? ... arduino имеет возможность генерации тонов, @jsotola