Systemy dla Internetu Rzeczy (59). Czujnikowe moduły rozszerzeń

Systemy dla Internetu Rzeczy (59). Czujnikowe moduły rozszerzeń

Dla procesorów serii CC13xxx/26xxx SimpleLink firmy Texas Instruments dostępne są różne wersje zestawów startowych LaunchPad. Zestawy mają na płytce drukowanej tylko dwa przyciski i dwie diody LED, ale za to są wyposażone w sprzętowy układ debugujący typu XDS110 oraz złącza rozszerzeń standardu BOOSTXL. Udostępniają one prawie wszystkie wyprowadzenia procesora oraz zasilanie. Na płytki zestawu LaunchPad można nakładać moduły rozszerzeń typu BoosterPack. Szczególnie przydatne są czujnikowe moduły rozszerzeń, które umożliwiają pracę procesora z różnymi czujnikami, przede wszystkim wilgotności względnej i temperatury, oświetlenia otoczenia oraz ruchu.

Moduły rozszerzeń BoosterPack przeznaczone są do wielu celów – umożliwiają eksplorację takich zastosowań, jak pojemnościowe sensory dotyku, sterowanie oświetleniem LED itd. Ciekawą konstrukcją jest samodzielny zestaw czujnikowy CC1352 LaunchPad SensorTag [4]. Jest to skrzyżowanie zestawu startowego LaunchPad z modułem czujnikowym [S33]. Na płytce drukowanej nie ma sprzętowego układu debugującego, ale są złącza rozszerzeń standardu BOOSTXL. Zestaw ma zamontowane na płytce drukowanej cztery scalone czujniki niskiej mocy:

  • wilgotności względnej i temperatury HDC2080,
  • oświetlenia otoczenia OPT3001,
  • trzyosiowy czujnik ruchu ADXL362
  • czujnik magnetyczny DRV5032 (z zastosowaniem efektu Halla) [S33].

Obecnie dostępne są trzy rodzaje czujnikowych modułów rozszerzeń oferowane przez firmę Texas Instruments.

Moduł czujnikowy BOOSTXL-SENSORS

Jest to pierwszy i najstarszy (2017) moduł czujnikowy typu BoosterPack. Ma zainstalowane:

  • czujnik oświetlenia otoczenia OPT3001 (Texas Instruments),
  • czujnik wilgotności względnej i temperatury BME280 (Bosch),
  • akcelerometr i żyroskop BMI160 (Bosch),
  • magnetometr BMM150 (Bosch) [3].

Wszystkie układy scalone czujników są dołączone do tej samej szyny I2C. Udostępniają też wyprowadzenia sygnału przerwania. Moduł ma sygnały rozmieszczone w sposób kompatybilny z zestawami startowymi LaunchPad z procesorami serii CC13xxx/26xxx SimpleLink. Niestety, przeznaczone oprogramowanie jest dostępne tylko dla procesorów serii MSP430 i MSP432 i jest bardzo stare (2018).

Moduł czujnikowy BOOSTXL-BASSENSORS

Jest to następny (2018) moduł czujnikowy typu BoosterPack. Moduł ma zainstalowane:

  • czujnik oświetlenia otoczenia OPT3001 (Texas Instruments),
  • czujnik wilgotności względnej i temperatury HDC2010 (Texas Instruments),
  • czujnik temperatury wysokiej rozdzielczości TMP116 (Texas Instruments),
  • czujnik pola magnetycznego z efektem Halla DRV5055 (Texas Instruments) [2].

Układy scalone czujników są dołączone do tej samej szyny I2C. Udostępniają też wyprowadzenia sygnału przerwania. Układy HDC2010 oraz DRV5055 są zasilane poprzez tranzystory MOS sterowane z osobnych linii GPIO. Układy TMP116 oraz OPT3001 są zasilane bezpośrednio z wyprowadzeń GPIO. Budowa tego modułu oraz oprogramowanie są bardzo podobne jak dla modułu BP-BASSENSORSMKII.

Moduł czujnikowy BP-BASSENSORSMKII

Jest to najnowszy (2020) moduł czujnikowy typu BoosterPack. Moduł ma zainstalowane:

  • czujnik oświetlenia otoczenia OPT3001 (Texas Instruments),
  • czujnik wilgotności względnej i temperatury HDC2080 (Texas Instruments),
  • czujnik temperatury bardzo wysokiej rozdzielczości TMP117 (Texas Instruments),
  • czujnik pola magnetycznego z efektem Halla DRV5055 (Texas Instruments),
  • akcelerometr i żyroskop BMI160 (Bosch),
  • magnetometr BMM150 (Bosch) [1] (rysunek tytułowy).

Układy scalone czujników są dołączone do tej samej szyny I2C. Identyfikacja następuje poprzez ustawienie (skonfigurowanie) różnych adresów na szynie I2C: OPT3001 0×44, TMP117 0×48, HDC2080 0×40, BME150 0×13, BME160 0×69. Układy udostępniają też wyprowadzenia sygnału przerwania.

Układy HDC2080 oraz DRV5055 są zasilane poprzez tranzystory MOS sterowane z osobnych linii GPIO. Układy TMP117 oraz OPT3001 są zasilane bezpośrednio z wyprowadzeń GPIO.

Czujnik temperatury TMP117

TMP117 to 16-bitowy cyfrowy lokalny czujnik temperatury, który mierzy temperaturę otoczenia lub temperaturę obiektu w bezpośrednim kontakcie [8]. Pomimo że jest czujnikiem kontaktowym, czułość i dokładność TMP117 są wystarczająco duże, aby wykryć zmianę temperatury dłoni umieszczonej w pobliżu czujnika. Wyjście cyfrowe jest obsługiwane przez 2-przewodowy interfejs szeregowy zgodny z I2C i SMBus.

Czujnik TMP117 został zamontowany na odłamywanej części płytki drukowanej (rysunek tytułowy). Czujnik jest dołączany do płytki głównej taśmą elastyczną umieszczaną w zatrzaskiwanych złączach stykami do dołu, czarny prostokąt na taśmie musi być na górze (rysunek 1).

Rysunek 1. Płytka czujnika temperatury TMP117 [6]

Należy zwrócić uwagę, że takie dołączenie płytki czujnika powoduje odwrócenie kolejności sygnałów na złączach (rysunek 2). Czujnik TMP117 pobiera w trakcie pomiaru 220 μA (max.) prądu, dlatego jest zasilany bezpośrednio z wyprowadzenia GPIO służącego również do kluczowania zasilania (czas resetu 1,5 ms).

Rysunek 2. Sygnały złącza umożliwiającego dołączenie płytki czujnika temperatury TMP117 [6]

Czujnik oświetlenia otoczenia OPT3001

Scalony czujnik oświetlenia otoczenia OPT3001 firmy Texas Instruments wykonuje pomiar poziomu oświetlenia [12]. Charakterystyka spektralna czujnika jest zbliżona do charakterystyki ludzkiego oka. Układ wykazuje bardzo dobre tłumienie podczerwieni. Wbudowana automatyka pomiaru umożliwia uzyskanie zakresu pomiarowego od 0,01 lux do 83 klux. Odpowiada to 23-bitowemu zakresowi dynamiki pomiarowej. Układ OPT3001 obsługuje łącze komunikacyjne w standardzie I2C fast 400 kHz i pobiera w trakcie pomiaru 3,7 μA (max.) prądu i tylko 0,4 μA (max.) prądu w stanie uśpienia (rysunek 3). Dlatego dołączony jest na stałe do linii zasilania zestawu i umożliwia programowe kluczowanie pracy.

Rysunek 3. Aplikacja czujnika oświetlenia otoczenia OPT3001 [6]

Czujnik wilgotności względnej i temperatury HDC2080

Układ scalony HDC2080 firmy Texas Instruments jest wykonany w technologii pojemnościowej [9]. Udostępnia on 14-bitowe pomiary wilgotności względnej w zakresie 0...100% z dokładnością ±2% RH (w zakresie 20...80% RH). Dodatkowo wykonywany jest 14-bitowy pomiar temperatury. Umożliwia to wewnętrzne skompensowanie termiczne pomiarów. Układ jest skalibrowany fabrycznie i pracuje z szerokim zakresem zasilania 1,62...3,6 V. Układ obsługuje łącze komunikacyjne standardu I2C oraz SPI. Dostarczany jest on w małej obudowie 2×2×0,9 mm. Ma wewnętrzny grzejnik włączany programowo.

Układ scalony HDC2080 pobiera w trakcie pomiaru wilgotności 890 μA (max.) prądu i 730 μA (max.) prądu w trakcie pomiaru temperatury. Dlatego jego zasilanie jest kluczowane poprzez tranzystor MOS sterowany z osobnej linii GPIO (rysunek 4).

Rysunek 4. Aplikacja czujnika wilgotności względnej i temperatury HDC2080 [6]

Czujnik magnetyczny DRV5055 z zastosowaniem efektu Halla

Układ scalony DRV5055 firmy Texas Instruments to ultraenergooszczędny czujnik Halla z analogowym wyjściem o napięciu proporcjonalnym do gęstości strumienia magnetycznego z pasmem do 20 kHz [7]. Układ oferowany jest w różnych wersjach czułości gęstości strumienia magnetycznego (21/42/85/169 mT).

Pobiera do 10 mA prądu, dlatego jego zasilanie jest kluczowane poprzez tranzystor MOS sterowany z osobnej linii GPIO (rysunek 5).

Rysunek 5. Aplikacja czujnika magnetycznego DRV5055 [6]

Bosch BMI160 Inertial Measurement Sensor

Inercyjny zespół pomiarowy Bosch BMI160 to 6-osiowy cyfrowy akcelerometr i czujnik żyroskopowy, który mierzy siły grawitacyjne wywierane na urządzenie, a także prędkość obrotu w stopniach na sekundę [10]. BMI160 może synchronizować dane z własnego akcelerometru i żyroskopu, a także z urządzeniem zewnętrznym, takim jak czujnik geomagnetyczny. Obracanie płytki wokół jej osi zwiększa sygnał wyjściowy czujnika żyroskopu, a zmiana orientacji płytki względem ziemi zmienia sygnał wyjściowy akcelerometru.

BMI160 ma dodatkowy interfejs I2C do podłączenia dodatkowych czujników Bosch, takich jak czujnik geomagnetyczny BMM150 (rysunek 6). Wyjście cyfrowe obu czujników jest przesyłane przez 2-przewodowy interfejs szeregowy zgodny z I2C i SMBus. Układ BMI160 podczas pracy pobiera do 900 μA prądu i tylko 3 μA (typ.) w trybie zawieszania. Dlatego dołączony jest na stałe do linii zasilania zestawu, a kluczowanie trybu pracy odbywa się na drodze programowej.

Rysunek 6. Aplikacja czujnika inercyjnego BMI160 [6]

Bosch BMM150 Geomagnetic Sensor

Czujnik geomagnetyczny Bosch BMM150 to 3-osiowy cyfrowy czujnik magnetometru, który mierzy siłę pól magnetycznych do zastosowań e-kompasów [11]. BMM150 może być używany w połączeniu z BMI160 do wykrywania 9-osiowego. BMM150 jest podłączony do BMI160 jako slave, a wszystkie jego dane z czujnika są przesyłane do BMI160 w celu raportowania przez 2-przewodowy interfejs szeregowy kompatybilny z I2C i SMBus (rysunek 7). Układ BMI150 podczas pracy z dużą dokładnością pobiera do 4,9 mA (typ.) prądu i tylko 1 μA (typ.) w trybie zawieszania. Dlatego dołączony jest na stałe do linii zasilania zestawu, a kluczowanie trybu pracy odbywa się na drodze programowej.

Rysunek 7. Aplikacja magnetometru BMM150 [6]

Złącza rozszerzeń modułu czujnikowego BP-BASSENSORSMKII

Złącza rozszerzeń standardu BOOSTXL są zorganizowane jako cztery osobne listwy po 10 pinów, oznaczane jako J1...J4 (rysunek 8) [6]. Złacze J1 jest umieszczone skrajnie po lewej, a J2 po prawej stronie płytki. Złącza dodane później do standardu są umieszczone wewnątrz, gdzie J3 jest po stronie lewej, a J4 po prawej. Niestety, numeracja przypisania sygnałów do pinów jest inna (rysunek 8).

Rysunek 8. Sygnały złącza rozszerzeń standardu BOOSTXL modułu BP-BASSENSORSMKII [6]

Piny są numerowane w sposób ciągły, zaczynając od lewego górnego rogu (10) w dół. Kontynuowanie w prawym dolnym rogu (11) do góry. Ponownie wewnątrz od lewego górnego rogu (21) w dół. I na koniec wewnątrz w prawym dolnym rogu (31) do góry. W dokumentacji modułu jest odwołanie tylko do nazwy J1 (1...40) z numeracją ciągłą. Numery te są wydrukowane na płytce, a także są umieszczone nazwy sygnałów obok poszczególnych wyprowadzeń złączy. Numerowanie złączy na zestawach LaunchPad jest również ciągłe (rysunek 9).

Rysunek 9. Sygnały złącza rozszerzeń standardu BOOSTXL zestawu startowego CC1352R1 LaunchPad [5]

Złącza rozszerzeń zestawu startowego CC1352R1 LaunchPad

Na złączach J1 oraz J2 zestawu startowego CC1352R1 LaunchPad jest udostępnionych 26 wyprowadzeń – wejścia-wyjścia (GPIO) układu scalonego CC1352 P oznaczone jako „DIOxx”, gdzie xx to numery od 01 do 31 (rysunek 9) [5]. Występuje pewien konflikt sterowania diodami LED zamieszczonymi na obu płytkach. Można temu zaradzić poprzez zdjęcie zworek P6 na płytce zestawu CC1352 P-4 LaunchPad [S15].

Oprogramowanie

Strona firmowa modułu BP-BASSENSORSMKII [1] nie zawiera żadnej informacji o oprogramowaniu obsługującym moduł. Również bardzo trudno znaleźć o tym jakąkolwiek informację na portalu firmowym TI.

Podręcznik modułu [6] wysyła do strony pobierania instalatora pakietu SimpleLink Sensor and Actuator Plugin. Lepszym rozwiązaniem jest dostęp do tego pakietu z portalu TIREX [13]. A najlepszym sposobem jest zainstalowanie tego pakietu wewnątrz aplikacji Code Composer Studio (CCS). Jednak obecna wersja pakietu nie była aktualizowana od roku 2020. Wymaga ona instalowania bardzo starych komponentów środowiska programowego. Na szczęście wykonywane jest to automatycznie w aplikacji CCS.

Pakiet Sensor and Actuator Plugin zawiera cztery projekty przykładowe działające z modułem BP-BASSENSORSMKII [13]:

  • adcdrv5055 – wykonuje próbkowanie sygnału analogowego układu DRV5055-Q1, używając przetwornika ADC procesora, przelicza wynik na jednostki militesla i wysyła dane do komputera PC poprzez łącze UART;
  • i2cbmi160 – obsługuje układ BMI160 oraz BMM 150, pobiera trzyosiowe próbki akcelerometru, żyroskopu oraz kompasu i wysyła do komputera PC poprzez łącze UART;
  • i2copt3001 – pobiera próbki cyfrowe z układu OPT3001 wysyła do komputera PC poprzez łącze UART;
  • TI OPT3001 – obsługuje czujnik oświetlenia o tym samym oznaczeniu.

Pakiet programowy SimpleLink CC13xxx CC26xxx SDK zawiera dwa projekty przykładowe działające z modułem BP-BASSENSORSMKII:

  • i2ctmp – obsługuje układ TMP117 [14].
  • i2copt3001_cpp – obsługuje układ OPT3001 [15].

Do pracy wymagane są najnowsze wersje elementów środowiska programowego. Dotyczy to przede wszystkim pakietu programowego CCS v11.1.0 (marzec 2022). Pakiet instalacyjny CCS można darmowo pobrać ze strony TI. Pakiety programowe należy zainstalować wewnątrz CCS.

Praca z projektem i2ctmp

Najpierw otwieramy sesję terminalu (np. PuTTY, itp.) do odpowiedniego portu COM z ustawieniami 115200, 8, 1, N. Następnie uruchamiamy przykład. Dioda LED włącza się, aby wskazać, że inicjalizacja sterownika I2C została zakończona. W razie potrzeby czujnik TMP jest włączany za pomocą wyjścia GPIO. Szyna I2C jest odpytywana z adresami wszystkich obsługiwanych czujników TMP. Dane wyjściowe różnią się w zależności od znalezionych czujników TMP. Ostatni znany czujnik TMP zostanie zastosowany do odczytu próbek temperatury. Próbki są konwertowane na stopnie Celsjusza i wyświetlane przez UART (rysunek 10).

Rysunek 10. Efekt działania aplikacji i2ctmp

Aplikacja i2ctmp uruchamia jedno zadanie – mainThread, które wykonuje następujące czynności:

  1. Otwiera i inicjuje obiekt sterownika I2C;
  2. Określa, który czujnik TMP jest dostępny;
  3. Używa sterownika I2C w trybie blokowania, aby uzyskać dane z czujnika TMP;
  4. Wylicza temperaturę (w stopniach Celsjusza) i drukuje wartość przez UART;
  5. Zadanie śpi przez 1 sekundę;
  6. Powtarza odczyt 20 razy i kończy działanie.

Praca z projektem i2copt3001_cpp

Najpierw otwieramy sesję terminalu (np. PuTTY, itp.) do odpowiedniego portu COM z ustawieniami 115200, 8, 1, N. Następnie uruchamiamy przykład. Dioda LED włącza się, aby wskazać, że inicjalizacja sterownika I2C została zakończona. W razie potrzeby czujnik jest włączany za pomocą wyjścia GPIO.

Szyna I2C jest odpytywana z adresami wszystkich obsługiwanych czujników.

Aplikacja i2copt3001_cpp uruchamia dwa wątki POSIX. Pierwszy – mainThread, wykonuje następujące czynności:

  1. Otwiera i inicjuje obiekt I2C, GPIO, Display i semafor;
  2. Wyświetla informacje przechowywane w rejestrach danych OPT3001 i ustawia ograniczenia mechanizmu przerwań (rysunek 11);
  3. Używa sterownika I2C do pobierania danych z czujnika OPT3001;
  4. Oblicza wartość natężenia światła (w luksach) i drukuje wartość za pośrednictwem UART;
  5. Zadanie śpi przez 1 sekundę;
  6. Po odczytaniu 60 próbek światła rejestry limitów są resetowane, a urządzenie przechodzi w tryb wyłączenia. Urządzenie peryferyjne I2C jest zamykane, a wątek kończy pracę.
Rysunek 11. Efekt działania aplikacji i2copt3001_cpp

Drugi wątek – alarmThread, wykonuje następujące czynności:

  1. Czeka na ustawienie semafora przez obsługę przerwania wyzwolonego przez sygnał z wyprowadzenia przerwania układu OPT3001;
  2. Wyświetla komunikat „ALARM!”, gdy czujnik OPT3001 odczytuje wartość oświetlenia spoza zaprogramowanych limitów;
  3. Używa sterownika I2C do pobierania danych z czujnika OPT3001.

Podsumowanie

Czujnikowe moduły rozszerzeń typu BoosterPack firmy Texas Instruments są bardzo ciekawym i przydatnym rozszerzeniem możliwości szybkiego testowania rozwiązań IoT z procesorami serii CC13xxx/26xxx SimpleLink. Występuje jednak problem z brakiem dla nich oprogramowania firmowego typu out-of-the-box. Firmowe środowisko programowe bardzo szybko się rozwija i duże zmiany nie są kompatybilne wstecz. Niestety, nie idzie za tym aktualizacja oprogramowania dla obsługi czujnikowych modułów rozszerzeń. Oferowane na portalu firmowym TI oprogramowanie jest nieaktualne, wymaga starych (wręcz historycznych) wersji środowiska programowego lub go po prostu nie ma.

