|
In lugnet.robotics.rcx.robolab, Elizabeth Mabrey wrote:
> Hi,
>
> I have these 2 different light sensors. One reads "41" vs another reads "34"
> on the same area. I have troubleshoot it by switching ports, different RCX
> brick. The reading different stays the same. Is this reasonable because
> they might have a different resistors??? At the back of those two light
> sensors, one reads G4, another reads H4. If it is, I guess there is no
> trick that I can do to minimize the difference, isn't it?
>
> Suggestion is always appreciated!
>
> ----------------------------------------------------------------------------
> --------
> Best Regards,
> Elizabeth Mabrey
Different light sensors will produce different readings. The range of readings
you get will also vary between different light sensors (for example, between the
same white surface, and the same black surface, one light sensor might have a
difference of 25, while another only has a difference of 12). In fact, the same
light sensor will even return different readings depending on many variables,
including the ambient light, battery levels, and even how long the RCX has been
turned on. They aren't very exact.
So what can you do? The solution is to calibrate each light sensor. Depending on
what you are trying to do, there are different ways of doing this. Here's a
couple. I'll assume you're trying to distinguish between something that is light
and something that is dark. The easiest way then is to find a 'mid-point' value.
If your reading is greater than this value, you can assume the object being
examined is light, if less, then its dark.
First, you could hard code the mid value. This is the easiest solution, and it
will work if your robot doesn't change, the ambient light doesn't change, and
you don't mind downloading the program again if anything should change.
Second, you could get a pair of readings at the beginning of your program, and
compute the average of the two. This requires that you know how to start up your
robot, because every time you run it, you will have to show it a light object,
and a dark object, and somehow let it know when it is seeing which one. You
could make your code slightly more robust by spending the first five or ten
seconds looking for the lightest object and the darkest object it sees. Then
take the average of those two. But it still means you have to manually
manipulate your robot (or write even more code to have the robot do it itself)
to see these two.
The third solution is to have a separate calibration program. The standard
firmware shares variables between programs. If you are using NQC, then you could
write one program that declares its first global variable as "mid", say. The
main task would set the value of mid depending on the light and dark values that
it sees. The your second program would declare its first variable as well (it
doesn't need to be the same name, but it does need to be the first global
variable you define), and *without* assigning a value to the variable, just use
it. Then, as long as you run the calibration program first, your robot should
work fine. The nice thing about this method is that if you forget to run your
calibration program a few week later, your robot should still mostly behave.
Also, if the lighting conditions change, or you put a new sensor on, or
whatever, it's very simple to just run the calibration program again. I don't
know if this is possible to do with the RCX Code environment (or Robolab, for
that matter), so if you are using these, you'll probably have to settle for one
of the other solutions.
Note that if your robot has multiple light sensors, you'll have to calibrate
each one individually. IE: store a 'midLeft' value for the left light sensor, a
'midRight' for the right light sensor, etc., and then use the appropriate value
to compare each light sensor with.
Hope that helps.
--
David Schilling
|
|
Message has 1 Reply:
Message is in Reply To:
3 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|