Integracja aparatury pomiarowej z Raspberry Pi poprzez LabJack U3
Komputer Raspberry Pi w połączeniu z kartą pomiarową uzyskuje całkowicie nową funkcjonalność. Użycie popularnej Maliny pozwala stworzyć mały systemem akwizycji, obróbki oraz prezentacji danych pomiarowych pochodzących z szerokiej rodziny przetworników zarówno analogowych jak i cyfrowych. Niewielkie zapotrzebowanie na energię elektryczną umożliwia zasilanie takiego układu z wykorzystaniem źródła prądu stałego (np. akumulator 12V z przetwornicą DC-DC) co czyni go mobilnym i wszechstronnym rozwiązaniem np. do monitoringu zmiennych środowiskowych.
Z pośród wielu dostępnych kart pomiarowych, wybór padł na kartę LabJack U3 ponieważ łączy się ona z komputerem przez port USB i jest z niego zasilana. Sterowniki dla systemu operacyjnego Linux oraz biblioteki i przykłady użycia karty w Pythonie są dostępne na stronie producenta. Posiada ona szereg pinów cyfrowych jak i 12-bitowe piny analogowe pozwalające z dużą rozdzielczością mierzyć sygnały elektryczne.

Instalacja i pierwsze uruchomienie karty
Cały proces instalacji sterowników oraz bibliotek Pythona jest dobrze opisany na stronie producenta. Na początku musimy zainstalować wymagane programy oraz biblioteki (jeśli ich jeszcze nie mamy):
sudo apt-get install libusb-1.0-0-dev build-essential libusb-1.0-0-dev git-core
git clone git://github.com/labjack/exodriver.git
cd exodriver/
sudo ./install.sh
git clone git://github.com/labjack/LabJackPython.git
cd LabJackPython/
sudo python setup.py install
import u3 #załadowanie modułu obsługi naszej karty
d = u3.U3() #utworzenie nowego urządzenia LabJack U3.
d.configU3() #wyświetlenie aktualnej konfiguracji karty
import time
import u3 # wczytanie modułu obsługi karty
d=u3.U3() # utworzenie nowego urządzenia
FIO4_STATE_REGISTER = 6004 # Numer rejestru wyjścia FIO4
for i in range(100):
d.writeRegister(FIO4_STATE_REGISTER, 1) # Zapalenie diody LED
time.sleep(0.2)
d.writeRegister(FIO4_STATE_REGISTER, 0) # Zgaszenie diody LED
time.sleep(0.2)
Pomiary sygnałów analogowych
Wejście analogowe umożliwia pomiar przyłożonego napięcia. Można je wykorzystać bezpośrednio jako woltomierz lub do odczytu czujników, które na zmianę mierzonej wartości odpowiadają zmianą napięcia lub rezystancji.
Aby sprawdzić działanie wejścia analogowego można użyć starą baterię 1,5V. Bazując na module matplotlib program wygeneruje wykres przedstawiający przebieg mierzonego napięcia w czasie zwarcia baterii. Dodatkowo jeśli napięcie spadnie poniżej zadanego poziomu następuje zapalenie diody sygnalizującej rozładowanie baterii.


