Witam, stworzyłem projekt pomiaru pochylenia z wykorzystaniem akcelerometru ADXL345, ATmegi328p, wyświetlacz LCD.
Co do schematu:
Zasilanie atmegi filtrowane, akcelerometr podpięty do zasilania 3,3V(stabilizator LF33CV) zasilanie również filtrowane.
ADXL (VCC i CS do 3,3V, SDA i SCL podłączone do rezystorów podciągających (7,5k), oraz do ATmegi PC4(SDA), PC5(SCL).
Port D podpięty pod wyświetlacz.
Komunikacja za pomocą i2c
Problem polega na tym, że nie widzę pełnego zakresu, w spoczynku, płytka leży płasko na stole P(itch)= 12, R(oll) = 2, natomiast odczyt z osi Z = 511. Patrząc na płytkę oś X idzie w prawo, oś Y ode mnie. przechylając w prawo kąt P zmienia się do ok 86 (przy kącie prostym) przy 180stopniach znów mam P =11/12. Jeśli odchylam w lewo P= 12 -> 0 ->89stopni i na 89 się zatrzymuje, nie pokazuje wartości w drugą stronę, tak samo ma się w przypadku Roll. Czy ma ktoś jakiś pomysł jak to poprawić?
Wyliczam kąty pitch, roll w ten sposób:
Sam program odpowiedzialny za obsługę akcelerometru wygląda następująco:
ADXL.c
ADXL.h
main.c:
Co do schematu:
Zasilanie atmegi filtrowane, akcelerometr podpięty do zasilania 3,3V(stabilizator LF33CV) zasilanie również filtrowane.
ADXL (VCC i CS do 3,3V, SDA i SCL podłączone do rezystorów podciągających (7,5k), oraz do ATmegi PC4(SDA), PC5(SCL).
Port D podpięty pod wyświetlacz.
Komunikacja za pomocą i2c
Problem polega na tym, że nie widzę pełnego zakresu, w spoczynku, płytka leży płasko na stole P(itch)= 12, R(oll) = 2, natomiast odczyt z osi Z = 511. Patrząc na płytkę oś X idzie w prawo, oś Y ode mnie. przechylając w prawo kąt P zmienia się do ok 86 (przy kącie prostym) przy 180stopniach znów mam P =11/12. Jeśli odchylam w lewo P= 12 -> 0 ->89stopni i na 89 się zatrzymuje, nie pokazuje wartości w drugą stronę, tak samo ma się w przypadku Roll. Czy ma ktoś jakiś pomysł jak to poprawić?
Wyliczam kąty pitch, roll w ten sposób:
Kod: C / C++
Sam program odpowiedzialny za obsługę akcelerometru wygląda następująco:
ADXL.c
Kod: C / C++
ADXL.h
Kod: C / C++
main.c:
Kod: C / C++