Осциллограф реального времени на Arduino


Осциллограф – это один из самых необходимых инструментов для всех электронщиков. Он используется для определения формы колебания, уровней напряжения, частоты, шума и других параметров сигнала. Его часто используют для отладки работы или ремонта какого-нибудь электронного устройства. К сожалению, современные осциллографы могут достаточно дорого стоить – примерно $45-$100 за осциллографы, которые могут выполнять только базовые функции, а более продвинутые версии этих устройств могут стоит более $150.

Проект осциллографа реального времени на Arduino

В этом проекте мы рассмотрим создание на основе платы Arduino 4-х канального осциллографа, способного выполнять все основные функции данного устройства и при этом отличающегося невысокой стоимостью изготовления. Осциллограмма будет показываться на экране компьютера – для ее построения будет использоваться программа на языке Python. Также на нашем сайте вы можете посмотреть проект осциллографа на основе платы Arduino с выводом изображения на ЖК дисплей.

Общие принципы работы проекта

Наш проект состоит из двух основных частей:

  1. Конвертер данных.
  2. Плоттер.

Осциллограф, по своей сути, должен формировать визуальное отображение аналогового сигнала, поданного на его вход. Для осуществления этого мы сначала должны преобразовать сигнал из аналоговой в цифровую форму и затем построить его график. Для этого мы будем использовать один из имеющихся в плате Arduino аналогово-цифровых преобразователей (АЦП). После проведения преобразования в цифровую форму сигнал передается через последовательный порт связи в компьютер, где специальное программное обеспечение, написанное на языке Python, будет строить его график на экране компьютера.

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

Аппаратное обеспечение

  1. Плата Arduino Uno (или любая другая) (купить на AliExpress).
  2. Фоторезистор (купить на AliExpress).
  3. Резистор 10 кОм (купить на AliExpress).
  4. Макетная плата.
  5. Соединительные провода.

Программное обеспечение

1. Arduino IDE
2. Python
3. Python Libraries: Pyserial, Matplotlib, Drawnow

Работа схемы

Схема осциллографа на основе платы Arduino представлена на следующем рисунке.

Схема осциллографа на основе платы ArduinoКак видите, она достаточно простая. Все, что нам нужно сделать, это подсоединить анализируемый сигнал к заданному аналоговому контакту платы Arduino. В качестве источника тестового сигнала в нашем проекте мы будем использовать фоторезистор (LDR), включенный в цепь простого делителя напряжения. Таким образом, напряжение сигнала, подаваемого на вход нашего осциллографа, будет зависеть от интенсивности света, падающего на фоторезистор.

После сборки схемы на макетной плате у вас должна получиться примерно следующая конструкция:

Внешний вид конструкции проекта после сборки на макетной плате

Объяснение кода программы

Для построения графика анализируемого сигнала мы, как уже указывалось ранее, будем использовать скрипт на языке python, который будет принимать данные от платы Arduino через последовательный порт связи (UART) и на их основе строить график на экране компьютера. Программа (скетч) же для Arduino будет считывать данные с выхода АЦП своего аналогового порта и передавать их скрипту на python.

Объяснение программы для Python

Для нашего проекта мы будем использовать следующие библиотеки Python: drawnow, Matplotlib и Pyserial. Библиотека Pyserial позволяет нам считывать данные из последовательного порта связи, Matplotlib обеспечивает нам возможность построения графиков, а drawnow дает нам возможность рисовать эти графики в режиме реального времени. Более подробно об использовании языка Python вместе с Arduino вы можете прочитать в следующей статье.

Существует несколько способов установки этих библиотек, самый простой из них – это через pip. Pip может быть установлен из командной строки в windows или linux. PIP поставляется вместе с пакетом python3 поэтому при установке вам просто нужно отметить галочкой нужную опцию чтобы он установился.

После того как pip будет установлен можно начинать установку всех других необходимых нам библиотек. Если у вас windows, то откройте командную строку, в linux'е откройте терминал и введите там следующую команду:

Когда эта операция выполнится, переходите к установке библиотеки matplotlib:

