shimniok is currently certified at Journeyer level.

Name: Michael Shimniok
Member since: 2007-12-23 16:33:37
Last Login: 2013-08-22 04:57:14

FOAF RDF Share This



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

Syndication: RSS 2.0
26 Jan 2015 (updated 29 Jan 2015 at 02:15 UTC) »

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.

Bubble Display, Propeller

HP 4-Digit Bubble Display (7-Segment LED)
I used a Sparkfun coupon to buy a couple of vintage, 4-digit, 7-segment, HP LED bubble displays. The kind you'd find in really old calculators. Their guide is most helpful.

I used one of my spare eeZee Propellers to play around with the display and create driver code. I haven't played in Spin in awhile, so it was a good refresher. Here's what I did...


Since you want no more than 5mA running through these LEDs, I calculated that a 1K resistor would be about right. At 3.3V, with 1.6V forward drop, that's about 2mA, max.

Propeller pins P16 - P19 are connected to Cathode 4 through 1, respectively. Pins P20 - P26 are connected to Anode A through G, respectively. The decimal point is hooked up to P27.

Driving 7-Segment Displays

So, how do you drive one of these displays? To turn on an LED segment its anode must be high, and cathode low. These HP bubble displays are common-anode, meaning there's a unique cathode for each display digit, but each anode is shared across all the display digits.

You could simply drive the display one digit at a time, setting all the required anodes high and the corresponding cathode low.

The problem is, each digit requires a different number of LED segments. Compare 1, which requires 2 LED segments, with 8 which requires 6 segments. If you used a resistor per cathode, 1 would look brightest and 8 would appear dimmest.

A common cathode display is intended to be controlled with the cathodes. Use 4 resistors, one for each cathode, power each of the common anodes sequentially, and use the cathodes to individually turn segments on or off for each display digit position.



The display driver runs on a cog and displays digits stored in hub memory. The main cog simply counts from 0 to 9999 over and over again, extracting the 1's, 10's, 100's and 1000's place and storing the numbers for display, as follows, where b1, b2, b3, b4 are each of the digits.

    PUB Start | i              

b1 := b2 := b3 := b4 := 10 ' initial digit (>9 means off)
      cognew(display, @stack)    ' start display driver cog
        repeat i from 0 to 9999             
b4 := i // 10 ' ones
b3 := (i/10) // 10 ' tens
b2 := (i/100) // 10 ' hundreds
b1 := (i/1000) // 10 ' thousands
waitcnt(clkfreq/10+cnt) ' count at ~10Hz

I may refactor the program to use BCD; storing digits in each of the 4 bytes of a Propeller's 32-bit long int, but the code is more readable using one variable per digit.

Driver Details

As for the driver, a segment array, seg, stores the outa cathode pin bits required to turn on each segment (a through g) at each display digit position (1 through 4).

The main loop calls setdigit(digit, value) which sets the cathode bit in the seg array, for the specified display digit and the specified numeric value. For example, displaying "2" in position 3 requires the cathode for position 3 to be low (on) for segments a, b, d, e, g, and high (off) for segments c and f.

setdigit(1, b1) ' set 1's value
setdigit(2, b2) ' set 10's value
setdigit(3, b3) ' set 100's value
setdigit(4, b4) ' set 1000's value
bit := AN_A ' start with anode a
repeat s from A to G ' loop thru segments
outa := seg[s]|bit ' turn on cathodes, anode
bit <<= 1 ' next anode bit

Then, the main loop iterates over the array, seg[A..G], sets the cathode pins, simply with outa := seg[s] and raises the corresponding segment anode pin for each array element by ORing outa with bit, which is the bit corresponding to the current anode pin. How does the array get set with the right cathode?

The setdigit(digit, value) function converts the display digit into the appropriate cathode bit to activate (set low) or deactivate (set high).

case digit
1: unset := CA_1
2: unset := CA_2
3: unset := CA_3
4: unset := CA_4
other: unset := 0

set := !unset & (CA_1|CA_2|CA_3|CA_4)
It then uses the numeric value (0..9) in another case statement to select which segments should be on (seg[?] &= set) or off (seg[?] |= unset).

  case value
0: seg[A] &= set
seg[B] &= set
seg[C] &= set
seg[D] &= set
seg[E] &= set
seg[F] &= set
seg[G] |= unset

And that's it. You can find the source code here: BubbleDisplay.spin

So, It's Been Awhile...

You would have heard from me sooner, but alas, there has not been much time for tinkering or blogging lately.

My paucity of spare time can be blamed on work, filling Tindie orders, and gearing up for the crowd funding campaign for OpenMV Cam.

Syndicated 2014-12-03 15:00:00 (Updated 2014-12-03 15:00:01) from Michael Shimniok

26 Nov 2014 (updated 30 Nov 2014 at 23:12 UTC) »

Holiday Deals for Nerds Like Us

Lots of sales going on again this season at our favorite geek retailers:

Tindie Cyber Monday : Big sales from many vendors this Cyber Monday.

  • 15% any one item in the Bot Thoughts Store, coupon code DA54D6C, good through Friday
  • $2 off Digispark - Lowest Price Ever! Digispark! The micro-sized, Arduino enabled, usb development board - cheap enough to leave in any project! Coupon 9D4B1F3
  • 30% off PiScreen is a 3.5" TFT (480x320) with touchscreen control for the Raspberry Pi. Never need a monitor again! Coupon 02971ED
  • 20% off much of the Arachnid Labs' Store - including the successful Kickstarter, Re:Load Pro. Coupon 21A2FD3
  • 15% off all products in the Geppetto Electronics store! Coupon 92C9FC5
  • And lots more on sale; full list here
Pololu Black Friday 2014 : Starts Wednesday with doorbuster deals.

Pololu Robotics and Electronics is having its biggest Black Friday/Cyber Monday sale yet, offering huge discounts on over 600 products, along with 11% to 15% off orders over $100!  Save big on robots, programmable controllers (including A-Stars, Arduinos, Raspberry Pis, and mbeds), sensors, motor drivers, power supplies, LEDs, actuators, wheels, breadboards, wires, and more.  The first doorbuster deals go live Wednesday, November 26, and the sale runs through Cyber Monday (December 1).  For details, visit

E-Z Robot Black Friday
 : 20% off all robot kits + free shipping!

Science Fiction inspired robots that don't require programming (unless you want too)! In 1977, the world invited the Apple II Personal Computer into the home. 2014, ezrobot has launched Revolution, a robot for everyone! Whether you choose the Revolution clip'n'play robots or developer kit, ezrobot is making robotics, well... easy!

HobbyPartz Black Friday Sale: 15% off select items including Gens Ace batteries.

Coupon code BFSALE15, ends Nov 30, 11:59PM. Sale on LiPo batteries, RC gear, video cams, and more.

Schmartboard Black Friday : 25% off the entire store! Limited time.

"Look for an e-mail on Friday. The special will be very limited in time, very unlimited in its breadth, and significance. Schmartboard thanks you for a good year."

RoboSavvy Black Friday : 50 products with savings up to 67%

FriedCircuits Black Friday : 25% off USB Tester 2.0 and Sharp Distance Sensors. All other products are 15% OFF. Sale beings Thursday 11/27 and ends Monday 12/1, midnight PST.

Adafruit Black Friday : 15% off plus free stuff. 
Welcome to the Black Friday sale – 15% off plus all the free items & shipping as you shop! Use code: BLACKFRIDAY on check out. We thought about doing flash sales or complicated codes but that’s a lot of frustrating hoop jumping for everyone, so we came up with what we think is an amazing deal that is straight forward, no stress and valuable – a 15% off discount anything in stock and lots of great free things automatically depending on how much you order.

