- Как работи
- Необходими компоненти
- Схеми
- Код на Arduino Osclloscope
- Python (Плотер) скрипт
- Код на Arduino
- Осцилоскоп Arduino в действие
Осцилоскопът е един от най-важните инструменти, които ще намерите на работния плот на всеки електронен инженер или производител. Той се използва предимно за преглед на формата на вълната и определяне на нивата на напрежение, честотата, шума и други параметри на сигналите, приложени на неговия вход, които могат да се променят с течение на времето. Използва се също от вградени разработчици на софтуер за отстраняване на грешки в кода и техници за отстраняване на неизправности при електронни устройства по време на поправка. Тези причини правят осцилоскопа задължителен инструмент за всеки инженер. Единственият проблем е, че те могат да бъдат много скъпи, осцилоскопите, които изпълняват най-основните функции с най-малка точност, могат да струват от 45 до 100 долара, докато по-напредналите и ефективни струват над 150 долара. Днес ще демонстрирам как да използвам Arduinoи софтуер, който ще бъде разработен с любимия ми език за програмиране Python, за изграждане на евтин, 4-канален осцилоскоп Arduino, способен да изпълнява задачите, за които са разположени някои от евтините осцилоскопи като показване на вълнови форми и определяне на нивата на напрежение за сигнали.
Как работи
Този проект има две части;
- Преобразувателят на данни
- Плотерът
Осцилоскопите обикновено включват визуално представяне на аналогов сигнал, приложен към входния му канал. За да постигнем това, първо трябва да преобразуваме сигнала от аналогов в цифров и след това да начертаем данните. За преобразуването ще използваме ADC (аналогово-цифров преобразувател) на микроконтролера atmega328p, използван от Arduino за преобразуване на аналоговите данни на входния сигнал в цифров сигнал. След преобразуване, стойността за време се изпраща чрез UART от Arduino към компютъра, където плотерният софтуер, който ще бъде разработен с помощта на python, ще преобразува входящия поток от данни във форма на вълната, като нанася всяка информация спрямо времето.
Необходими компоненти
Следните компоненти са необходими за изграждането на този проект;
- Arduino Uno (Може да се използва всяка друга дъска)
- Макет
- 10k резистор (1)
- LDR (1)
- Джъмперни проводници
Необходим софтуер
- IDE на Arduino
- Python
- Python библиотеки: Pyserial, Matplotlib, Drawnow
Схеми
Схемата за осцилоскопа Arduino е проста. Всичко, което трябва да направим, е да свържем сигнала, който ще бъде изследван, към посочения аналогов щифт на Arduino. Въпреки това, ние ще се използва фоторезистора в проста настройка делител на напрежение за генериране на сигнал, за да се изследва, така че генерираната вълната ще опише нивото на напрежение, на базата на интензивността на светлината около фоторезистора.
Свържете компонентите, както е показано в схемите по-долу;
След свързване инсталацията трябва да хареса изображението по-долу.
След като всички връзки са готови, можем да продължим да пишем кода.
Код на Arduino Osclloscope
Ще пишем кодове за всеки от двата раздела. За плотера, както споменахме по-рано, ще напишем питон скрипт, който приема данните от Arduino чрез UART и Plots, докато за конвертора ще напишем скица на Arduino, която приема данните от ADC и ги преобразува в нива на напрежение, които се изпращат към плотера.
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, timeout = 0.5)
След това правим сюжета интерактивен, използвайки;
plt.ion ()
трябва да създадем функция за генериране на графика от получените данни, създавайки горната и минимална граница, която очакваме, която в този случай е 1023 въз основа на резолюцията на ADC на Arduino. Също така задаваме заглавието, обозначаваме всяка ос и добавяме легенда, за да улесним идентифицирането на сюжета.
#create фигурната функция 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 получи данните за ръкостискане, той отговаря с данни от ADC. Без това ръкостискане няма да можем да начертаем данните в реално време.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # ако arduino отговори value = port.readline () # прочетете отпечатване на отговор (стойност) #print, за да можем наблюдавайте го номер = int (стойност) # преобразуване на получените данни в цяло число ("Канал 0: {0}". формат (число)) # Сън за половин секунда. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot за отразяване на нови въведени данни plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # поддържайте парцела свеж, като изтриете данните в позиция 0
Най- пълен питон код за Ардуино осцилоскоп се дава в края на тази статия е показано по-долу.
Код на Arduino
Вторият код е скицата на Arduino, за да се получат данните, представляващи сигнала от ADC, след което изчакайте да получите сигнала за ръкостискане от софтуера на плотера. Веднага след като получи сигнала за ръкостискане, той изпраща получените данни към софтуера на плотера чрез UART.
Започваме с деклариране на щифта на аналоговия щифт на Arduino, към който ще бъде приложен сигналът.
int sensorpin = A0;
След това инициализираме и стартираме серийна комуникация със скорост на предаване 115200
void setup () { // инициализиране на серийната комуникация при 115200 бита в секунда, за да съответства на тази на скрипта на python: Serial.begin (115200); }
И накрая, функцията voidloop (), която обработва четенето на данните и изпраща данните по последователен начин на плотера.
void loop () { // четене на входа на аналогов щифт 0: float sensorValue = analogRead (сензор); байтови данни = Serial.read (); if (data == 's') { Serial.println (sensorValue); забавяне (10); // закъснение между четенията за стабилност } }
Най- пълен Arduino осцилоскоп кодекс е даден по-долу, както и в края на тази статия е показано по-долу.
int sensorpin = A0; void setup () { // инициализиране на серийната комуникация при 115200 бита в секунда, за да съответства на тази на скрипта на python: Serial.begin (115200); } void loop () { // четене на входа на аналогов щифт 0: ################################### ####################### float sensorValue = analogRead (сензор); байтови данни = Serial.read (); if (data == 's') { Serial.println (sensorValue); забавяне (10); // закъснение между четенията за стабилност } }
Осцилоскоп Arduino в действие
Качете кода в настройката на Arduino и стартирайте скрипта на python. Трябва да видите как данните започват да се излъчват през командния ред на python и графиката варира в зависимост от интензивността на светлината, както е показано на изображението по-долу.
Така че по този начин Arduino може да се използва като осцилоскоп, може да се направи и с помощта на Raspberry pi, проверете тук пълния урок за базиран на Raspberry Pi осцилоскоп.