- Jak to działa
- Wymagane komponenty
- Schematy
- Kod Osclloscope Arduino
- Skrypt Python (ploter)
- Kod Arduino
- Oscyloskop Arduino w akcji
Oscyloskop to jedno z najważniejszych narzędzi, które znajdziesz na stole warsztatowym każdego inżyniera lub producenta elektroniki. Służy głównie do przeglądania przebiegu i określania poziomów napięcia, częstotliwości, szumu i innych parametrów sygnałów podawanych na jego wejście, które mogą się zmieniać w czasie. Jest również używany przez twórców oprogramowania wbudowanego do debugowania kodu i techników do rozwiązywania problemów z urządzeniami elektronicznymi podczas naprawy. Te powody sprawiają, że oscyloskop jest niezbędnym narzędziem dla każdego inżyniera. Jedynym problemem jest to, że mogą być bardzo drogie, oscyloskopy, które wykonują najbardziej podstawowe funkcje z najmniejszą dokładnością, mogą kosztować od 45 do 100 USD, podczas gdy bardziej zaawansowane i wydajne kosztują ponad 150 USD. Dzisiaj pokażę, jak korzystać z Arduinooraz oprogramowanie, które zostanie opracowane z moim ulubionym językiem programowania Python, aby zbudować niedrogi, 4-kanałowy oscyloskop Arduino zdolny do wykonywania zadań, do których są wykorzystywane niektóre tanie oscyloskopy, takie jak wyświetlanie przebiegów i określanie poziomów napięć dla sygnałów.
Jak to działa
Ten projekt składa się z dwóch części;
- Konwerter danych
- Ploter
Oscyloskopy generalnie obejmują wizualną reprezentację sygnału analogowego zastosowanego w jego kanale wejściowym. Aby to osiągnąć, musimy najpierw przekształcić sygnał z analogowego na cyfrowy, a następnie wykreślić dane. Do konwersji wykorzystamy przetwornik ADC (przetwornik analogowo-cyfrowy) mikrokontrolera atmega328p używanego przez Arduino do konwersji danych analogowych na wejściu sygnału na sygnał cyfrowy. Po konwersji wartość na czas jest wysyłana przez UART z Arduino do komputera, gdzie oprogramowanie plotera, które zostanie opracowane w języku Python, przekształci przychodzący strumień danych na przebieg, wykreślając każdą dane w funkcji czasu.
Wymagane komponenty
Do zbudowania tego projektu wymagane są następujące składniki;
- Arduino Uno (można użyć dowolnej innej płyty)
- Płytka prototypowa
- Rezystor 10k (1)
- LDR (1)
- Przewody połączeniowe
Wymagane oprogramowanie
- Arduino IDE
- Pyton
- Biblioteki Pythona: Pyserial, Matplotlib, Drawnow
Schematy
Schemat oscyloskopu Arduino jest prosty. Wszystko, co musimy zrobić, to podłączyć sygnał, który ma być zbadany, do określonego pinu analogowego Arduino. Jednak użyjemy LDR w prostym układzie dzielnika napięcia do wygenerowania sygnału do zbadania, tak aby wygenerowany przebieg opisywał poziom napięcia w oparciu o natężenie światła wokół LDR.
Podłączyć komponenty zgodnie z poniższym schematem;
Po podłączeniu konfiguracja powinna wyglądać tak, jak na poniższym obrazku.
Po wykonaniu wszystkich połączeń możemy przystąpić do pisania kodu.
Kod Osclloscope Arduino
Będziemy pisać kody dla każdej z dwóch sekcji. W przypadku plotera, jak wspomniano wcześniej, będziemy pisać skrypt w języku Python, który akceptuje dane z Arduino przez UART i wykresy, podczas gdy dla konwertera będziemy pisać szkic Arduino, który pobiera dane z ADC i konwertuje je na poziomy napięć, które są wysyłane do plotera.
Skrypt Python (ploter)
Ponieważ kod Pythona jest bardziej złożony, zaczniemy od niego.
Będziemy używać kilku bibliotek, w tym; drawnow, Matplotlib i Pyserial ze skryptem Pythona, jak wspomniano wcześniej. Pyserial pozwala nam stworzyć skrypt w Pythonie, który może komunikować się przez port szeregowy, Matplotlib daje nam możliwość generowania wykresów z danych otrzymanych przez port szeregowy, a drawnow zapewnia nam środki do aktualizacji wykresu w czasie rzeczywistym.
Istnieje kilka sposobów instalacji tych pakietów na komputerze, najłatwiejszy to pip . Pip można zainstalować za pomocą wiersza poleceń na komputerze z systemem Windows lub Linux. PIP jest dostarczany z pythonem3, więc radzę zainstalować python3 i zaznaczyć okienko dotyczące dodawania pythona do ścieżki. Jeśli masz problemy z instalacją pip, sprawdź tę oficjalną witrynę Pythona, aby uzyskać wskazówki.
Po zainstalowaniu pip możemy teraz zainstalować inne potrzebne biblioteki.
Otwórz wiersz poleceń dla użytkowników systemu Windows, terminal dla użytkowników systemu Linux i wprowadź następujące dane;
pip install pyserial
Po wykonaniu tej czynności zainstaluj matplotlib za pomocą;
pip zainstaluj matplotlib
Drawnow jest czasami instalowany razem z matplotlib, ale dla pewności uruchom;
pip zainstaluj drawnow
Po zakończeniu instalacji jesteśmy teraz gotowi do napisania skryptu w języku Python.
Skrypt w Pythonie dla tego projektu jest podobny do tego, który napisałem dla oscyloskopu opartego na Raspberry Pi.
Zaczynamy od zaimportowania wszystkich bibliotek potrzebnych do kodu;
czas importu import matplotlib.pyplot as plt from drawnow import * import pyserial
Następnie tworzymy i inicjalizujemy zmienne, które będą używane podczas kodu. Tablica val będzie używana do przechowywania danych odebranych z portu szeregowego, a cnt będzie używana do zliczania. Dane w lokalizacji 0 zostaną usunięte po każdych 50 zliczeniach danych. Ma to na celu utrzymanie danych wyświetlanych na oscyloskopie.
val = cnt = 0
Następnie tworzymy obiekt portu szeregowego, przez który Arduino będzie komunikować się z naszym skryptem w Pythonie. Upewnij się, że podany poniżej port COM jest tym samym portem, przez który płyta Arduino komunikuje się z IDE. Zastosowana powyżej prędkość 115200 bodów została wykorzystana do zapewnienia szybkiej komunikacji z Arduino. Aby zapobiec błędom, port szeregowy Arduino musi być również włączony do komunikacji z tą szybkością transmisji.
port = serial.Serial ('COM4', 115200, limit czasu = 0,5)
Następnie tworzymy interaktywną fabułę za pomocą;
plt.ion ()
musimy stworzyć funkcję generującą wykres z otrzymanych danych, tworząc górny i minimalny limit, jakiego się spodziewamy, który w tym przypadku wynosi 1023 w oparciu o rozdzielczość ADC Arduino. Ustawiamy również tytuł, oznaczamy każdą oś i dodajemy legendę, aby ułatwić identyfikację wykresu.
#create the figure function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC output') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' dolny prawy ')
Po wykonaniu tej czynności jesteśmy teraz gotowi do napisania głównej pętli, która pobiera dane z portu szeregowego, gdy są dostępne, i rysuje je. Aby zsynchronizować się z Arduino, dane dotyczące uzgadniania są wysyłane do Arduino przez skrypt Pythona, aby wskazać jego gotowość do odczytu danych. Gdy Arduino otrzyma dane uzgadniania, odpowiada danymi z ADC. Bez tego uścisku dłoni nie będziemy w stanie wykreślić danych w czasie rzeczywistym.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # jeśli arduino odpowiada value = port.readline () # przeczytaj odpowiedź print (value) #print, więc możemy monitoruj liczbę = int (wartość) # konwertuj otrzymane dane na wydruk całkowity ('Kanał 0: {0}'. format (liczba)) # Uśpij przez pół sekundy. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot, aby odzwierciedlić nowe dane wejściowe plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # zachowaj aktualność wykresu, usuwając dane z pozycji 0
Pełny kod pyton do Arduino oscyloskop jest podana na końcu tego artykułu poniżej.
Kod Arduino
Drugi kod to szkic Arduino, aby uzyskać dane reprezentujące sygnał z ADC, a następnie poczekaj na odebranie sygnału handshake z oprogramowania plotera. Jak tylko otrzyma sygnał handshake, wysyła zebrane dane do oprogramowania plotera poprzez UART.
Możemy zacząć od deklarowania zawleczkę sworznia analogiem Arduino, do których będzie stosowany sygnał.
int sensorpin = A0;
Następnie inicjalizujemy i uruchamiamy komunikację szeregową z szybkością transmisji 115200
void setup () { // zainicjuj komunikację szeregową z prędkością 115200 bitów na sekundę, aby dopasować ją do skryptu w Pythonie: Serial.begin (115200); }
Na koniec funkcja voidloop (), która obsługuje odczyt danych i wysyła dane szeregowo do plotera.
void loop () { // odczytaj wejście na pinie analogowym 0: float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); opóźnienie (10); // opóźnienie między odczytami dla stabilności } }
Kompletny kod Arduino oscyloskopu znajduje się poniżej, a także na końcu tego artykułu poniżej.
int sensorpin = A0; void setup () { // zainicjuj komunikację szeregową z prędkością 115200 bitów na sekundę, aby dopasować ją do skryptu w Pythonie: Serial.begin (115200); } void loop () { // odczytaj wejście na pinie analogowym 0: ################################# ###################### float sensorValue = analogRead (pin czujnika); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); opóźnienie (10); // opóźnienie między odczytami dla stabilności } }
Oscyloskop Arduino w akcji
Prześlij kod do instalacji Arduino i uruchom skrypt Pythona. Powinieneś zobaczyć, jak dane zaczynają przesyłać strumieniowo za pośrednictwem wiersza poleceń Pythona, a wykres zmienia się wraz z natężeniem światła, jak pokazano na poniższym obrazku.
W ten sposób Arduino może być używane jako oscyloskop, można go również wykonać za pomocą Raspberry pi, sprawdź tutaj pełny samouczek dotyczący oscyloskopu opartego na Raspberry Pi.