PID Controller - I2C Bus Noise from ESC

Hi all,

I am working on developing a PID controller designed to hold a levered arm level by controlling an EFlite outrunner motor. The idea being if I can hold one hinged arm level than with 4x the hardware I could make a platform fly. I am using some OSEPP sensors I purchased from Frys: a gyroscope and accelerometer. I am controlling the thing with the Arduino Wire library. However, when I run the motor my sensor values go berserk, making all subsequent PID control meaningless.


How can I clean up the noise?

From what I have learned, using I2C is not ideal in noisy environments. I have already added two 1.5k pull-up resistors. I heard using a low-pass filter might help, based off an RC circuit, but I don't want to filter my sensor values.


Since I have an Arduino Mega, I was wondering if dedicating one board for the sensor reading, and another to the motor control would clear up my values. However, since it seems like the most intuitive to communicate between the boards would also be using the Wire library, I wonder if I would just be extending the problem.


Maybe I should just buy new sensors?

Any help would be much appreciated :)

You need to be a member of diydrones to add comments!

Join diydrones

Email me when people reply –


  • Are you having I2C problems?  Doesn't sound like you understand the I2C bus at all.  It's a digital bus, it's going to either work perfectly or hang very quickly and give you nothing.  In many cases if you miss an ack the bus will hang until it's reset or times out.  If you're getting anything other than silence with intermittent garbage it's likely working just fine and you need to look elsewhere.

    If you're using wires longer than a few inches or nonstandard voltages you need to double check your pullup resistors and wire capacitance and/or reduce the speed as needed.

  • I don't think having a separate board would do anything much except make the software more complicated.

    It could be one or more of a number of things.  You might first want to temporarily mount the motor on a solid base away from the sensors and run it up to see whether it's mechanical or electrical noise that's causing the problem.

    Some possible causes:

    • Noise on the 5V supply from the ESC.  Add some capacitors (say 1000uF electrolytic and 0.1uF ceramic in parallel) across the wires from ESC to Uno and also across the wires from Uno to the sensors.  Ferrite chokes might also be a good idea.
    • Induced electrical noise from the motor / ESC into the sensors.  Make sure the ESC/Motor and sensor wires are spaced as far apart as possible.
    • Mechanical vibration from the motor.  The gyro and accel are quite sensistive and vibration can make them give crazy readings.  Make sure the motor and propellor are well balanced to minimise vibration.  Mount either the motor and/or the sensors on anti-vibration mounts.
This reply was deleted.


Santiago Perez liked Santiago Perez's profile