I did some extensive re-working of things over the last few days, which is to be expected on something this early into development. I’m kind of forming what I want this to be as I go, which is considered terrible development practice but eh, fuck it. Also uploaded the latest build if anyone would like to download and take it for a spin. Here’s the link: Light Probe (Zipped Exe)
So I tweaked the UI quite a bit. Removed some extraneous junk, added things I will actually use. The sensor progress bars now have numerical value boxes as well. I added some (not yet functional) buttons for things like semi-automatic calibration, loading and saving of calibration config files, rescanning for COM ports, and manual override of servo control.
Going forward I’m going to be working on finishing the fully automated operation of the unit, and then starting to tackle the manual operation and calibration. I feel the calibration will be vitally important now that I’ve been playing with the hardware for a few weeks. It’s fairly obvious that the sensors and servo’s are NOT all created equal, as I can now predict which sensors will read higher or lower given identical readings, and which servo will go further one way or another given identical commands.
This has lead me to consider how I would even calibrate everything. For the sensors, I’m thinking I will need two things: a light source to act as a control. I’m thinking very bright LED with a rubber seal around it to isolate the sensor from ambient light. Turn the LED off, take a measurement, the value read then becomes zero. Turn the LED on, take a measurement, the value read then becomes 100. I might just build out a mock-up modal window for this purpose later today if I get some free time… Should be quick and easy.
For servo calibration there are really three things to consider. The actual values of 0 degrees, 90 degrees, and 180 degrees. (or -90, 0, and 90 as I prefer to refer to them as.) I’ve noticed that when I tell the servos to go to these positions, they are invariable off a few degrees. While this shouldn’t technically matter for fully automatic operation, it just bugs me because I’m obsessive. If the servo is facing 90 degrees, IT SHOULD SAY 90 DEGREES DAMMIT. So to tune them I’m looking at the following process: Tell servo to go to -90. Use tuning buttons to adjust it until it’s actually at -90. Press some sort of “commit” button, and rinse, lather, repeat for 0 and 90. Once the calibration is done, what is sent to the servo’s is what they will actually do.
Once I have the calibration routines set for everything, it would be nice to not have to do this each time I boot the damn thing. So this logically leads to something like a configuration file. This then runs into an instant problem. This device is supposed to be able to run independently of the C# program. So the config file needs to be stored locally. This will probably be as easy as throwing an SD-Card shield on the Arduino and storing it there. I will probably make some sort of serial load/save functions for this file to avoid having to pull the SD-Card to tweak it. Would also be nice to just be able to save the files to the PC over the serial line.
I’ve got some grand plans for my little toy. Now all I need is about a month with nothing to do to flesh it all out and actually build the boom, mounts, etc.