import u3
import time
import pylab
device=u3.U3()
AIN0_REGISTER = 0 #adres wejscia analogowego ADC0 do którego wpięta jest bateria
FIO4_STATE_REGISTER = 6004 #adres wyjścia cyfrowego FIO4 do sterowania diodą LED
wyniki=[] #utworzenie pustej listy do gromadzenia wyników
for i in range(1000):
napiecie=device.readRegister(AIN0_REGISTER) #oczytanie napięcia baterii
wyniki.append(napiecie)
print napiecie
if napiecie<1.2: #sprawdzenie napiecia baterii
device.writeRegister(FIO4_STATE_REGISTER, 1) # Dioda świeci
print 'Bateria slaba'
else:
device.writeRegister(FIO4_STATE_REGISTER, 0) # Dioda nie świeci
time.sleep(0.5)
pylab.plot(napiecie)
pylab.savefig('wykres.png')
import matplotlib
matplotlib.use('Agg') #wskazanie biblioteki „backendu”do generowania grafiki
import matplotlib.pyplot as plot
import u3
import time
device=u3.U3()
AIN0_REGISTER = 0
FIO4_STATE_REGISTER = 6004
wyniki=[]
for i in range(1000):
napiecie=device.readRegister(AIN0_REGISTER) #oczytanie napięcia baterii
wyniki.append(napiecie)
print napiecie
if napiecie<1.2: #sprawdzenie napiecia baterii
device.writeRegister(FIO4_STATE_REGISTER, 1) # Dioda świeci
print 'Bateria slaba'
else:
device.writeRegister(FIO4_STATE_REGISTER, 0) # Dioda nie świeci
time.sleep(0.5)
figure = plot.figure()
ax = figure.add_subplot(111)
ax.plot(napiecie)
figure.savefig('wykres.png')
Pomiary innych parametrów
Pomiary wielkości nie-elektrycznych możliwe są dzięki zastosowaniu przetworników, które zamienią np. wartość ciśnienia atmosferycznego na napięcie elektryczne. Nie musimy wnikać w szczegóły konstrukcyjne przetworników, jednak konieczna jest znajomość wzoru według jakiego wielkości (np. ciśnienie) przeliczane są na napięcie elektryczne. Tego typu informacje podawane są w kartach katalogowych przez producenta.
Przeprowadzenie pomiaru ciśnienia przy pomocy przetwornika MPXAZ6115 wymaga podłączenia go do wejścia analogowego, oraz zasilania napięciem 5 V.
import u3
import time
d=u3.U3()
AIN0_REGISTER = 0
napiecie=d.readRegister(AIN0_REGISTER) #odczytanie napięcia z przetwornika ciśnienia
p=((napiecie/5.0)+0.095)/0.009 #przeliczenie napięcia na ciśnienie według wzoru z karty katalogowej.
print "Cisnienie atmosferyczne wynosi: %.2f [kPa]" % p # wyświetlenie wyniku (formatowanie 2 znaki po przecinku)
Pomiar kąt wiatrowskazu
Niektóre wskaźniki kierunku wiatru działają na zasadzie potencjometru obrotowego bez ograniczników kąta obrotu. W takim przypadku, napięcie mierzone na wyjściu wiatrowskazu jest zależne od kąta o jaki skręcona jest wskazówka. Taki wiatrowskaz podłączamy do karty tak jak zwykły potencjometr. Następnie musimy odczytać napięcie na wejściu analogowym AIN0 i przeliczyć je na kąt wychylenia wskazówki. Aby poprawnie wyświetlić kierunek z jakiego wieje wiatr, istotnym jest właściwe zorientowanie wiatrowskazu.import u3
device=u3.U3()
AIN0_REGISTER = 0
Vin=5.0 # napięcie zasilania wiatrowskazu (potencjometru)
napiecie=d.readRegister(AIN0_REGISTER)
kat=napiecie/Vin*360#obliczenie kata
print "Wiatr wieje z kierunku %.f" % kat #wyświetlenie wyniku

Przetworniki z wyjściem cyfrowym
Współcześnie coraz więcej czujników to skomplikowane układy scalone integrujące w jednej obudowie m. in.:- właściwy element czuły na określone bodźce
- wzmacniacz operacyjny
- przetwornik analogowo-cyfrowy
- układ przeliczania danych, pamięć danych kalibracyjnych
- układ komunikacji cyfrowej np. 1-wire, I2C, itp.
import u3
import ei1050
import time
device=u3.U3()
termohigrometr=ei1050.EI1050(device)
#odczytanie 10 wartości w odstępach 1 s.
for a in range(10):
temperatura= termohigrometr.getTemperature()
wilgotnosc= termohigrometr.getHumidity()
print „Wilgotnosc %f, temperatura %f” %(wilgotnosc,temperatura)
#wyswietlenie wynikow
#obliczenie temp punktu rosy
time.sleep(1)
Użycie karty pomiarowej niewątpliwie zwiększa możliwości komputera Raspberry Pi. Co prawda część jak nie całą funkcjonalność można powielić za pomocą pinów GPIO i odpowiednich sensorów, czy płytek rozszerzających (o np. konwertery ADC), ale pozostaje też wsparcie poszczególnych producentów urządzeń pomiarowych dla jednostek LabJack. Taka biblioteka może być nieoceniona przy np. złożonej komunikacji poprzez I2C.
Należy wspomnieć jeszcze o dwóch aspektach zastosowania karty. Jedną z nich jest możliwość zamiany Raspberry Pi na inne urządzenie np. szybki komputer gdy musimy obrobić dużo danych, czy tablet lub telefon z portem USB host gdy jesteśmy w terenie. Drugą jest szybsze tworzenie oraz testowanie aplikacji obsługujących kartę na dużym ekranie komputera stacjonarnego a następnie przeniesienie i dopasowanie do możliwości mini komputera.
Autor: Blis
Comment article