Вопрос по датчику GY-521
- Войдите на сайт для отправки комментариев
Ср, 17/01/2018 - 22:33
Доброго времени, пришол датчик GY-521.
Подключил всё по схеме, библиотеку подключил, код скопировал (для теста), но ардуино словно игнорирует датчик.
В COM числа просто набираются и при достижении X:271 Y:272 постоянно выводит это значение, что бы я не делал с датчиком. Может я кривой или ещё, что. Подскажите пожалуйста.
Подключал по схеме для Arduino(UNO), но использовал Arduino nano:
Gy-521 (mpu6050) | Arduino(UNO) |
---|---|
VCC | 3.3 V |
GND | GND |
SCL | A5 |
SDA | A4 |
#include <Wire.h> #include "Kalman.h" Kalman kalmanX; Kalman kalmanY; uint8_t IMUAddress = 0x68; /* IMU Data */ int16_t accX; int16_t accY; int16_t accZ; int16_t tempRaw; int16_t gyroX; int16_t gyroY; int16_t gyroZ; double accXangle; // Angle calculate using the accelerometer double accYangle; double temp; double gyroXangle = 180; // Angle calculate using the gyro double gyroYangle = 180; double compAngleX = 180; // Calculate the angle using a Kalman filter double compAngleY = 180; double kalAngleX; // Calculate the angle using a Kalman filter double kalAngleY; uint32_t timer; void setup() { Wire.begin(); Serial.begin(9600); i2cWrite(0x6B,0x00); // Disable sleep mode kalmanX.setAngle(180); // Set starting angle kalmanY.setAngle(180); timer = micros(); } void loop() { /* Update all the values */ uint8_t* data = i2cRead(0x3B,14); accX = ((data[0] << 8) | data[1]); accY = ((data[2] << 8) | data[3]); accZ = ((data[4] << 8) | data[5]); tempRaw = ((data[6] << 8) | data[7]); gyroX = ((data[8] << 8) | data[9]); gyroY = ((data[10] << 8) | data[11]); gyroZ = ((data[12] << 8) | data[13]); /* Calculate the angls based on the different sensors and algorithm */ accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG; accXangle = (atan2(accY,accZ)+PI)*RAD_TO_DEG; double gyroXrate = (double)gyroX/131.0; double gyroYrate = -((double)gyroY/131.0); gyroXangle += kalmanX.getRate()*((double)(micros()-timer)/1000000); // Calculate gyro angle using the unbiased rate gyroYangle += kalmanY.getRate()*((double)(micros()-timer)/1000000); kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros()-timer)/1000000); // Calculate the angle using a Kalman filter kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (double)(micros()-timer)/1000000); timer = micros(); Serial.println(); Serial.print("X:"); Serial.print(kalAngleX,0); Serial.print(" "); Serial.print("Y:"); Serial.print(kalAngleY,0); Serial.println(" "); // The accelerometer's maximum samples rate is 1kHz } void i2cWrite(uint8_t registerAddress, uint8_t data){ Wire.beginTransmission(IMUAddress); Wire.write(registerAddress); Wire.write(data); Wire.endTransmission(); // Send stop } uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) { uint8_t data[nbytes]; Wire.beginTransmission(IMUAddress); Wire.write(registerAddress); Wire.endTransmission(false); // Don't release the bus Wire.requestFrom(IMUAddress, nbytes); // Send a repeated start and then release the bus after reading for(uint8_t i = 0; i < nbytes; i++) data [i]= Wire.read(); return data; }
попробуйте адрес 0x69
Тот же результат.
Так же при обоих адресах постоянно горит индикатор TX (красным).
Не надо подключать на Arduino Nano (UNO, Mini Pro, etc) датчики на 3.3V, если на ней нет отдельного стабилизатора. Пациент будет скорее мертв, чем жив.
Еще есть такой замечательный скетч: I2C Scanner.
попробуйте это
http://ardulogic.ru/posts/podkluchenie-giroskopa-akselerometra-mpu6050-k-wemos-d1
На датчике горит синий диод, я так пологаю он по мимо индикации служит и предохранителем.
Так же на платке Arduino у меня есть выход 3V3.
Так же на платке Arduino у меня есть выход 3V3.
На нем написано, что он для питания датчиков?
А где ты там поместишь целое предложение ? :)
После того как залил пробный скетч, и зашёл в COM получил всё по -1, кроме температуры.
Мне - незачем. Совет вам дан. Распорядитесь ли вы им с умом - дело ваше.
За совет спасибо, но стабилизотра под рукой нету никакого.
За совет спасибо, но стабилизотра под рукой нету никакого.
Понижающего/повышающего модуля китайчатского тоже нет?
Попробовал I2C, он не видит платку, я так думаю стоит перепаять контакры...
Покажите фото модуля со стороны деталей. Только не наводите резкость на свои носки вместо GY-шки.
Вот, держите, извиняюсь за качество пайки, флюса под рукой нет, приходится возится с канифолью.

https://drive.google.com/open?id=1T-3TZ9a3vXBQpH5f7o0i6SUk-ey62TWH
Похоже, что стаб на нем есть. В интернетах такие же на +5V подключают. На странице продавца стоит "Питание - 3..5V"? Если да, то запитайте от пяти вольт.
Уже пробовал ему без разницы от чего питаться, похоже в контактах дело, датчик всё считывает, но не передаёт на ардуино сигнал, попробую перепаять.
P.S. теоретически, практически сейчас проверим.
С чего вы решили, что он считывает?
Один раз показания проскачили, но если это не так, то буду открывать спор с продавцом, ну и пытаться воскресить это чудо.
Найдите datasheet на чип, там разрисованы его ноги. Пищалкой проверьте - ноги с пинами уверенно соединены или нет.
Да, дело было в контакте, вот только я так и не понял "прикол" того скетча который я указал в самом начале, он у меня то же саоме выдаёт, а вот этот скетч работает. Может Кто объяснит по какому принцыпу работает код который я писал в самом начале ? (в вопросе)
Рабочий код:
Перед return в строке 75 сделайте вывод всего массива data. И перед строкой 35 тоже самое сделаете. Сразу и узнаете что у вас прилетает из функции.