Equipement nécessaire : Carte Microbit + afficheur 


L'afficheur donne la valeur de l'accélération et le temps pour lequel elle dure.



from microbit import *

import utime


# Adresse I2C du LCD (peut être 0x27 ou 0x3F selon le modèle)

LCD_I2C_ADDR = 0x27  


# Classe pour contrôler le LCD I2C

class LCD:

    def __init__(self, addr):

        self.addr = addr

        self.init_lcd()


    def send(self, data, mode=0):

        buf = bytearray(2)

        buf[0] = mode

        buf[1] = data

        i2c.write(self.addr, buf)


    def command(self, cmd):

        self.send(cmd, 0)


    def write(self, text):

        for char in text:

            self.send(ord(char), 1)


    def clear(self):

        self.command(0x01)

        utime.sleep_ms(2)


    def init_lcd(self):

        utime.sleep_ms(50)

        self.command(0x33)  # Mode 4 bits

        self.command(0x32 # Mode 4 bits

        self.command(0x28)  # Écran 2 lignes, 5x8 points

        self.command(0x0C)  # Affichage activé, pas de curseur

        self.command(0x06)  # Auto-incrémentation du curseur

        self.clear()


    def set_cursor(self, line, col):

        addr = 0x80 + (0x40 * line) + col

        self.command(addr)


lcd = LCD(LCD_I2C_ADDR)


# Initialisation

lcd.write("Init...")


max_accel =     # Stocke la valeur max en m/s²

start_time = 0     # Temps où l'accélération max est détectée

duration =      # Durée de maintien de l'accélération max


while True:

    accel_mg = accelerometer.get_z()  # Lecture en mg (milligravité)

    accel_mg = abs(accel_mg)  # Valeur absolue


    # Conversion en m/s²

    accel_ms2 = (accel_mg * 9.81) / 1000  


    # Si une nouvelle accélération max est détectée

    if accel_ms2 > max_accel:

        max_accel = accel_ms2

        start_time = utime.ticks_ms()  # Enregistre l'instant du début

        duration = # Réinitialisation de la durée


    # Calcul de la durée si on est toujours sur la même valeur max

    if max_accel == accel_ms2:

        duration = (utime.ticks_ms() - start_time) / 1000  # En secondes


    # Affichage sur LCD

    lcd.clear()

    lcd.set_cursor(0, 0)

    lcd.write("Accel max:")

    lcd.set_cursor(0, 10)

    lcd.write("{:.2f}m/s2".format(max_accel))


    lcd.set_cursor(1, 0)

    lcd.write("Temps:")

    lcd.set_cursor(1, 7)

    lcd.write("{:.1f} s".format(duration))  


    utime.sleep(0.5 # Pause avant la prochaine mesure




Créé avec HelpNDoc Personal Edition: 5 raisons pour lesquelles un outil de création d'aide est meilleur que Microsoft Word pour la documentation