We are currently offering a FREE Adafruit Perma-Proto Half-sized Breadboard PCB for orders over $100, a FREE Trinket 5V for orders over $150, FREE UPS ground (Continental USA) for orders $200 or more, a FREE Pro Trinket 5V for orders over $250

Sparkfun Cyber Monday 2014 : 20% off Actobotics, hourly flash sales 7am - 7pm

On Cyber Monday (12/1), everything in our Actobotics category is 20% off. That means everything from Actobotics Kits to DC Motors is marked down. If you’re looking to start exploring the world of robotics, or stock up for your next build, this is a killer chance to do so. Next on 12/1/2014, we are offering hourly flash sales from 7 a.m. to 7 p.m. Mountain Standard Time, with 30-50% off on some of our most popular products. These items have been hand-selected by our employees and are some of our favorite designs! Details: Sparkfun Cyber Monday 2014

2014 Parallax Holiday Sale : Their holiday sale includes microcontrollers, robots, and more.

BASIC Stamp Sale started Nov 10. Free USPS Priority shipping and 10% off the entire store. Robot kit sale (ELEV-8 Quadcopter, Arlo Robotic Platform System), Best Sellers Sale, and other mystery deals! Also, a free WS2812B module with every order.

GHI Electronics: Black Friday through Cyber Monday sale on FEZ MCU boards and more!

The sale will start this Friday, November 28th and will end Monday, December 1st (UTC-05:00) Eastern Time (US & Canada). Lots of great boards on sale including discontinued models.

Trossen Robotics Black Friday : Interbotx & RobotGeek 20% Off, 10% off everything else in the store!

Black Friday / Cyber Monday is here at Trossen Robotics! Interbotix & RobotGeek brand kits and parts are 20% off, everything else in the store is 10% off! Use coupon code "Friday14" to redeem your discount at checkout! Offer good from 12/28/2014 - 12/1/2014 *Offer excludes HR-OS1 and HR-OS5 Humanoid Platforms.

HobbyKing Cyber Week Sale: LiPos, servos, motors, planes, and more.

Running all week, we will be dropping prices and offering amazing deals on literally hundreds of the most popular items in the HobbyKing catalog. Models, lipos, tools, chargers, we'll be offering amazing discounts from all product categories, so you're almost guaranteed to pick up an amazing deal. If you don't see something you are interested, check back in an hour because our offers will be added and changed constantly. This isn't a week where you want to be away from an internet connection.

Electronics Goldmine : has a few door busters and some discounts worth looking at.

Drone Life : has a list of drone sales, too

Syndicated 2014-11-26 00:00:00 (Updated 2014-11-30 22:31:14) from Michael Shimniok

Holiday Sales: Parallax

It's that time of year again. Our favorite hobby electronics stores are doing their annual sales.

2014 Parallax Holiday Sale Schedule
Our season of promotions has begun! Here is a sneak peek of upcoming sales on These deals will be available for online orders only.
  • BASIC Stamp Module Sale - Begins 11/10/14
  • Free USPS Priority Shipping and 10% Off Entire Store
  • Robot Kit Sale (including ELEV-8 Quadcopter, and Arlo Robotic Platform System)
  • Best Sellers Sale
  • and other mystery deals!
Also, they're offering a free WS2812B module with every order.

Syndicated 2014-11-05 19:00:00 (Updated 2014-11-05 19:00:01) from Michael Shimniok

14 Oct 2014 (updated 6 Nov 2014 at 05:14 UTC) »

pcDuino V1: getting started

pcDuino is a single board computer based on the Allwinner A10 ARM Cortex A8 processor. It's powerful, running 1GHz and featuring 1G of memory.

Installing an OS on the pcDuino is  different than with a Raspberry Pi. It uses onboard flash for storage, 2G for the V1, and it uses a kernel flashed onto the board, as well.

So, here's how to get started with a pcDuino V1, using a Linux workstation...

I used a Pololu USB AVR Programmer but you could use an FTDI breakout or similar.

Power Supply

Avoid pain and anguish: use a good power supply.

With a random, crappy 800mA wall wart, I experienced unreliable booting, hangs with USB devices installed, and even system freezes trying to set the password to my account!

Using a better power supply solved these problems. After wasting an hour or more...

Updating Kernel Image


I used the 6/20/2014 Kernel image found here: pcduino_a10_kernel_dd_20140620.img

(you might check for an updated version on the pcDuino download page)

Download the image and, while you're waiting, continue below.

What Disk Device?

You need to find out what device your microSD card mounts as. find the device of the microSD. Before you insert the card, look at the disk devices on the system:

    $ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb1 227924576 13868168 202646548 7% /
udev 3530296 4 3530292 1% /dev
tmpfs 714416 1268 713148 1% /run
none 5120 4 5116 1% /run/lock
none 3572060 66292 3505768 2% /run/shm
/dev/sda4 267349012 234311888 19455152 93% /home
/dev/sda1 185939524 106053344 70577568 61% /mnt

Now, insert the card in your card reader and after it mounts, run df again:

      $ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb1 227924576 13868168 202646548 7% /
udev 3530296 4 3530292 1% /dev
tmpfs 714416 1268 713148 1% /run
none 5120 4 5116 1% /run/lock
none 3572060 66292 3505768 2% /run/shm
/dev/sda4 267349012 234311888 19455152 93% /home
/dev/sda1 185939524 106053344 70577568 61% /mnt
/dev/sdd1 1926848 28768 1898080 2% /media/4BAB-4D27

You can see that /dev/sdd1, in my case, is the disk partition that was just mounted. It's partition #1 on disk /dev/sdd. In your case, it may be a different device path.

You're interested in writing the kernel image to the disk, not the partition. So remove the partition number to get the disk device path. (For example: if /dev/sdx1 is the partition, /dev/sdx is the disk). In my case, that's /dev/sdd

Writing the Image

You'll use dd to write the image to your disk.

NOTE: Make absolutely certain you are using the disk corresponding to your microSD card.

If you use the wrong device, you could lose data, or overwrite your OS. That's bad.

However, it's easy to avoid making that mistake. Just be careful and pay attention.

Use df to make absolutely certain you have the correct device. Then double-check your command line before you hit return.

Is your kernel image done downloading? Ok, cd into wherever it's saved.

When you run dd, you'll specify the input file, the image, with if=filename and you'll specify the output device, your microSD card device (not partition), with of=device-path. And you'll specify a 4M block size with bs=4M. (Did you doublecheck the device?)

sudo dd if=pcduino_a10_kernel_dd_20140620.img bs=4M of=/dev/sdx

25+0 records in
25+0 records out
104857600 bytes (105 MB) copied, 40.7738 s, 2.6 MB/s

It takes a few minutes. Once it's done:

  • Remove power from your pcDuino, 
  • unmount your microSD from the Linux workstation, 
  • insert the microSD card into the pcDuino's slot, and
  • power up the pcDuino. 

In my case, I saw the TX light blink green, very slowly, while the kernel was updating. If nothing blinks, something is wrong.

When the blinking stops, it's done updating.

Unplug your pcDuino from power. Remove the microSD card.

Now you can install the operating system.

Installing Ubuntu

Next it's time to install Ubuntu operating system. This is where that USB flash drive comes in.

Download Image

You'll need to download the Ubuntu image: pcduino_ubuntu_20131126.7z

(you might check for an updated version on the pcDuino download page)

Prepare USB Drive

Format your USB drive as FAT32 if it isn't already.

Extract files out of the 7z file you downloaded, which will create an ubuntu folder. The two files inside that folder are and pcduino_ubuntu_20131126.img (20131126 is the date; there may be a different date on whatever file you grabbed)or whatever the date is on the filename).

