Звук набора номера на Arduino

Проект воспроизводит DTMF сигналы при нажатии на клавиши матричной клавиатуры, создавая звуки, аналогичные звукам набора номера на телефоне. Этот проект идеально подходит для создания различных обучающих и демонстрационных систем.

вук набора номера на телефоне - это узнаваемый и характерный звук, который ассоциируется с DTMF (Dual Tone Multi Frequency) сигналами. В этом проекте мы создадим устройство на базе Arduino, которое будет воспроизводить звуки, аналогичные звукам набора номера на телефоне, используя матричную клавиатуру и пьезодинамик.

Необходимые компоненты

  • Arduino (Uno, Nano или Mega)

  • Пьезодинамик

  • Матричная клавиатура (4x4)

  • Соединительные провода

  • Макетная плата

Схема подключения

  1. Подключите пьезодинамик к пину 9 на Arduino.

  2. Подключите матричную клавиатуру к следующим пинам Arduino: - Ряды: 9, 8, 7, 6 - Столбцы: 5, 4, 3, 2

    Схема подключения

Установка библиотеки AlashKeypadMatrix

Чтобы подключить библиотеку для Arduino, выполните следующие шаги:

  1. Скачайте библиотеку AlashKeypadMatrix с официального репозитория GitHub:

  1. Откройте программу Arduino IDE и перейдите в меню «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку…».

  2. В открывшемся окне выберите скачанный .zip файл и нажмите «Открыть».

  3. Снизу Arduino IDE появится сообщение «Библиотека добавлена. Проверьте меню «Подключить библиотеку»».

Теперь библиотека будет доступна для использования в ваших проектах.

Код для проекта

Ниже приведен код, который воспроизводит DTMF звуки при нажатии на клавиши матричной клавиатуры.

dial_tone_sound.ino
#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.