Wireless circuit noise and adc

How to prevent a bluetooth module noise disturbing sensors connected to Arduino adc-inputs?

My hobby system for electric bicycle data gathering (and control) currently consists of an Arduino Mega2560, a breadboard with several sensors, powered by 6 pcs of AA-batteries or an usb connecion to a laptop (during programming).
There is also a bluetooth circuit containing Wireless Bluetooth RS232 TTL Transceiver Module - air.
The bluetooth module sends sensor values all the time to a Nokia E72-1 mobile phone to display and to a file during riding.

When the wireless circuit is removed from the breadboard, the sensors vary their output to the adc only by half or one step (out of 1024), when constant data is expected. That is ideal, very good. Even when the test duration is minutes and tens of thousands of adc conversions, the adc values are ideal.

With the bluetooth circuit on the breadboard the sensor output vary giving typically 5-7 different values (out of 1024) instead of 1 or two . All the sensors vary in the same way so the reason is assumably noise generated in the power and ground lines. Accurate adc -values are necessary due to limited range of “interesting” values e.g. from a pitot tube. The the existence of the bt-module is enough to cause significant noise, connecting and sending causes a little more noise.

(When power is taken from the usb instead of batteries, the adc output varies also with typically 4-6 values; during riding there is no usb so this is no problem)

I have 0.1 microfarad capacitors near the circuits, a 10 microfarad capacitor on the rails of the breadboard, and 10 ohm resistors as “Grumpy_Mike” describes on the page
http://www.thebox.myzen.co.uk/Tutorial/De-coupling.html
. No inductors tried yet, however. The wire layout resembles “a star configuration”, with the connection point being the ground rail of the breadboard.

How to prevent the noise generated by the bluetooth module to disturb sensors? Options:

  1. adding inductors, capacitors, resistors to isolate bt module better? How?
  2. using a separate regulator chip to on the breadboard give power to the bt-module? ( bt needs about 35 milliampers of 5 V).
  3. using another Arduino board (e.g. Arduino Nano) to take care of the bt communication. Arduino mega communicates with the Nano through I2W or SPI (or…?) ? Both Arduinos must be connected to the same power source of 6 AA batteries (7- 8 Volts).
  4. something else, what?

In the alternative 3 I am afraid that when the power rushes to the circuits or is disconnected there might be short moments when some of the circuits are powered and some are not, leading to the destruction of microchips or circuits. (I may be too worried about these things after burning one Arduino Nano, http://forum.arduino.cc/index.php?topic=174799.0 )

I am searching a relatively simple solution (non commercial, one time project for myself).

Any links and advice are appreciated.

proto.jpg

Star configuration from the ground from the board not the bread board.

Give it a try.

Paco

Good grounds help,
Other thoughts:

  1. If possible, distance the arduino further away from the blue tooth module.
  2. Try adding simple RC filters onto the ADC that filters well below the Blue tooth transmission frequency.
  3. If feasible, do not monitor the ADC values while using the blue tooth module.
  4. If it makes sense, increase the size of the signal coming into the ADC with an amplifier. If you are worried about differences of only 1 or 2 on the ADC value, you are not making good use of the full range of the ADC. Maybe you need to use a higher resolution ADC and get an external one that can respond with a digital output.
  5. Move off of a breadboard if at all possible, short wires pick up much less noise than long ones. Use protoboards from radioshack and make the runs as short as possible.
  6. See if you can apply software filtering. It is relatively easy to do a weighted rolling average. As long as you are not doing anything more than a relatively simple control systems, a weighted average should give you a lot of the information you need.

Thanks mirith and backbone!

Incredible, how these seemingly small changes probably solved the problem almost 100 % !

  • I moved the bt-circuits to another breadboard
  • connected the sensor breadboard ground to the ground pin near aref pin on Mega2560 board
  • Bt-circuit module is now about 20 cm from the sensor breadboard (image).

When bt-module is connected and communicating hundreds of characters per second, the adc- values remain within ±1 step (out of 1024) from the average during several minutes, almost as good as without the bt-module.

I’ll try shorter wires on the sensor board, if problems resurface. In fact, item 4 of mirith’s valuable advice is in the long term plan. RC-filtering and software filtering are useful and necessary tools in this project also.

proto_after_change.jpg

Good to hear things work better now.
Arduino with breadbaord is 100% prototyping and then all kinds of unrequested things can show off.
Use protoshields to put all your stuff on as that is shortest way of prototyping without a custom board.

Let us know the end result.

Paco