August 2011

You are currently browsing the monthly archive for August 2011.

Before I placed my order, I had questions about Seeed Studio Fusion PCB service turn-around time for shipping to the USA, and so I figure others might as well.

Here are details of my order of the ten 5cm square PCB’s shown in DMD: Dual Motor Doohickey (Modular RBBB and TB6612FNG Driver Board). The total cost was $13.42, including shipping (subtotal $9.90, plus $3.52 Registered Air Parcel). There were no “extras” (like 100% e-test, special colors or shipping methods, etc.).

  • 8/02/2011
    • 7:52 AM – Order placed. The total charge appeared on my PayPal account six minutes later, and the order confirmation with order number arrived at the same time.
    • 8:47 AM – I added the order number to the silkscreen layer of the PCB as requested and sent the gerber files to the email address specified about an hour after the order was placed. The design and gerbers were created with Fritzing.
    • 6:26 PM – Received an order update email: The order has been changed to status “Processing.”
  • 8/03/2011, 4:37 AM – Received an order update email: The order has been changed to status “In production.”
  • 8/04/2011, 1:49 AM – Received a person email from Dwin, I assume because when I ordered I had asked them to let me know if there were any problems: “Your PCB is under processing. If the file and design meets requirements, they will be processed and shipped in 4-6 working days.”
  • 8/08/2011
    • 4:33 AM – Received an order update email: The order has been changed to status “Traceable.”
    • 4:56 AM – Received an order update email: The order has been changed to status “Shipped.” (Yay!)
    • 9:21 PM – Received an order update email with a link for tracking the order.
  • 8/09/2011, 4:44 PM – Tracking status: “Acceptance” at Hong Kong; Tracking status: “Origin Post is Preparing Shipment.”
  • 8/11/2011, 10:53 AM – Tracking status: “Processed Through Sort Facility” at Hong Kong. “The item left Hong Kong for its destination.” (United States of America)
  • 8/23/2011
    • 7:29 AM – Tracking status: “Arrival at Unit” at my local post office.
    • 4:01 PMDelivered. I actually received 12 (instead of 10), and they all look great. They were very well packaged in a small corrugated cardboard box with lots of bubble wrap.

That’s 21 days or three calendar weeks start to finish — not bad at all! Tonight, I solder!

Math Monday came early this week, and we had some fun exploring Reuleaux triangles. Next to a circle, they’re the simplest curve of constant width you can make — that basically means you can roll a plank on top of them as smoothly as on wheels. The kids didn’t expect that one! (They also would make great manhole covers!)

Although they roll very smoothly, they do tend to wobble around a bit, so I built a little gutter on the plank to make it easier for the kids to experiment with. It was a quick project, and lots of fun for the kids. You don’t have to use a band saw or even the sander; all you really need is a jigsaw or coping saw, some scrap wood, and some nails.

Music credits: “260809 Funky Nurykabe” by spinningmerkaba (CC-BY 3.0)

Here’s an Arduino-compatible GI-SP0256-AL2 speech synthesizer module that I’m finishing up. It’s a great 1980’s-era allophone speech synthesizer chip that was used in Intellivision expansion modules and sold at RadioShack stores for years for about $12. You can still find them from time to time on ebay, and they produce a fantastic synthesized speech sound. The chip is sometimes called the “SPO256-AL2” (with the letter “O” as opposed to the numeral “0”) due to a typo in the original documentation from RadioShack.

First, here’s a video of the speech synthesizer in action:

The chip works by sending it a series of allophones (59 to choose from) that make up all the sounds of the English language. It’s a real rats nest when wired up on a breadboard, so I thought I’d throw it together on a little 5cm circuit board. (Let me know by commenting below if you’re interested in one.)

The board leaves open (and accessible) four analog pins and four digital pins (two with PWM), plus two additional analog pins in you use the serial clock and data lines that are set up for I2C communication by default. The eight non-I2C pins are paired with ground pins, and three are set up by default to configure the device address for I2C communication. It requires regulated 5V via a standard 6-pin FTDI connection (you don’t need to use all pins unless you’re programming it), and there’s an output jumper at the bottom that can be amplified to power a speaker.

