Зуммер, i2c (Metro-модуль)

Общие сведения:

Модуль 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.

Подключение к управляющей плате Metro Leonardo:

К плате Metro Leonardo можно подключить только зуммеры, или чередовать их с другими модулями Metro в любой последовательности.

Подключение к управляющей плате Metro ESP:

К плате Metro ESP можно подключить только зуммеры, или чередовать их с другими модулями Metro в любой последовательности.

Модуль не поддерживает горячее подключение: Подключайте модуль только при отсутствии питания и данных на шине I2C. В противном случае потребуется отключить питание при уже подключённом модуле.

Вместо платы управления Metro Leonardo или Metro ESP можно использовать платы Arduino или Piranha, у которых будут задействованы 2 вывода шины I2C (SCL и SDA), 2 вывода питания (5V и GND) и один вывод установки адреса ADR, по умолчанию используется вывод D12 (можно менять в скетче).

Питание:

Входное напряжение питания 5 В постоянного тока, подаётся на выводы 5V и GND модуля.

Модуль сохраняет работоспособность при снижении напряжения питания до 3,3 В, при незначительном снижении уровня звукового давления.

Подробнее о модуле:

Модуль Metro - Зуммер построен на базе микроконтроллера STM32F030F4 и снабжен собственный стабилизатором напряжения. Модуль позволяет генерировать электрические колебания с заданной частотой подавая их на электромагнитный звукоизлучатель, который преобразует электрические колебания в механические, а они распространяются в окружающей среде как звук.

Модуль позволяет:

  • Воспроизвести тональный сигнал с указанной частотой на указанное или неопределённое время.
  • Воспроизвести серию тональных сигналов с указанной частотой, длительностью и паузой, заданное или неопределённое количество раз.
  • Воспроизвести мелодию, например, «Star Wars», или сигналы «провал» (неудача, ошибка), «внимание», «успех». Количество сигналов и мелодий зависит от версии прошивки модуля.

Специально для работы с модулями Metro нами разработана библиотека iarduino_Metro, одна библиотека для всех модулей линейки Metro. Библиотека сама определяет наличие и тип модулей на шине I2C, присваивает им адреса и создаёт массив объектов для работы с найденными модулями. Стоит отметить что пользователю даже не обязательно знать адреса присвоенные модулям, так как для обращения к любому модулю достаточно знать его номер по порядку от платы управления Metro Leonardo или Metro ESP.

    Количество элементов массива Metro совпадает с количеством найденных модулей:
  • Metro[0] - объект для управления первым модулем (ближайшим к управляющей плате);
  • Metro[1] - объект для управления вторым модулем (следующим после первого);
  • Metro[2] - объект для управления третьим модулем (и т.д. до последнего модуля).

Подробнее про установку библиотеки читайте в нашей инструкции.

Примеры:

Включение и выключение звука:

#include <Wire.h>                         // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>               // Подключаем библиотеку iarduino_Metro.
                                          //
void setup(){                             //
    iarduino_Metro_Start();               // Определяем подключённые модули.
}                                         //
                                          //
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();               // Определяем подключённые модули.
}                                         //
                                          //
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();               // Определяем подключённые модули.
}                                         //
                                          //
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();               // Определяем подключённые модули.
    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();               // Определяем подключённые модули.
}                                         //
                                          //
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();                  // Определяем подключённые модули.
    Metro[0].on( MELODY(4) );                // Включить мелодию №4 - «Star Wars».
}                                            //
                                             //
void loop(){                                 //
}                                            //

Данный пример однократно воспроизведёт мелодию №4 - «Star Wars». Количество мелодий записанных в модуль зависит от версии прошивки модуля.

Описание функций библиотеки:

В данном разделе описаны функции библиотеки iarduino_Metro для работы с зуммером, при работе с другими модулями Metro те же функции могут иметь другое назначение.

Подключение библиотеки:

#include <Wire.h>           // Подключаем библиотеку Wire. Для работы с Arduino, Piranha или Metro Leonardo, библиотеку Wire можно не подключать.
#include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro.

После подключения библиотеки iarduino_Metro создавать объекты не требуется, вместо этого необходимо однократно вызвать функцию iarduino_Metro_Start(); в коде setup. Эта функция обнаружит все модули Metro, назначит им адреса на шине I2C и создаст массив объектов Metro, количество элементов которого будет совпадать с количеством найденных модулей Metro.

Определение подключённых модулей Metro:

iarduino_Metro_Start();     // В качестве аргумента функции можно указать вывод Arduino к которому подключен вход ADR модуля Metro (по умолчанию используется вывод D12).

Определение подключённых модулей Metro с возвращением их количества:

i = iarduino_Metro_Start(); // Определить все модули и записать их количество в переменную i.

После определения подключенных модулей станет доступен массив Metro, каждый элемент которого является объектом подключенного модуля Metro и предназначен для управления им.

    Например, если к управляющей плате подключено 3 любых модуля Metro, то массив Metro будет содержать 3 элемента:
  • Metro[0] - объект для управления первым модулем (ближайшим к управляющей плате);
  • Metro[1] - объект для управления вторым модулем (следующим после первого);
  • Metro[2] - объект для управления третьим модулем (дальним от управляющей платы).

Сторонние модули ша шине 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».

Переменная 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 - Зуммер можно использовать в любых проектах где требуется звукоизлучатель, например, для подачи сигналов, воспроизведения небольших мелодий и т.д.

Ссылки:

Обсуждение