Détection de double tapotement avec BerryIMUv3

Détection de double tapotement avec BerryIMUv3

L’accéléromètre (LSM6DSL) du BerryIMUv3 intègre une détection de double tapotement, ce qui facilite la détection de double tapotement sans avoir besoin de code sophistiqué.

appuyez deux fois sur IMU

Lorsque le LSM6DSL détecte un double tapotement, il peut déclencher une broche d’interruption sur le BerryIMUv3. Nous utiliserons un Raspberry Pi pour surveiller la broche d’interruption et allumer et éteindre une LED lorsqu’un double appui est détecté.

La reconnaissance d’événement Double-Tap a des registres spéciaux qui contrôlent la fonctionnalité de reconnaissance de tap, ce sont le seuil de tap et les fenêtres de temps de choc, de silence et de durée

Reconnaissance d'événement en appuyant deux fois
Reconnaissance d’événement en appuyant deux fois

Le Raspberry Pi configurera le BerryIMUv3 pour la reconnaissance par double appui. Il surveillera également les doubles pressions, qui seront utilisées pour allumer et éteindre une LED.

INT1 Sur le BerryIMUv3 s’élèvera lorsqu’un double tapotement est détecté.


GPIO18
(broche physique 12) sur le Raspberry Pi sera utilisé pour surveiller INT1 , en utilisant une interruption.

GPIO20 (broche physique 28) sera utilisée pour piloter la LED.

La résistance ci-dessous est de 330 Ohms

Voici les schémas de branchement

Appuyez deux fois sur BerryIMU à l'aide d'un câble QWIIC
Appuyez deux fois sur BerryIMU à l’aide d’un câble QWIIC
Appuyez deux fois sur BerryIMU
Appuyez deux fois sur BerryIMU
import signal
from LSM6DSL import *
import sys
import RPi.GPIO as GPIO 
import smbus

bus = smbus.SMBus(1)

LED_ON = 0                                                           #Used to track of the current state of the LED
INTERRUPT_PIN = 12                                                   #The interrupt pin which will be connected to the IMU
LED_PIN = 38                                                         #The pin which will be driving the LED

#Used to clean up when Ctrl-c is pressed
def signal_handler(sig, frame):
    GPIO.cleanup()
    sys.exit(0)
    

#Used to write to the IMU
def writeByte(device_address,register,value):
    bus.write_byte_data(device_address, register, value)




def LEDnotification(channel):
	global LED_ON
	if LED_ON:
		GPIO.output(LED_PIN,0)
		LED_ON = 0
	else:
		GPIO.output(LED_PIN,1)
		LED_ON = 1


writeByte(LSM6DSL_ADDRESS,LSM6DSL_CTRL1_XL,0b01100000)                 #ODR_XL = 416 Hz, FS_XL = +/- 2 g
writeByte(LSM6DSL_ADDRESS,LSM6DSL_TAP_CFG,0b10001110)                  #Enable interrupts and tap detection on X, Y, Z-axis
writeByte(LSM6DSL_ADDRESS,LSM6DSL_TAP_THS_6D,0b10001100)               #Set tap threshold
writeByte(LSM6DSL_ADDRESS,LSM6DSL_INT_DUR2,0b01111111)                 #Set Duration, Quiet and Shock time windows
writeByte(LSM6DSL_ADDRESS,LSM6DSL_WAKE_UP_THS,0b10000000)              #Double-tap enabled 
writeByte(LSM6DSL_ADDRESS,LSM6DSL_MD1_CFG,0b00001000)                  #Double-tap interrupt driven to INT1 pin

        

GPIO.setmode(GPIO.BOARD) # Use physical pin numbering
GPIO.setup(INTERRUPT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.output(LED_PIN, 0)
GPIO.add_event_detect(INTERRUPT_PIN, GPIO.RISING, callback=LEDnotification, bouncetime=300)


while True:
    signal.signal(signal.SIGINT, signal_handler)
    signal.pause()

Nous couvrirons le code spécifique qui se rapporte à la reconnaissance par double appui.

Ligne 37 , LSM6DSL_TAP_CFG est utilisé pour activer la reconnaissance de prise sur les directions X, Y, Z. Il est également utilisé pour activer la fonction d’interruption pour la reconnaissance par double appui.

Ligne 38 , LSM6DSL_TAP_THS_6D est utilisé pour définir les seuils de prise. une valeur inférieure entraînera la détection de pressions plus douces.

Ligne 39 , LSM6DS_INT_DUR2 est utilisé pour définir la durée, la fenêtre de temps de silence et de choc. Une durée plus longue entraînera un temps plus long entre le 1er et le 2ème appui.

Ligne 40, LSM6DSL_WAKE_UP_THS. Réglez le bit le plus à gauche pour activer la reconnaissance par double appui.

Ligne 41, LSM6DSL_MD1_CFG est utilisé pour définir quelle broche d’interruption sur le BerryIMUv3 est utilisée. Dans ce cas, il est défini sur INT1.