Here’s the design. It’s about 2 inches square. I’ll post the code when I get it finished up. Let me know if you’re interested!

Arduino-compatible SP0256-AL2 Speech Synthesizer

Arduino-compatible SP0256-AL2 Speech Synthesizer

Some Code

Here’s some of the code I used for my test. I’ve updated the code on Februay 18, 2012 to include the required loop() method (which I’d accidentally left out) and to rename the “SS” constant so it doesn’t conflict with the Slave Select constant in case that’s defined.

// Voice Pins -- The SP0256 address pins are all on the same port here.
// This isn't necessary but it does make it a lot easier to pick an
// allophone in code using PORTC in this case.
#define PIN_A1  A0
#define PIN_A2  A1
#define PIN_A3  A2
#define PIN_A4  A3
#define PIN_A5  A4
#define PIN_A6  A5
#define PIN_ALD  2
#define PIN_LRQ  12

// some words to say
byte purple[] = {PP, ER1, PP, LL };
byte monkey[] = {MM, AX, NN1, KK1, IY };
byte garden[] = {GG1, AR, PA3, DD2, IH, NN1 };
byte moment[] = {MM, OW, MM, EH, NN1, TT2 };

void setup() {
  // Set pin modes
  pinMode( PIN_ALD, OUTPUT );
  pinMode( PIN_LRQ, INPUT );
  DDRC = B00111111;  // Sets Analog pins 0-5 to output

  digitalWrite(PIN_ALD, HIGH);

  speak( purple, (byte)(sizeof(purple) / sizeof(byte)) );
  speak( monkey, (byte)(sizeof(monkey) / sizeof(byte)) );
  speak( garden, (byte)(sizeof(garden) / sizeof(byte)) );
  speak( moment, (byte)(sizeof(moment) / sizeof(byte)) );

void loop() {

void speak( byte* allophones, byte count ) {
  for( byte b = 0; b < count; b++ ) {
    speak( allophones[b] );
  speak( PA4 ); // short pause after each word

void speak( byte allophone ) {
   while ( digitalRead(PIN_LRQ) == HIGH )
    ; // Wait for LRQ to go low

  PORTC = allophone; // select the allophone

  // Tell it to speak by toggling ALD
  digitalWrite(PIN_ALD, LOW);
  digitalWrite(PIN_ALD, HIGH);


Here are the allophone definitions:

#define PA1 0x00
#define PA2 0x01
#define PA3 0x02
#define PA4 0x03
#define PA5 0x04

#define OY  0x05
#define AY  0x06
#define EH  0x07
#define KK3 0x08
#define PP  0x09
#define JH  0x0A
#define NN1 0x0B
#define IH  0x0C
#define TT2 0x0D
#define RR1 0x0E
#define AX  0x0F
#define MM  0x10
#define TT1 0x11
#define DH1 0x12
#define IY  0x13
#define EY  0x14
#define DD1 0x15
#define UW1 0x16
#define AO  0x17
#define AA  0x18
#define YY2 0x19
#define AE  0x1A
#define HH1 0x1B
#define BB1 0x1C
#define TH  0x1D
#define UH  0x1E
#define UW2 0x1F
#define AW  0x20
#define DD2 0x21
#define GG3 0x22
#define VV  0x23
#define GG1 0x24
#define SH  0x25
#define ZH  0x26
#define RR2 0x27
#define FF  0x28
#define KK2 0x29
#define KK1 0x2A
#define ZZ  0x2B
#define NG  0x2C
#define LL  0x2D
#define WW  0x2E
#define XR  0x2F
#define WH  0x30
#define YY1 0x31
#define CH  0x32
#define ER1 0x33
#define ER2 0x34
#define OW  0x35
#define DH2 0x36
#define SSS 0x37
#define NN2 0x38
#define HH2 0x39
#define OR  0x3A
#define AR  0x3B
#define YR  0x3C
#define GG2 0x3D
#define EL  0x3E
#define BB2 0x3F

We finished up PopsicleBot StickBot with a couple of 555 timer circuits to allow it to roam freely and untethered. It was a lot of fun to build, and even though it’s not the fastest walker or the simplest design, it feels very organic, partly because it’s entirely analog. (As another reader noted, it would have been a lot easier to just use a Microchip PIC12F683 — or PICAXE-08M or 08M2 — but that wouldn’t have been quite as fun, and I was really looking forward to making “eyes” out of the circuits.) See the original post here: StickBot: A Simple 6-Legged Walker. You can click on any of the photos to see larger versions.

StickBot v2 - Untethered

StickBot v2 - Untethered

There’s a 9V battery now attached to its belly with a cable tie. The power feeds into a 7805 voltage regulator, which is fastened with a drop of glue and another cable tie under its nose. 5V and GND are fed up to it’s right eye, where a 555 timer is set up to oscillate between 0 and 4.25 volts with a frequency of 1Hz — so a half second for the left step, then a half second for the right, and so on. The green wire is the 1Hz square wave output.

StickBot v2 - Power

StickBot v2 - Power

The soldering work is far from beautiful, but it is functional, and of course wrapping it up in tape makes it look a little cleaner. You can see where I slipped in little pieces of electrical tape where needed to avoid unwanted connections. There’s a video of soldering up one of the eyes here: StickBot - Building the Right Eye

5V and GND are also fed up to the left eye, where the inner green wire carries the 1Hz square wave generated by the right eye, and the outer green wire carries the servo control signal. The 555 circuit that makes up the left eye creates this control signal, using (in part) a resistor (R3) that I bundled with the other eye. I did this to keep the number of components in each eye balanced. Nobody wants to see a PopsicleBot StickBot with one eye that’s much bigger than the other!

To simplify the soldering work, I left pin 4 (reset) empty on both circuits, as well as pin 5 (the control voltage pin) on the 1Hz oscillator. Ideally, you’d tie both reset pins up to 5V, and tie the empty pin 5 to ground through a 10nF capacitor. This keeps unwanted noise from potentially affecting the circuit.

Here’s the schematic: (Click for a larger version.)

PopsicleBot v2.0 Schematic

StickBot v2.0 Schematic, with two 555 timer circuits sweeping a servo motor from right to left.

…and here’s the video:


Here are some helpful resources if you’re working with 555 timer circuits.

Updated Name

I realized that Popsicle was actually a registered brand name and not just a common word, so in order to avoid any confusion or trouble, I changed this little guy’s name to StickBot. This project does not (and never did) have anything to do with Popsicle brand ice pops. In fact, I’m not even sure the craft sticks I uses were actually from Popsicle brand ice pops. So my sincere apologies to the Popsicle people; I hope you continue to let me eat your ice pops because life would simply not be the same without them!

Here’s a small, inexpensive, modular, and easy-to-customize motor controller I’m working on that incorporates the Modern Device RBBB ($13), and Pololu’s TB6612FNG Dual Motor Driver Carrier ($8.50). If I fry or want to retask the brain or the driver or both, I can just pop them out and move along. Plus, because the RBBB is essentially a little Arduino, I’m in complete control of the code; I can rest assured that my robot will adequately obey the Three Laws. :)

It’s precisely 50 mm square. The ADDY jumpers will allow it to be addressed on an I2C network if desired. I’m working through some DC motor code, but I’m also planning some bipolar stepper code as well. The PCB was designed with Fritzing, which I found to be very usable but a bit limiting.

I’ve decided to sell off the extras either as kits or bare PCBs, so let me know if you’re interested by commenting below.

DMD: Dual Motor Doohickey v1.0 - A flexible motor controller

DMD: Dual Motor Doohickey v1.0 - A flexible motor controller

UPDATE: The circuit boards arrived in three weeks time (detailed at SeeedStudio PCB Turn-Around Time (Registered Mail) ), and I’m very pleased with the results. Here are a few pictures of the boards below. Click on the thumbnail for a larger image.

This was updated again on November 7, 2011 to add Fritzing reference, and the ebay link.