- Як це працює
- Необхідні компоненти
- Схеми
- Ардуїнський код осклоскопа
- Сценарій Python (Плоттер)
- Код Arduino
- Осцилограф Arduino в дії
Осцилограф - це один з найважливіших інструментів, який ви знайдете на робочому столі будь-якого інженера-електроніка. Він в основному використовується для перегляду форми хвилі та визначення рівнів напруги, частоти, шуму та інших параметрів сигналів, що подаються на його вході, які можуть змінюватися з часом. Він також використовується розробниками вбудованого програмного забезпечення для налагодження коду та техніками для усунення несправностей електронних пристроїв під час ремонту. Ці причини роблять осцилограф необхідним інструментом для будь-якого інженера. Єдина проблема в тому, що вони можуть бути дуже дорогими, осцилографи, які виконують найосновніші функції з найменшою точністю, можуть коштувати від 45 до 100 доларів, тоді як більш просунуті та ефективні коштують понад 150 доларів. Сьогодні я продемонструю, як користуватися Arduinoта програмне забезпечення, яке буде розроблено з моєю улюбленою мовою програмування Python, для побудови недорогого 4-канального осцилографа Arduino, здатного виконувати завдання, для яких розгортаються деякі дешеві осцилографи, такі як відображення сигналів та визначення рівнів напруги для сигналів.
Як це працює
Цей проект має дві частини;
- Перетворювач даних
- Плоттер
Осцилографи зазвичай включають візуальне представлення аналогового сигналу, що подається на його вхідний канал. Для цього нам потрібно спочатку перетворити сигнал з аналогового в цифровий, а потім побудувати дані. Для перетворення ми будемо використовувати АЦП (аналого-цифровий перетворювач) на мікроконтролері atmega328p, який використовується Arduino для перетворення аналогових даних на вході сигналу в цифровий сигнал. Після перетворення значення за час надсилається через UART з Arduino на ПК, де програмне забезпечення плоттера, яке буде розроблено за допомогою python, перетворить вхідний потік даних у форму сигналу, будуючи кожні дані з часом.
Необхідні компоненти
Для побудови цього проекту необхідні наступні компоненти;
- Arduino Uno (можна використовувати будь-яку іншу дошку)
- Макет
- 10k резистор (1)
- LDR (1)
- Провід перемички
Необхідні програмні засоби
- IDE Arduino
- Python
- Бібліотеки Python: Pyserial, Matplotlib, Drawnow
Схеми
Схема осцилографа Arduino проста. Все, що нам потрібно зробити, - це підключити аналізований сигнал до вказаного аналогового штифта Arduino. Однак ми будемо використовувати LDR у простій установці дільника напруги для формування сигналу, що перевіряється, таким чином, що сформована форма сигналу описуватиме рівень напруги на основі інтенсивності світла навколо LDR.
Підключіть компоненти, як показано на схемі нижче;
Після підключення установка повинна сподобатися зображенню нижче.
Коли всі підключення зроблено, ми можемо продовжувати писати код.
Ардуїнський код осклоскопа
Ми будемо писати коди для кожного з двох розділів. Для плоттера, як уже згадувалося раніше, ми напишемо сценарій python, який приймає дані з Arduino через UART та Plots, тоді як для конвертера ми напишемо ескіз Arduino, який бере дані з АЦП і перетворює їх у рівні напруги, які надсилаються на плотер.
Сценарій Python (Плоттер)
Оскільки код python є більш складним, ми почнемо з нього.
Ми будемо використовувати пару бібліотек, включаючи; drawnow, Matplotlib та Pyserial із сценарієм python, про який згадувалося раніше. Pyserial дозволяє нам створити скрипт python, який може обмінюватися даними через послідовний порт, Matplotlib дає нам можливість генерувати графіки з даних, отриманих через послідовний порт, а drawnow забезпечує засіб для оновлення сюжету в режимі реального часу.
Є кілька способів встановити ці пакети на ПК, найпростіший - через pip . Pip можна встановити за допомогою командного рядка на машині Windows або Linux. PIP упакований з python3, тому я порадитиму вам встановити python3 та встановити прапорець про додавання python до шляху. Якщо у вас виникли проблеми з установкою pip, перегляньте цей офіційний веб-сайт python, щоб отримати поради.
Після встановлення pip тепер ми можемо встановлювати інші необхідні нам бібліотеки.
Відкрийте командний рядок для користувачів Windows, термінал для користувачів Linux і введіть наступне;
pip встановити
Після цього встановіть matplotlib за допомогою;
pip встановити matplotlib
Drawnow іноді встановлюють поряд з matplotlib, але для впевненості запустіть;
pip встановити drawnow - -
Після завершення встановлення ми готові написати сценарій python.
Сценарій python для цього проекту подібний до сценарію, який я написав для осцилографа на основі Raspberry Pi.
Ми починаємо з імпорту всіх бібліотек, необхідних для коду;
час імпорту імпорт matplotlib.pyplot як plt з drawnow import * import pyserial
Далі ми створюємо та ініціалізуємо змінні, які будуть використовуватися під час коду. Масив val буде використовуватися для зберігання даних, отриманих від послідовного порту, а cnt - для підрахунку. Дані в місці 0 будуть видалятися через кожні 50 підрахунків даних. Це робиться для збереження даних, що відображаються на осцилографі.
val = cnt = 0
Далі ми створюємо об’єкт послідовного порту, за допомогою якого Arduino буде взаємодіяти з нашим сценарієм python. Переконайтеся, що вказаний нижче com-порт є тим самим com-портом, через який ваша плата Arduino взаємодіє з IDE. Використовувана вище швидкість передачі даних 115200 використовувалася для забезпечення високошвидкісного зв'язку з Arduino. Щоб запобігти помилкам, послідовний порт Arduino також повинен мати можливість взаємодії з цією швидкістю передачі даних.
port = serial.Serial ('COM4', 115200, таймаут = 0,5)
Далі ми робимо сюжет інтерактивним, використовуючи;
plt.ion ()
нам потрібно створити функцію для генерації графіку з отриманих даних, створюючи верхню та мінімальну межу, яку ми очікуємо, яка в даному випадку становить 1023 на основі дозволу АЦП Arduino. Ми також встановлюємо заголовок, позначаємо кожну вісь і додаємо легенду, щоб було легко ідентифікувати сюжет.
#create the figure function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' праворуч унизу ')
Закінчивши це, ми тепер готові написати основний цикл, який бере дані із послідовного порту, коли вони є, і розміщує їх. Для синхронізації з Arduino дані рукостискання надсилаються в Arduino за допомогою скрипта python, щоб вказати його готовність до зчитування даних. Коли Arduino отримує дані рукостискання, він відповідає даними з АЦП. Без цього рукостискання ми не зможемо побудувати дані в режимі реального часу.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # if the arduino відповідає value = port.readline () # прочитати відповідь print (value) #print, щоб ми могли відстежувати це число = int (значення) # перетворити отримані дані на цілочисельний друк ('Канал 0: {0}'. формат (число)) # Сплячий режим протягом півсекунди. time.sleep (0,01) val.append (int (число)) 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 (сенсорний штифт); байтові дані = Serial.read (); якщо (дані == 's') { Serial.println (sensorValue); затримка (10); // затримка між читаннями для стабільності } }
Осцилограф Arduino в дії
Завантажте код до налаштування Arduino і запустіть скрипт python. Ви побачите, як дані починають надходити через командний рядок python, а графік змінюється залежно від інтенсивності світла, як показано на зображенні нижче.
Отже, таким чином Arduino можна використовувати як осцилограф, його також можна зробити за допомогою Raspberry pi, перегляньте тут повний посібник з осцилографа на основі Raspberry Pi.