JX Wave Generator — Генератор сигналов на Arduino с DDS AD9833 и OLED-дисплеем
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino Nano R3 | 1 | Подойдет практически любая модель Arduino |
| OLED-дисплей SH1106 I2C 128x64 (4 пина) | 1 | |
| Модуль DDS AD9833 | 1 | Генератор синусоиды/треугольника/прямоугольника |
| Ротационный энкодер с кнопкой | 1 | Требуется паяльник для монтажа |
| Модуль ротационного энкодера | 1 | Удобнее для макетной платы |
| Релейный модуль 5В (опционально) | 1 | Для переключения AC/DC связи выхода |
| Ридовое реле 5В 500 Ом | 1 | Лучше для слабых сигналов, подключается напрямую к пинам Arduino (10 мА) |
| Конденсатор 10 мкФ | 1 | |
| Конденсатор 10 нФ (полиэстеровый) | 1 | |
| Блок питания AC-DC 100-220В → 5В (опционально) | 1 | Для автономного питания без USB |
Необходимые инструменты
- Паяльник (не обязателен, если собираете на макетной плате)
Приложения и онлайн-сервисы
- image2cpp — конвертация пользовательских иконок в шестнадцатеричный формат для PROGMEM
О проекте
Давно откладывал покупку осциллографа. После его приобретения стало понятно, что для хоббийной диагностики аудиосхем и не только нужен недорогой генератор сигналов. Соединив увлечение электроникой и программированием, лучшее решение — собрать его самостоятельно на базе Arduino.
Основные функции
- Диапазон частот: 1 Гц — 999 999 Гц
- Два режима изменения частоты: логарифмический и по отдельным разрядам
- Три типа волн: синусоида, треугольник, прямоугольник
- Выбор типа выходной связи: AC или DC
- Режим плавного перехода (sweep) между двумя заданными частотами
- Управление исключительно одним энкодером
- Встроенная заставка для продления ресурса OLED-дисплея

Краткая справочная карта управления

Прототип
Использовался готовый релейный модуль с контактами 10А, так как под рукой не было микрoreed-реле. Это был бы лучший выбор, чтобы избежать дополнительных транзисторов, диодов и резисторов, когда силовые реле не нужны. Цифровой пин Arduino выдает максимум 40 мА, поэтому электромеханическое реле с катушкой 120/150 Ом подключить напрямую нельзя.
ОСТОРОЖНО! При работе с сетевым напряжением соблюдайте меры безопасности. Риск удара током и повреждения глаз/кожи. Берегите свою жизнь — она одна!




Программный код
Проект состоит из трёх файлов:
JX_Wave_Generator_8.7.7.ino— основной скетчJXWG_Defs.h— определения констант, пинов, структур и переменныхJXWG_Graphics.h— графические ресурсы (иконки в PROGMEM)
JX_Wave_Generator_8.7.7.ino (основная логика)
Версия 8.7.7. Мелкая ревизия от 16.01.2021. Код лицензирован по MIT. Реализована машина состояний с режимами: LOGARITHMIC, SINGLEDIGIT, SWEEP, OPTIONS и подрежимами настройки. Используются прерывания от кнопки энкодера, библиотека SimpleRotary для энкодера и адаптированная Adafruit_SH1106 для дисплея. Настройки сохраняются в EEPROM (структура config_type).
JXWG_Defs.h (определения)
Содержит: пины подключения (энкодер, реле, AD9833), константы режимов, типы волн (SQUARE, SINE, TRIANGLE), режимы связи (AC, DC, OFF), макросы для работы с EEPROM, структуру конфигурации и указатель на функцию сброса микроконтроллера.
JXWG_Graphics.h (графика)
Массивы байт в PROGMEM для всех иконок: режимы работы (лог, цифра, sweep), типы волн (квадрат, синус, треугольник), режимы связи (AC, DC, OFF), параметры sweep (min, max, step, opt, start, pause), маленькие иконки для строки состояния. Общий объём ~1148 байт флеш-памяти.
Схемы подключения


Производственный процесс
- Высокоскоростная фотография капель воды на Arduino Nano — DIY-триггер для вспышки
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino
- Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
- Подключение Arduino Mega к GPS-модулю NEO‑6M: пошаговое руководство
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом