Accueil > NodeMCU > Utilisation du capteur MPU6050 en MicroPython

Utilisation du capteur MPU6050 en MicroPython

Je viens d’ajouter un nouveau capteur à ma platine de test NodeMCU Lolin, à savoir le MPU6050 qui contient un gyroscope et un accélérateur. Afin de pouvoir l’utiliser j’ai écrit une librairie en MicroPython qui est accessible à l’adresse https://github.com/itechnofrance/micropython/tree/master/librairies/mpu6050

Autant vous dire que j’ai passé beaucoup de temps pour comprendre le fonctionnement de ce capteur mais j’ai fini par y arriver.
Les fonctions de la librairie sont les suivantes :
– fonction detect() qui permet de détecter le capteur sur le bus I2C.
– fonction reset() qui permet d’initialiser le capteur.
– fonction config() qui permet de configurer le capteur.
– fonction lecture_capteur() qui permet de lire le gyroscope, l’accéléromètre et la température.
– les fonctions temp(), acc() et gyro() qui vous donnent les valeurs en brut.
– la fonction angle() qui permet de récupérer les angles X et Y.

Un premier programme exemple permet de récupérer les différentes valeurs et de les afficher sur l’écran OLED dont voici le contenu :
#
# Programme d’utilisation de la librairie MPU6050
#
# Auteur : iTechnoFrance
#
from machine import I2C, Pin
import ssd1306
import mpu6050
import time
# Declaration I2C
# // D1 -> GPIO05 –> SDA
# // D2 -> GPIO04 –> SCL
i2c = I2C(scl=Pin(4), sda=Pin(5), freq=400000)
# Declaration OLED SSD1306
oled = ssd1306.SSD1306_I2C(128, 64, i2c, 0x3c)  # 128 x 64 pixels
oled.fill(0)  # efface l’ecran
oled.text(« Calibr. MPU6050 », 0, 0)
oled.show()
mpu_6050 = mpu6050.MPU6050(i2c)  # declaration mpu6050
oled.text(« Adresse : », 0, 10)
oled.text(hex(mpu_6050.adresse), 80, 10)
mpu_6050.lecture_capteurs()
oled.text(« Temp : », 0, 20)
oled.text(« %2.1f » % mpu_6050.temperature, 80, 20)
oled.show()
time.sleep(10)
if (mpu_6050.detect()):
    while True:
        oled.fill(0)  # efface l’ecran
        mpu_6050.lecture_capteurs()
        oled.text(« GX: », 0, 0)
        oled.text(« %i » % mpu_6050.gyroX, 30, 0)
        oled.text(« %i » % mpu_6050.gyroX_calibre, 80, 0)
        oled.text(« GY: », 0, 10)
        oled.text(« %i » % mpu_6050.gyroY, 30, 10)
        oled.text(« %i » % mpu_6050.gyroY_calibre, 80, 10)
        oled.text(« GZ: », 0, 20)
        oled.text(« %i » % mpu_6050.gyroZ, 30, 20)
        oled.text(« %i » % mpu_6050.gyroZ_calibre, 80, 20)
        oled.text(« AX: », 0, 30)
        oled.text(« %i » % mpu_6050.accX, 30, 30)
        oled.text(« %i » % mpu_6050.accX_calibre, 80, 30)
        oled.text(« AY: », 0, 40)
        oled.text(« %i » % mpu_6050.accY, 30, 40)
        oled.text(« %i » % mpu_6050.accY_calibre, 80, 40)
        oled.text(« AZ: », 0, 50)
        oled.text(« %i » % mpu_6050.accZ, 30, 50)
        oled.text(« %i » % mpu_6050.accZ_calibre, 80, 50)
        oled.show()
        time.sleep(0.1)
else:
    oled.fill(0)  # efface l’ecran
    oled.text(« MPU not detected », 0, 0)
    oled.show()
Un second programme d’utilisation de la librairie permet de récupérer les angles calculés  dont voici le contenu :
#
# Programme d’utilisation de la librairie MPU6050
#
# Auteur : iTechnoFrance
#
from machine import I2C, Pin
import ssd1306
import mpu6050
import time
# Declaration I2C
# // D1 -> GPIO05 –> SDA
# // D2 -> GPIO04 –> SCL
i2c = I2C(scl=Pin(4), sda=Pin(5), freq=400000)
# Declaration OLED SSD1306
oled = ssd1306.SSD1306_I2C(128, 64, i2c, 0x3c)  # 128 x 64 pixels
oled.fill(0)  # efface l’ecran
oled.text(« Calibr. MPU6050 », 0, 0)
oled.show()
mpu_6050 = mpu6050.MPU6050(i2c)  # declaration mpu6050
oled.text(« Adresse : », 0, 10)
oled.text(hex(mpu_6050.adresse), 80, 10)
mpu_6050.lecture_capteurs()
oled.text(« Temp : », 0, 20)
oled.text(« %2.1f » % mpu_6050.temperature, 80, 20)
oled.show()
time.sleep(10)
if (mpu_6050.detect()):
    while True:
        oled.fill(0)  # efface l’ecran
        mpu_6050.lecture_capteurs()
        oled.text(« Angle X: », 0, 0)
        oled.text(« %i » % mpu_6050.AngleX, 80, 0)
        oled.text(« Angle Y: », 0, 10)
        oled.text(« %i » % mpu_6050.AngleY, 80, 10)
        oled.text(« Angle Z: », 0, 20)
        oled.text(« %i » % mpu_6050.AngleZ, 80, 20)
        oled.show()
        time.sleep(0.1)
else:
    oled.fill(0)  # efface l’ecran
    oled.text(« MPU not detected », 0, 0)
    oled.show()
Il ne reste plus qu’à étudier maintenant une utilisation de ce capteur…
Catégories :NodeMCU Étiquettes : , ,
  1. Malo
    27/03/2018 à 23:27

    Bonjour,
    Tout d’abord, un grand merci pour le travail que vous avez effectué, et pour son généreux partage.
    Je cherche à utiliser le mpu6050 avec ma pyboard, et étant novice, je ne suis pas certain de tout comprendre. Si j’ai bien compris, copier le contenu du lien « https://github.com/itechnofrance/micropython/tree/master/librairies/mpu6050 » au début de mon programme (dans le boot.py) permettra l’importation « import mpu6050 »?
    Merci de votre temps.

  1. 18/02/2018 à 19:31

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :