- Поток на проекта:
- Изисквания към проекта
- Електрическа схема:
- Инсталирайте зависимости за осцилоскоп Raspberry Pi:
- Python код за осцилоскоп Raspberry Pi:
- Осцилоскоп Raspberry Pi в действие:
Здравейте момчета, добре дошли в днешната публикация. Едно от най-завладяващите неща в това да бъдеш производител е да знаеш как да разработваш импровизирани инструменти, никога няма да заседнеш да работиш по какъвто и да е проект, когато имаш такава гъвкавост. Така че днес ще споделя как да създам импровизирана версия на един от най-важните инструменти в електротехниката / електрониката, базирана на Raspberry Pi; Осцилоскопът.
Осцилоскопът е електронен тестов инструмент, който позволява визуализация и наблюдение на променливи напрежения на сигнала, обикновено като двуизмерен график с един или повече сигнали, нанесени във времето. Днешният проект ще се стреми да възпроизведе възможностите за визуализация на сигнала на осцилоскопа, използвайки Raspberry Pi и аналогово-цифров преобразуващ модул.
Поток на проекта:
Повторяването на визуализацията на сигнала на осцилоскопа с помощта на Raspberry Pi ще изисква следните стъпки;
1. Извършете цифрово в аналогово преобразуване на входния сигнал
2. Подгответе получените данни за представяне
3. Нанесете данните на графиката на времето в реално време
Опростена блок-схема за този проект ще изглежда като диаграмата по-долу.
Изисквания към проекта
Изискването за този проект може да бъде класифицирано на две:
- Хардуерни изисквания
- Софтуерни изисквания
Хардуерни изисквания
За изграждането на този проект са необходими следните компоненти / част;
- Raspberry pi 2 (или всеки друг модел)
- 8 или 16GB SD карта
- LAN / Ethernet кабел
- Захранване или USB кабел
- ADS1115 ADC
- LDR (по избор като предназначен за тест)
- 10k или 1k резистор
- Джъмперни проводници
- Макет
- Монитор или друг начин да видите работния плот на pi (включително VNC)
Софтуерни изисквания
Софтуерните изисквания за този проект са основно модулите на python ( matplotlib и drawnow ), които ще се използват за визуализация на данни, и модулът Adafruit за взаимодействие с ADS1115 ADC чипа. Ще покажа как да инсталирам тези модули на Raspberry Pi, докато продължаваме.
Въпреки че този урок ще работи независимо от използваната Raspberry Pi OS, аз ще използвам Raspberry Pi stretch OS и ще предположа, че сте запознати с настройването на Raspberry Pi с Raspbian stretch OS и знаете как да SSH в малината pi с помощта на терминален софтуер като шпакловка. Ако имате проблеми с нещо от това, на този уебсайт има тонове уроци за Raspberry Pi, които могат да ви помогнат.
С всички хардуерни компоненти на място, нека създадем схемите и свържем компонентите заедно.
Електрическа схема:
За да преобразуваме аналоговите входни сигнали в цифрови, които могат да бъдат визуализирани с Raspberry Pi, ще използваме ADS1115 ADC чип. Този чип става важен, тъй като Raspberry Pi, за разлика от Arduino и повечето микроконтролери, няма вграден аналогово-цифров преобразувател (ADC). Въпреки че бихме могли да използваме всеки ADC чип, съвместим с raspberry pi, аз предпочитам този чип поради високата му разделителна способност (16 бита) и добре документирания лист с данни и инструкции за употреба от Adafruit. Можете също да проверите нашия урок за Raspberry Pi ADC, за да научите повече за него.
ADC е устройство, базирано на I2C, и трябва да бъде свързано към Raspberry Pi, както е показано в схемите по-долу.
За по-голяма яснота, пиновата връзка между двата компонента също е описана по-долу.
ADS1115 и Raspberry Pi Connections:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
След като свържете всички връзки, включете вашия pi и продължете да инсталирате посочените по-долу зависимости.
Инсталирайте зависимости за осцилоскоп Raspberry Pi:
Преди да започнем да пишем скрипта на python, за да изтеглим данни от ADC и да ги начертаем на жива графика, трябва да активираме комуникационния интерфейс I2C на Raspberry Pi и да инсталираме софтуерните изисквания, споменати по-рано. Това ще бъде направено в стъпките по-долу, така че е лесно да се следват:
Стъпка 1: Активирайте интерфейса на Raspberry Pi I2C
За да активирате I2C, от терминала стартирайте;
sudo raspi-config
Когато панелите за конфигуриране се отворят, изберете опции на интерфейса, изберете I2C и щракнете върху активиране.
Стъпка 2: Актуализирайте Raspberry pi
Първото нещо, което правя преди да започна какъвто и да е проект, е да актуализирам Pi. По този начин съм сигурен, че всяко нещо в операционната система е актуално и няма да изпитвам проблем със съвместимостта с най-новия софтуер, който избера да инсталирам на Pi. За да направите това, изпълнете под две команди:
sudo apt-get актуализация sudo apt-get надстройка
Стъпка 3: Инсталирайте библиотеката Adafruit ADS1115 за ADC
С извършената актуализация вече сме готови да инсталираме зависимостите, започвайки с модула на Adafruit python за чипа ADS115. Уверете се, че сте в домашната директория на Raspberry Pi, като стартирате;
cd ~
след това инсталирайте build-essentials чрез стартиране;
sudo apt-get инсталирайте компилацията на python-dev python-smbus git
След това клонирайте папката Adafruit git за библиотеката, като стартирате;
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Превключете в директорията на клонирания файл и стартирайте инсталационния файл;
cd Adafruit_Python_ADS1x1z sudo python setup.py инсталиране
След инсталирането екранът ви трябва да изглежда като изображението по-долу.
Стъпка 4: Тествайте библиотеката и комуникацията 12C.
Преди да продължим с останалата част от проекта, е важно да тестваме библиотеката и да се уверим, че ADC може да комуникира с малиновия pi през I2C. За целта ще използваме примерен скрипт, който се доставя с библиотеката.
Докато все още сте в папката Adafruit_Python_ADS1x15, променете директорията на директорията с примери, като стартирате;
cd примери
След това изпълнете пример sampletest.py, който показва стойността на четирите канала на ADC в таблична форма.
Изпълнете примера, като използвате:
python simpletest.py
Ако модулът I2C е активиран и връзките са добри, трябва да видите данните, както е показано на изображението по-долу.
Ако възникне грешка, проверете дали ADC е добре свързан с PI и комуникацията I2C е активирана на Pi.
Стъпка 5: Инсталирайте Matplotlib
За да визуализираме данните, трябва да инсталираме модула matplotlib , който се използва за нанасяне на всички видове графики в python. Това може да стане чрез стартиране;
sudo apt-get инсталирайте python-matplotlib
Трябва да видите резултат като изображението по-долу.
Стъпка 6: Инсталирайте модула Drawnow python
И накрая, трябва да инсталираме модула drawnow python. Този модул ни помага да предоставяме актуални актуализации на графиката за данни.
Ще инсталираме drawnow чрез инсталатора на пакета на python; pip , така че трябва да се уверим, че е инсталиран. Това може да стане чрез стартиране;
sudo apt-get инсталирайте python-pip
След това можем да използваме pip, за да инсталираме пакета drawnow , като стартираме:
sudo pip инсталирайте drawnow
След като го стартирате, трябва да получите резултат като изображението по-долу.
С всички инсталирани зависимости вече сме готови да напишем кода.
Python код за осцилоскоп Raspberry Pi:
Кодът на python за този Pi Oscilloscope е доста прост, особено ако сте запознати с модула python matplotlib . Преди да ни покаже целия код, ще се опитам да го разбия на части и да обясня какво прави всяка част от кода, за да имате достатъчно познания, за да разширите кода, за да правите повече неща.
На този етап е важно да преминете към монитор или да използвате VNC viewer, всичко, през което можете да видите работния плот на вашия Raspberry Pi, тъй като графиката, която се нанася, няма да се показва на терминала.
С монитора като интерфейс отворете нов файл на python. Можете да го наричате с всяко име, което искате, но аз ще го наричам scope.py.
sudo nano scope.py
Със създадения файл първото нещо, което правим, е да импортираме модулите, които ще използваме;
импортиране време импортиране matplotlib.pyplot като plt от drawnow import * import Adafruit_ADS1x15
След това създаваме екземпляр на библиотеката ADS1x15, указващ ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
След това задаваме печалбата на ADC. Има различни диапазони на усилване и трябва да бъдат избрани въз основа на напрежението, което очаквате на входа на ADC. За този урок ние изчисляваме 0 - 4.09v, така че ще използваме печалба от 1. За повече информация относно печалбата можете да проверите таблицата с данни ADS1015 / ADS1115.
ПЕЧАЛБА = 1
След това трябва да създадем променливите на масива, които ще се използват за съхраняване на данните, които ще бъдат нанесени, и друга, която да служи като брой.
Val = cnt = 0
След това се запознаваме с намеренията си да направим интерактивния сюжет интуитивен, за да ни даде възможност да начертаем данните на живо.
plt.ion ()
След това започваме непрекъснато преобразуване на ADC, като посочваме ADC канала, в този случай канал 0 и също така посочваме печалбата.
Трябва да се отбележи, че всичките четири ADC канала на ADS1115 могат да се четат едновременно, но 1 канал е достатъчен за тази демонстрация.
adc.start_adc (0, печалба = ПЕЧАЛБА)
След това създаваме функция def makeFig , за да създадем и зададем атрибутите на графиката, която ще съдържа нашия график на живо. Първо задаваме границите на оста y с помощта на ylim , след което въвеждаме заглавието на графиката и името на етикета, преди да посочим данните, които ще бъдат нанесени, и стила и цвета на графиката с помощта на plt.plot (). Също така можем да посочим канала (както беше посочен канал 0), за да можем да идентифицираме всеки сигнал, когато се използват четирите канала на ADC. plt.legend се използва, за да посочи къде искаме информацията за този сигнал (например Канал 0) да се показва на фигурата.
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'долу вдясно')
След това пишем цикъла while, който ще се използва, постоянно чете данни от ADC и съответно актуализира графиката.
Първото нещо, което правим, е да прочетем стойността на преобразуване ADC
стойност = adc.get_last_result ()
След това отпечатваме стойността на терминала само за да ни даде друг начин за потвърждаване на нанесените данни. Изчакваме няколко секунди след отпечатването, след което добавяме данните към списъка (val), създаден за съхраняване на данните за този канал.
print ('Channel 0: {0}'. format (value)) time.sleep (0.5) val.append (int (value))
След това се обаждаме на drawnow, за да актуализираме сюжета.
drawnow (makeFig)
За да сме сигурни, че най-новите данни са налични в графиката, изтриваме данните с индекс 0 след всеки 50 броя от данни.
cnt = cnt + 1 if (cnt> 50): val.pop (0)
Това е всичко!
Най- пълен Python код е даден в края на този урок.
Осцилоскоп Raspberry Pi в действие:
Копирайте пълния код на python и го поставете във файла python, който създадохме по-рано, не забравяйте, че ще ни е необходим монитор, за да видим графика, така че всичко това трябва да бъде направено от VNC или със свързан монитор или екран.
Запазете кода и стартирайте с помощта на;
sudo python scope.py
Ако сте използвали различно име, различно от scope.py, не забравяйте да промените това, за да съвпадне.
След няколко минути трябва да видите отпечатването на ADC данните на терминала. Понякога може да получите предупреждение от matplotlib (както е показано на изображението по-долу), което трябва да бъде потиснато, но така или иначе не засяга показваните данни или графика. За да се потисне предупреждението обаче, след реда за импортиране в нашия код могат да се добавят следните редове код.
Предупреждения за внос импортиране на matplotlib.cbook warnings.filterwarnings („игнориране“, категория = matplotlib.cbook.mplDeprecation)
Това е всичко за този урок, за да тествате напълно своя осцилоскоп, можете да свържете аналогово устройство като потенциометър към канал на ADC и трябва да видите промяната на данните при всяко завъртане на потенциометъра. Или можете да въведете синусоида или квадратна вълна, за да тествате изхода.
Благодаря за четенето, ако имате някакви въпроси или нещо, което искате да добавя, просто ми оставете коментар.
До следващия път продължете да правите!