Bonjours,
Je n'arrive pas a faire fonctionner mon gyroscope .
J'ai essayer sur un arduino UNO R3 ou V3
Un arduino Micro
et un Pro Micro "Version pas chère du arduino Micro"
J'ai télécharger les librairie, mais rien ni fait les code test ne fonctionne pas, j'ai fait les branchement suivant
Pour les micro :
VCC >> 5v
GND >> GND
SCL >> A5
SDA >> A4
Pour le UNO :
VCC >> 5v
GND >> GND
SCL >> SCL
SDA >> SDA
Quand je rajoute INT >> D2 la console n'affiche plus rien .
Ne manque t'il pas une convertisseur de niveau sur les lignes sda et scl?
Même si j'en suis convaincu, j'ai mis de "?" pour les remarques sur le MPU car les recherches sur ce composant , montrent pour la plupart, un connection de l'i2c du MPU ave l'i2C de l'arduino alimenté en 5V.
Le GY-251 inclus déjà un régulateur de voltage (il peut être alimenté de 3.3V jusqu'à 5V). Il inclus aussi des résistances pull-up pour SDA et SCL donc pas de problème de ce côté la.
Ensuite, avant de pouvoir t'aider je vais avoir besoin de plus d'info : les library utilisée sont bien celles de Jeff Rowberg ?
Si oui, quand D2 n'est pas connecté que ce passe t-il ? En utilisant Wire.h, le MPU6050 est il détecté ? (son adresse i2c c'est 0x68).
// Default I2C address for the MPU-6050 is 0x68.
// But only if the AD0 pin is low.
// Some sensor boards have AD0 high, and the
// I2C address thus becomes 0x69.
Vérifiez bien que le broche ADO est bien "en l'air", ce qui correspond à un niveau logique "0" et donc à l'adresse 0x68.
Merci pour vos réponse, voila le code test Arduino
Avec ce code
#include<Wire.h>
const int MPU_addr = 0x68; // I2C address of the MPU-6050
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
// the setup function runs once when you press reset or power the board
void setup() {
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
Serial.begin(9600);
}
// the loop function runs over and over again until power down or reset
void loop() {
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 14, true); // request a total of 14 registers
AcX = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ = Wire.read() << 8 | Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp = Wire.read() << 8 | Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX = Wire.read() << 8 | Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY = Wire.read() << 8 | Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ = Wire.read() << 8 | Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
Serial.print("AcX = "); Serial.print(AcX);
Serial.print(" | AcY = "); Serial.print(AcY);
Serial.print(" | AcZ = "); Serial.print(AcZ);
Serial.print(" | Tmp = "); Serial.print(Tmp / 340.00 + 36.53); //equation for temperature in degrees C from datasheet
Serial.print(" | GyX = "); Serial.print(GyX);
Serial.print(" | GyY = "); Serial.print(GyY);
Serial.print(" | GyZ = "); Serial.println(GyZ);
delay(333);
}
Toujours cette valeur renvoyer par la console
AcX = -1 | AcY = -1 | AcZ = -1 | Tmp = 36.53 | GyX = -1 | GyY = -1 | GyZ = -1
Quand je branche D2 la console n'affiche plus rien .
J'ai aussi essayer des tuto j'ai Download leur librairie fait comme dans les video, tuto ecrit .
Mais moi sa ne m'affiche jamais la même chose que eux .
J'ai aussi réussi a trouver un tuto pour tester son I2C, la console me renvoie I2C non connecter ou un joignable enfin en gros il y a un problème .
Pourais-je avoir le lien
les library utilisée sont bien celles de Jeff Rowberg ?
l0w-s3c:
Justement, il ne tolère pas le 5V, c'est pour ça que le GY-521 intègre directement deux résistances pullup sur les lignes SDA et SCL jusqu'au 3V3.
Ca n'a pas de rapport. Ces résistances ne sont pas là pour permettre de brancher un micro en 5V dessus.
A part ça, l'expérience montre que le MPU6050 tolère le 5V sur ces lignes, jusqu'à ce que ça ne fonctionne plus.
Ce montage avec des pullups à 3.3V est couramment utilisé pour connecter des périphériques 3.3V à une carte arduino 5V.
La tension sur les broches SCL SDA ne monte jamais au dessus de 3.3V car justement les pullups sont à 3.3V. Ce qu'on pourrait craindre par contre c'est que la tension de 3.3V ne soit pas suffisante en entrée de l'arduino. L'expérience montre qu'il n'y a pas de problème.
Bien sur il ne faut pas que sur tous les périphériques connectés sur le bus il y en ait qui aient des pullups au 5V.
remarque: la librairie I2C active les pullups interne au 5V, mais leur résistance de 50K est négligeable devant les 4.7K des pullups externes au 3.3V.
kamill:
La tension sur les broches SCL SDA ne monte jamais au dessus de 3.3V car justement les pullups sont à 3.3V. Ce qu'on pourrait craindre par contre c'est que la tension de 3.3V ne soit pas suffisante en entrée de l'arduino. L'expérience montre qu'il n'y a pas de problème.
remarque: la librairie I2C active les pullups interne au 5V, mais leur résistance de 50K est négligeable devant les 4.7K des pullups externes au 3.3V.
Ok Mais je ne comprends pas , étant donné la configuration interne de l'atmega328 (voir ci dessous) , il n'y a pas d'option d'une sortie à drain ouvert.
Particulièrement pour la sortie scl (fourni par le maitre donc l'atmega) , on a bien 5V sur cette ligne même en présence des pull-up.
Je n'ai pas de quoi (pas de mpu) faire le test, un petit coup d'oscillo serait le bienvenue.
Pourtant dans la datasheet il est clairement dit qu'en mode I2C les pins fonctionnent en collecteur ouvert
• SCL/ADC5/PCINT13 – Port C, Bit 5
SCL, 2-wire Serial Interface Clock: When the TWEN bit in TWCR is set (one) to enable the 2-wire Serial
Interface, pin PC5 is disconnected from the port and becomes the Serial Clock I/O pin for the 2-wire Serial
Interface. In this mode, there is a spike filter on the pin to suppress spikes shorter than 50 ns on the input signal, and the pin is driven by an open drain driver with slew-rate limitation.
Donc pouriez vous m'indiquer comment faire, je comprend de moin en moin l'arduino .
J'ai aussi essaye de connecter des puce Bluetooth HC-06 sur les arduino et pareille sa ne fonctionne pas la commande AT ne me repond tout simplement Rien .
La console m'affiche commande AT :
J'envoie AT et la rien
Le problème doit venir de mes driver ou de mon logiciel mal installer peut être, j'ai essayer par visual Studio et le plug in Arduino et le même resultat sur le HC-06 et le GY 521 .
Je suis perdu .
Aprés quand j'envoie des commande simple type allume la led eteint la led ou fait clignoter cela fonctionne mais en programme interne sans bluetooth .
J'ai fait la plupart des tuto sur internet avec ou sans resistence, sa ne donne rien, j'ai tester de module BT sur le 3 et pareille ou les Gyro j'en et tester 1 sur les deux dans le cas ou j'aurais mal fait un truck et que j'en aurais griller 1 .
Donc pouriez vous m'indiquer comment faire, je comprend de moin en moin l'arduino .
Merci
Tu peux nous dire ce que renvois Wire.endTransmission(), comme indiqué plus haut ? Comme ça on saura au moins si le MPU6050 est détécté (ce qui me parais peu probable, mais on ne sais jamais^^), et le cas échéant l'erreur produite.