Parallax PING))) garbage sensor? (Portal turret robot)

I've been working quite hard on my turret from the game Portal and Portal 2. I've hit a snag.

Here are some results from an initial scan then a subsequent "motion detected" scan:

370 cm at 30 degrees
370 cm at 33 degrees
38 cm at 36 degrees
38 cm at 39 degrees
37 cm at 42 degrees
37 cm at 45 degrees
38 cm at 48 degrees
37 cm at 51 degrees
38 cm at 54 degrees
38 cm at 57 degrees
38 cm at 60 degrees
38 cm at 63 degrees
39 cm at 66 degrees
39 cm at 69 degrees
40 cm at 72 degrees
158 cm at 75 degrees
195 cm at 78 degrees
370 cm at 81 degrees
370 cm at 84 degrees
370 cm at 87 degrees
172 cm at 90 degrees
221 cm at 93 degrees
224 cm at 96 degrees
205 cm at 99 degrees
221 cm at 102 degrees
203 cm at 105 degrees
206 cm at 108 degrees
204 cm at 111 degrees
205 cm at 114 degrees
236 cm at 117 degrees
205 cm at 120 degrees
190 cm at 123 degrees
187 cm at 126 degrees
222 cm at 129 degrees
205 cm at 132 degrees
185 cm at 135 degrees
224 cm at 138 degrees
193 cm at 141 degrees
196 cm at 144 degrees
207 cm at 147 degrees
204 cm at 150 degrees

330 delta at 72 degrees
23 delta at 75 degrees
163 delta at 90 degrees
149 delta at 93 degrees
86 delta at 96 degrees
19 delta at 102 degrees
22 delta at 108 degrees
166 delta at 111 degrees
88 delta at 114 degrees
19 delta at 120 degrees
36 delta at 126 degrees
18 delta at 132 degrees
3 delta at 135 degrees
32 delta at 141 degrees
166 delta at 150 degrees

In that time, I haven't moved the stand on which the servo/sensor combination is mounted. I thought servo wobble may be a factor so I took a second sensor I have, laid it flat on the table, and ran the same test. Keep in mind NOTHING moved during this test (except the servo on the stand on a different area of the table)

195 cm at 33 degrees
195 cm at 36 degrees
196 cm at 39 degrees
196 cm at 42 degrees
196 cm at 45 degrees
35 cm at 48 degrees
196 cm at 51 degrees
195 cm at 54 degrees
195 cm at 57 degrees
195 cm at 60 degrees
196 cm at 63 degrees
39 cm at 66 degrees
196 cm at 69 degrees
195 cm at 72 degrees
196 cm at 75 degrees
195 cm at 78 degrees
39 cm at 81 degrees
196 cm at 84 degrees
196 cm at 87 degrees
195 cm at 90 degrees
49 cm at 93 degrees
195 cm at 96 degrees
196 cm at 99 degrees
195 cm at 102 degrees
4 cm at 105 degrees
195 cm at 108 degrees
195 cm at 111 degrees
195 cm at 114 degrees
196 cm at 117 degrees
196 cm at 120 degrees
196 cm at 123 degrees
196 cm at 126 degrees
196 cm at 129 degrees
8 cm at 132 degrees
195 cm at 135 degrees
195 cm at 138 degrees
196 cm at 141 degrees
196 cm at 144 degrees
195 cm at 147 degrees
196 cm at 150 degrees

160 delta at 48 degrees
156 delta at 66 degrees
157 delta at 81 degrees
146 delta at 93 degrees
1 delta at 96 degrees
191 delta at 105 degrees
188 delta at 132 degrees

How could those results be so wildly different during a totally stationary scan? I've tried two UNO boards, two sensors, with and without the servo. Are these things just junk? Is there some sort of environmental issue?

Here's the full (well almost full - I need some help with one piece of math and one variable that I need to define) code of the robot. http://pastebin.com/0uqj3RQN

In discussing this on IRC:

  • Longer wait times don't help.
  • There is nothing moving on my ceiling.
  • Two different Arduino UNO boards, two different sensors, same results.

Get rid of the goto, please.
It isn't necessary.

What do the results look like if you simply point the Ping somewhere, but disconnect the servo?

I was to lazy to write a while (cm != 0) loop at that hour. I was tired!

You're exactly right. It must be electrical noise from the servo (since it's not wobble noise because I tested it with a sensor NOT attached to the servo.)

I'll bust out a better proto board (using the Maker Shield now) and give my sensors their own +5v rail and report the results. Thanks!

---Daniel