Иногда библиотека Drawnow устанавливается вместе с библиотекой matplotlib, но для уверенности лучше ввести еще следующую команду:

После того, как все эти установки осуществлены, можно начинать писать скрипт на python.

Вначале в программе нам необходимо подключить все библиотеки, которые мы будем использовать в программе:

Далее мы должны инициализировать все переменные, которые будем использовать в программе. Массив val мы будем использовать для хранения данных принимаемых по последовательному порту, а переменная cnt будет использоваться для счета. Данные в позиции 0 будут удаляться после каждых 50 единиц счета – это необходимо для своевременного обновления информации, отображаемой на дисплее.

Далее нам необходимо создать объект последовательного порта, через который плата Arduino будет взаимодействовать со скриптом на python. Удостоверьтесь в том, что com порт, который вы пропишите в команде ниже, является тем же самым портом, через который плата Arduino взаимодействует со средой Arduino IDE. Последовательную связь будем осуществлять на скорости 115200 бод/с. Чтобы предотвратить появление ошибок, последовательный порт Arduino также должен работать на этой скорости.

Далее сделаем график интерактивным с помощью следующей команды:

Далее нам необходимо создать функцию, которая бы строила график на основании принимаемых данных. Для графика мы должны задать минимальные и максимальные границы входных данных, максимальным значением у нас будет выступать число 1023 – это максимальное значение, которое можно получить с выхода АЦП Arduino. Также для построения график мы укажем его название, названия обоих осей и подпишем снизу легенду чтобы график можно было легко идентифицировать.

Когда все эти подготовительные операции выполнены мы можем начинать программировать основной цикл программы, в котором мы будем принимать данные по последовательному порту связи (когда они там присутствуют) и строить график на их основе. Чтобы синхронизировать этот процесс с Arduino вначале скриптом на python плате Arduino будут передаваться данные "рукопожатия" (handshake data) чтобы подтвердить свою готовность к приему данных. Когда плата Arduino будет получать эти данные "рукопожатия" она будет отвечать на них данными с выхода АЦП. Без передачи этих данных "рукопожатия" нам не удастся строить график в режиме реального времени.

Полный код программы на Python приведен в конце данной статьи.

Объяснение программы для Arduino

Программа для Arduino должна получать данные с выхода АЦП, затем ожидать сигнала "рукопожатия" от управляющей программы на Python. Как только будут получены эти данные "рукопожатия" он передает требуемые данные через последовательный порт связи (UART).

Вначале в программе нам необходимо инициализировать используемые контакты.

Далее мы инициализируем последовательную связь со скоростью 115200 бод/с.

Далее в функции void loop() мы будем считывать данные с выхода АЦП и передавать их через последовательный порт связи программе на Python, которая будет строить график на экране компьютера.

Полный код программы для Arduino приведен в конце данной статьи.

Тестирование работы осциллографа

Загрузите программу в плату Arduino и запустите на выполнение скрипт на python. После этого вы должны увидеть принимаемый поток данных в командной строке оболочки python и график на экране компьютера, который будет меняться в зависимости от освещенности фоторезистора.

Примерный вид осциллограммы на экране компьютера

Исходный код программы (скетча)

Код программы для Python

Комментарии к коду программы переведены выше в статье.

Код программы для Arduino

(Проголосуй первым!)
Загрузка...
7 664 просмотров

Комментарии

Осциллограф реального времени на Arduino — 2 комментария

  1. Открою вам огромную и страшную тайну...
    Осциллоскоп такого уровня уже встроен в Arduino IDE...
    "Serial Plotter" называется, или "Плоттер по последовательному порту".

    • Спасибо за подсказку, сейчас я тоже знаю что такой плоттер в Arduino IDE есть и у нас на сайте есть пример его использования в статье про детектор лжи на Ардуино. Но эта возможность появилась в Arduino IDE сравнительно недавно. На момент написания оригинала этой статьи (я ее перевел с иностранного сайта) - такой возможности в Arduino IDE еще не было

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *