用Arduino数字引脚为MPU-6050供电

问题描述:

我一直试图用Arduino Nano v3.0来使用MPU-6050(特别是GY-521),但当我尝试使用MPU-6050 VCC和GND连接到Arduino上的数字引脚。用Arduino数字引脚为MPU-6050供电

当我将VCC和GND连接到Arduino上的5V或3V3和GND时,我能够从陀螺仪/加速计读取读数。当我将它们连接到数字引脚时,我可以读取数据,但它们全部为零,即使传感器发生抖动,数值仍保持为零。我在设置中使用的数字引脚的代码如下:

pinMode(powerpin, OUTPUT); 
pinMode(groundpin, OUTPUT); 
digitalWrite(powerpin, HIGH); 
digitalWrite(groundpin, LOW); 

当我开机加速计,ADXL377,具有相同的引脚,我得到的读数没有问题。这是否可以通过数字引脚传输的电流量有问题?似乎Nano上的数字引脚可以吐出最大40mA电流,而MPU-6050只需要3mA电流,所以我认为电流不是问题。任何帮助都会很棒。

+0

您可以并且应该将MPU GND连接到Arduino GND。你不需要用数字引脚来做,你呢?我认为我的想法是用数字引脚“电源引脚”将其打开/关闭,这没关系,但GND引脚可能无法正常工作。 – eventHandler 2015-03-31 20:45:12

+1

另外,如果您错误地设置了'groundpin = HIGH'和'powerpin = LOW',则您将向MPU提供'-5V',这可能有风险。 – eventHandler 2015-03-31 20:46:53

我有同样的问题,这是为什么它是一个问题。首先将LOW连接到GND是一个不错的主意。 另一件事:当您设置引脚为高电平通过:

pinMode(powerpin, OUTPUT); 
digitalWrite(powerpin, HIGH); 

它会在一段时间后变高,所以你应该把之间的一些延迟:

pinMode(powerpin, OUTPUT); 
digitalWrite(powerpin, HIGH); 

delay(10); 

Wire.begin(); 
Wire.beginTransmission(0x68); 
Wire.write(0x6B); // PWR_MGMT_1 register 
Wire.write(0);  // set to zero (wakes up the MPU-6050) 
Wire.endTransmission(true); 

所以,你需要得到权力和然后唤醒设备。 AB型。 10ms是一个很好的价值。

之后,你可以阅读正常(如果你不经常阅读,最好的办法是睡觉设备)。

+0

谢谢!这固定了一切!从来不知道它需要Arduino启动。 – yoshi 2015-04-05 14:30:43