<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://www.arobose.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://www.arobose.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Acc%C3%A9l%C3%A9rom%C3%A8tre-Gyroscope-Boussole_9_axes_MPU-9150</id>
		<title>Accéléromètre-Gyroscope-Boussole 9 axes MPU-9150 - Historique des versions</title>
		<link rel="self" type="application/atom+xml" href="https://www.arobose.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Acc%C3%A9l%C3%A9rom%C3%A8tre-Gyroscope-Boussole_9_axes_MPU-9150"/>
		<link rel="alternate" type="text/html" href="https://www.arobose.com/wiki/index.php?title=Acc%C3%A9l%C3%A9rom%C3%A8tre-Gyroscope-Boussole_9_axes_MPU-9150&amp;action=history"/>
		<updated>2026-04-05T20:22:56Z</updated>
		<subtitle>Historique pour cette page sur le wiki</subtitle>
		<generator>MediaWiki 1.19.7</generator>

	<entry>
		<id>https://www.arobose.com/wiki/index.php?title=Acc%C3%A9l%C3%A9rom%C3%A8tre-Gyroscope-Boussole_9_axes_MPU-9150&amp;diff=91&amp;oldid=prev</id>
		<title>Ldoffe le 27 septembre 2013 à 13:27</title>
		<link rel="alternate" type="text/html" href="https://www.arobose.com/wiki/index.php?title=Acc%C3%A9l%C3%A9rom%C3%A8tre-Gyroscope-Boussole_9_axes_MPU-9150&amp;diff=91&amp;oldid=prev"/>
				<updated>2013-09-27T13:27:39Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Version précédente&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Version du 27 septembre 2013 à 13:27&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 192 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 192 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Produits]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ldoffe</name></author>	</entry>

	<entry>
		<id>https://www.arobose.com/wiki/index.php?title=Acc%C3%A9l%C3%A9rom%C3%A8tre-Gyroscope-Boussole_9_axes_MPU-9150&amp;diff=90&amp;oldid=prev</id>
		<title>Ldoffe : Page créée avec « Le [http://www.invensense.com/mems/gyro/mpu9150.html MPU-9150], proposé par InvenSense, est un module permettant de détecter l'orientation sur 9 degré de liberté. Il e... »</title>
		<link rel="alternate" type="text/html" href="https://www.arobose.com/wiki/index.php?title=Acc%C3%A9l%C3%A9rom%C3%A8tre-Gyroscope-Boussole_9_axes_MPU-9150&amp;diff=90&amp;oldid=prev"/>
				<updated>2013-09-27T13:26:32Z</updated>
		
		<summary type="html">&lt;p&gt;Page créée avec « Le [http://www.invensense.com/mems/gyro/mpu9150.html MPU-9150], proposé par InvenSense, est un module permettant de détecter l&amp;#039;orientation sur 9 degré de liberté. Il e... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Le [http://www.invensense.com/mems/gyro/mpu9150.html MPU-9150], proposé par InvenSense, est un module permettant de détecter l'orientation sur 9 degré de liberté. Il est composé du [http://www.invensense.com/mems/gyro/mpu6050.html MPU-6050] qui contient un gyroscope 3 axes et un accéléromètre 3 axes et du [http://www.akm.com/akm/en/file/datasheet/AK8975.pdf AK8975] qui est une boussole numérique 3 axes.&lt;br /&gt;
&lt;br /&gt;
== MPU-9150 ==&lt;br /&gt;
L'accéléromètre 3 axes mesure l'accélération linéaire suivant x, y et z. La mesure est en g.&lt;br /&gt;
&lt;br /&gt;
Le gyromètre 3 axes mesure la vitesse angulaire autour des 3 axes x, y et z. La mesure est en °/s.&lt;br /&gt;
&lt;br /&gt;
La boussole 3 axes mesure le champs magnétique sur x, y et z. La mesure est en µT.&lt;br /&gt;
&lt;br /&gt;
La communication avec le MPU-9150 se fait par liaison i2c. L'adresse du module par défaut est 0x68. Il est cependant possible de modifier l'adresse (0x69) grace au cavalier à souder sur AD0.&lt;br /&gt;
&lt;br /&gt;
Les nombreux registres accessibles permettent de configurer le MPU-9150 au besoin du système (précision du gyroscope et de l'accéléromètre...). Voir le document sur la [http://www.invensense.com/mems/gyro/documents/RM-MPU-9150A-00v4_2.pdf description des registres]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tests ==&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une carte ARDUINO UNO et le MPU-9150 monté sur la carte d'évaluation de [https://www.sparkfun.com/products/11486 Sparkfun]. Cette carte permet une utilisation facile du composant MPU-9150 en intégrant les condensateurs nécessaire à son utilisation et les résistances de pull up pour la liaison i2c.&lt;br /&gt;
&lt;br /&gt;
Le câblage est très simple :&lt;br /&gt;
&lt;br /&gt;
MPU91-50 / ARDUINO&lt;br /&gt;
&lt;br /&gt;
GND → GND&lt;br /&gt;
&lt;br /&gt;
VCC → +3.3V&lt;br /&gt;
&lt;br /&gt;
SDA → A4&lt;br /&gt;
&lt;br /&gt;
SCL → A5&lt;br /&gt;
&lt;br /&gt;
Nous allons décrire quelques fonctions permettant de récupérer les données en x, y et z de l'accéléromètre, du gyroscope et la température.&lt;br /&gt;
&lt;br /&gt;
=== Exemple langage ARDUINO ===&lt;br /&gt;
Un exemple est expliqué [http://playground.arduino.cc/Main/MPU-6050#sketch ici]&lt;br /&gt;
&lt;br /&gt;
=== Exemple langage C ===&lt;br /&gt;
&lt;br /&gt;
==== Liaison i2c ====&lt;br /&gt;
La liaison twi (i2c) et les fonctions sont expliquées [http://geonobotwiki.free.fr/doku.php?id=robotics:computing:communication_twi_entre_atmega ici]&lt;br /&gt;
&lt;br /&gt;
Le MPU-9150 est configuré en esclave à l'adresse 0x68. La UNO est configurée en maitre.&lt;br /&gt;
&lt;br /&gt;
==== Fonctions du MPU-9150 ====&lt;br /&gt;
&lt;br /&gt;
===== Initialisation =====&lt;br /&gt;
&lt;br /&gt;
Le capteur est par défaut en mode sleep. Pour le réveiller, il faut mettre à 0 le bit SLEEP du registre 107 – Power Management 1 (PWR_MGMT_1). Ce registre permet également d'activer le capteur de température (mettre le bit TEMP_DIS à 0).&lt;br /&gt;
&lt;br /&gt;
Le tableau reg[2] contient l'adresse du registre  PWR_MGMT_1 et la valeur à écrire dans le registre (ici 0 car nous voulons désactiver le mode sleep et activer le capteur de température).&lt;br /&gt;
Il faut configurer la liaison i2c en mode master. &lt;br /&gt;
La fonction twi_write_bytes permet d'envoyer des octets à un esclave. Ici on envoie 2 octets du tableau reg à l'adresse  MPU9150_DEFAULT_ADDRESS.&lt;br /&gt;
Le décalage de l'adresse vient de fait que dans le MPU-9150 stocke son adresse sur les 7 bits de poids fort.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define MPU9150_DEFAULT_ADDRESS 0x68&lt;br /&gt;
#define MPU9150_ACCEL_XOUT_H 0x3B&lt;br /&gt;
#define MPU9150_TEMP_OUT_H 0x41&lt;br /&gt;
#define MPU9150_GYRO_XOUT_H 0x43&lt;br /&gt;
#define MPU9150_PWR_MGMT_1 0x6B&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
mpu9150_setup(void)&lt;br /&gt;
{&lt;br /&gt;
  /* clear the SLEEP bit to start the sensor */&lt;br /&gt;
  uint8_t reg[2] = {MPU9150_PWR_MGMT_1, 0};&lt;br /&gt;
&lt;br /&gt;
  twi_master_setup(); /* i2c to master mode */&lt;br /&gt;
  twi_write_bytes((MPU9150_DEFAULT_ADDRESS &amp;lt;&amp;lt; 1), 2, reg);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Lecture de la température =====&lt;br /&gt;
&lt;br /&gt;
La température est lue sur 2 octets à l'adresse MPU9150_TEMP_OUT_H (registres 65   (high) et 66 (low)). La valeur lue est une image de la température : Température en degré Celsius = valeur des registres / 340 + 35.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * @return temperature in degrees C = (TEMP_OUT signed / 340) + 35&lt;br /&gt;
 * */&lt;br /&gt;
int16_t&lt;br /&gt;
mpu9150_read_temperature(void)&lt;br /&gt;
{&lt;br /&gt;
  volatile uint8_t buffer[2] = { 0, 0 };&lt;br /&gt;
  uint8_t reg = MPU9150_TEMP_OUT_H;&lt;br /&gt;
&lt;br /&gt;
  twi_read_bytes(MPU9150_DEFAULT_ADDRESS &amp;lt;&amp;lt; 1, &amp;amp;reg, 2, buffer);&lt;br /&gt;
&lt;br /&gt;
  int16_t temperature;&lt;br /&gt;
  temperature = ((buffer[0] &amp;lt;&amp;lt; 8) + buffer[1]);&lt;br /&gt;
  temperature /= 340;&lt;br /&gt;
  temperature += 35;&lt;br /&gt;
  return temperature;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Lecture du gyroscope =====&lt;br /&gt;
On a définit une structure contenant les variables x, y et z pour stocker les valeurs sur les 3 axes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  int16_t x;&lt;br /&gt;
  int16_t y;&lt;br /&gt;
  int16_t z;&lt;br /&gt;
} x_y_z;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x_y_z&lt;br /&gt;
mpu9150_read_gyroscope(void)&lt;br /&gt;
{&lt;br /&gt;
  volatile uint8_t buffer[6];&lt;br /&gt;
  uint8_t reg = MPU9150_GYRO_XOUT_H;&lt;br /&gt;
&lt;br /&gt;
  twi_read_bytes(MPU9150_DEFAULT_ADDRESS &amp;lt;&amp;lt; 1, &amp;amp;reg, 6, buffer);&lt;br /&gt;
&lt;br /&gt;
  x_y_z gyro;&lt;br /&gt;
  gyro.x = (buffer[0] &amp;lt;&amp;lt; 8) + buffer[1];&lt;br /&gt;
  gyro.y = (buffer[2] &amp;lt;&amp;lt; 8) + buffer[3];&lt;br /&gt;
  gyro.z = (buffer[4] &amp;lt;&amp;lt; 8) + buffer[5];&lt;br /&gt;
  return gyro;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Lecture de l'accéléromètre =====&lt;br /&gt;
C'est le même modèle que la lecture du gyroscope.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
x_y_z&lt;br /&gt;
mpu9150_read_accelerometer(void)&lt;br /&gt;
{&lt;br /&gt;
  volatile uint8_t buffer[6];&lt;br /&gt;
  uint8_t reg = MPU9150_ACCEL_XOUT_H;&lt;br /&gt;
&lt;br /&gt;
  twi_read_bytes(MPU9150_DEFAULT_ADDRESS &amp;lt;&amp;lt; 1, &amp;amp;reg, 6, buffer);&lt;br /&gt;
&lt;br /&gt;
  x_y_z accel;&lt;br /&gt;
  accel.x = (buffer[0] &amp;lt;&amp;lt; 8) + buffer[1];&lt;br /&gt;
  accel.y = (buffer[2] &amp;lt;&amp;lt; 8) + buffer[3];&lt;br /&gt;
  accel.z = (buffer[4] &amp;lt;&amp;lt; 8) + buffer[5];&lt;br /&gt;
  return accel;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Fonction de tests =====&lt;br /&gt;
La fonction principale demande les valeurs du capteur de température, du gyroscope et de l'accéléromètre et retourne les valeurs sur le port série.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void&lt;br /&gt;
setup(void)&lt;br /&gt;
{&lt;br /&gt;
  usart_0_setup();&lt;br /&gt;
  usart_0_transmitter_enable();&lt;br /&gt;
  mpu9150_setup();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
main(void)&lt;br /&gt;
{&lt;br /&gt;
  setup();&lt;br /&gt;
  _delay_ms(1000);&lt;br /&gt;
&lt;br /&gt;
  while (1)&lt;br /&gt;
    {&lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
      int16_t t = mpu9150_read_temperature();&lt;br /&gt;
&lt;br /&gt;
      usart_0_transmit(t &amp;gt;&amp;gt; 8);&lt;br /&gt;
      usart_0_transmit(t);&lt;br /&gt;
&lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
&lt;br /&gt;
      x_y_z gyro = mpu9150_read_gyroscope();&lt;br /&gt;
&lt;br /&gt;
      usart_0_transmit(gyro.x &amp;gt;&amp;gt; 8);&lt;br /&gt;
      usart_0_transmit(gyro.x);&lt;br /&gt;
      usart_0_transmit(gyro.y &amp;gt;&amp;gt; 8);&lt;br /&gt;
      usart_0_transmit(gyro.y);&lt;br /&gt;
      usart_0_transmit(gyro.z &amp;gt;&amp;gt; 8);&lt;br /&gt;
      usart_0_transmit(gyro.z);&lt;br /&gt;
&lt;br /&gt;
	_delay_ms(1000);&lt;br /&gt;
&lt;br /&gt;
      x_y_z acc = mpu9150_read_accelerometer();&lt;br /&gt;
&lt;br /&gt;
      usart_0_transmit(acc.x &amp;gt;&amp;gt; 8);&lt;br /&gt;
      usart_0_transmit(acc.x);&lt;br /&gt;
      usart_0_transmit(acc.y &amp;gt;&amp;gt; 8);&lt;br /&gt;
      usart_0_transmit(acc.y);&lt;br /&gt;
      usart_0_transmit(acc.z &amp;gt;&amp;gt; 8);&lt;br /&gt;
      usart_0_transmit(gyro.z);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldoffe</name></author>	</entry>

	</feed>