- Przebieg projektu:
- Wymagania projektu
- Schemat obwodu:
- Zainstaluj zależności dla oscyloskopu Raspberry Pi:
- Kod Pythona dla oscyloskopu Raspberry Pi:
- Oscyloskop Raspberry Pi w akcji:
Cześć wszystkim, witajcie w dzisiejszym poście. Jedną z najbardziej fascynujących rzeczy w byciu twórcą jest umiejętność opracowywania prowizorycznych narzędzi, dzięki czemu nigdy nie utkniesz w pracy nad żadnym projektem, jeśli masz tego rodzaju wszechstronność. Więc dzisiaj podzielę się tym, jak zbudować prowizoryczną wersję jednego z najważniejszych narzędzi w inżynierii elektrycznej / elektronicznej opartej na Raspberry Pi; Oscyloskop.
Oscyloskop jest elektronicznym przyrządem testowym, który umożliwia wizualizację i obserwację zmieniających się napięć sygnału, zwykle jako dwuwymiarowy wykres z jednym lub większą liczbą sygnałów wykreślonych w funkcji czasu. Dzisiejszy projekt będzie miał na celu odtworzenie możliwości wizualizacji sygnału oscyloskopu przy użyciu Raspberry Pi i modułu konwertera analogowo-cyfrowego.
Przebieg projektu:
Replikacja wizualizacji sygnału oscyloskopu za pomocą Raspberry Pi będzie wymagała następujących kroków;
1. Wykonaj konwersję cyfrowo-analogową sygnału wejściowego
2. Przygotuj wynikowe dane do reprezentacji
3. Przedstaw dane na wykresie czasu na żywo
Uproszczony schemat blokowy dla tego projektu wyglądałby tak, jak diagram poniżej.
Wymagania projektu
Wymóg tego projektu można podzielić na dwa:
- Wymagania sprzętowe
- Wymagania Systemowe
Wymagania sprzętowe
Aby zbudować ten projekt, wymagane są następujące komponenty / części;
- Raspberry pi 2 (lub dowolny inny model)
- Karta SD 8 lub 16 GB
- Kabel LAN / Ethernet
- Zasilacz lub kabel USB
- ADS1115 ADC
- LDR (opcjonalnie, ponieważ jest przeznaczony do testowania)
- Rezystor 10k lub 1k
- Przewody połączeniowe
- Płytka prototypowa
- Monitor lub inny sposób widzenia pulpitu pi (włącznie z VNC)
Wymagania Systemowe
Wymagania programowe dla tego projektu to w zasadzie moduły Pythona ( matplotlib i drawnow ), które będą używane do wizualizacji danych oraz moduł Adafruit do współpracy z układem ADS1115 ADC. W dalszej części pokażę, jak zainstalować te moduły na Raspberry Pi.
Chociaż ten samouczek będzie działał niezależnie od używanego Raspberry Pi OS, będę używał Raspberry Pi stretch OS i zakładam, że znasz konfigurację Raspberry Pi z Raspbian stretch OS i wiesz, jak SSH do Raspberry pi za pomocą oprogramowania terminala, takiego jak kit. Jeśli masz z tym jakiekolwiek problemy, na tej stronie jest mnóstwo poradników Raspberry Pi, które mogą pomóc.
Mając na miejscu wszystkie komponenty sprzętowe, stwórzmy schematy i połączmy komponenty ze sobą.
Schemat obwodu:
Aby przekonwertować analogowe sygnały wejściowe na sygnały cyfrowe, które można wizualizować za pomocą Raspberry Pi, użyjemy układu ADS1115 ADC. Ten układ staje się ważny, ponieważ Raspberry Pi, w przeciwieństwie do Arduino i większości mikrokontrolerów, nie ma wbudowanego przetwornika analogowo-cyfrowego (ADC). Chociaż mogliśmy użyć dowolnego układu ADC kompatybilnego z raspberry pi, wolę ten układ ze względu na jego wysoką rozdzielczość (16 bitów) i dobrze udokumentowany arkusz danych oraz instrukcje użytkowania firmy Adafruit. Możesz również sprawdzić nasz samouczek Raspberry Pi ADC, aby dowiedzieć się więcej na ten temat.
ADC to urządzenie oparte na I2C i powinno być podłączone do Raspberry Pi, jak pokazano na poniższych schematach.
Dla jasności, połączenie pinowe między dwoma komponentami jest również opisane poniżej.
Połączenia ADS1115 i Raspberry Pi:
VDD - 3,3 V.
GND - GND
SDA - SDA
SCL - SCL
Po wykonaniu wszystkich połączeń włącz pi i kontynuuj instalację zależności wymienionych poniżej.
Zainstaluj zależności dla oscyloskopu Raspberry Pi:
Zanim zaczniemy pisać skrypt w języku Python, który pobierze dane z ADC i wykreśli je na wykresie na żywo, musimy włączyć interfejs komunikacyjny I2C raspberry pi i zainstalować wymienione wcześniej wymagania programowe. Zostanie to zrobione w poniższych krokach, więc jest łatwe do wykonania:
Krok 1: Włącz interfejs Raspberry Pi I2C
Aby włączyć I2C, z terminala, uruchom;
sudo raspi-config
Po otwarciu paneli konfiguracyjnych wybierz opcje interfejsu, wybierz I2C i kliknij włącz.
Krok 2: Zaktualizuj Raspberry pi
Pierwszą rzeczą, którą robię przed rozpoczęciem jakiegokolwiek projektu, jest aktualizacja Pi. Dzięki temu jestem pewien, że wszystko w systemie operacyjnym jest aktualne i nie napotkam problemu ze zgodnością z żadnym najnowszym oprogramowaniem, które wybiorę do zainstalowania na Pi. Aby to zrobić, uruchom poniżej dwa polecenia:
sudo apt-get update sudo apt-get upgrade
Krok 3: Zainstaluj bibliotekę Adafruit ADS1115 dla ADC
Po zakończeniu aktualizacji jesteśmy teraz gotowi do zainstalowania zależności, zaczynając od modułu Adafruit Python dla układu ADS115. Upewnij się, że jesteś w katalogu domowym Raspberry Pi, uruchamiając;
cd ~
następnie zainstaluj podstawowe elementy kompilacji, uruchamiając;
sudo apt-get install build-essential python-dev python-smbus git
Następnie sklonuj folder Adafruit git dla biblioteki, uruchamiając;
klon git https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Przejdź do katalogu sklonowanego pliku i uruchom plik instalacyjny;
cd Adafruit_Python_ADS1x1z sudo python setup.py install
Po instalacji ekran powinien wyglądać jak na poniższym obrazku.
Krok 4: Przetestuj bibliotekę i komunikację 12C.
Zanim przejdziemy do dalszej części projektu, ważne jest, aby przetestować bibliotekę i upewnić się, że ADC może komunikować się z raspberry pi przez I2C. W tym celu użyjemy przykładowego skryptu dostarczonego z biblioteką.
Będąc nadal w folderze Adafruit_Python_ADS1x15, zmień katalog na katalog z przykładami, uruchamiając;
przykłady płyt CD
Następnie uruchom przykład sampletest.py, który wyświetla wartości czterech kanałów w ADC w formie tabelarycznej.
Uruchom przykład używając:
python simpletest.py
Jeśli moduł I2C jest włączony i połączenia są dobre, powinieneś zobaczyć dane, jak pokazano na poniższym obrazku.
Jeśli wystąpi błąd, sprawdź, czy ADC jest dobrze podłączony do PI, a komunikacja I2C jest włączona w Pi.
Krok 5: Zainstaluj Matplotlib
Aby wizualizować dane, musimy zainstalować moduł matplotlib , który służy do rysowania wszelkiego rodzaju wykresów w Pythonie. Można to zrobić, uruchamiając;
sudo apt-get install python-matplotlib
Powinieneś zobaczyć wynik taki jak na poniższym obrazku.
Krok 6: Zainstaluj moduł Drawnow python
Na koniec musimy zainstalować moduł drawnow python. Ten moduł pomaga nam dostarczać aktualne aktualizacje wykresu danych.
Będziemy instalować drawnow za pomocą instalatora pakietów Pythona; pip , więc musimy upewnić się, że jest zainstalowany. Można to zrobić, uruchamiając;
sudo apt-get install python-pip
Następnie możemy użyć pip do zainstalowania pakietu drawnow , uruchamiając:
sudo pip zainstaluj drawnow
Po uruchomieniu powinieneś otrzymać wynik podobny do poniższego obrazu.
Po zainstalowaniu wszystkich zależności jesteśmy teraz gotowi do napisania kodu.
Kod Pythona dla oscyloskopu Raspberry Pi:
Kod Pythona dla tego oscyloskopu Pi jest dość prosty, zwłaszcza jeśli znasz moduł python matplotlib . Zanim pokażę nam cały kod, spróbuję podzielić go na części i wyjaśnić, co robi każda część kodu, abyś miał wystarczającą wiedzę, aby rozszerzyć kod o więcej rzeczy.
Na tym etapie ważne jest, aby przełączyć się na monitor lub użyć przeglądarki VNC, wszystkiego, przez co można zobaczyć pulpit swojego Raspberry Pi, ponieważ wykres, który jest kreślony, nie zostanie wyświetlony na terminalu.
Z monitorem jako interfejsem otwórz nowy plik Pythona. Możesz nazwać to dowolną nazwą, ale ja nazwę to scope.py.
sudo nano scope.py
Po utworzeniu pliku pierwszą rzeczą, którą robimy, jest import modułów, których będziemy używać;
czas importu import matplotlib.pyplot as plt z drawnow import * import Adafruit_ADS1x15
Następnie tworzymy wystąpienie biblioteki ADS1x15 określającej ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Następnie ustawiamy wzmocnienie ADC. Istnieją różne zakresy wzmocnienia i należy je wybrać na podstawie napięcia, jakiego oczekujesz na wejściu przetwornika ADC. W tym samouczku szacujemy 0 - 4,09v, więc będziemy używać wzmocnienia 1. Aby uzyskać więcej informacji na temat wzmocnienia, sprawdź arkusz danych ADS1015 / ADS1115.
ZYSK = 1
Następnie musimy utworzyć zmienne tablicowe, które będą używane do przechowywania danych do wykreślenia, i inną, która będzie służyć jako liczba.
Val = cnt = 0
Następnie poznajemy nasze zamiary udostępnienia wykresu interaktywności, aby umożliwić nam wykreślanie danych na żywo.
plt.ion ()
Następnie rozpoczynamy ciągłą konwersję ADC, określając kanał ADC, w tym przypadku kanał 0, a także określamy wzmocnienie.
Należy zauważyć, że wszystkie cztery kanały ADC w ADS1115 mogą być odczytywane w tym samym czasie, ale 1 kanał wystarczy do tej demonstracji.
adc.start_adc (0, zysk = ZYSK)
Następnie tworzymy funkcję def makeFig , aby stworzyć i ustawić atrybuty wykresu, który będzie zawierał nasz wykres na żywo. Przede wszystkim ustawiamy granice osi y za pomocą ylim , po czym wpisujemy tytuł wykresu i nazwę etykiety, zanim określimy dane, które będą drukowane oraz ich styl i kolor wydruku za pomocą plt.plot (). Możemy również określić kanał (jak podano kanał 0), abyśmy mogli zidentyfikować każdy sygnał, gdy używane są cztery kanały ADC. plt.legend służy do określenia, gdzie na rysunku mają być wyświetlane informacje o tym sygnale (np. Kanał 0).
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('wyjścia ADC') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'prawy dolny róg')
Następnie napisać while pętli, która będzie używana stale odczytywać dane z ADC i zaktualizować wykres odpowiednio.
Pierwszą rzeczą, którą robimy, jest odczytanie wartości konwersji ADC
value = adc.get_last_result ()
Następnie drukujemy wartość na terminalu, aby dać nam inny sposób potwierdzenia wykreślonych danych. Po wydrukowaniu czekamy kilka sekund, a następnie dołączamy dane do listy (val) utworzonej w celu przechowywania danych dla tego kanału.
print ('Channel 0: {0}'. format (wartość)) time.sleep (0.5) val.append (int (wartość))
Następnie dzwonimy do drawnow, aby zaktualizować fabułę.
drawnow (makeFig)
Aby upewnić się, że najnowsze dane są dostępne na wykresie, usuwamy dane o indeksie 0 po każdych 50 zliczeniach danych.
cnt = cnt + 1 if (cnt> 50): val.pop (0)
To wszystko!
Kompletny kod Python jest podany na końcu tego poradnika.
Oscyloskop Raspberry Pi w akcji:
Skopiuj cały kod Pythona i wklej do utworzonego wcześniej pliku Pythona, pamiętaj, że będziemy potrzebować monitora do przeglądania wykresu, więc wszystko to powinno być wykonane przez VNC lub przez podłączony monitor lub ekran.
Zapisz kod i uruchom za pomocą;
sudo python scope.py
Jeśli użyłeś innej nazwy niż scope.py, nie zapomnij zmienić tego, aby pasował.
Po kilku minutach powinieneś zobaczyć, jak dane ADC są drukowane na terminalu. Czasami możesz otrzymać ostrzeżenie od matplotlib (jak pokazano na poniższym obrazku), które powinno zostać pominięte, ale i tak nie wpływa na wyświetlane dane ani na wykres. Aby jednak pominąć ostrzeżenie, następujące wiersze kodu można dodać po wierszach importu w naszym kodzie.
Importuj ostrzeżenia import matplotlib.cbook warnings.filterwarnings („ignoruj”, kategoria = matplotlib.cbook.mplDeprecation)
To wszystko w tym samouczku, aby w pełni przetestować oscyloskop, możesz podłączyć urządzenie analogowe, takie jak potencjometr, do kanału na ADC i powinieneś zobaczyć zmianę danych z każdym obrotem potencjometru. Lub możesz wprowadzić falę sinusoidalną lub prostokątną, aby przetestować wyjście.
Dziękuję za przeczytanie, jeśli masz jakieś pytania lub coś, co chciałbyś, żebym dodał, po prostu zostaw mi komentarz.
Do następnego razu, rób dalej!