Общие сведения:
Модуль Metro - Зуммер - является цифровым звукоизлучателем с подключением по шине I2С.
К одной шине I2C можно подключить более 100 модулей.
Модуль можно использовать в любых проектах где требуется зуммер, например, для подачи сигналов, воспроизведения небольших мелодий и т.д.
Видео:
Спецификация:
- Напряжение питания: 5 В (постоянного тока)
- Потребляемый ток: до 30 мА.
- Диапазон воспроизводимых частот: от 10 Гц до 10 кГц.
- Резонансная частота: 2,7 кГц.
- Уровень звукового давления: 85 дБ (2,7 кГц, 10 см)
- Интерфейс: I2C.
- Скорость шины I2C: 100 кбит/с.
- Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
- Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
- Уровень логической 1 на выводах ADR: 3,3 В (толерантны к 5 В).
- Рабочая температура: от -20 до +70 °C.
- Габариты: 35,56 х 25,40 мм (1400 x 1000 mil).
- Вес: 4 г.
Подключение:
У модуля имеются две колодки выводов: IN (вход) - штыревой разъем и OUT (выход) гнездовой разъем. Все модули подключаются друг к другу соединяя выход предыдущего модуля со входом следующего, образуя состав из модулей Metro в котором первым «вагоном» является плата управления Metro Leonardo или Metro ESP.
Модуль не поддерживает горячее подключение: Подключайте модуль только при отсутствии питания и данных на шине I2C. В противном случае потребуется отключить питание при уже подключённом модуле.
Подключение к управляющей плате Metro Leonardo:
К плате Metro Leonardo можно подключить только зуммеры, или чередовать их с другими модулями Metro в любой последовательности.
Подключение к управляющей плате Metro ESP:
К плате Metro ESP можно подключить только зуммеры, или чередовать их с другими модулями Metro в любой последовательности.
Подключение к другим управляющим платам:
Вместо платы управления Metro Leonardo или Metro ESP можно использовать платы Arduino или Piranha, у которых будут задействованы 2 вывода шины I2C (SCL и SDA), 2 вывода питания (5V и GND) и один вывод установки адреса ADR, по умолчанию используется вывод D12 (можно менять в скетче).
При использовании аппаратной шины I2C (выводы SDA и SCL указаны на плате) для работы с шиной нужно подключить библиотеку Wire, которая уже предустановлена в Arduino IDE. А при использовании программной шины I2C (вы сами выбираете любые выводы которым будет назначена роль SDA и SCL), потребуется дополнительно установить и подключить библиотеку iarduino_I2C_Software.h. О том как выбрать тип шины I2C читайте ниже в разделе «Подключение библиотеки», а так же на странице Wiki - Расширенные возможности библиотек iarduino для шины I2C.
Питание:
Входное напряжение питания 5 В постоянного тока, подаётся на выводы 5V и GND модуля.
Модуль сохраняет работоспособность при снижении напряжения питания до 3,3 В, при незначительном снижении уровня звукового давления.
Подробнее о модуле:
Модуль Metro - Зуммер построен на базе микроконтроллера STM32F030F4 и снабжен собственный стабилизатором напряжения. Модуль позволяет генерировать электрические колебания с заданной частотой подавая их на электромагнитный звукоизлучатель, который преобразует электрические колебания в механические, а они распространяются в окружающей среде как звук.
Модуль позволяет:
- Воспроизвести тональный сигнал с указанной частотой на указанное или неопределённое время.
- Воспроизвести серию тональных сигналов с указанной частотой, длительностью и паузой, заданное или неопределённое количество раз.
- Воспроизвести мелодию, например, «Star Wars», или сигналы «провал» (неудача, ошибка), «внимание», «успех». Количество сигналов и мелодий зависит от версии прошивки модуля.
Специально для работы с модулями Metro нами разработана библиотека iarduino_Metro, одна библиотека для всех модулей линейки Metro. Библиотека сама определяет наличие и тип модулей на шине I2C, присваивает им адреса и создаёт массив объектов для работы с найденными модулями. Стоит отметить что пользователю даже не обязательно знать адреса присвоенные модулям, так как для обращения к любому модулю достаточно знать его номер по порядку от платы управления Metro Leonardo или Metro ESP.
- Количество элементов массива
Metro[0]
- объект для управления первым модулем (ближайшим к управляющей плате);Metro[1]
- объект для управления вторым модулем (следующим после первого);Metro[2]
- объект для управления третьим модулем (и т.д. до последнего модуля).
Metro
совпадает с количеством найденных модулей:Подробнее про установку библиотеки читайте в нашей инструкции.
Примеры:
Включение и выключение звука:
#include <Wire.h> // Подключаем библиотеку Wire. #include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro. // void setup(){ // iarduino_Metro_Start(&Wire); // Определяем подключённые модули. } // Указав ссылку на объект работы с шиной I2C (по умолчанию &Wire). // void loop(){ // Metro[0].on(); delay(3000); // Включаем звук и ждём 3 секунды. Metro[0].off(); delay(1000); // Выключаем звук и ждём 1 секунду. } //
В данном примере зуммер будет издавать звуковой сигнал с частотой 2,7 кГц (используется по умолчанию) а через 3 секунды выключаться на 1 секунду.
Включение и выключение звука с указанием частоты:
#include <Wire.h> // Подключаем библиотеку Wire. #include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro. // void setup(){ // iarduino_Metro_Start(&Wire); // Определяем подключённые модули. } // Указав ссылку на объект работы с шиной I2C (по умолчанию &Wire). // void loop(){ // Metro[0].on(2000); delay(3000); // Включаем звуковой сигнал с частотой 2,0 кГц и ждём 3 секунды. Metro[0].on(2500); delay(3000); // Включаем звуковой сигнал с частотой 2,5 кГц и ждём 3 секунды. Metro[0].on(3000); delay(3000); // Включаем звуковой сигнал с частотой 3,0 кГц и ждём 3 секунды. Metro[0].off(); delay(1000); // Выключаем звук и ждём 1 секунду. } //
В данном примере включаются звуковые сигналы указанной частоты.
Включение звука указанной частоты и длительности:
#include <Wire.h> // Подключаем библиотеку Wire. #include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro. // void setup(){ // iarduino_Metro_Start(&Wire); // Определяем подключённые модули. } // Указав ссылку на объект работы с шиной I2C (по умолчанию &Wire). // void loop(){ // Metro[0].on(1000,2000); delay(3000); // Включаем звуковой сигнал с частотой 1 кГц на 2 секунды и ждём 3 секунды. Metro[0].on(4000,2000); delay(3000); // Включаем звуковой сигнал с частотой 4 кГц на 2 секунды и ждём 3 секунды. } //
В данном примере функция on() вызывается с двумя параметрами, где первый определяет частоту звука, а второй длительность его воспроизведения. Так как после каждого включения звука выдерживается пауза в 3 секунды (delay(3000);
), значит звук будет включаться на 2 секунды и выключаться на 1 секунду.
Непрерывная серия звуковых сигналов:
#include <Wire.h> // Подключаем библиотеку Wire. #include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro. // void setup(){ // iarduino_Metro_Start(&Wire); // Определяем подключённые модули, указав ссылку на объект работы с шиной I2C (по умолчанию &Wire). Metro[0].on(3000, 2000, 1000); // Звук в 3 кГц постоянно включается на 2 секунды и выключается на 1 секунду. } // // void loop(){ // } //
В данном примере функция on() вызывается с тремя параметрами, где первый определяет частоту звука, второй длительность его воспроизведения, а третий длительность паузы между воспроизведениями звука. Не смотря на то, что команда отправляется модулю всего один раз (в коде setup), зуммер будет издавать звуковые сигналы постоянно и самостоятельно.
Воспроизведение звукового сигнала указанное количество раз:
#include <Wire.h> // Подключаем библиотеку Wire. #include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro. // void setup(){ // iarduino_Metro_Start(&Wire); // Определяем подключённые модули. } // Указав ссылку на объект работы с шиной I2C (по умолчанию &Wire). // void loop(){ // Metro[0].on(3000, 100, 200, 4); // Воспроизвести 4 звуковых сигнала с частотой 3 кГц, длительностью 100 мс и паузой между сигналами в 200 мс. delay(2000); // Ждём 2 секунды. } //
В данном примере функция on() вызывается с четырьмя параметрами, где первый определяет частоту звука, второй длительность его воспроизведения, третий длительность паузы между воспроизведениями звука, а четвертый параметр задаёт количество повторов. Так как функция on() вызывается в коде loop, то зуммер воспроизведёт 4 звуковых сигнала (затратив на это 1,2 сек), далее пройдёт оставшаяся часть ожидания 0,9 сек, после чего всё повторится...
Отслеживание воспроизведения звукового сигнала:
#include <Wire.h> // Подключаем библиотеку Wire. #include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro. // void setup(){ // iarduino_Metro_Start(&Wire); // Определяем подключённые модули. } // Указав ссылку на объект работы с шиной I2C (по умолчанию &Wire). // void loop(){ // Metro[0].on(1000, 2000); // Включаем звуковой сигнал с частотой 1 кГц на 2 секунды. while( Metro[0].read() ){}; // Ждём завершения воспроизведения. delay(2000); // Создаём паузу между звуковыми сигналами в 2 секунды. } //
В данном примере функция on() вызывается с двумя параметрами, где первый определяет частоту звука, а второй длительность его воспроизведения. Функция read() будет возвращать частоту воспроизводимого звука, до тех пор пока он не перестанет воспроизводиться. Как только звуковой сигнал завершится, функция read() вернёт 0 и произойдет выход из цикла while(). Далее выполняется пауза в 2 секунды без звука, после чего всё повторится...
Воспроизведение мелодий:
#include <Wire.h> // Подключаем библиотеку Wire. #include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro. // void setup(){ // iarduino_Metro_Start(&Wire); // Определяем подключённые модули, указав ссылку на объект работы с шиной I2C (по умолчанию &Wire). Metro[0].on( MELODY(4) ); // Включить мелодию №4 - «Star Wars». } // // void loop(){ // } //
Данный пример однократно воспроизведёт мелодию №4 - «Star Wars». Количество мелодий записанных в модуль зависит от версии прошивки модуля.
Воспроизведение нескольких мелодий:
#include <Wire.h> // Подключаем библиотеку Wire. #include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro. // void setup(){ // iarduino_Metro_Start(&Wire); // Определяем подключённые модули. } // Указав ссылку на объект работы с шиной I2C (по умолчанию &Wire). // void loop(){ // // Воспроизводим мелодии с 5 по 9: // for(uint8_t i=5; i<=9; i++){ // Metro[0].on( MELODY(i) ); // Включить мелодию №i. while( Metro[0].read() ){}; // Ждём завершения воспроизведения мелодии ... } // } //
Данный пример воспроизводит мелодии с 5 по 9. Длительности мелодий отличаются, некоторые короткие, некоторые длинные. Отследить завершение мелодии позволяет функция read(). Пока мелодия воспроизводится, функция read() возвращает номер мелодии. Как только мелодия завершается, функция read() возвращает 0, это приводит к выходу из цикла while() и запуску следующей мелодии функцией on(). Количество мелодий записанных в модуль зависит от версии прошивки модуля.
Описание функций библиотеки:
В данном разделе описаны функции библиотеки iarduino_Metro для работы с зуммером, при работе с другими модулями Metro те же функции могут иметь другое назначение.
Подключение библиотеки:
- Если используется аппаратная шина I2C:
При подключении к платам Metro Leonardo, Metro ESP, или шине I2C других плат.
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_Metro. #include <iarduino_Metro.h> // Подключаем библиотеку для работы с модулями Metro.
- Если используется программная шина I2C:
При подключении к платам у которых нет шины I2C или нет возможности её использовать.
#include <iarduino_I2C_Software.h> // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_Metro. SoftTwoWire sWire(3,4); // Создаём объект для работы с шиной I2C, указав выводы которым будет назначена роль линий: SDA, SCL. #include <iarduino_Metro.h> // Подключаем библиотеку для работы с модулями Metro.
После подключения библиотеки iarduino_Metro создавать объекты не требуется, вместо этого необходимо однократно вызвать функцию iarduino_Metro_Start(&ШИНА,ADR);
в коде setup
. Эта функция принимает два необязательных параметра: ссылку на объект для работы с шиной I2C на которой находятся модули Metro (по умолчанию &Wire
) и номер вывода к которому подключается вход ADR модуля Metro (по умолчанию вывод D12
).
Функция обнаружит все модули Metro на указанной шине I2C, назначит им адреса и создаст массив объектов Metro
, количество элементов которого будет совпадать с количеством найденных модулей Metro.
Определение подключённых модулей Metro:
- Если используется аппаратная шина I2C:
При подключении к платам Metro Leonardo, Metro ESP, или шине I2C других плат.
iarduino_Metro_Start(); // Найти все модули используя параметры по умолчанию (&Wire, 12). iarduino_Metro_Start(&Wire); // Найти все модули на основной аппаратной шине I2C (&Wire), используя вывод ADR по умолчанию (12). iarduino_Metro_Start(&Wire,12); // Найти все модули на основной аппаратной шине I2C (&Wire), используя 12 вывод для подключения к входу ADR. iarduino_Metro_Start(12); // Найти все модули на шине I2C по умолчанию (&Wire), используя 12 вывод для подключения к входу ADR. iarduino_Metro_Start(&Wire1,10); // Найти все модули на первой после основной аппаратной шине I2C (&Wire1), используя 10 вывод для подключения к входу ADR. Не подходит для Metro Leonardo и Metro ESP. iarduino_Metro_Start(&Wire2,11); // Найти все модули на второй после основной аппаратной шине I2C (&Wire2), используя 11 вывод для подключения к входу ADR. Не подходит для Metro Leonardo и Metro ESP. i = iarduino_Metro_Start(); // Независимо от параметров функция возвращает количество найденных модулей Metro.
- Если используется программная шина I2C:
При подключении к платам у которых нет шины I2C или нет возможности её использовать.
iarduino_Metro_Start(&sWire); // Найти все модули на программной шине I2C, используя вывод ADR по умолчанию (12). iarduino_Metro_Start(&sWire,12); // Найти все модули на программной шине I2C, используя 12 вывод для подключения к входу ADR. i = iarduino_Metro_Start(&sWire); // Функция возвращает количество найденных модулей Metro.
После определения подключенных модулей станет доступен массив Metro
, каждый элемент которого является объектом подключенного модуля Metro и предназначен для управления им.
- Например, если к управляющей плате подключено 3 любых модуля Metro, то массив
Metro[0]
- объект для управления первым модулем (ближайшим к управляющей плате);Metro[1]
- объект для управления вторым модулем (следующим после первого);Metro[2]
- объект для управления третьим модулем (дальним от управляющей платы).
Metro
будет содержать 3 элемента:Сторонние модули ша шине I2C: На шине I2C могут присутствовать сторонние модули* (не принадлежащие линейке Metro) со своими библиотеками. Это не повлияет на корректность обнаружения модулей Metro, не приведёт к присвоению неуникального адреса модулю и не нарушит очерёдность следования элементов массива Metro.
* Кроме сторонних модулей с адресом 0x09.
Функция off();
- Назначение: Выключение звука.
- Синтаксис: Metro[ индекс ].off();
- Параметры: Нет.
- Возвращаемые значения: Нет.
- Пример:
Metro[0].off(); // Выключить звук.
Функция on();
- Назначение: Воспроизведение звука.
- Синтаксис: Metro[ индекс ].on( ЧАСТОТА , ДЛИТЕЛЬНОСТЬ , ПАУЗА , КОЛИЧЕСТВО );
- Параметры:
- ЧАСТОТА - Целочисленное значение определяющее высоту звука в Гц, от 10 до 10000. Если частоту не указать, то будет воспроизведён тональный сигнал с частотой 2,7 кГц.
- ДЛИТЕЛЬНОСТЬ - Целочисленное значение определяющее время воспроизведения тонального сигнала в мс, от 0 до 25500. Если длительность не казана, то сигнал будет воспроизводиться постоянно.
- ПАУЗА - Целочисленное значение определяющее время паузы между тональными сигналами в мс, от 0 до 25500. Если указана частота и длительность, а пауза не указана, то тональный сигнал будет воспроизведён однократно (без повторов).
- КОЛИЧЕСТВО - Целое количество повторений тонального сигнала, от 1 до 255. Если указаны частота, длительность и пауза, а количество повторов не указано, то тональные сигналы будут повторяться постоянно.
- Возвращаемые значения: Нет.
- Примечание:
- Все параметры функции on() являются необязательными.
- Если вместо частоты звука указать MELODY( НОМЕР ), то модуль воспроизведёт сигнал или мелодию соответствующую указанному номеру.
- Пример:
Metro[0].on(); // Воспроизвести постоянный тональный сигнал (частота на умолчанию 2,7 кГц). Metro[0].on( 1000 ); // Воспроизвести постоянный тональный сигнал частотой 1 кГц. Metro[0].on( 2000, 5000 ); // Воспроизвести тональный сигнал частотой 2 кГц в течении 5 секунд. Metro[0].on( 3000, 100, 200 ); // Воспроизвести тональные сигналы частотой 3 кГц, длительность сигналов 0,1 сек, а пауза между сигналами 0,2 секунды. Metro[0].on( 4000, 100, 200, 3 ); // Воспроизвести 3 тональных сигнала подряд. Частота звука 4 кГц, длительность сигналов 0,1 сек, пауза между сигналами 0,2 секунды. Metro[0].on( MELODY(4) ); // Включить мелодию №4 - «Star Wars».
Функция read();
- Назначение: Отслеживание завершения воспроизведения сигналов и мелодий.
- Синтаксис: Metro[ индекс ].read();
- Параметры: Нет.
- Возвращаемые значения: Частота воспроизводимого сигнала или номер мелодии.
- Примечание:
- Если воспроизводится тональный сигнал, то функция вернёт его частоту.
- Если воспроизводится мелодия, то функция вернёт её номер.
- Если модуль не воспроизводит ни сигналов ни мелодий, то функция вернёт 0.
- Функция доступна в библиотеке версии 1.3.2 и выше.
- Пример:
Metro[0].on( MELODY(9) ); // Включить мелодию №9. «20thCenFox» while( Metro[0].read() ){}; // Ждём завершения воспроизведения мелодии ...
Переменная address:
- Тип: uint8_t.
- Данные: Адрес модуля на шине I2C.
- Примечание: Адрес формируется и присваивается во время определения модулей функцией
iarduino_Metro_Start();
Не меняйте адрес, так как он используется библиотекой. - Пример чтения адреса модуля:
Serial.print ( "Адрес модуля на шине I2C = " ); Serial.println( Metro[0].address );
Переменная model:
- Тип: uint8_t.
- Данные: Идентификатор типа модуля.
- Примечание: Тип модуля считывается во время определения модулей функцией
iarduino_Metro_Start();
Не меняйте тип модуля, так как он используется библиотекой. - Пример определения типа модуля:
switch( Metro[0].model ){ case MOD_KEY: Serial.println( "кнопка" ); break; case MOD_RGB: Serial.println( "светодиод" ); break; case MOD_RES: Serial.println( "потенциометр" ); break; case MOD_BUZ: Serial.println( "звукоизлучатель" ); break; case MOD_DHT: Serial.println( "датчик влажности и температуры" ); break; case MOD_DSL: Serial.println( "датчик освещённости" ); break; case MOD_8X8: Serial.println( "светодиодная матрица 8х8" ); break; default: Serial.println( "неизвестный модуль" ); break; }
Переменная version:
- Тип: uint8_t.
- Данные: Версия прошивки модуля.
- Примечание: Версия прошивки считывается во время определения модулей функцией
iarduino_Metro_Start();
Изменение значения переменной не изменит версию модуля и не повлияет на работу модуля, и библиотеки. - Пример чтения версии прошивки модуля:
Serial.print ( "Версия прошивки модуля = " ); Serial.println( Metro[0].version );
Переменная size:
- Тип: uint8_t.
- Данные: Объем памяти ОЗУ в байтах, используемый библиотекой для данного модуля.
- Примечание: Библиотека создаёт массив объектов
Metro
с помощью функцииiarduino_Metro_Start();
в кодеsetup
(при старте скетча), значит и память ОЗУ для работы с модулями выделяется там же, а не во время компиляции скетча. Зная объем выделенной памяти можно определить объем свободной и рассчитать, какое количество модулей Metro ещё можно подключить. Изменение значения переменной не изменит объём выделенной памяти и не повлияет на работу модуля, и библиотеки. - Пример чтения объема памяти ОЗУ выделенного для работы с модулем:
Serial.print ( "Для работы данного модуля выделено " ); Serial.print ( Metro[0].size ); Serial.println( " байт памяти ОЗУ." );
Применение:
Модуль Metro - Зуммер можно использовать в любых проектах где требуется звукоизлучатель, например, для подачи сигналов, воспроизведения небольших мелодий и т.д.
Обсуждение