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

Homepage: http://bot-thoughts.com/

Notes:

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

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.

To get going, you need to do two things
  • flash a new kernel image
  • install the operating system
You also also need:
  • a 4G MicroSD card
  • a 4G USB flash drive
  • serial USB adapter
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

Download

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 update.sh 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 update.sh (remember that file?).

Insert the USB flash drive.

  
mount udisk succeed

update.sh 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: http://linux-sunxi.org/Sunxi_disp_driver
[ 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: https://wiki.linaro.org/
root@ubuntu:~#

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 from Michael Shimniok

ATtiny and WS2812B

Did you know it's easy to drive a WS2812B smart RGB LED with an ATtiny?

eeZee RGB WS2812B breakout board on Tindie
I'm not talking about Adafruit's well-known NeoPixel library.

There's a much lighter-weight library for driving these LEDs that's perfect on memory- and flash-limited ATtiny AVRs -- or really any AVR for that matter.

All you need is the light_ws2812 library. I'm using it with the ATtiny25 on my eeZee RGB test jig.

Adafruit gets all the attention, but this little library is small, easy to use, and works great; it deserves more press. Pass it on, k?

Syndicated 2014-10-07 12:00:00 (Updated 2014-10-07 12:00:02) from Michael Shimniok

NoCo Mini Maker Faire

Failures, faces and fun. This past weekend I attended the NoCo Mini Maker Faire as a maker.

We had a lot of curious, inquisitive people of all ages at the SHARC / Bot Thoughts booth, where they found Ted's Shapeoko, my Hero Jr which failed miserably (fodder for a future post), Sawyer's robots, and my newest robot (also blog fodder):



Assembled and programmed in under 2 hours to demonstrate the PIPduino and OpenMV Cam, it was fun to ask the kids (and adults) to figure out what the red robot was doing.

Outside we were demonstrating the self-driving, robot Jeep, though it was up on jack stands. Many great conversations ensued.

I only got to use my GPS rope demonstration only once, on two adults, instead of the dozens of kids I envisioned would be crowding and pushing around the Jeep to take a look... Um, yeah.

Sparky's Widgets was our indoor neighbor. It was good to talk to Ryan as I hadn't seen him in awhile.

It was good to see Samuel from CyberHedz Technologies with his awesome Dalek that was a show hit.

In all, a good show.

Syndicated 2014-10-06 18:00:00 (Updated 2014-10-06 18:00:03) from Michael Shimniok

Making Test Jigs

Here's some cheap test jigs I use to test boards I sell on Tindie. Selling a quality product is of personal importance to me. With these test jigs, I've uncovered several board fabrication problems, more than several assembly problems (hey I'm not perfect), and identified ways to improve yield rate.

eeZee Power Jig

The goal for this jig is to measure 3.3V regulator output from the eeZee Power board. If it's 3.3V within the specified tolerance, that proves the regulator is populated correct, the USB connector is also populated, and all the corresponding traces are ok.

To build the jig, I installed pogo pins and test leads to an unpopulated eeZeePower board (to save time and money). When engaged with an eeZee Power, it enables the 3.3V regulator and connects the VCC and GND pins to the test leads. 

I plug a Mini USB into the DUT (Device Under Test), connect my DMM (digital multimeter) to the test wires and measure output voltage. 

Stacking another eeZeePower board would stabilize the pogo pins better. It's good enough as is.

eeZeePower test jig

AVR ISP Jig

This isn't a test jig, but one I use to program Turntable Strobes, Lost Model Alarms, PIPduinos, and other AVR-based boards. You can buy a fancier version of this on Tindie from BBTech.

AVRISP jig for programming AVRs
In case the picture isn't clear, one end has the familiar 6-pin AVRISP header, the other, pogo pins.

eeZee RGB Jig

I test every one of the eeZeeRGB WS2812B breakouts I sell to make sure the RGB modules are installed correctly and to ensure they work out of the box. I had been testing these with a breadboard Arduino but the pogo pins are unstable in a breadboard so I designed a test jig using an ATtiny85. I've discovered that some of these modules don't have reverse protection as advertised.

eeZeeRGB WS2812B breakout board
OSHPark builds boards in sets of 3 so I designed a single board that can stack 2-high (or 3-high if necessary) to stabilize the pogo pins. The Tiny and USB connector (for power) only has to be populated on one of those three boards. The other two boards can simply stabilize the pins. They're mounted together with screws, nuts and standoffs.



Test Jig, side 1

Test Jig, side 2

eeZee Prop Jig

The eeZee Propeller breakout (eeZeeProp) is the most complicated board I sell with a 44-pin QFP MCU, onboard EEPROM, crystals, a half-dozen resistors and capacitors, dual programming headers. I test every output pin on the eeZeeProp as well as programming functionality before it goes up for sale with this quick and dirty jig.

eeZeeProp test jig
The test jig above has two parts. The dual row of pogo pins, resistors, and LEDs is for testing pins. In the upper right is an FTDI programmer connector and pogo pins to engage the eeZeeProp FTDI pin pads. 

I program each board with a SPIN program that sequentially turns on each of the pins 0-28. The ability to program the chip in the first place tests P29-32 and the EEPROM.

Next, I lay the Propellers down onto the pogo pin bed and ensure each of the LEDs lights up sequentially. I can then investigate any suspect pins.

You probably noticed that the pins aren't well-aligned. My previous jig had two protoboards to keep the pins aligned better, but I broke it. Some day I'll redo this jig so I don't have to spend quite as much time manually popping each pin into place on the DUT.

Common Problems

You may wonder what kind of problems I uncover most when using these test jigs.

On the eeZeeProp I most often run into problems with connections on the Propeller MCU leads or the EEPROM. I've made some improvements in techniques that have reduced the frequency of these problems. 

While I very rarely found board fab problems on OSHpark boards (It's below 1% if memory serves, so reliability is very high), OSHpark is absolutely fantastic about fixing the occasional problem. 

I've seen far more frequent fab problems on a batch of Chinese made boards I ordered. I haven't contacted the supplier yet. The fab problems are mostly under-etching resulting in shorts to the ground plane. I may experiment with a wider isolation between ground pour and pads/traces and see if that helps any.

I've occasionally populated pairs of 0603 resistors rotated by 90 degrees. In future designs I'll try to avoid confusion by spacing the resistors farther apart. I've installed a diode backwards once or twice.

Syndicated 2014-09-30 14:20:00 from Michael Shimniok

23 Sep 2014 (updated 6 Oct 2014 at 18:16 UTC) »

Free Speech Synthesis For Your Robot

Newly painted Hero Jr.
I ran across a surprisingly good speech synthesis package. No, it's not Festival.

My Hero Jr had been painted blue, with holes drilled in the head, and other modifications. There's no better Hero Jr to modify and hack than this one. Possibly in time for the NoCo Mini-Maker Faire in Ft. Collins, Oct 4-5.

After painting it, the next step will be to add my recently purchased Raspberry Pi B+, or else the dusty PCduino in my closet, as a brain.

Then, implement speech synthesis. Vision: a robot "tour guide" for my Maker Faire exhibit.

While I adore the stock Votrax SC-01A speech synthesizer (it's the quintessential robot voice) I like the idea of a 20 year old robot with a modern voice even more.

Here's the fruits of my research so far...

Festival

I learned about the Festival speech synthesis system years ago. The now defunct Bot Thoughts podcast was hosted by the rab voice (UK). I thought it was the best of the stock voices, maybe because I'm not used to UK speech patterns and so the flaws aren't as jarring as those of the US voices.

The kal voice (US) is has a few digital-sounding artifacts in a few spots, and the intonation is noticeably wrong in several spots, too.

Other voices are available. The MBROLA US voices are decent. I also tried the enhanced CMU Arctic voices (download here). Here's rms.

rms_festvox.wav
rms_festvox.ogg

Mary TTS

Mary TTS is the package I ran across. Mary TTS is particularly linux friendly and comparatively amazing, primarily because it does such a great job with prosody (intonation, stress, rhythm in speech). Unfortunately it requires a lot of resources. It won't run on a Raspberry Pi because it requires quite a bit of memory. I plan to test it on a pcDuino3 which I just bought.

This is rms, again, clearly the same voice (easily downloaded with a native Mary TTS tool), but... well, see how you think it compares.

rms_marytts.wav
rms_marytts.ogg

Admittedly there may be some tuning parameters in both packages that would improve the results. Out of the box, it seems pretty clear that Mary TTS does a much better job with pitch and timing.

Other CMU arctic voices are available for Mary TTS. I haven't picked out the right voice. I kind of like Poppy, the female British voice.

Free TTS

I also came across Free TTS, also written in Java. Unfortunately, based on the samples I heard, the prosody is pretty poor compared to both Festival and Mary TTS.

Others?

Any other tips on free speech synthesis packages out there?

Syndicated 2014-09-23 12:10:00 (Updated 2014-10-06 17:27:09) from Michael Shimniok

95 older entries...

 

Others have certified shimniok as follows:

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

Robot of the Day

SAR (Sound Activated Robot)

Built by
Steven Frye

Recent blogs

17 Oct 2014 mwaibel (Master)
14 Oct 2014 shimniok (Journeyer)
5 Aug 2014 svo (Master)
20 Jul 2014 Flanneltron (Journeyer)
3 Jul 2014 jmhenry (Journeyer)
3 Jul 2014 steve (Master)
2 Jul 2014 Petar.Kormushev (Master)
10 Jun 2014 robotvibes (Master)
10 May 2014 evilrobots (Observer)
2 Mar 2014 wedesoft (Master)
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)
12 Mar 2013 ixisuprflyixi (Master)

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