DIY мини-осциллограф на Arduino Nano — пошаговое руководство
Компоненты и материалы
| Arduino Nano R3 | ×1 |
| OLED-дисплей 0.96″ SSD1306 (64×128) | ×1 |
| Тактильные кнопки (Top Actuated) | ×9 |
| Диоды 1N4148 | ×4 |
Дополнительно понадобятся (не в таблице):
- Конденсатор 104 (0.1 мкФ)
- Резисторы: 100 Ом, 12 кОм, 120 кОм, 510 кОм
Приложения и сервисы
- Arduino IDE
О проекте
В этом руководстве показано, как сделать домашний мини-осциллограф. Проект простой и доступный для повторения. Код не мой — я лишь оформил урок. Исходный код взят из стороннего источника (ссылка ниже). Вопросы и предложения — в комментариях к YouTube-видео, не забудьте лайк и подписку!
Источник кода (radiopench.blog96.fc2.com)
Что такое осциллограф?
Осциллограф (ранее — осциллограф, просторечно — «скоп» или «o-scope», CRO — катодно-лучевой, DSO — цифровой накопительный) — электронный измерительный прибор, графически отображающий изменяющиеся сигналы (обычно напряжение) как двумерный график зависимости одного или нескольких сигналов от времени. Другие сигналы (звук, вибрация) можно преобразовать в напряжение и отобразить.
На экране: ось Y — напряжение, ось X — время (калиброванная сетка). Форму волны анализируют на амплитуду, частоту, время подъема, интервалы, искажения и др. Современные цифровые приборы вычисляют и показывают эти параметры автоматически. Раньше измерения делали вручную по шкалам на экране.
Схемы подключения
Важно: Соблюдайте точное соответствие схеме.
Доступны три варианта схем (изображения в исходнике). Оригинал: radiopench.blog96.fc2.com, Wikipedia.
Код прошивки
Скетч использует библиотеки Wire, Adafruit_GFX, Adafruit_SSD1306, avr/pgmspace.h, EEPROM.h. Дисплей 128×64, I2C адрес 0x3C. Опорное напряжение АЦП — внутреннее 1.1В. Прерывание на пине 2 (INT0) для синхронизации.
Основные функции:
setConditions()— настройка диапазонов по вертикали (0.2В–50В) и горизонтали (200мкс–50мс), авто/фиксированные режимыreadWave()— захват 200 отсчетов с настраиваемой частотой дискретизации (через предделитель АЦП иdelayMicroseconds/asm("nop"))dataAnalize()— поиск мин/макс/среднего, автошкала, определение точки синхронизации (по фронту)writeCommonImage()— отрисовка сетки, осей, метокplotData()— рисование волны линиямиdispInf()— вывод информации: диапазоны, напряжение, статус синхроsaveEEPROM()/loadEEPROM()— сохранение настроек в EEPROMpin2IRQ()— обработка кнопок (Select, Up, Down, Hold) через прерывание
Управление 4 кнопками (Select, Up, Down, Hold) и переключателем 1/10x (аттенюатор). Настройки: вертикальный диапазон, горизонтальный (база времени), полярность синхро, позиция курсора. Режим Hold замораживает экран.
Полный код доступен в разделе Code исходника.
Производственный процесс
- Сборка домашней машины для написания домашних заданий (плоттер-писатель)
- DIY-консоль управления Photoshop на Arduino Nano RP2040 Connect
- Самостоятельное изготовление деталей из углеродного волокна: Пошаговое руководство для домашнего мастера
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание настраиваемой «бьющейся» клавиши на Arduino: пошаговое руководство
- Измерение массы Земли с Arduino: пошаговое руководство по DIY
- Создание PHP-веб-интерфейса для управления Arduino Uno
- Генерация музыкальных тонов на Arduino: полный спектр 88 клавиш пианино
- Автоматическая дверь на Arduino с ультразвуковым датчиком HC-SR04
- Цифровой компас в реальном времени на Arduino и Processing