КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

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

Исходники изображение:
SVG, PNG (1000px), PNG (5000px), — id:1015
Библиотеки:

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

Модуль 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();               // Определяем подключённые модули.
}                                         //
                                          //
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();                  // Определяем подключённые модули.
    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();                  // Определяем подключённые модули.
}                                            //
                                             //
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 те же функции могут иметь другое назначение.

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

#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».

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

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями