MEMS-owa poziomica z sensorem LIS35 na STM32
W artykule przedstawiamy opis wykonania elektronicznej, dwuosiowej poziomicy wykorzystującej w roli sensora popularny akcelerometr MEMS, która służyć będzie do pomiaru kąta względem powierzchni Ziemi, na podstawie uzyskanych danych mikrokontroler obrazować będzie wynik pomiaru na wyświetlaczu TFT w postaci efektownej libelli (pęcherzyka powietrza).
W przykładzie posłużymy się 3 osiowym akcelerometrem LIS35 firmy STMicroelectronics, który za pośrednictwem magistrali I2C komunikuje się z mikrokontrolerem STM32F103 z zestawu ZL27ARM. Do zestawu podłączono również wyświetlacz KAmodTFT2 prezentujący dane z czujnika. Schemat połączeń pokazano na rysunku 1.
Rys. 1. Schemat połączeń zestawu testowego (nie pokazano podłączenia diody LED D8, sterowanej z linii PB15, połączonych na płytce zestawu)
Po konfiguracji sygnałów taktujących samego procesora program przygotowuje do pracy czujnik LIS35 (na module KAmodMEMS2) oraz wyświetlacz TFT. Na wyświetlaczu graficznym na czas inicjalizacji akcelerometru widnieje napis „Inicjalizacja”, w przypadku gdy LIS35 nie zostanie poprawnie wykryty przez urządzenie, obraz na LCD zmienia kolor na czerwony co sygnalizuje błąd akcelerometru.
Gdy wszystko jest w porządku, na ekranie wyświetlona zostaje bitmapa z rysunkiem tła dla poziomicy, na którym widnieją okręgi określające przechył KAmodMEMS2 względem osi X oraz Y.
//Bialy obraz
TFTN_Clear(0xFFF);
//Tekst "Inicjalizacja" na TFT
TFTN_WriteXY("Inicjalizacja\0" , 5, 10,0xF00,0xFFF, font2);
//Inicjalizacja LIS35
if (LIS35_Initialize()) TFTN_Clear(0xF00);
//Rysowanie tarczy poziomicy na TFT
TFTN_WriteBMP(tarcza);
Następnie w nieskończonej pętli odczytywane są rejestry x oraz y zawierające wartość przyspieszenia liniowego za pomocą funkcji:
void LIS35_ReadRegister(char addr, signed char *v);
która jako argument przyjmuje adres rejestru do odczytania.
Jako że współrzędne kulki na ekranie są bezpośrednio odczytane z rejestrów czujnika LIS35, program ogranicza wartość przyspieszenia w każdej z osi jeśli przekroczy ono pewien zakres, aby nasz wirtualny bąbelek powietrza nie znalazł się poza renderowanym obrazem.
//Wartosc przyspieszenia x LIS35_ReadRegister(0x29,&x); //Wartosc przyspieszenia y LIS35_ReadRegister(0x2B,&y); //Ograniczenie maksymalnego przyspieszenia(przechylenia) if(x<(-53)) x=-53; if(y<(-53)) y=-53; if(x>53) x=53; if(y>53) y=53; //Obliczenie wspolrzednych kulki kx=53+x; //kx=53+x(+-)offset ky=53+y; //ky=53+y(+-)offset



Nordic poszerza opcje rozwojowe serii nRF54L o płytkę nRF7002 EBII do łączności Wi-Fi 6
Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć 



