Зуммер: различия между версиями
Нет описания правки |
Нет описания правки |
||
(не показаны 4 промежуточные версии 1 участника) | |||
Строка 26: | Строка 26: | ||
=== Способ - 1 : Используя проводной шлейф и Piranha UNO === | === Способ - 1 : Используя проводной шлейф и Piranha UNO === | ||
Используя провода «Папа — Мама», | Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO. | ||
[[Файл:B0a8b5f52ec7f92392c40cf658215591.png]] | [[Файл:B0a8b5f52ec7f92392c40cf658215591.png]] | ||
=== Способ - 2 : Используя Trema Set Shield === | ===Способ - 2 : Используя Trema Set Shield=== | ||
Модули можно подключить к любому из цифровых или аналоговых входов Trema Set Shield. | Модули можно подключить к любому из цифровых или аналоговых входов Trema Set Shield. | ||
[[Файл:03f90a336625a8b33868656dde5b76a4.png|без|обрамить]] | [[Файл:03f90a336625a8b33868656dde5b76a4.png|без|обрамить]] | ||
=== Способ - 3 : Используя проводной шлейф и Shield === | ===Способ - 3 : Используя проводной шлейф и Shield=== | ||
Используя 3-х проводной шлейф, | Используя 3-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд. | ||
[[Файл:B17ae05dd294848791441d00dbe6435a.png|без|обрамить]] | [[Файл:B17ae05dd294848791441d00dbe6435a.png|без|обрамить]] | ||
== Питание: == | ==Питание:== | ||
Входное напряжение питания 5 В постоянного тока, подаётся на выводы Vcc (V) и GND (G). | Входное напряжение питания 5 В постоянного тока, подаётся на выводы Vcc (V) и GND (G). | ||
== Подробнее о модулях: == | ==Подробнее о модулях:== | ||
Trema-модуль зуммер пассивный основан на электромагнитном излучателе, который состоит из кольцевого магнита, сердечника с электромагнитной катушкой и гибкой металлической мембраны. Электромагнитная катушка преобразует электрические колебания в магнитные, а мембрана преобразует магнитные колебания в механические. Полученные механические колебания распространяются по воздуху в виде звуковых волн. Пластиковый корпус, с отверстием, усиливает акустический эффект. | Trema-модуль зуммер пассивный основан на электромагнитном излучателе, который состоит из кольцевого магнита, сердечника с электромагнитной катушкой и гибкой металлической мембраны. Электромагнитная катушка преобразует электрические колебания в магнитные, а мембрана преобразует магнитные колебания в механические. Полученные механические колебания распространяются по воздуху в виде звуковых волн. Пластиковый корпус, с отверстием, усиливает акустический эффект. | ||
Строка 50: | Строка 50: | ||
Trema-модуль зуммер активный состоит из 5В генератора прямоугольных импульсов (меандра) с частотой 2,3 кГц, и электромагнитного излучателя в одном корпусе. Сигнал с генератора подается на электромагнитный излучатель и преобразуется в звуковые волны той же частоты. | Trema-модуль зуммер активный состоит из 5В генератора прямоугольных импульсов (меандра) с частотой 2,3 кГц, и электромагнитного излучателя в одном корпусе. Сигнал с генератора подается на электромагнитный излучатель и преобразуется в звуковые волны той же частоты. | ||
Trema-модуль зуммер | Trema-модуль зуммер активный уже имеет встроенный генератор и для генерации звука ему не требуется использование функции beep() и ей аналогичных (как для простого Trema-зуммера). Достаточно установить состояние логической «1» на выводе «S» и Вы услышите сигнал с частотой 2,3 кГц и уровнем звукового давления не ниже 85дБ/10см. | ||
== Примеры для зуммера пассивного : == | ==Примеры для зуммера пассивного :== | ||
=== Вывод двух коротких звуковых сигнала функцией tone(), сигнализирующих о включении Arduino: === | ===Вывод двух коротких звуковых сигнала функцией tone(), сигнализирующих о включении Arduino:=== | ||
<syntaxhighlight lang="c"> | |||
const uint8_t pinBF = 2; // определяем номер вывода, к которому подключён зуммер | |||
void setup() { | |||
tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с | |||
delay(200); //не выводим звук 0,1 с (см. ниже) | |||
tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с | |||
} | |||
void loop() { // в примере не используется | |||
} | |||
</syntaxhighlight> | |||
Строка 62: | Строка 73: | ||
Может возникнуть ситуация, когда использование функции tone() невозможно, например, если аппаратный таймер используется для других целей. Тогда сигнал придётся генерировать самим, используя функцию digitalWrite(): | Может возникнуть ситуация, когда использование функции tone() невозможно, например, если аппаратный таймер используется для других целей. Тогда сигнал придётся генерировать самим, используя функцию digitalWrite(): | ||
=== Тот же пример, но без использования функции tone(): === | ===Тот же пример, но без использования функции tone():=== | ||
<syntaxhighlight lang="c"> | |||
void myTone(uint8_t, uint32_t, uint32_t);// определяем собственную функцию для генерации звука | |||
const uint8_t pinBF = 2; // определяем номер вывода, к которому подключён зуммер | |||
void setup() { | |||
tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с | |||
delay(200); //не выводим звук 0,1 с (см. ниже) | |||
tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с | |||
} | |||
void loop() {} // в данном примере не используется | |||
void myTone(uint8_t i, uint32_t j, uint32_t k){ //определяем функцию | |||
j /= 500000; //меняем значение j на время одного полупериода в мкс | |||
k += millis(); //меняем значение k на время завершения вывода сигнала | |||
pinMode(i, OUTPUT); //конфигурируем вывод для вывода сигнала как выход | |||
while (k > millis()){ //выводим сигнал, пока не истечёт указанное время | |||
digitalWrite(i, HIGH); delayMicroseconds(j); //устанавливаем на выходе i уровень лог. 1 на время j | |||
digitalWrite(i, LOW); delayMicroseconds(j); //устанавливаем на выходе i уровень лог. 0 на время j | |||
} | |||
} | |||
</syntaxhighlight> | |||
Обратите внимание на то, что теперь задержка между первым и вторым вызовом функции myTone() соответствует паузе между сигналами в 0,1 сек, так как функция myTone() приостанавливает выполнение скетча на время вывода звукового сигнала. | Обратите внимание на то, что теперь задержка между первым и вторым вызовом функции myTone() соответствует паузе между сигналами в 0,1 сек, так как функция myTone() приостанавливает выполнение скетча на время вывода звукового сигнала. | ||
Сама функция '''myTone()''' не сложна в понимании: | Сама функция '''myTone()''' не сложна в понимании: | ||
* Сначала значение переменной '''j''' получившей частоту в Гц преобразуем в длительность одного полупериода в мкс. Период '''T = 1 / F''' (сек), значит полупериод '''L = 0,5 T''' (сек) = '''0,5 / F''' (сек) = '''500'000 / F''' (мкс). | *Сначала значение переменной '''j''' получившей частоту в Гц преобразуем в длительность одного полупериода в мкс. Период '''T = 1 / F''' (сек), значит полупериод '''L = 0,5 T''' (сек) = '''0,5 / F''' (сек) = '''500'000 / F''' (мкс). | ||
* Далее к переменной '''k''' получившей длительность импульса, добавляется время с начала старта скетча '''millis()''' | *Далее к переменной '''k''' получившей длительность импульса, добавляется время с начала старта скетча '''millis()''' | ||
* Конфигурируем вывод номер которого получила переменная '''i''' как выход | *Конфигурируем вывод номер которого получила переменная '''i''' как выход | ||
* Чередуем на выводе '''i''' логические уровни, устанавливая их на длительность '''J''' пока время прошедшее с момента старта скетча '''millis()''' не сравняется со значением переменной '''k'''. | *Чередуем на выводе '''i''' логические уровни, устанавливая их на длительность '''J''' пока время прошедшее с момента старта скетча '''millis()''' не сравняется со значением переменной '''k'''. | ||
==Примеры для зуммера активного:== | |||
== | ===Вывод короткого звукового сигнала.=== | ||
<syntaxhighlight lang="c"> | |||
uint8_t pinBuzzer = 2; //определяем № вывода к которому подключён зуммер со встроенным генератором | |||
//можно использовать любой вывод Arduino | |||
void setup(){ | |||
pinMode(pinBuzzer, OUTPUT); //переводим вывод pinBuzzer в режим вывода | |||
digitalWrite(pinBuzzer, LOW); //устанавливаем уровень лог. 0 на выводе pinBuzzer | |||
} | |||
void loop(){ | |||
digitalWrite(pinBuzzer, HIGH); delay(500); // включаем звук на 0,5 секунд | |||
digitalWrite(pinBuzzer, LOW); delay(1000); // выключаем звук на 1 секунду | |||
} | |||
</syntaxhighlight> | |||
Как видно из скетча, управлять Trema-зуммером со встроенным генератором так же легко, как и обычным светодиодом. | Как видно из скетча, управлять Trema-зуммером со встроенным генератором так же легко, как и обычным светодиодом. | ||
== Применение: == | ==Применение:== | ||
* Информирование о событиях | *Информирование о событиях | ||
* Вывод мелодий | *Вывод мелодий | ||
* Создание микровибраций | *Создание микровибраций |
Текущая версия от 18:53, 16 мая 2022
Зуммер (Trema-модуль)
Trema-модуль зуммер пассивный и Trema-модуль зуммер активный - позволяют излучать звук различными способами, в зависимости от выбранной модели зуммера.
Спецификация:
- Напряжение питания: 5 В
- Потребляемый ток: до 30 мА
- Интенсивность звука: >= 85 дБ
- Резонансная частота: 2048 Гц
- Сопротивление обмотки: 40 Ом
- Рабочая температура: -20 ... 70 °C
- Габариты: 30x30x9 (без учёта выводов)
Все модули линейки "Trema" выполнены в одном формате
Подключение:
Trema-модуль зуммер пассивный и Trema-модуль зуммер активный входят в линейку Trema-модулей, что позволяет подключить их к Arduino через Trema Shield по 3-проводному шлейфу (который идёт в комплекте с зуммером) без пайки, без дополнительных проводов и переходников. Их можно подключать к любому выводу Arduino, как цифровому, так и аналоговому.
Модули имеют три вывода: Signal (S) - вход и два вывода питания Vcc (V) и GND (G).
Модули удобно подключать 3 способами, в зависимости от ситуации:
Способ - 1 : Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.
Способ - 2 : Используя Trema Set Shield
Модули можно подключить к любому из цифровых или аналоговых входов Trema Set Shield.
Способ - 3 : Используя проводной шлейф и Shield
Используя 3-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Питание:
Входное напряжение питания 5 В постоянного тока, подаётся на выводы Vcc (V) и GND (G).
Подробнее о модулях:
Trema-модуль зуммер пассивный основан на электромагнитном излучателе, который состоит из кольцевого магнита, сердечника с электромагнитной катушкой и гибкой металлической мембраны. Электромагнитная катушка преобразует электрические колебания в магнитные, а мембрана преобразует магнитные колебания в механические. Полученные механические колебания распространяются по воздуху в виде звуковых волн. Пластиковый корпус, с отверстием, усиливает акустический эффект.
Trema-модуль зуммер пассивный не имеет встроенного генератора, а преобразует электрический сигнал со входа (S) в механические колебания воздуха. Таким образом частота излучаемого звука соответствует частоте сигнала подаваемого на вход модуля. Чем выше частота, тем «тоньше» звук. Чем ближе частота к резонансной, тем звук сильнее.
Самый простой способ получения звука заключается в применении функции tone(). Данная функция генерирует меандр (сигнал прямоугольной формы с равной длительностью импульсов и пауз), с заданной частотой и длительностью.
Trema-модуль зуммер активный состоит из 5В генератора прямоугольных импульсов (меандра) с частотой 2,3 кГц, и электромагнитного излучателя в одном корпусе. Сигнал с генератора подается на электромагнитный излучатель и преобразуется в звуковые волны той же частоты.
Trema-модуль зуммер активный уже имеет встроенный генератор и для генерации звука ему не требуется использование функции beep() и ей аналогичных (как для простого Trema-зуммера). Достаточно установить состояние логической «1» на выводе «S» и Вы услышите сигнал с частотой 2,3 кГц и уровнем звукового давления не ниже 85дБ/10см.
Примеры для зуммера пассивного :
Вывод двух коротких звуковых сигнала функцией tone(), сигнализирующих о включении Arduino:
const uint8_t pinBF = 2; // определяем номер вывода, к которому подключён зуммер void setup() { tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с delay(200); //не выводим звук 0,1 с (см. ниже) tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с } void loop() { // в примере не используется }
Обратите внимание на то, что в примере между двумя вызовами функции tone() устанавливается задержка на 0,2 секунды, а в комментарии написано «не выводим звук в течении 0,1 сек». Дело в том, что функция tone() выводит сигнал используя прерывания аппаратного таймера и не приостанавливает выполнение скетча на время вывода сигнала. Значит, сразу после начала вывода первого звукового сигнала, стартует функция delay(), приостанавливая выполнение скетча на 0,2 сек. но звук продолжает выводиться. Значит первые 0,1 сек - выводится сигнал, следующие 0,1 сек - тишина и последние 0,1 - опять выводится сигнал.
Может возникнуть ситуация, когда использование функции tone() невозможно, например, если аппаратный таймер используется для других целей. Тогда сигнал придётся генерировать самим, используя функцию digitalWrite():
Тот же пример, но без использования функции tone():
void myTone(uint8_t, uint32_t, uint32_t);// определяем собственную функцию для генерации звука const uint8_t pinBF = 2; // определяем номер вывода, к которому подключён зуммер void setup() { tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с delay(200); //не выводим звук 0,1 с (см. ниже) tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с } void loop() {} // в данном примере не используется void myTone(uint8_t i, uint32_t j, uint32_t k){ //определяем функцию j /= 500000; //меняем значение j на время одного полупериода в мкс k += millis(); //меняем значение k на время завершения вывода сигнала pinMode(i, OUTPUT); //конфигурируем вывод для вывода сигнала как выход while (k > millis()){ //выводим сигнал, пока не истечёт указанное время digitalWrite(i, HIGH); delayMicroseconds(j); //устанавливаем на выходе i уровень лог. 1 на время j digitalWrite(i, LOW); delayMicroseconds(j); //устанавливаем на выходе i уровень лог. 0 на время j } }
Обратите внимание на то, что теперь задержка между первым и вторым вызовом функции myTone() соответствует паузе между сигналами в 0,1 сек, так как функция myTone() приостанавливает выполнение скетча на время вывода звукового сигнала.
Сама функция myTone() не сложна в понимании:
- Сначала значение переменной j получившей частоту в Гц преобразуем в длительность одного полупериода в мкс. Период T = 1 / F (сек), значит полупериод L = 0,5 T (сек) = 0,5 / F (сек) = 500'000 / F (мкс).
- Далее к переменной k получившей длительность импульса, добавляется время с начала старта скетча millis()
- Конфигурируем вывод номер которого получила переменная i как выход
- Чередуем на выводе i логические уровни, устанавливая их на длительность J пока время прошедшее с момента старта скетча millis() не сравняется со значением переменной k.
Примеры для зуммера активного:
Вывод короткого звукового сигнала.
uint8_t pinBuzzer = 2; //определяем № вывода к которому подключён зуммер со встроенным генератором //можно использовать любой вывод Arduino void setup(){ pinMode(pinBuzzer, OUTPUT); //переводим вывод pinBuzzer в режим вывода digitalWrite(pinBuzzer, LOW); //устанавливаем уровень лог. 0 на выводе pinBuzzer } void loop(){ digitalWrite(pinBuzzer, HIGH); delay(500); // включаем звук на 0,5 секунд digitalWrite(pinBuzzer, LOW); delay(1000); // выключаем звук на 1 секунду }
Как видно из скетча, управлять Trema-зуммером со встроенным генератором так же легко, как и обычным светодиодом.
Применение:
- Информирование о событиях
- Вывод мелодий
- Создание микровибраций