- Как это устроено
- Необходимые компоненты
- Схемы
- Код осциллографа Arduino
- Скрипт Python (плоттера)
- Код Arduino
- Осциллограф Arduino в действии
Осциллограф - один из самых важных инструментов, которые вы найдете на рабочем столе любого инженера-электронщика или производителя. Он в основном используется для просмотра формы сигнала и определения уровней напряжения, частоты, шума и других параметров сигналов, подаваемых на его вход, которые могут изменяться со временем. Он также используется разработчиками встроенного программного обеспечения для отладки кода и техническими специалистами для устранения неполадок электронных устройств во время ремонта. Эти причины делают осциллограф незаменимым инструментом для любого инженера. Единственная проблема заключается в том, что они могут быть очень дорогими. Осциллографы, которые выполняют самые основные функции с наименьшей точностью, могут стоить от 45 до 100 долларов, в то время как более продвинутые и эффективные стоят более 150 долларов. Сегодня я продемонстрирую, как использовать Arduino.и программное обеспечение, которое будет разработано с использованием моего любимого языка программирования Python, для создания недорогого 4-канального осциллографа Arduino, способного выполнять задачи, для которых используются некоторые из дешевых осциллографов, такие как отображение форм сигналов и определение уровней напряжения. для сигналов.
Как это устроено
Этот проект состоит из двух частей;
- Конвертер данных
- Плоттер
Осциллографы обычно включают визуальное представление аналогового сигнала, подаваемого на его входной канал. Для этого нам нужно сначала преобразовать сигнал из аналогового в цифровой, а затем построить график данных. Для преобразования мы будем использовать АЦП (аналого-цифровой преобразователь) на микроконтроллере atmega328p, используемом Arduino для преобразования аналоговых данных на входе сигнала в цифровой сигнал. После преобразования значение за раз отправляется через UART с Arduino на ПК, где программное обеспечение плоттера, которое будет разработано с использованием python, преобразует входящий поток данных в форму волны, отображая данные во времени.
Необходимые компоненты
Для создания этого проекта требуются следующие компоненты;
- Arduino Uno (можно использовать любую другую плату)
- Макетная плата
- Резистор 10 кОм (1)
- LDR (1)
- Перемычки
Требуемое программное обеспечение
- IDE Arduino
- Python
- Библиотеки Python: Pyserial, Matplotlib, Drawnow
Схемы
Схема осциллографа Arduino проста. Все, что нам нужно сделать, это подключить проверяемый сигнал к указанному аналоговому выводу Arduino. Однако мы будем использовать LDR в простой настройке делителя напряжения для генерации сигнала, который необходимо исследовать, так что сгенерированная форма волны будет описывать уровень напряжения на основе интенсивности света вокруг LDR.
Подключите компоненты, как показано на схемах ниже;
После подключения настройки должны выглядеть как на изображении ниже.
Когда все соединения выполнены, мы можем приступить к написанию кода.
Код осциллографа Arduino
Мы будем писать коды для каждого из двух разделов. Для плоттера, как упоминалось ранее, мы будем писать скрипт python, который принимает данные от Arduino через UART и графики, а для преобразователя мы будем писать скетч Arduino, который принимает данные из АЦП и преобразует их в уровни напряжения, которые отправляются на плоттер.
Скрипт Python (плоттера)
Поскольку код Python более сложен, мы начнем с него.
Мы будем использовать несколько библиотек, включая: drawow, Matplotlib и Pyserial со сценарием python, как упоминалось ранее. Pyserial позволяет нам создавать скрипт python, который может обмениваться данными через последовательный порт, Matplotlib дает нам возможность создавать графики из данных, полученных через последовательный порт, а drawow предоставляет нам средства для обновления графика в реальном времени.
Есть несколько способов установить эти пакеты на ваш компьютер, самый простой - через pip . Pip может быть установлен через командную строку на машине с Windows или Linux. PIP упакован с python3, поэтому я советую вам установить python3 и установить флажок, чтобы добавить python в путь. Если у вас возникли проблемы с установкой pip, ознакомьтесь с советами на официальном веб-сайте Python.
После установки pip мы можем теперь установить другие библиотеки, которые нам нужны.
Откройте командную строку для пользователей Windows, терминал для пользователей Linux и введите следующее:
pip install pyserial
После этого установите matplotlib, используя;
pip install matplotlib
Drawnow иногда устанавливается вместе с matplotlib, но на всякий случай запустите;
pip install drawow
После завершения установки мы готовы написать скрипт python.
Скрипт python для этого проекта похож на тот, который я написал для осциллографа на основе Raspberry Pi.
Начнем с импорта всех библиотек, необходимых для кода;
время импорта импортировать matplotlib.pyplot как plt из drawow import * import pyserial
Затем мы создаем и инициализируем переменные, которые будут использоваться во время кода. Массив val будет использоваться для хранения данных, полученных из последовательного порта, а cnt будет использоваться для подсчета. Данные в ячейке 0 будут удаляться после каждых 50 подсчетов данных. Это сделано для того, чтобы данные отображались на осциллографе.
val = cnt = 0
Затем мы создаем объект последовательного порта, через который Arduino будет взаимодействовать с нашим скриптом python. Убедитесь, что указанный ниже COM-порт является тем же самым COM-портом, через который ваша плата Arduino взаимодействует с IDE. Скорость передачи 115200 бод, использованная выше, использовалась для обеспечения высокоскоростной связи с Arduino. Чтобы предотвратить ошибки, последовательный порт Arduino также должен быть включен для связи с этой скоростью передачи данных.
порт = serial.Serial ('COM4', 115200, тайм-аут = 0,5)
Затем мы делаем сюжет интерактивным, используя;
plt.ion ()
нам нужно создать функцию для генерации графика из полученных данных, создав верхний и минимальный пределы, которые мы ожидаем, которые в данном случае составляют 1023 на основе разрешения АЦП Arduino. Мы также устанавливаем заголовок, маркируем каждую ось и добавляем легенду, чтобы упростить идентификацию графика.
# создать фигуру функцию def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC output') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' нижний правый ')
После этого мы готовы написать основной цикл, который берет данные из последовательного порта, когда они доступны, и отображает их. Для синхронизации с Arduino скрипт python отправляет на Arduino данные подтверждения, чтобы указать его готовность к чтению данных. Когда Arduino получает данные подтверждения, он отвечает данными от АЦП. Без этого рукопожатия мы не сможем построить график данных в реальном времени.
while (True): port.write (b's ') #handshake с Arduino if (port.inWaiting ()): # если Arduino отвечает value = port.readline () # прочтите ответ print (value) #print, чтобы мы могли контролировать это число = int (значение) # преобразовать полученные данные в целое число print ('Channel 0: {0}'. format (number)) # Спать на полсекунды. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) # обновить график для отражения ввода новых данных plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # сохранить график свежим, удалив данные в позиции 0
Полный код Python для Arduino осциллографа приведен в конце этой статьи, как показано ниже.
Код Arduino
Второй код - это скетч Arduino, чтобы получить данные, представляющие сигнал от АЦП, а затем дождаться получения сигнала подтверждения от программного обеспечения плоттера. Как только он получает сигнал подтверждения, он отправляет полученные данные в программное обеспечение плоттера через UART.
Мы начнем с объявить штифт аналогового штифта Arduino, к которому будет применяться сигнал.
int sensorpin = A0;
Затем мы инициализируем и запускаем последовательную связь со скоростью 115200 бод.
void setup () { // инициализируем последовательную связь со скоростью 115200 бит в секунду, чтобы соответствовать таковой в скрипте python: Serial.begin (115200); }
Наконец, функция voidloop (), которая обрабатывает чтение данных и отправляет данные по последовательному каналу на плоттер.
void loop () { // считываем ввод аналогового вывода 0: float sensorValue = analogRead (sensorpin); байтовые данные = Serial.read (); если (данные == 's') { Serial.println (sensorValue); задержка (10); // задержка между чтениями для стабильности } }
Полный Arduino Осциллограф код приведен ниже, а также в конце этой статьи, показанной ниже.
int sensorpin = A0; void setup () { // инициализируем последовательную связь со скоростью 115200 бит в секунду, чтобы соответствовать таковой в скрипте python: Serial.begin (115200); } void loop () { // считываем ввод аналогового вывода 0: ################################# ##################### float sensorValue = analogRead (sensorpin); байтовые данные = Serial.read (); если (данные == 's') { Serial.println (sensorValue); задержка (10); // задержка между чтениями для стабильности } }
Осциллограф Arduino в действии
Загрузите код в программу установки Arduino и запустите скрипт python. Вы должны увидеть, как данные начинают передаваться через командную строку python, а график меняется в зависимости от интенсивности света, как показано на изображении ниже.
Вот как Arduino можно использовать в качестве осциллографа, это также можно сделать с помощью Raspberry pi, проверьте здесь полное руководство по осциллографу на основе Raspberry Pi.