Осциллограф на ардуино для компьютера программа
Цифровые осциллографы используются любителями электроники и это одна из привычных вещей, находящихся за их рабочими столами. Но покупка готового решения может влететь в копеечку, поэтому я решил, что соберу собственный осциллоскоп своими руками. Этот базовый проект поможет вам повысить свои навыки и в итоге у вас будет свой самодельный неплохой прибор, который облегчит вам жизнь.
Шаг 1: Необходимые материалы
- Ноутбук x1
- Ардуино x 1 (UNO,PRO MINI, NANO –подойдёт любой , кроме MEGA)
- Кабели со штекерами x 2
- Макетная плата x 1
- Клипсы аллигаторы x 2
- Кабель джек папа-папа на 3.5 мм x 1
- Источник аудио, или другого сигнала, чью форму вы хотите увидеть
Шаг 2: Код и программа осциллоскопа
После подключения, просто загрузите в него код из zip-архива. Этот код просто считывает напряжение на аналоговых пинах A0-A5 или A7 Ардуино (в зависимости от вашей платы), а затем конвертирует его в значение, варьирующееся от 0 до 1023. Далее это значение отправляется на компьютер через порт USB.
Пины A0-A5 или A7 (в зависимости от вашей платы) действуют в качестве 6 или 8 каналов осциллоскопа, но софт позволяет отобразить только три канала за раз.
После того, как вы открыли программу осциллоскопа вслед за загрузкой скетча, выберете нужные параметры baud rate (скорость передачи) и COM-порт, а затем откройте каналы.
Шаг 3: Принцип действий
- Подключите Ардуино
- Загрузите код
- Пустите сигнал через пины A0 — A5 или A7 (в зависимости от вашей платы). Я выбрал сигнал, идущий от моего телефона через джек. Один конец провода был подключен к телефону, а на другом конце я подключил землю к GND Ардуино, а второй аллигатор был подключен к одному из аудиоканалов. (в моем случае правый канал аудиосигнала) .
- Откройте программу осциллографа
- Выберите COM-порт и baud rate
- Откройте каналы и всё готово!
Шаг 4: Особенности
- Разрешение осциллоскопа: примерно 0.0049 Вольта (4.9мВ)
- Частота обновления: 1КГц
- Скорость передачи: 115200
- Диапазон напряжения: 0-5 Вольт
- Он может отображать одновременно 3 канала
Замечание: не превышайте на электронном осциллографе предел в 5 Вольт, или вы поджарите свой Ардуино.
- Напряжение нельзя превышать, оно находится в диапазоне 0-5 Вольт
- Любой сигнал выше 1КГц не будет замечен Ардуино, либо же он будет определяться как мусорные значения (помехи)
- Не пробуйте измерить сигналы AC, так как аналоговые пины не приспособлены для этого и в конце концов вы либо повредите Ардуино, либо засечёте позитивную половину
Шаг 5: Все готово!
Итак, я думаю, что было довольно просто сделать свой осциллограф на Ардуино. Надеюсь, вам всё понравилось.
Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.
Осциллограф – это один из самых необходимых инструментов для всех электронщиков. Он используется для определения формы колебания, уровней напряжения, частоты, шума и других параметров сигнала. Его часто используют для отладки работы или ремонта какого-нибудь электронного устройства. К сожалению, современные осциллографы могут достаточно дорого стоить – примерно $45-$100 за осциллографы, которые могут выполнять только базовые функции, а более продвинутые версии этих устройств могут стоит более $150.
В этом проекте мы рассмотрим создание на основе платы Arduino 4-х канального осциллографа, способного выполнять все основные функции данного устройства и при этом отличающегося невысокой стоимостью изготовления. Осциллограмма будет показываться на экране компьютера – для ее построения будет использоваться программа на языке Python. Также на нашем сайте вы можете посмотреть проект осциллографа на основе платы Arduino с выводом изображения на ЖК дисплей.
Общие принципы работы проекта
Наш проект состоит из двух основных частей:
Осциллограф, по своей сути, должен формировать визуальное отображение аналогового сигнала, поданного на его вход. Для осуществления этого мы сначала должны преобразовать сигнал из аналоговой в цифровую форму и затем построить его график. Для этого мы будем использовать один из имеющихся в плате Arduino аналогово-цифровых преобразователей (АЦП). После проведения преобразования в цифровую форму сигнал передается через последовательный порт связи в компьютер, где специальное программное обеспечение, написанное на языке Python, будет строить его график на экране компьютера.
Необходимые компоненты
Аппаратное обеспечение
- Плата Arduino Uno (или любая другая) (купить на AliExpress).
- Фоторезистор (купить на AliExpress).
- Резистор 10 кОм (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Программное обеспечение
1. Arduino IDE
2. Python
3. Python Libraries: Pyserial, Matplotlib, Drawnow
Работа схемы
Схема осциллографа на основе платы 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'е откройте терминал и введите там следующую команду:
В этой статье мы рассмотрим создание самодельного (DIY) осциллографа на основе платы Arduino и ЖК графического дисплея 128x64, способного работать в диапазоне от 10 Гц до 50 кГц. Это достаточно широкий диапазон, причем наш осциллограф не будет использовать внешний АЦП (аналогово-цифровой преобразователь), только плату Arduino.
Результаты работы осциллографа будут отображаться на сравнительно большом ЖК дисплее (ST7920) с разрешением 128x64 пикселов. Область для вывода результатов измерений будет иметь размер 96x64, а размер информационной области будет составлять 32x64 пикселов.
Также на нашем сайте вы можете посмотреть проект осциллографа на основе платы Arduino с выводом изображения на экран компьютера.
Необходимые компоненты
- Плата Arduino Nano R3 (купить на AliExpress).
- Конденсатор 100 мкФ (купить на AliExpress).
- ST7920 LCD 128x64 (графический ЖК дисплей) (купить на AliExpress).
- Потенциометр (2 шт.) (купить на AliExpress).
- Кнопочный переключатель, мгновенный (Momentary) (3 шт.).
Стоимость комплектующих для сборки данного осциллографа, как вы можете видеть, сравнительно небольшая. Если вы раньше не работали с графическим дисплеем, используемом в данном проекте, то на нашем сайте вы можете прочитать статью про подключение графического ЖК дисплея ST7920 к плате Arduino.
Работа схемы
Схема осциллографа 10 Гц – 50 кГц на основе платы Arduino Nano и ЖК дисплея ST7920 представлена на следующем рисунке.
Данный осциллограф будет обладать следующими особенностями:
- автоспуск (дисплей очень стабильный);
- скорость сканирования: 0.02ms/div~10ms/div, 9 уровней отображения;
- функция удержания (Hold function): "замораживает" изображение на экране дисплея.
Первоначально подобный осциллограф был описан в блоге Wu Hanqing, но автор этого проекта внес в него небольшие изменения. Как можно видеть из представленного в конце статьи видео, осциилограф обеспечивает достаточно четкую картинку на сравнительно большом экране, хорошо работает автопуск. Вертикальная позиция изображения регулируется с помощью потенциометра 50 кОм, для управления контрастностью дисплея используется потенциометр 10 кОм. Нами осциллограф протестирован с помощью генератора синусоидальных и прямоугольных импульсов.
Данный осциллограф не является профессиональным инструментом, однако он хорошо подойдет для образовательных целей, а также для тестирования несложных устройств.
Осциллограф является одним из самых востребованных инструментов в мастерской любого радиолюбителя, он позволяет наглядно визуализировать различные сигналы. В данной статье мы рассмотрим создание осциллографа на основе платы Raspberry Pi и модуля АЦП (аналого-цифрового преобразования) с выводом осциллограммы на экран монитора.
Аналогичный проект осциллографа на нашем сайте мы рассматривали на основе платы Arduino – с выводом результатов на экран компьютера, но более востребованным на нашем сайте оказался проект осциллографа на основе платы Arduino и TFT дисплея с диагональю 2,4 дюйма.
Общие принципы работы проекта
Наш проект осциллографа на основе платы Raspberry Pi будет базироваться на выполнении следующих операций:
- Осуществление АЦП входного сигнала.
- Подготовка данных для визуализации.
- Построение графика (осциллограммы).
Структурная схема работы проекта показана на следующем рисунке:
Необходимые компоненты
Аппаратное обеспечение
- Плата Raspberry Pi (купить на AliExpress).
- SD карта на 8 или 16 Гб.
- LAN/Ethernet кабель.
- Источник питания или USB кабель.
- ADS1115 ADC (аналого-цифровой преобразователь) (купить на AliExpress).
- Фоторезистор (опционально, для теста проекта) (купить на AliExpress).
- Резистор 1 или 10 кОм (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
- Монитор (или заменяющее его устройство) для отображения информации.
Программное обеспечение
Для написания кода программы для данного проекта понадобятся модули matplotlib и drawnow , написанные на python. Данные модули будут использоваться для визуализации данных. Также понадобится модуль Adafruit для подключения АЦП ADS1115.
Данный проект будет работать независимо от того, какая операционная система установлена на Raspberry Pi, но мы использовали в нем Raspberry Pi stretch OS – мы надеемся, что вы знакомы с данной операционной системой и вы знаете как подключаться к плате Raspberry Pi по протоколу SSH с использованием специализированного программного обеспечения (например, putty).
Примечание : вполне ожидаемо что данный проект будет успешно работать и на современной Raspberry Pi OS.
Схема проекта
Схема осциллографа на основе платы Raspberry Pi представлена на следующем рисунке.
Для преобразования аналогового входного сигнала в цифровую форму мы использовали модуль АЦП ADS1115. Применение данного модуля необходимо в связи с тем, что плата Raspberry Pi, в отличие, к примеру, от платы Arduino, не имеет собственных встроенных АЦП. Мы использовали модуль АЦП ADS1115 поскольку он имеет хорошую разрешающую способность (16 бит), хороший даташит и неплохие рекомендации по его применению от компании Adafruit.
Модуль АЦП ADS1115 подключается к плате Raspberry Pi по протоколу I2C, его соединения с платой Raspberry Pi следующие:
VDD – 3.3v
GND – GND
SDA – SDA
SCL – SCL
После сборки проекта у вас должна получиться конструкция примерно следующего вида:
Установка необходимых библиотек для Raspberry Pi
Перед тем, как начать писать код программы для нашего проекта осциллографа, мы должны задействовать интерфейс I2C в плате Raspberry Pi и установить необходимо программное обеспечение (библиотеки). Для этого выполните следующую последовательность шагов:
скетч для ардуино (все комментарии в скетче указаны автором)
int regim=1;
int flag=0;
void setup()
digitalWrite(07, HIGH);
Serial.begin(128000);//скорость СОМ порта должна совпатать со скорость в драйвере
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
>
void loop()
if(digitalRead(07)==HIGH&&flag==0)//если кнопка нажата
// и перемення flag равна 0, то …
regim++;
flag=1;
if(regim>4)//ограничим количество режимов
regim=1;//так как мы используем только одну кнопку,
// то переключать режимы будем циклично
>
>
if(digitalRead(07)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна — 1, то …
flag=0;//обнуляем переменную "knopka"
>
if(regim==1)//первый режим
digitalWrite(2, HIGH);//включение светодиода
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
// читаем аналоговый вход pin 0:
int port0 = analogRead(A0);
//Преобразовываем аналоговые показания (которые идут от 0 до 1023) в напряжение (0 — 5 В)
float voltageport0 = port0 * (4.745 / 1023.000);//4.745 опорное напряжение, замеряется при калибровке на плате
// выводим значение напряжения в порт
Serial.println(voltageport0,3);// печатаем значение в порт и жмем энтер
//задержка для стабильности
delay(1);
>
if(regim==2)//второй режим
digitalWrite(2, HIGH);//включение светодиодов
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
Serial.print(voltageport0,3);// печатаем значение в порт
Serial.print(" ");// печатаем таб
Serial.println(voltageport1,3);// печатаем значение в порт и жмем энтер
delay(1);
>
if(regim==3)//Третий режим
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
int port2 = analogRead(A2);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
float voltageport2 = port2 * (4.745 / 1023.000);
Serial.print(voltageport0,3);
Serial.print(" ");
Serial.print(voltageport1,3);
Serial.print(" ");
Serial.println(voltageport2,3);
delay(1);
>
if(regim==4)//Четвертый режим
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
int port2 = analogRead(A2);
int port3 = analogRead(A3);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
float voltageport2 = port2 * (4.745 / 1023.000);
float voltageport3 = port3 * (4.745 / 1023.000);
Serial.print(voltageport0,3);
Serial.print(" ");
Serial.print(voltageport1,3);
Serial.print(" ");
Serial.print(voltageport2,3);
Serial.print(" ");
Serial.println(voltageport3,3);
delay(1);
>
>
Читайте также: