Primero, el bus I2C del arduino es 5V. No tiene garantías de que funcionará con un dispositivo de 3.3V. Así que ya estabas viviendo en el borde antes de agregar el motor. En el mejor de los casos, el arduino no considera que los 3.3V de la MPU6050 sean altos. En el peor de los casos, el arduino's 5V fríe el MPU6050. Debe usar algún tipo de palanca lógica o, como mínimo, agregar una resistencia de ~ 330 ohmios en serie con el bus I2C para garantizar que cuando el arduino produzca 5 V, los diodos de protección internos del MPU6050 sobrevivan (no me cite sobre eso). sin embargo, la hoja de datos de la MPU6050 no dice nada sobre esto. Por lo que sé, podría ir singularidad cuando muestra VDD + 0.5V a sus pines I2C)
Ahora, asumiendo que no te importa eso, solo quieres que el motor no influya en el resto del circuito: la razón por la que necesitas conectar los terrenos es porque cuando el arduino envía una señal de 5 V, el conductor tiene que Entiendo que es una señal de 5V. Lo hace comparando el voltaje de la señal con su propia referencia (pin GND). Si se desconectan las conexiones a tierra, el voltaje que el conductor "ve" será aleatorio, ya que la conexión a tierra del conductor podría ser, por ejemplo, 2 V por encima de la conexión a tierra, lo que desordena completamente su lógica. El problema es que su motor probablemente está haciendo un gran flujo de corriente a través de esta ruta a tierra, haciendo que aparezcan algunas caídas de voltaje en él.
Las caídas de voltaje en el camino a tierra ocurren en todos los circuitos. El problema es cuando dos componentes se unen a la ruta de tierra en diferentes puntos, lo que hace que "vean" bases diferentes, por lo que no están de acuerdo en los niveles lógicos. Probablemente este sea su problema: la unidad inercial y el arduino ven motivos muy diferentes cuando el motor produce un pulso de corriente, y eso es suficiente para desordenar la lógica.
Podría: (en orden de menos trabajo a más trabajo)
- Agregue un condensador grande entre los terminales + 12V y GND del conductor para suprimir los pulsos.
- Suponiendo Agregue los resistores 330R que mencioné anteriormente: deberían hacer que la señal de nivel lógico '1' sea más robusta (debido a la recuperación I2C del arduino. Consulte esto ). Además, más seguro. Estoy asumiendo una resistencia pull-up en la placa del MPU6050.
- Agregue una resistencia entre los terrenos para que el aumento en uno de ellos no afecte tanto al otro. El problema es que el conductor utiliza el otro terreno, por lo que podría dejar de entender las señales de control del arduino.
- Conecte la GND de la batería a la GND del USB, de modo que tanto el arduino como la MPU no estén tan separados en la ruta a tierra. Mala idea peligrosa, freirás tu USB, no lo hagas en absoluto.
- Usa el maldito circuito de cambio lógico.
- Utilice un controlador optoaislado. De esta manera, no es necesario que se conecte a tierra.