Name: Michael Shimniok
Member since: 2007-12-23 16:33:37
Last Login: 2013-08-22 04:57:14
Author of Bot Thoughts blog, interested in robotics since '89. Since 2007, dove in full force, built Pokey the firefighter (failure = learning), and then Data Bus, 3rd place in 2012 AVC, my Rapsberry Pi tele-rover, a beam robot, and have tinkered with lots of other electronic thingies.
Recent blog entries by shimniok
Automated OLED Test Jig: eeZee MicroSD
How does one test boards one sells on Tindie?
With a fancy-pants, standalone, OLED-equipped, high-zoot test jig, of course.
At least, that's what I built for testing my eeZee MicroSD boards. They're microSD breakouts for breadboard Arduinos. They've got the microSD socket plus 3.3V regulator, level-shifter IC, and various passives.
The test jig features an Arduino on the top of a two-layer permanent breadboard apparatus. Power is supplied by convenient USB connector. I manually place the board onto good ol' pogo pins soldered into the D10-D13 positions (plus power and ground).
A red and a green LED indicates overall status, while the Digole Serial OLED displays pass/fail status for each of the tests: initializing the card, creating a file, and removing a file, with an overall board status.
Here's the source code for the test jig: TestJig.ino
Redlink Connection Refused
Here's the real answer: actually troubleshoot and solve the problem on your unsupported Linux distro. It's easy, just read on...
OpenMV: Counting Pips on Dice
One of our backers, Damage, had a great project idea for OpenMV Cam: count a dice roll visually. Here's what I ended up with.
I used simple blob detection. What ended up working best was to first find the white dice (I had no real dice; these are paper cutouts).
To look for color blobs you supply the threshold() function with a color, an RGB value, and a "distance" value (how close a pixel is to the specified color). Behind the scenes this is based on LAB colorspace and euclidean distance between colors.
bin = image.threshold([(160, 210, 255)], 20)
|Note the dice are actually bluish-white|
# image closing
# Find white dice
dbin = image.threshold([(160, 210, 255)], 20)
# image closing
# find dice
dice = dbin.find_blobs()
# Draw rectangles around detected dice
for d in dice:
Now to find the pips. Same process all over again, only this time, the color is sort of a bluish black. I had to experiment with the color and the dilate/erode calls to get it working.
# Find pips in dice blobs
binary = image.threshold([(40, 60, 110)], 25)
# Image closing
# Detect blobs in image
blobs = binary.find_blobs()
Finally, go through all the pips and count the ones that are inside the bounds of the white blobs, the dice. Then display the numbers in the corners of the dice and the total at the bottom. The find_blobs() function returns a list of (x, y, width, height) for each blob.
# Count pips
pips = 0
for d in dice:
dr = (d, d, d+d, d+d)
subpips = 0
for p in blobs:
pr = (p, p, p+p, p+p)
if pr > dr and pr < dr and
pr > dr and pr < dr:
subpips += 1
image.draw_string(d-8, d-8, str(subpips),
(50, 255, 50))
pips += subpips
image.draw_string(55, 120, "total="+str(pips),
(50, 255, 50))
And that's all there is. It works pretty ok for having spent very little time on it. There's some room for improvement. More tuning might help. Better lighting. Real dice. Also, when you roll a 6, it merges adjacent pips.
That's because the firmware normally ignores blobs that are too small. Small blobs next to each other can only be detected if you dilate() enough to make them bigger than the threshold, but that merges them because they're close together. We just have to lower the blob size threshold, I think.
Also, we might get more accurate detection by refactoring threshold() to take separate parameters for color and lightness thresholds.
Meanwhile, OpenMV Cam's Kickstarter ends Feb 25. If you want one click here.
OpenMV Cam, Final Week
|OpenMV Cam, 1.8" x 1.4", final week on Kickstarter|
Wait. Python? Yes, it runs Micro Python on the module.
That means with some simple Python scripts, your project can detect and track a human face, or an object, or you can track multiple colored objects of different colors, you can take a picture, record movies, interface with UART, SPI, I2C, control servos and more.
For NoCo Mini-Maker Faire, I set up a demo with my red Magician robot rotating to track a yellow object (placed on my Pololu 3pi). I tweaked the color tracking script in a few minutes to output the blob coordinates over serial to the PIPduino controlling the Magician, then wrote the Arduino code in another few minutes to spin in place based on blob position. Then tuned the color matching, et voila:
As for shields, we now have a thermopile array sensor shield available. We're working on a WiFi shield, LCD Shield, and a few others for later release.
|IR / Thermopile bundle: OpenMV Cam plus IR lens, thermopile shield, USB|
With the thermopile shield, based on a 16x4 Melexis MLX90620 sensor, you write a simple python script to overlay a heat map on the camera image as in this demo video (we used an LCD prototype shield here, but you get the idea):
So if you want to join our community, and get yourself an OpenMV Cam at Kickstarter pricing, here's the link to make a pledge: http://bit.ly/OMVKS - we appreciate any support you can offer, thanks!
Add machine vision to projects
Now it's actually easy to add machine vision to projects. How?
With a few lines of Python, OpenMV Cam can track a face, an object, or color, it can record photos or video, and you can expand it with shields. It's small at only 1.8" x 1.4" and affordable.
Learn more on Kickstarter.
Others have certified shimniok as follows:
[ Certification disabled because you're not logged in. ]