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



Aleksandra Krajewska opowiada o nowym rozdziale w rozwoju firmy EAE Elektronik – w tym budowie nowej hali produkcyjnej
KIOXIA wprowadza urządzenia z wbudowaną pamięcią flash QLC UFS 4.1 dla rozwiązań mobilnych
Urządzenie Sentinum wykorzystuje moduł SiP firmy Nordic do raportowania danych z czujników wewnętrznych i zewnętrznych 


![https://www.youtube.com/watch?v=kmvM5hVSzCM Piata już edycja konferencji Hardware Design Masterclasses dla elektroników zaskoczyła frekwencją, tym bardziej, że spotkanie było dwudniowe. Film jest krótką relacją z wydarzenia, bazującą na wypowiedziach prelegentów. [materiał redakcyjny] Zapraszamy do obejrzenia!](https://mikrokontroler.pl/wp-content/uploads/2026/01/Rafal-tytulowe.png)


