- Потік проекту:
- Вимоги до проекту
- Кругова діаграма:
- Встановити залежності для осцилографа Raspberry Pi:
- Код Python для осцилографа Raspberry Pi:
- Осцилограф Raspberry Pi в дії:
Привіт, хлопці, ласкаво просимо на сьогоднішній пост. Одне з найбільш захоплюючих моментів у виробництві - це знання того, як розробляти імпровізовані інструменти, ви ніколи не застрягнете в роботі над будь-яким проектом, коли у вас є така різнобічність. Тому сьогодні я розповім, як створити імпровізовану версію одного з найважливіших інструментів в електротехнічній / електронній техніці на основі Raspberry Pi; Осцилограф.
Осцилограф - це електронний прилад для тестування, який дозволяє візуалізувати та спостерігати різні напруги сигналу, як правило, у вигляді двовимірного графіку з одним або кількома сигналами, побудованими відповідно до часу. Сьогоднішній проект буде прагнути відтворити можливості візуалізації сигналів осцилографа за допомогою Raspberry Pi та аналого-цифрового модуля перетворювача.
Потік проекту:
Реплікація візуалізації сигналу осцилографа за допомогою Raspberry Pi вимагатиме наступних кроків;
1. Виконайте цифрове в аналогове перетворення вхідного сигналу
2. Підготуйте отримані дані для подання
3. Побудуйте дані на графіку реального часу
Спрощена блок-схема для цього проекту може виглядати як діаграма нижче.
Вимоги до проекту
Вимоги до цього проекту можна розділити на дві:
- Вимоги до обладнання
- Вимоги до програмного забезпечення
Вимоги до обладнання
Для побудови цього проекту потрібні такі компоненти / деталі;
- Raspberry pi 2 (або будь-яка інша модель)
- SD-карта на 8 або 16 ГБ
- Кабель LAN / Ethernet
- Блок живлення або USB-кабель
- ADS1115 ADC
- LDR (необов’язковий, як призначений для тестування)
- 10k або 1k резистор
- Провід перемички
- Макет
- Монітор або будь-який інший спосіб перегляду робочого столу pi (включно з VNC)
Вимоги до програмного забезпечення
Вимоги до програмного забезпечення для цього проекту - це в основному модулі python ( matplotlib і drawnow ), які будуть використовуватися для візуалізації даних, і модуль Adafruit для взаємодії з мікросхемою ADC1115 ADC. Я покажу, як встановлювати ці модулі на Raspberry Pi, як ми продовжуємо.
Хоча цей підручник буде працювати незалежно від використовуваної ОС Raspberry Pi, я буду використовувати розтяжну ОС Raspberry Pi, і я припускаю, що ви знайомі з налаштуванням Raspberry Pi з розтяжною ОС Raspbian, і ви знаєте, як SSH перенести в малину pi за допомогою термінального програмного забезпечення, наприклад шпаклівки. Якщо у вас є проблеми з цим, на цьому веб-сайті є безліч підручників з Raspberry Pi, які можуть вам допомогти.
З усіма апаратними компонентами на місці, давайте створимо схеми та з’єднаємо їх між собою.
Кругова діаграма:
Для перетворення аналогових вхідних сигналів у цифрові сигнали, які можна візуалізувати за допомогою Raspberry Pi, ми будемо використовувати мікросхему ADS1115 ADC. Цей чіп стає важливим, оскільки Raspberry Pi, на відміну від Arduino та більшості мікроконтролерів, не має вбудованого аналого-цифрового перетворювача (АЦП). Хоча ми могли б використовувати будь-який чіп ADC, сумісний з raspberry pi, я віддаю перевагу цьому чіпу через його високу роздільну здатність (16 біт) та добре документовану таблицю даних та інструкції з використання Adafruit. Ви також можете переглянути наш підручник з ADC для Raspberry Pi, щоб дізнатись більше про нього.
АЦП - це пристрій на основі I2C, і його слід підключити до Raspberry Pi, як показано на схемі нижче.
Для наочності також нижче описано контактне з'єднання між двома компонентами.
Підключення ADS1115 та Raspberry Pi:
VDD - 3,3 в
GND - GND
SDA - SDA
SCL - SCL
Закінчивши підключення, увімкніть ваш pi та перейдіть до встановлення згаданих нижче залежностей.
Встановити залежності для осцилографа Raspberry Pi:
Перш ніж ми почнемо писати скрипт python для витягування даних з АЦП та побудови їх на графіку, нам потрібно увімкнути інтерфейс зв'язку I2C Raspberry Pi та встановити вимоги до програмного забезпечення, про які було згадано раніше. Це буде зроблено в наступних кроках, тому його легко виконати:
Крок 1: Увімкніть інтерфейс Raspberry Pi I2C
Щоб увімкнути I2C, з терміналу запустіть;
sudo raspi-config
Коли панелі конфігурації відкриються, виберіть параметри інтерфейсу, виберіть I2C та натисніть «Увімкнути».
Крок 2: Оновіть Raspberry pi
Перше, що я роблю перед початком будь-якого проекту, це оновлення Pi. Завдяки цьому я впевнений, що всі речі в ОС оновлені, і я не зазнаю проблем сумісності з будь-яким останнім програмним забезпеченням, яке я вирішив встановити на Pi. Для цього виконайте дві команди:
sudo apt-get update оновлення sudo apt-get
Крок 3: Встановіть бібліотеку Adafruit ADS1115 для ADC
Після завершення оновлення ми готові до встановлення залежностей, починаючи з модуля python Adafruit для мікросхеми ADS115. Переконайтесь, що ви знаходитесь у домашньому каталозі Raspberry Pi, запустивши;
cd ~
потім встановіть основи побудови, запустивши;
sudo apt-get install build-vital python-dev python-smbus git
Далі клонуйте папку Adafruit git для бібліотеки, запустивши;
клон git https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Перейдіть у каталог клонованого файлу та запустіть файл налаштування;
cd Adafruit_Python_ADS1x1z sudo python setup.py встановити
Після встановлення екран повинен виглядати як на малюнку нижче.
Крок 4: Перевірте бібліотеку та зв'язок 12C.
Перш ніж приступити до решти проекту, важливо протестувати бібліотеку та переконатись, що АЦП може спілкуватися з малиновим пі через I2C. Для цього ми використаємо приклад сценарію, який постачається з бібліотекою.
Перебуваючи в папці Adafruit_Python_ADS1x15, змініть каталог на каталог прикладів, запустивши;
приклади компакт-дисків
Далі запустіть приклад sampletest.py, який відображає значення чотирьох каналів на АЦП у табличній формі.
Запустіть приклад, використовуючи:
python simpletest.py
Якщо модуль I2C увімкнено, а з’єднання хороше, ви побачите дані, як показано на малюнку нижче.
Якщо виникає помилка, переконайтесь, що АЦП добре підключений до PI, а зв'язок I2C увімкнений на Pi.
Крок 5: Встановіть Matplotlib
Для візуалізації даних нам потрібно встановити модуль matplotlib, який використовується для побудови всіх видів графіків у python. Це можна зробити, запустивши;
sudo apt-get install python-matplotlib
Ви повинні побачити результат, як на малюнку нижче.
Крок 6: Встановіть модуль Drawnow python
Нарешті, нам потрібно встановити модуль drawnow python. Цей модуль допомагає нам регулярно оновлювати графік даних.
Ми будемо встановлювати drawnow за допомогою інсталятора пакунків python; pip , тому нам потрібно переконатися, що він встановлений. Це можна зробити, запустивши;
sudo apt-get встановити python-pip
Потім ми можемо використовувати pip для встановлення пакета drawnow , запустивши:
sudo pip встановити
Ви повинні отримати результат, як на малюнку нижче, після його запуску.
З усіма встановленими залежностями ми готові до написання коду.
Код Python для осцилографа Raspberry Pi:
Код python для цього осцилографа Pi досить простий, особливо якщо ви знайомі з модулем matplotlib python. Перш ніж показати нам весь код, я спробую розбити його на частини та пояснити, що робить кожна частина коду, щоб ви мали достатньо знань, щоб розширити код, щоб робити більше матеріалів.
На цьому етапі важливо переключитися на монітор або скористатися засобом перегляду VNC - все, через що ви можете бачити робочий стіл вашого Raspberry Pi, оскільки графік, який будується, не відображатиметься на терміналі.
З монітором як інтерфейсом відкрийте новий файл python. Ви можете назвати його будь-яким іменем, яке хочете, але я буду називати його scope.py.
sudo nano scope.py
Після створення файлу першим ділом ми імпортуємо модулі, які ми будемо використовувати;
час імпорту імпорт matplotlib.pyplot як plt із drawnow import * імпорт Adafruit_ADS1x15
Далі ми створюємо екземпляр бібліотеки ADS1x15 із зазначенням ADC ADS1115
adc = Adafruit_ADS1x15.ADS1115 ()
Далі ми встановлюємо коефіцієнт посилення АЦП. Існують різні діапазони коефіцієнта підсилення, і їх слід вибирати, виходячи з напруги, яку ви очікуєте на вході АЦП. У цьому підручнику ми розраховуємо 0 - 4.09v, тому будемо використовувати коефіцієнт посилення 1. Для отримання додаткової інформації про коефіцієнт посилення ви можете перевірити таблицю даних ADS1015 / ADS1115.
ЗБІЛЬ = 1
Далі нам потрібно створити змінні масиву, які будуть використовуватися для зберігання даних, які будуть побудовані, а інша - для підрахунку.
Val = cnt = 0
Далі ми повідомляємо про свої наміри зробити інтерактивний сюжет таким чином, щоб дати змогу побудувати дані в реальному часі.
plt.ion ()
Далі ми починаємо безперервне перетворення АЦП із зазначенням каналу АЦП, у цьому випадку - каналу 0, а також визначаємо коефіцієнт посилення.
Слід зазначити, що всі чотири канали ADC на ADS1115 можна читати одночасно, але для цієї демонстрації достатньо 1 каналу.
adc.start_adc (0, коефіцієнт підсилення = ЗАРИБОТЬ)
Далі ми створюємо функцію def makeFig для створення та встановлення атрибутів графіка, який буде містити наш живий графік. Перш за все ми встановлюємо межі осі y за допомогою ylim , після чого вводимо заголовок ділянки та назву мітки перед тим, як ми визначаємо дані, які будуть побудовані, а також їх стиль та колір графіку за допомогою plt.plot (). Ми також можемо вказати канал (як зазначено канал 0), щоб ми могли ідентифікувати кожен сигнал, коли використовуються чотири канали АЦП. 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 = 'внизу праворуч')
Далі ми пишемо той час як цикл, який буде використовуватися постійно зчитують дані з АЦП та оновлювати графік відповідно.
Перше, що ми робимо, це читаємо значення перетворення 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)
Ось і все для цього підручника, щоб повністю перевірити свій осцилограф, ви можете підключити аналоговий пристрій, такий як потенціометр, до каналу на АЦП, і ви повинні бачити, як дані змінюються з кожним поворотом потенціометра. Або ви можете ввести синусоїду або квадратну хвилю, щоб перевірити вихід.
Дякуємо за читання, якщо у вас є питання (і) або щось, що ви хотіли б додати, просто залиште мені коментар.
До наступного разу продовжуйте робити!