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
Fixing Flaky LCD Monitor with ESR Meter
My Dell E2210H LCD monitor was really wonky.
Powering up from sleep, it would only occasionally come back to life, usually after resetting itself several times.
More often, it would power off or go into power saving mode, leaving the front panel buttons inoperative.
Occasionally it would reset or power off while operating normally.
Here's how I fixed it, using my DIY ESR test harness to find a bad capacitor without desoldering.
You can find disassembly videos and tutorials out on the web specific to your monitor. Remember, safety is your responsibility so please learn how to safely deal with dangerous high voltages, how to safely discharge capacitors, etc.
|Low voltage drop; low ESR.|
The device sends a 1.0 Vp-p, 1kHz - 250kHz square wave through a capacitor on the board while the oscilloscope displays voltage drop across the capacitor.
You turn on the ESR harness, connect Channel 1 to the Probe BNC and Channel 2 to the Trigger BNC.
Then touch the red/black probes to the positive/negative capacitor terminals while they are on the board. Which is nice; you don't have to desolder every cap.
|High voltage drop; high ESR.|
But usually it's really obvious when you find a bad capacitor.
What you should see is a very low voltage drop across the capacitor as pictured above right.
A capacitor with overly high ESR will drop far less voltage as shown below right.
And that is just what I found on one of the 100uF supply capacitors on the main driver board for the LCD. The rest of the capacitors tested ok.
|The bad cap looked fine but tested bad.|
Normal ESR for good capacitors of similar size are orders of magnitude less than that.
With such a high ESR, the capacitor was slowly charging and discharging, likely confusing whatever circuit or MCU was controlling the main power.
After replacing the capacitor with a good one, the monitor works normally, as expected. All with a minimum of work and the very low cost of a capacitor.
Admittedly, I somehow missed the bad capacitor the first time I tested so I ended up buying a power supply board. Now I have a spare. Oops.
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!
Others have certified shimniok as follows:
[ Certification disabled because you're not logged in. ]