W dobie powszechnego użycia środowiska Arduino, oferującego natychmiastowe rozpoczęcie pracy, oferta rozszerzeń typu BoosterPack nie nadąża za obecnymi potrzebami szybkiego prototypowania dla IoT. Pomimo bardzo dużej oferty układów serii CC13xxx/26xxx SimpleLink nie ma portalu tematycznego. Co więcej, po kolejnej reorganizacji portalu firmowego TI wiele istotnych informacji zniknęło, np. nie ma informacji o standardzie złączy BOOSTXL, brak listy modułów rozszerzeń typu BoosterPack (także innych producentów) itd.
Pewną alternatywą w tej sytuacji jest zestaw czujnikowy CC1352 LaunchPad SensorTag [4]. Zestaw jest dostarczany z fabrycznie zainstalowanym programem o nazwie Multi Sensor [S33]. Obsługuje ono cztery czujniki i transmisję bezprzewodową Bluetooth LE (np. ze smartfonem z aplikacją SimpleLink Starter). Projekt aplikacji Multi Sensor jest dostarczany w ramach pakietu programowego SimpleLink CC13xxx CC26xxx SDK (5.40.00.40).

Henryk A. Kowalski
Instytut Informatyki
Politechnika Warszawska

Wybrane pozostałe artykuły kursu Systemy dla Internetu Rzeczy
[S15] Zestaw CC1352R1 LaunchPad, EP 5/2018
[S33] Zestaw czujnikowy LPSTK – CC1352R LaunchPad SensorTag, EP 1/2020

Literatura
[1] BP-BASSENSORSMKII Building automation sensors BoosterPack module, Texas Instruments, https://bit.ly/3NpEBgu
[2] BOOSTXL-BASSENSORS Building Automation Sensors BoosterPack Module, https://bit.ly/3qINGY7
[3] BOOSTXL-SENSORS Sensors BoosterPack Plug-In Module, https://bit.ly/3Dg5COU
[4] SimpleLink multi band CC1352R wireless MCU Launchpad SensorTag kit LPSTK-CC1352R, Texas Instruments, http://bit.ly/38GI1ar
[5] LAUNCHXL-CC1352P SimpleLink multi-band CC1352P wireless MCU LaunchPad Development Kit, https://bit.ly/3NBqJjA, LAUNCHXL-CC1352R1 SimpleLink Multi-Band CC1352R Wireless MCU LaunchPad Development Kit, https://bit.ly/3NqJMg9
[6] BP-BASSENSORSMKII User’s Guide, Jan. 10, 2020, https://bit.ly/3tHkRNx
[7] DRV5055 Ratiometric linear hall effect sensor with analog output, https://bit.ly/3qEJ31m
[8] TMP117 0.1C digital temperature sensor, 48-bit EEPROM, PT100/PT1000 RTD replacement, https://bit.ly/3vEZtaC
[9] HDC2080 2% RH ultra-low-power digital relative humidity sensor, interrupt/DRDY, https://bit.ly/387qlsP
[10] BMI160 IMU combining accelerometer and gyroscope, Bosch, https://bit.ly/3DixjXb
[11] BMM150 Magnetometer, Bosch, https://bit.ly/3INjPnw
[12] OPT3001 Digital ambient light sensor (ALS) with high-precision human-eye response, Texas Instruments, http://bit.ly/2YQJxSV
[13] SimpleLink Sensor and Actuator Plugin (1.50.00.00), 29 Jan 2020, https://bit.ly/3iG0IBl
[14] i2ctmp, SimpleLink CC13xx CC26xx SDK (5.40.00.40), 26 Jan 2022, https://bit.ly/3IG02X7
[15] i2copt3001_cpp, SimpleLink CC13xx CC26xx SDK (5.40.00.40), 26 Jan 2022, https://bit.ly/36RrbsN
Artykuł ukazał się w
Elektronika Praktyczna
kwiecień 2022

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów