[PROJEKT] KAmodLPS331 – czujnik ciśnienia atmosferycznego i KAmduino UNO
Prezentowany moduł KAmodLPS331, jest to czujnik ciśnienia atmosferycznego oparty o sensor MEMS LPS331AP firmy STMicroelectronics. Czujnik jest w stanie wykonywać pomiary bezwzględnego ciśnienia atmosferycznego w zakresie od 260 do 1260 hPa. Rozdzielczość przetwornika pomiarowego wynosi 24 bity, co przenosi się na rozdzielczość pomiarową wynoszącą 0,02 hPa RMS. Oprócz mierzonej wartości ciśnienia, układ pozwala na odczytanie aktualnej temperatury czujnika. Sensor LPS331AP pozwala na wprowadzenie konfiguracji częstotliwości wykonywanego pomiaru i wynosi ona od 1 do 25 Hz. Dostępne są dwa sposoby komunikacji z czujnikiem, poprzez magistralę I2C oraz SPI.
Moduł KAmodLPS331 został wyposażony w stabilizator liniowy co pozwala na zasilanie go napięciem od 2,5 do 5,5 V lub można bezpośrednio zasilać układ MEMS napięciem 3,3 V. Oprócz stabilizatora, na płytce modułu znajduje się konwerter poziomów logicznych, co pozwala na podłączenie modułu do układów o różnych poziomach napięć magistrali komunikacyjnych.
Moduł KAmodLPS331 posiada 9 padów lutowniczych, do których możemy przylutować dołączone złącza goldpin lub przewody. Złącze +3,3 V służy do bezpośredniego zasilania układu czujnika napięciem 3,3 V. Nie należy do tego pinu podawać większego napięcia niż 3,6 V ponieważ spowoduje to trwałe uszkodzenie układu. Złącze +VIN pozwala na zasilanie modułu napięciem z przedziału 2,5-5,5 V, GND to masa układu. Złącza oznaczone jako SDA, SCL, SDO, CS służą do komunikacji z sensorem MEMS. W zależności od wybranego sposobu komunikacji złącza te zmieniają swoje przeznaczenie, inne dla I2C, a inne dla SPI. Podczas komunikacji z czujnikiem poprzez magistralę I2C wejście oznaczone jako SDO pozwala na wybór jednego z dwóch adresów układu. Wyjścia INT1 oraz INT2 są to wyjścia przerwania sensora LPS331AP.
W prezentowanym przykładzie została wykorzystana magistrala I2C oraz moduł KAmduino UNO. Podłączenie modułu do płytki z mikrokontrolerem ogranicza się do podłączenia zasilania oraz dwóch linii magistrali, SCL – wyjście zegarowe, oraz SDA – linia danych. Na płytce modułu znajdują się rezystory 4,7 kΩ podciągające linie SDA i SCL do zasilania układu, stąd nie ma potrzeby dodawania już kolejnych na płytce prototypowej. W przykładzie wykorzystano zasilanie 3,3 V, które można pobrać bezpośrednio z płytki KAmduino UNO (zdjęcie 2 i 3).
Listing przedstawia kod przykładowego programu obsługującego czujnik LPS331. Program wykorzystuje bibliotekę LPS, która odpowiada za obsługę rejestrów czujnika. W programie definiowany jest obiekt „ps” jako obiekt klasy LPS. W procedurze setup() przeprowadzana jest inicjalizacja czujnika do pracy i w przypadku braku podłączonego układu do magistrali I2C, jest to komunikowane poprzez wyświetlenie informacji w terminalu. W pętli głównej programu wykorzystywane są dwie metody klasy LPS, readPressureMilibars i readTemperatureC. Zwracają one dane typu float, które przechowywane są odpowiednio w zmiennych pressure i temperature. Odczytane dane z sensora wypisywane są w terminalu. Opóźnienie 100 ms pozwala na łatwiejsze odczytywanie wyników.
List. 1. Kod programu
#include <Wire.h> #include <LPS.h> LPS ps; void setup() { Serial.begin(9600); Wire.begin(); if (!ps.init()) { Serial.println("Failed to autodetect pressure sensor!"); while (1); } ps.enableDefault(); } void loop() { float pressure = ps.readPressureMillibars(); float temperature = ps.readTemperatureC(); Serial.print("Cisnenie: "); Serial.print(pressure); Serial.print(" hPa\tTemperatura: "); Serial.print(temperature); Serial.println(" *C"); delay(100); }