c#


Calculating Length Based on Sensor Data


I've got an IR sensor which writes its current information to a token which I then interpret in a C# application. That's all good -- no problems there, heres my code:
SetLabelText(tokens [1],label_sensorValue);
sensorreading = Int32.Parse(tokens[0]);
sensordistance = (mathfunctionhere);
Great. So the further away the IR sensor is from an object, the lower the sensor reading (as less light is reflected back and received by the sensor).
My problem is in interpreting that length. I can go ahead and get lets say "110" as a value when an object is 5 inches away, and then "70" as a value when an object is 6 inches away. Now I want to be able to calculate the distance of an object using these constants for any length.
Any ideas?
Well, the first thing that I would do is take data at fixed distances, i.e., 1 inch, 1 foot, 2 feet, 5 feet, etc. I would then plot that data in a program like Excel and find a best fit curve from which you can derive a function. Use that function in your code and start testing at varying distances.
Now, it may not be that simple. The reflective properties of the object you are trying to measure will change your readings, as could other factors. Since I don't know what your requirements are it is hard for me to give more specific advice.
It more of a physics question than a math question!
Ed Swangren suggestion to create tables with the recording from various experiments is the way to go, unless you can also rely on information from the manufacturer of the sensor.
Aside from the intrinsic precision and fidelity of the device, so many factors may interfere with the effective amount of energy (or whatever is returned and measured); reading up on this particular device or even on similar items and/or the fundamental of the physical effects/dimensions in play may provide you additional idea for the calibration.
Once you have a table associating measurements with distance (and maybe additional criteria temperature, reflective factor...), it becomes a true math issue, for example to:
confirm the statistical relevance of the precision targeted
extrapolate real reading with the discrete table (seems to be the original question by the OP)
find the regression function, and do away with the table approach (I doubt this would be easy, as hinted in comments and such this will be far from linear...
Reflected IR is often used for object detection. But, if the shape, angle, reflective properties of your target(s) aren't always the same, then measuring the intensity of reflected IR is not a reliable method for estimating distance.
Any ideas?
Different sensing methodology. How about, parallax sensor such as this one: http://www.acroname.com/robotics/info/articles/sharp/sharp.html .
elaborating a bit further on the square function proposed by tom10 ...
we asume your devices function is a square curve , i.e.
distance = A + B * reading + C * reading^2
Now we need to find out A, B and C to convert your reading into a distance, so what we need is a kind of regression analysis. A square curve is defined by exactly 3 points, so you measure at 3 points (r1..r3) and note distances (d1..d3)
Now you have 3 equations with three unknowns which you can solve by any means, i.e.
A + r1 * B + r1^2 * C = d1
A + r2 * B + r2^2 * C = d2
A + r3 * B + r3^2 * C = d3
You solve once for A, B, and C which will be your "calibration curve" and will be able to calculate any unknown distance using the first formula above. Of course if you change hardware you will need to recalibrate your gear within the limits of any device variations.
You can extend this mechanism to a cubical and even higher order curve by making a fourth measurement and expanding all above equations by a variable D, i.e.
A + rx*B + rx^2*C + rx^3*D + ....
etc. but it will not add much of accuracy. You will find that factor D for a rx^3 and onwards will be very small.
Hope this helps
Good luck
MikeD
The energy from the light source will fall off as 1/r2 (for a source that's relatively small). Beyond this, if everything else is held constant, the only problem could be non-linearity in the sensor.
To check this with your data, you would expect E x r2=const, and this roughly holds for your data:
110 x 52 = 2750, and
70 x 62 = 2520,
so these are within 10% which seems fairly close, so it looks like the basic rule will hold.
Non-linear sensors are common, so you should be sure to check this over the full range that you'll be using it. But if it's a linear sensor, the other issues that people are mentioning (e.g. reflective surfaces) won't be a problem because, for light transmission and reflection, everything (almost) is linear and will therefore be intrinsically compensated for by a single calibration constant. The angle of the light source, absorbing materials, etc, all won't matter as long as they don't change.
If you test a few points, including the extremes of the range you're interested in, and it follows the 1/r2 rule, you're good to go. Then, of course, calculate what the const is, and r = sqrt(const/E).

Related Links

C# Using directive - is there an overhead? [duplicate]
Which button pressed in flowlayoutpanel?
How to get a large amount of data in wcf without setting max buffer size
How can I make a C# UI remove Panel Controls using a button listener (basically)?
Exception in HttpResponseMessage for async POST method in .NET4.5
toggle button visibility not working
Mocking RouteData to test HtmlHelper RouteLink
How to write a generic ISort interface?
Comparing Sum Methods in C#
Pass Linq Expression to a function
nHibernate stored procedure call
Invalid authorization specification and Invalid connection string attribute
How to bind list inside a list to a GridView in ASP.NET
How can I use a client certificate with a missing CA to communicate with a external Web service?
Registering and using forms with Windsor
Fast serialization/deserialization of structs

Categories

HOME
kendo-ui
redux
botframework
sip
service
bigtable
ubuntu-14.04
sdk
checkpoint
angular-universal
distinct
drush
jinja2
taxonomy
summernote
google-drive-android-api
prepros
akavache
expressionengine
resx
sqldependency
vtd-xml
key-bindings
opencsv
ios-autolayout
eclipse-jdt
availability
mootools
powerbi-embedded
ponylang
campaign-monitor
compiled-query
web-technologies
text-extraction
niagara-ax
reqif
history
xamarin-test-cloud
overhead
nsalert
lattice
addressbook
firebase-job-dispatcher
angularfire
treelist
wizard
gitk
redquerybuilder
personality-insights
jain-sip
identifying
pushwoosh
xml-simple
eula
grails-3.0.9
httpmodule
genero
crtdbg.h
fedena
tigase
azure-worker-roles
drawable
acrofields
node-amqp
ekevent
google-voice
randomaccessfile
removeall
windows-scheduler
moonscript
big-endian
github-archive
bindinglist
socketasynceventargs
project-files
clgeocoder
sessiontracking
zipstream
excellibrary
table-valued-parameters
pitch-shifting
mysql-logic
authkit
disk-based
vista64

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App