Move those files onto the root folder of your USB drive. It doesn't matter if there are other files on your USB drive.

Unmount the flash drive and remove it from your machine.

Serial Debug Monitor

While you wait for the download, let's connect your Serial USB adapter to the debug port on the pcDuino so we can see what is going on. when you install the operating system.

The debug port is a 3-pin header, next to the Menu button on the USB connector side.

pcDuino debug port
Data going into the pcDuino is closest to the USB connector (FTDI: TXO). The middle is ground. The pin closest to the A10 is for data coming out of the pcDuino (FTDI: RXI). Connect your serial USB adapter so that TX coming from the pcDuino goes into the RX pin of your adapter and TX coming out of your adapter is going into RX on the pcDuino.

You previously removed power from your pcDuino and removed the microSD. We're about to power it up. Open your favorite terminal program (for example, minicom), connect to the USB serial adapter. Set the baud rate to 115,200, 8N1.

Begin the Install

Plug in power to your pcDuino and you should see it outputting a long string of text. Eventually it indicates that it is searching for (remember that file?).

Insert the USB flash drive.

mount udisk succeed found, updating rootfs from udisk, please wait...

writing pcduino_ubuntu_20131126.img to nand flash

it will take about 10 minutes to finish...
update finished
update finished

After some time, the update will complete. Remove the USB flash drive, and reset the board (or power cycle it).

You should see a long string of text fly by. At the end of it you'll see something like this:

  [    6.350000] Warning: this sunxi disp driver will see significant redesign.
[ 6.360000] Applications using /dev/disp directly will break.
[ 6.370000] For more information visit:
[ 6.670000] kjournald starting. Commit interval 5 seconds
[ 6.670000] EXT3-fs (nandd): using internal journal
[ 6.680000] EXT3-fs (nandd): mounted filesystem with ordered data mode
[ 7.070000] init: plymouth main process (68) terminated with status 127
[ 7.120000] init: ureadahead main process (70) terminated with status 5

Welcome to Linaro 12.07 (GNU/Linux 3.4.29+ armv7l)

* Documentation:

And that's it. You're done.

Starting Over

If you need to start over for any reason, remove the USB drive, reinsert the microSD card, and press reset. Doing so will reinstall the kernel and allow you to install the OS again.

Syndicated 2014-10-14 14:00:00 (Updated 2014-11-06 04:28:48) from Michael Shimniok

99 older entries...


Others have certified shimniok as follows:

[ Certification disabled because you're not logged in. ]

Robot of the Day


Built by
Oguz Uzol

Recent blogs

26 Jan 2015 shimniok (Journeyer)
23 Jan 2015 mwaibel (Master)
11 Jan 2015 steve (Master)
14 Nov 2014 Sergey Popov (Apprentice)
14 Nov 2014 wedesoft (Master)
5 Aug 2014 svo (Master)
20 Jul 2014 Flanneltron (Journeyer)
3 Jul 2014 jmhenry (Journeyer)
2 Jul 2014 Petar.Kormushev (Master)
10 Jun 2014 robotvibes (Master)
10 May 2014 evilrobots (Observer)
1 Dec 2013 AI4U (Observer)
13 Nov 2013 jlin (Master)
23 Jun 2013 Mubot (Master)
13 May 2013 JLaplace (Observer)
21 Apr 2013 Pi Robot (Master)
12 Apr 2013 Pontifier (Apprentice)
16 Mar 2013 gidesa (Journeyer)

Newest Members

Newest Robots

7 Aug 2009 Titan EOD
13 May 2009 Spacechair
6 Feb 2009 K-bot
9 Jan 2009 3 in 1 Bot
15 Dec 2008 UMEEBOT
10 Nov 2008 Robot
10 Nov 2008 SAMM
24 Oct 2008 Romulus
30 Sep 2008 CD-Bot
26 Sep 2008 Little Johnny
Share this page