Звук набора номера на телефоне - это узнаваемый и характерный звук, который ассоциируется с DTMF (Dual Tone Multi Frequency) сигналами. В этом проекте мы создадим устройство на базе Arduino, которое будет воспроизводить звуки, аналогичные звукам набора номера на телефоне, используя матричную клавиатуру и пьезодинамик.
Необходимые компоненты
- Arduino (Uno, Nano или Mega)
- Пьезодинамик
- Матричная клавиатура (4x4)
- Соединительные провода
- Макетная плата
Схема подключения
- Подключите пьезодинамик к пину 9 на Arduino.
- Подключите матричную клавиатуру к следующим пинам Arduino:
- Ряды: 9, 8, 7, 6
- Столбцы: 5, 4, 3, 2
Установка библиотеки AlashKeypadMatrix
Чтобы подключить библиотеку для Arduino, выполните следующие шаги:
-
Скачайте библиотеку AlashKeypadMatrix с официального репозитория GitHub:
-
Откройте программу Arduino IDE и перейдите в меню «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку…».
-
В открывшемся окне выберите скачанный .zip файл и нажмите «Открыть».
-
Снизу Arduino IDE появится сообщение “Библиотека добавлена. Проверьте меню “Подключить библиотеку””.
Теперь библиотека будет доступна для использования в ваших проектах.
Код для проекта
Ниже приведен код, который воспроизводит DTMF звуки при нажатии на клавиши матричной клавиатуры.
#include <AlashKeypadMatrix.h> // Подключаем библиотеку для работы с матричной клавиатурой AlashKeypadMatrix
const int buzzerPin = 11; // Пин для подключения пьезодинамика
int lowFreq[] = {897, 970, 1052, 1141}; // Низкие частоты для DTMF сигналов
int highFreq[] = {1409, 1536, 1677, 1833}; // Высокие частоты для DTMF сигналов
const byte ROWS = 4; // Четыре строки
const byte COLS = 4; // Четыре столбца
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Подключение строк к пинам Arduino
byte colPins[COLS] = {5, 4, 3, 2}; // Подключение столбцов к пинам Arduino
AlashKeypadMatrix keypad = AlashKeypadMatrix(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
pinMode(buzzerPin, OUTPUT); // Устанавливаем пин для пьезодинамика как выход
}
void loop() {
char key = keypad.getKey(); // Считываем нажатую клавишу
if (key) {
playDTMFTone(key); // Проигрываем DTMF тон для нажатой клавиши
}
}
void playDTMFTone(char key) {
int row = -1, col = -1;
// Находим строку и столбец для нажатой клавиши
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (keys[i][j] == key) {
row = i;
col = j;
break;
}
}
if (row != -1) break;
}
if (row != -1 && col != -1) {
// Проигрываем два тона одновременно
tone(buzzerPin, lowFreq[row], 1000);
delay(40);
tone(buzzerPin, highFreq[col], 1000);
delay(40);
noTone(buzzerPin);
}
}
|
Заключение
Этот проект позволяет воспроизводить характерные звуки набора номера, используя матричную клавиатуру и пьезодинамик. Такой проект может быть полезен для создания различных обучающих и демонстрационных систем, а также для изучения основ работы с DTMF сигналами и библиотеками для Arduino.