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.

LabJack U3

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
Następnie pobieramy i instalujemy sterownik z repozytorium:
git clone git://github.com/labjack/exodriver.git 
cd exodriver/ 
sudo ./install.sh 
A następnie robimy to samo z modułem Pythona:
git clone git://github.com/labjack/LabJackPython.git 
cd LabJackPython/ 
sudo python setup.py install 
Po instalacji i podłączeniu urządzenia możemy w konsoli Pythona sprawdzić czy wszystko działa. Zapewne trzeba będzie ją uruchomić poprzez sudo by mieć dostęp do urządzenia:
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 
Mimo iż urządzenie służy do pomiaru wartości analogowych i sterowania cyfrowego podłączonych urządzeń może też "migać diodą LED":
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.

LabJack z podłączoną baterią
Uzyskany wykres zmiany napięcia w czasie
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')
Jeśli Raspbian jest uruchomiony w trybie tekstowym (bez serwera X-ów) aby wygenerować wykres musimy nieznacznie zmodyfikować kod skryptu, tak aby moduł matplotlib korzystał z generowania grafiki za pomocą np. biblioteki „Agg”.
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
Podłączenie potencjometru

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.
Przykładem takich układów mogą być czujnik temperatury i wilgotności SHT75 lub popularny termometr cyfrowy DS1820. W związku z cyfrową transmisją danych termohigrometr SHT75 podłączamy do wyjść-wejść cyfrowych karty. Aby odczytać dane z czujnika możemy skorzystać z gotowej biblioteki ei1050. Tym razem nie musimy przeliczać napięcia na odpowiednie wartości temperatury i wilgotności względnej, gdyż tym oraz kalibracją urządzenia zajął się producent.
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

RkBlog

Elektronika i Python, 16 September 2013

Comment article
Comment article RkBlog main page Search RSS Contact