Monday, November 30, 2015

Cyber Monday 2015

Updated with lots more sales going on!

Bot Thoughts

20% off - 80CFB16
10% off - 6B54471


  • Hackabot Nano, Arduino Robotic Kit, $30 off (coupon code : 8882BB8)


  • 10% off all products with F3E57A2 from Black Friday to Cyber Monday




Happy Thanksgiving from Pololu! Our Black Friday/Cyber Monday sale is almost here! We will be offering huge discounts on hundreds of products and automatically upgrading you to the next best price break for everything else. We will also have some great limited-quantity doorbusters. The special offers become active Wednesday morning (November 25) at midnight PST (3:00 AM EST/08:00 UTC), and the sale runs through Cyber Monday (November 30), ending at 11:59 PM PST. More information is coming soon, including a full list of the doorbusters and sale items, but for now, here is a sampling of the discounts.


Cyber Monday and all its glory is nearly upon us! For this year's celebration of festively-timed discounts, we're putting a huge selection of some of this year's best-selling and most popular products on sale for one day only – from 10-40% off! Check out our Cyber Monday page to get the scoop on the day's special deals!

GHI Electronics

Let's get right to our Black Friday through Cyber Monday Sale.
  • $1 Holey board
  • $3 Holey Moley board (limited edition, only available during this sale)
  • $8.88 mBuino mbed
  • 50% OFF
    • Cerberus boards (Cerb40, Cerbuino, Cerberus)
    • G120HDR
    • G30HDR
    • FEZ Spider Mainboard
  • 20% OFF
    • FEZ Reaper Tinker Kit
    • all NETMF Development Systems
    • all Raspberry PI HATs
    • BrainPad .NET
The sale is available for 4 days but the stock may not, so place your order now!

Electronics Goldmine

$5 flat rate shipping, lots of things on sale--too many to list.

Check them out here:

Ham Radio Outlet

Lots of rigs on sale, check them here:

A Main Hobbies

Electronic kits 10% off, 15% off all else.


Today Only: Particle Sale

30% Off Your Favorite Particle Products

Ah Cyber Monday—the nerdy younger sibling of Black Friday. It’s one of our favorite shopping holidays here at Particle, and we couldn’t help but to get in on the fun. For today only we're offering 30% off some of our favorite Particle products like the Internet Button and Photon Kit. The ideal gifts to get for the engineer in your life, your favorite colleague, or, let's be honest...yourself.

Monday, September 21, 2015

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.

Thursday, August 6, 2015

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.

The test takes just a few hundred milliseconds to complete. The test jig is ready to go at any time. Just plug in a USB cable for power I can run through dozens of boards in a few minutes.

Here's the source code for the test jig: TestJig.ino

Tuesday, March 24, 2015

Redlink Connection Refused

Trying to launch LPCXpresso Redlink server, getting a "connection refused" because a shared library is missing? Online forum threads like this one don't help?

Here's the real answer: actually troubleshoot and solve the problem on your unsupported Linux distro. It's easy, just read on...

Friday, February 20, 2015

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)

The dice are actually blueish-white. I run the blob detection example, then stop it. Then move the mouse over the dice in a few areas and make a note of the approximate RGB values. Then I tweak the RGB values and distance until I'm fairly accurately detecting only the white dice.

Note the dice are actually bluish-white
To filter out any missing pixels, merge the nearby detected ones by calling dilate() then erode() with pixel size parameters.

    # image closing  

Then call find_blobs() on the binary image and it'll return a list of (x, y, color-index) tuples. If you are trying to match multiple colors, the color-index tells you which color the blob matches. Putting it all together, this is the code for finding blue-white blobs:

    # 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[0], d[1], d[0]+d[2], d[1]+d[3])
        subpips = 0
        for p in blobs:
            pr = (p[0], p[1], p[0]+p[2], p[1]+p[3])
            if pr[0] > dr[0] and pr[2] < dr[2] and 
               pr[1] > dr[1] and pr[3] < dr[3]:
                subpips += 1
        image.draw_string(d[0]-8, d[1]-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.

Tuesday, February 17, 2015

OpenMV Cam, Final Week

OpenMV Cam, 1.8" x 1.4", final week on Kickstarter
If you haven't heard of OpenMV Cam, it's a small machine vision module that's affordable, and the first that runs Python and is expandable with shields. It's funded and we're entering our final week on Kickstarter so don't miss out.

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: - we appreciate any support you can offer, thanks!

Monday, January 26, 2015

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.