ACC Sensor


auf dem 1.69-Zoll-IPS-LCD-Display
240 x 280 Pixel - RP2350


Anleitung getestet mit CircuitPython 10.0.0




Bildbox 1 (klick hier)




Hardware

- 1,69-Zoll-IPS-LCD-Touch-Display WS-30126 (RP 2350)
- USB-A zu USB-C Kabel

Firmware

- CircuitPython 10.0.0

Als nächstes zeige ich, wie Sie den ACC Sensor nutzen können. Das Board verfügt über einen 6-Achsen IMU mit 3-Achsen-Beschleunigungsmesser und 3-Achsen-Gyroskop. Der Chip ist ein QMI8658. Dafür habe ich bereits bei früheren Projekten einen Treiber in CircuitPython angepasst. Angesteuert wird der Chip über I2C (GPIO-Pin 6 und 7). Die Initialisierung des i2c-Bus ist im Treiber my-qmi8658.py integriert.

Die Bibliothek können Sie als zip-Datei hier herunterladen , entpacken und in den lib-Ordner ihres 'CIRCUITPY'-Laufwerkes kopieren.

Der Aufruf der Class QMI8658() erfolgt im Programm einfach mit sensor = my_qmi8658.QMI8658() in Zeile 14. Kopieren Sie wieder den Quellcode im unteren Kasten in die Thonny-IDE und probieren ihn aus.

  
  
1  # Test des ACC-Sensors mit dem Treiber my_qmi8658
2  import time
3  import board
4  import busio
5  import displayio
6  import digitalio
7  import terminalio
8  import fourwire
9  from adafruit_display_text import label
10 from adafruit_st7789 import ST7789
11 import my_qmi8658
12
13 # Sensor initialisieren
14 sensor=my_qmi8658.QMI8658()
15
16 # Release any resources currently in use for the displays
17 displayio.release_displays()
18 cs=board.GP9
19 dc=board.GP8
20 sck=board.GP10
21 mosi=board.GP11
22 reset=board.GP13
23 bl=board.GP25
24 # Release any resources currently in use for the displays
25 displayio.release_displays()
26 spi = busio.SPI(sck, mosi)
27 display_bus = fourwire.FourWire(spi, command=dc, chip_select=cs, reset=reset)
28 display = ST7789(display_bus, rotation=0, width=240, height=280, backlight_pin=bl, rowstart=20, colstart=0)
29 display.brightness = 1
30 # Make the display context
31 main = displayio.Group()
32 display.root_group = main
33
34 ## label Menue
35 menu = label.Label(terminalio.FONT, text="", line_spacing=1, color=0xffffff)
36 text_group = displayio.Group(scale=2, x=25, y=25)
37 text_group.append(menu)
38 main.append(text_group)
39
40 while True:
41     #read QMI8658
42     reading=sensor.Read_XYZ()
43     # Display wird um die x-, y- und z-Achse gekippt
44     wert_y = (10)*reading[0]
45     wert_x = (10)*reading[1]
46     wert_z = (10)*reading[2]
47
48     menu.text = "ACC-Sensor\n\n" + "x = " + str(wert_x) + "\ny = " + str(wert_y) + "\nz = " + str(wert_z)
49     time.sleep(0.5)
  

Sehen wir uns die 'while-Schleife' an. In Zeile 42 werden die Sensorwerte als Tupel gelesen. Dabei sind reading[0], reading[1] und reading[2] die Beschleunigungswerte in x-, y- und z-Richtung. Diese werden in Zeile 48 ausgegeben und nach einer kurzen Pause von 0.5 Sekunden erneuert.



Da mich nachfolgend hauptsächlich der Touchsensor beschäftigt, habe ich hier keine weitergehenden Beispiele vorgesehen. Nur soviel schon vorab. Der Touchsensor wird ebenfalls über den i2c-Bus mit den gleichen GPIO's Pin6 und Pin7 betrieben. Deshalb muss der Treiber 'my_qmi8658' in einen gemeinsamen Treiber integriert werden, um ihn parrallel mit dem Touchsensor zu nutzen.



Viel Spass und Erfolg beim Ausprobieren.