#!/usr/bin/env python # -*- coding: latin-1 -*- ''' Accéléromètre MMA7455 branché à un Raspberry Pi. C'est un périphérique I2C, donc on le branche à SCL et SDA, et s'assurer que l'i2C a été préalablement paramétré sur le Raspbery Pi. Pour plus d'infos: http://electroniqueamateur.blogspot.com/2015/01/accelerometre-mma7455-et-raspberry-pi.html ''' import smbus import time import os import math import RPi.GPIO as GPIO # Valeurs à ajouter à chaque mesure pour calibrer votre MMA7455 # Ajustez ces valeurs pour que ça donne x = 0, y = 0 et z = 63 quand # l'accéléromètre est immobile, à plat sur une table. ajustx = 10; # car j'obtenais -10 à la place de 0 ajusty = 19; # car j'obtenais -19 à la place de 0 ajustz = -6; # car j'obtenais 69 à la place de 63 # Définition d'une classe associée au capteur class MMA7455(): bus = smbus.SMBus(1) def __init__(self): # Réglage de de la définition. Le 3e parametre est 0x05 pour mesurer de -2g a +2g, 0x09 de -4g a +4g, 0x01 de -8g a +8g self.bus.write_byte_data(0x1D, 0x16, 0x05) # lecture des valeurs en x, y et z. def getValueX(self): return self.bus.read_byte_data(0x1D, 0x06) + ajustx def getValueY(self): return self.bus.read_byte_data(0x1D, 0x07) + ajusty def getValueZ(self): return self.bus.read_byte_data(0x1D, 0x08) + ajustz mma = MMA7455() # on répète la mesure 1000 fois avant de s'arrêter for a in range(1000): x = mma.getValueX() if (x > 127): # les valeurs se trouvent entre 0 et 255, x = x - 255 # alors qu'on les veut entre -127 et 127 y = mma.getValueY() if (y > 127): y = y - 255 z = mma.getValueZ() if (z > 127): z = z - 255 # valeur totale de l'accélération, peu importe l'orientation total = math.sqrt(x*x+y*y+z*z); # calcul des angles et conversion en degrés angleX = round(math.asin(x/ total )*180.0/3.1416) angleY = round(math.asin(y/ total )*180.0/3.1416) angleZ = round(math.acos(z/ total )*180.0/3.1416) total = round (total) print ('x = {0} y = {1} z = {2} total = {3} anglex = {4} deg angley = {5} deg anglex = {6} deg'.format(x,y,z,total,angleX,angleY,angleZ)) time.sleep(0.2) # pour que l'écriture à l'écran ne soit pas exagérément rapide.