DynaPose 2

Well, it's been a while, but I'm back! I've had a few developments since my last blog (including new bots, a new 3D printer) but today I want to show off the next version of DynaPose.

Last year I wrote some super basic scripts that would allow you to pose an arm in discrete positions. It's handy, but a little clunky. Lat week, after seeing one of SparkFun's Video for the uArm I was inspired to make a real-time DynaPose.

The basic idea is that instead of hitting a button to record each pose, you simply move the arm to the positions you want it to go to and the ArbotiX Microcontroller automatically records positions on a timer. The upside is that the arm will playback in the same fashion that you pose it. However, this is fairly memory intensive, eating up the ArbotiX's precious SRAM.

How intensive is it? Well that depends on your number of servos and your read rate! So let's do the math. The atmega644p on the ArbotiX has 4k of SRAM. We'd have to do some digging to figure out the overhead of our default variables and the DYNAMIXEL and serial libraries, but let's just say that 3.5K was free - or 3584 bytes. Let's also target the PhantomX Pincher which has 5 servos. 3584 bytes / 5 servos gives us 716 bytes per servo. Now AX dynamixels have 10-bit positional encoders, so we're going to have to store the positional data in a 2-byte integer, so 716 / 2 gives us a total of 358 positions.

Now you've got to decide how long you want to stretch those positions. For butter smooth recording and movements, you want somewhere around 50ms between reads. and 50ms * 358 positions gives you 17,900 milliseconds, or 17.9 seconds of pose time - not a whole lot. i've found that 100ms (10 reads per second) works fairly smoothly and doubles your time to 35.8 seconds. If you don't mind some jerkiness, you could go up to 500ms for 179 seconds! But you're also bound to miss some positional data.

now of course there's ways to expand your memory. You've got another 1k of EEPROM, or you can use an external EEPROM module or other memory module. I'm also looking into using an SD card logger to handle the data and make it easy to get to your computer.

Or you could ditch the ATMega 644p for a Teensy 3.2 with 64k of ram - with that much ram you could pose a 20-servo HR-OS1 at 20hz for 161 seconds!

The code can be found here as part of the before mentioned repository. The code is a work in progress and needs some tweaking before using other robots, so drop me a line before you use it. You'll need 2 buttons (record on DIO3, play on DIO4), a buzzer on DIO2 and an analog sensor on A0 if you want to manually control a gripper. SERVOCOUNT defines your number of servos and READ_INTERVAL is that timed interval I mentioned before.

Here are some things I'm working on to make it ready for general consumption:

  • Better gripper options for other arms
  • Locking/unlocking options
  • Removing duplicate pose data (but possibly recording pause data and allowing for a headband of the 'same' pose)

And some things I'm pondering for the future

  • Bit-shifting to use even more memory
  • Low resolution option (double your pose time)
  • EEPROM writes
  • SD card writes

Tiny Arduino

Read more: Tiny Arduino

You know me, I'm not powered by pure whimsy like some people. But I do really enjoy making things small (as evident by my quest for a Tiny Hexapod. So now I've got this crazy idea about making a tiny Arduino. Not an Arduino Mini or a Tinyduino, but a Tiny, to scale arduino.

Of course this is a bit impractical. There's no real benefit of having a smaller scaled Arduino, at lease in the prototyping sense, but it could be fun, so that's enough for me. So for a basis, I'm thinking that I could use 2mm headers instead of 2.54 mm headers .2 .54mm headers are used on a lot of standard prototyping hardware, since it's .1 inch - so everything from breadboards to components use this. 2mm tends to be for a little smaller stuff lie XBees. So just from the headers I've got a 22% size reduction - see the image for a mockup. That puts the total board length at 2.1 inches. If I cut off a little here and there, I could probably get it down to 2 inches. But can I get it smaller?

Digikey has these headers that are 1.27mm pitch - half the size! a Tiny 1.54 inch Arduino would be crazy. But at that point, do I actually have enough room to get all of the electronics on the board? I mean I can't just 'shrink' the circuitry like I did in the mock-up. I have a couple of things on my size (small surface mount chips, smaller usb, the fact that there's a lot of 'empty' room on the Uno) but it's still going to take some work. Not to mention finding eagle parts for those tiny connectors and making sure I can get them in smaller quantities, as they're somewhat less common.

My mom has a STEAM workshop next month, I'm thinking these could be cool badges. at 2 inches across, it's a little more reasonable to use them as actual Arduinos, at 1.54 it might be hard to find the right size pins to connect.

Really, I just need to spend some time in my PCB software, Eagle, and see how compact I can comfortably make the board, then pick my pins from there. Based on the Arduino mini and pro mini, I think I can get pretty small. I figure I'll go with a USB micro connector to keep things small. I might need to lose the ISP connector and just use wires to the side headers for programming the bootloader, but I'm not sure.

More importantly, what will I call it?

Display Tool

I had a busy (and awesome) weekend, but I didn't have quite as much finished product as I'd like.

I did some work on my LED display, but nothing too intresting (put in a decade counter for a row driver, did some testing, etc.). I did write a tiny PHP Grid to Array Tool to help me generate some arrays. Just check the boxes for 'on' pixels, and get an array out. The tool is pretty basic, but it wouldn't be hard to put in a custom row/column count. Image to array would be nice, or font to array If I could make it scale correctly.

Meanwhile Kat is kicking ass and taking names. She's been pushing herself really hard, and making me look bad. So this week I need to think about how I can step up my game...we shall see.


For Christmas my sister got me a bag of Sugru. It's a silicon/rubber clay like substance that you can mold like clay. You can mold it to fit just about anything, and it sticks to a variety of surfaces. You can mold it to fix, create, or decorate. Once molded, you leave the sugru cure for 24 hours or so, and you have an awesomely fixed/made object.

Sugru Project 1

Read more:  Sugru!

One of my favorite things to do with Sugru so far is attach magnets to things. I've attached magnets to my speaker pod, plastic eyes, and my favorite - a flashlight.

My Leatherman S3 is probably my favorite flashlight. However there's plenty of times when I need to hold it in my mouth or precariously balance it on some nearby object. Well, not any more! The rare earth magnet is strong enough to hold my flashlight to any magnetic surface. I also like that I can attach my flashlight to my coat via the plates that I put in my coat last month.

Read more: Sugru!

Vintage Handset Bluetooth Mod

Read more:   Vintage Handset Bluetooth Mod

The idea for this project is pretty straight forward - put a small bluetooth headset into an antique phone headset.

After scrounging the local antqiue dealers. I came across a great candelsitck headset. It was in fairly good condition (some chips on the ceramic parts, but surprinigly no rust) and it even had an external button!

Read more: Vintage Handset Bluetooth Mod