Jednoduchá meteostanica s BMP180: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 65: | Riadok 65: | ||
== Popis riešenia == | == Popis riešenia == | ||
Senzor BMP180 je osadený na doske plošného spoja spolu so stabilizátorom napätia (7133). Tento stabilizátor stabilizuje vstupné napätie (5 V) na 3,3 V, ktoré napája celý tlakový senzor. Ďalej na doske sú obsiahnuté pull-up rezistory R1, R2 pre I2C rozhranie. Senzor sa pripája k RaspberryPi pomocou konektora J1, ktorý obsahuje napájanie senzora VCC a GND, zbernicovú komunikáciu pre I2C rozhranie - SDA, SDL, signál pre povolenie senzora EOC. | |||
( | |||
'''Schéma zapojenia snímača''' | '''Schéma zapojenia snímača''' | ||
[[Súbor:zapojenie_bmp180.png]] | [[Súbor:zapojenie_bmp180.png]] | ||
Riadok 75: | Riadok 76: | ||
=== Algoritmus a program === | === Algoritmus a program === | ||
Algoritmus pre komunikáciu so senzorom je naprogramovaný v jazyku Python. Najskôr je pripojená knižnica senzora ''"Adafruit_BMP.BMP085"'', ďalej systémové knižnice pre podporou sériového rozhrania (UART) - ''"serial"'' a knižnica pre systémový časovač ''"time"''. Nasleduje otvorenie komunikačného rozhrania ''"/dev/ttyAMA0"'' a nastavenie komunikačnej rýchlosti na 9600 Baud, ďalej vytvorenie triedy senzora (BMP180) pre nasledujúcu komunikaciu. | |||
Program obsahuje hlavnú cyklickú slučku, ktorá sa neustále vykonáva v 1 sekundovom intervale. V tejto slučke je načítanie teploty a tlaku senzora, ďalej jeho prepočet na celočiselnú sústavu INTEGER a jeho rozdelenie na 2-bajtové čislo. | |||
Nakoniec program posiela tieto hodnoty v tvare 5 bajtovej správy na sériový komunikačný port v tvare: ''<teplota_horný_bajt>, <teplota_dolný_bajt>, <tlak_horný_bajt>, <tlak_dolný_bajt>, <synchronizačný_bajt = vždy 0xff>.'' | |||
<source lang="python"> | <source lang="python"> | ||
Riadok 119: | Riadok 118: | ||
Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji, | Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji, | ||
odfotografujte ho. | odfotografujte ho. | ||
[[Category:MEMS]] [[Category:I2C]] | [[Category:MEMS]] [[Category:I2C]] |
Verzia z 12:45, 22. máj 2016
Autori: | Martin Valášek, Tomáš Timoranský | |
Študijný odbor: | Aplikovaná mechatronika a elektromobilita | 1. Ing. (2016) |
Zadanie
Senzor BMP180 vyrába firma Bosch, ide o nástupcu veľmi obľúbeného senzora BMP085. Senzor disponuje meraním atmosferického absolútného tlaku v rozsahu 300 až 1100 hPa (9000 až -500m nadmorskej výšky). Pre kompenzáciu tepelných vplyvov na meranie atmosferického tlaku, má senzor integrovaný teplomer (merací rozsah -40 až +85°C), ktorý je taktiež možno vyčítať. Komunikácia je digitalná prostredníctvom I2C zbernice.
Literatúra:
Datasheed BMP180
Analýza
Popis komunikačnej zbernice
Tlakový senzor komunikuje prostredníctvom ľ2C zbernice, jeho adresa je:
0xEF pre režím čitania
0xEE pre režím zápisu
Voľba režimov prevodu
Senzor môže pracovať v niekoľkých meracích režimov. Voľbou jednotlivých režimov senzora sa volí presnosť dosiahnutého výslednu (šum signálu) a zároveň sa volí rýchlosť prevodu. Nasledujúci obrázok zobrazuje jednotlivé režímy.
Senzor disponuje vnútornou 176bit EEPROM pamäťou v ktorej je uložených 11 kalibračných koeficientov. Každý senzor má jedinečné koeficienty. Tieto koeficienty sú nahraná do senzora v procese výroby. Algoritmus pred prvým výpočtom tlaku a teploty vyčíta obsah tejto EEPROM pamäte, následne pomocou korečných výpočtov dopočíta korektné výsledky. Nasledujúci obrázok zobrazuje adresu jednotlivých adries kalibračných koeficientov.
Algoritmus merania
Pre výpočet je dostupný ANSI C kód od Bosch Sensortec ("BMP180_API"). Mikrokontrolér najskôr pošle start sekvenciu k inicializácii merania teploty a tlaku. Následne po uplynutí času prevodu, výsledné konštanty (UP alebo UT) sa môžu vyčítat prostredníctvom I2C rozhrania. Pre prepočet tlaku na hPa a teploty na °C, sa využijú kalibračné dáta z EEPROM pamäte. Vzorkovacia perióda senzora je do 128 vzoriek za sekundu (štandartný mód).
Prepočet RAW dát na unifikované jednotky [hPa/ °C]
Nasledujúci obrázok zobrazuje prepočet RAW dát senzora a unifikované jednotky
Zapojenie vývodov senzora
Popis riešenia
Senzor BMP180 je osadený na doske plošného spoja spolu so stabilizátorom napätia (7133). Tento stabilizátor stabilizuje vstupné napätie (5 V) na 3,3 V, ktoré napája celý tlakový senzor. Ďalej na doske sú obsiahnuté pull-up rezistory R1, R2 pre I2C rozhranie. Senzor sa pripája k RaspberryPi pomocou konektora J1, ktorý obsahuje napájanie senzora VCC a GND, zbernicovú komunikáciu pre I2C rozhranie - SDA, SDL, signál pre povolenie senzora EOC.
Schéma zapojenia snímača
Algoritmus a program
Algoritmus pre komunikáciu so senzorom je naprogramovaný v jazyku Python. Najskôr je pripojená knižnica senzora "Adafruit_BMP.BMP085", ďalej systémové knižnice pre podporou sériového rozhrania (UART) - "serial" a knižnica pre systémový časovač "time". Nasleduje otvorenie komunikačného rozhrania "/dev/ttyAMA0" a nastavenie komunikačnej rýchlosti na 9600 Baud, ďalej vytvorenie triedy senzora (BMP180) pre nasledujúcu komunikaciu. Program obsahuje hlavnú cyklickú slučku, ktorá sa neustále vykonáva v 1 sekundovom intervale. V tejto slučke je načítanie teploty a tlaku senzora, ďalej jeho prepočet na celočiselnú sústavu INTEGER a jeho rozdelenie na 2-bajtové čislo. Nakoniec program posiela tieto hodnoty v tvare 5 bajtovej správy na sériový komunikačný port v tvare: <teplota_horný_bajt>, <teplota_dolný_bajt>, <tlak_horný_bajt>, <tlak_dolný_bajt>, <synchronizačný_bajt = vždy 0xff>.
#!/usr/bin/python
import Adafruit_BMP.BMP085 as BMP085
import time
import serial
port = serial.Serial("/dev/ttyAMA0", baudrate=9600)
sensor = BMP085.BMP085()
while 1:
temp = sensor.read_temperature()*10
pressure = sensor.read_pressure()/10.0
print 'Temp = {0:0.2f} *C'.format(temp)
print 'Pressure = {0:0.2f} Pa'.format(pressure)
temp_h = int(temp/255)
temp_l = int(temp%255)
press_h = int(pressure/255)
press_l = int(pressure%255)
port.write("%s" % chr(temp_h) + chr(temp_l) + chr(press_h) + chr(press_l) + chr(255) )
time.sleep(1)
port.close
Zdrojový kód: serial.h a main.c
Overenie
Nezabudnite napísať čosi ako užívateľský návod. Z neho by malo byť jasné čo program robí, ako sa prejavuje a aké má užívateľské rozhranie (čo treba stlačiť, čo sa kde zobrazuje). Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji, odfotografujte ho.