Welcome to Robot Dialogs. This is a place where I will record my progress, mistakes, errors, failures, lessons learned and hopefully occasional success in my designs and implementations of robots and other technical endeavors. I will try to make it as educational, informative and entertaining as I can...

Saturday, December 18, 2010

Happy Holidays! --- Celtic Knot Coasters

Time for another post not about robots... Most projects are on the back burner because I've been poking about with an Ubuntu Server, Drupal and CiviCRM for CCCKC.

I decided to make some coasters as a gift a family member.

I went to Michaels to pick up the wood circle blanks, and Hobby Lobby had 4 inch cork coasters.


I used one coat of stain before using the method I've described here to do the knot designs. This coat keeps the Sharpie ink from bleeding too much. When the designs were done I used 2 more coats of the stain and glued the wood disks to the cork coasters.

Pictures taken with my EVO and the Droid Tripod Mount (yes it works with the EVO too!).

I'm still on the fence about the Gorilla Glue. Hopefully it holds...I'm not sure I used enough. I tested one of them overnight with a puddle of water on the stained surface and it seemed to be sufficiently water proof.

Monday, August 30, 2010

Kansas City Mini Maker Faire 2010 - Another Video

Another video made by an attendee. Better than the news spot if you ask me :)

Thursday, August 26, 2010

Kansas City Mini Maker Faire 2010

The Maker Faire has come and gone and was a pretty big success. We had a news crew in the morning and then a whole slew of people showed up. I had the RC Nerf Turret and other robots on display. It was a long day with a lot of interested people and a ton of kids. The turret got most of the face time, even got on the news and a mention on the Make Magazine blog.


There's a bunch of pictures here and here. I bought a LoL Sheild and Diavolino and got it up and running this week. I'm pausing progress on the Gameboy project so I can fix and upgrade the software in the turret before I take it into the office.

Note to anyone reading: We are going to have another Maker Faire next year. We don't know if it will be mini or full sized. It all depends on how many exhibitors we get...but...WE NEED MORE ARTISTS. A Maker Faire shouldn't be confused with science fairs (which this one was...far too often for our liking). So carpenters, welders, sculptors, photographers, new media folks, graphic designers, and anyone else who is more comfortable with a brush than they are with bytes we NEED you next year.

Wednesday, August 4, 2010

GameBoy (Classic) Work In Progress Part 3

First: The Open Logic Sniffer is the best thing since sliced bread.

Second: I finally have reliable recorded data from the GB CPU to the GB LCD.


Okay so before making sense of the data here's what you need to know. I clocked the GameBoy CPU with my own micro-controller the resulting GameBoy CPU Frequency was 812 kHz. That's 24.63 times slower than normal (20 MHz), so all of the data collected needs to be time scaled appropriately.

The data was collected on Pins 12-19 of the ribbon cable between the CPU board and the LCD board (See previous post for pin numbering and pin names, some of which are guessed). These pins correspond to inputs 0-7 on the logic analyzer respectively (see labels on image above if you're confused).

Two of the data sets were sampled at 10MHz and one at 1MHz. The 1MHz set was only taken for timing of the Vblank (it isn't a high enough sample rate to be considered accurate for data analysis).

I won't be drawing conclusions about the data just yet, for now I just want to make it available.

To get the data go here: GB Data 2.zip I'd be happy to collect more, just leave a comment.

To view the data go to The Gadget Factory and get the JAVA Client. It's Free. Run the executable (it doesn't install, it just runs a JAVA program) and then open one of the ".sla" files.

It's too late to code it up tonight, and I'm building a new PC tomorrow so hopefully this weekend I can get it working.

As a side note, I am really pleased with the Logic Sniffer. I had it out of the box, firmware updated, and got this data collected in less than an hour. I highly recommend that you consider getting one.

Wednesday, July 28, 2010

MakeKC: Mini Maker Faire

So I'll be participating in my first (Mini) Maker Faire next month. I'll have most of the projects from previous posts there with me on display. I don't know exactly where I'll be, probably get that email in the next few weeks. Should be some good projects out there.

In the time between now and the fair I'll be working feverishly to finish my GameBoy project. The idea has picked up some new traffic in the previous post's comments and on the forums so I've got some new data and help in that respect. New data is below and I've ordered a logic analyzer so I can get even better info.
1 Frame of GB LCD Data

More Data

Friday, July 2, 2010

Week 4 of 30 Days of Creativity

Well that's all of that...hopefully in a couple weeks I'll be able to get to work on some of my more relevant projects.

Day 25: Desk
Day 25: Desk (Front View)Day 25: Desk (Top View)
Day 25
Day 26: Lemons
Day 26
Day 27: Office Space
Day 27*
Day 29: The Lonely People
Day 29* (Beatles Reference)
Day 30: Celtic Knot Tutorial
Day 30*

*Featured on 30daysofcreativity.com

Wednesday, June 23, 2010

Day 23 + Week 3 of 30 Days of Creativity

Day 23:
#include <stdio.h>
//Have fun figuring it out :)
int main(){
   int i,j;
   int starts[] = {22,17,13,10,8,6,5,4,3,2,1,1,1,1,1,2,3,4,5,6,8,10,13,17,22};
   int stops[] = {33,38,42,46,48,46,43,41,39,36,33,31,29,31,33,36,39,41,43,46,48,46,42,38,33};

   for( i = 0; i < 25; i++ ){
      while(j++<50) (j<starts[i]||j>=stops[i])?printf(" "):printf("o");
      printf("\n"); j=0;
   }
   return 0;
}
Give Up?

The rest, through today:

Day 15: Floating Sprial Bookshelf StaircaseDay 16: Work in Progress
Day 16
Day 17: Infinity
Day 15Day 17
Day 18: Cartoon Gravity
Day 18*
Days 19-21 were used to chip away at a work in progress.
Day 22 : Logic Gates
Day 22

*Featured at 30daysofcreativity.com

Tuesday, June 1, 2010

Day 1 : 30 Days Of Creativity

Okay, to attempt to get out of the lull I've been in lately with no projects getting worked on, I've taken the plunged and joined the community of folks that have pledged to do something creative every day of the month of June. More on that can be found at 30 Days of Creativity. I highly recommend joining the movement, I do hope they find something better than twitter to deliver their highlighted articles though...140 characters isn't my favorite medium.

Part of the reason for my lull in projects is the fact that I've spent the last week or so organizing my giant collection of music, movies and documents. So really there's nothing to show of that except to myself...or so I thought.

As my first piece of creativity I bring you a snippet of one of the programs I used to organize my music collection. The creative bit is that I actually documented it and it's a very simple example of a programming concept called recursion. This program recursively checks directories for files that have numbers in their names. I've listed the code below (full code available at bottom). I hope that it is a good example of recursion and self documenting code for novices to understand. I'm not going to explain recursion, there are much better teachers on the web for that sort of thing.

Tiny back story: I'm really picky about file names in my music collection. I hate files that start with a track numbers or contain any other garbage characters.

You can easily see the usefulness if you consider how long it would take to manually navigate say 1000 folders each having 10 files...
/**
 * Simple recursive method that searches every file within the 
 * parent directory (and all sub-directories) for file names 
 * with numbers in them. 
 * 
 * @param parentDirectory The directory to check.
 */
private void checkChildrenForNumbers(File parentDirectory) {

//Get a list of this directory's children (file and folders inside it).
   File []  children = parentDirectory.listFiles();
   //Go through each child (in plain English "for every child in children")
   for(File child : children){
      //if this is another directory within the parent directory
      if(child.isDirectory()){
         //recursively check folder (this is the magic)
         checkChildrenForNumbers(child);
      }else{//child isn't a directory
         //check if there is a number in the file name
         if(containsNumber(child)){
            //open the parent folder so I can fix the file name.
            openParentFolder(parentDirectory);
            //stop this program while I fix it.
            waitForInput();
            //when I'm done fixing the file this will exit this method. 
            return;
         }
      }
   }
}
* If the code is all foobar'd here's a picture, and the full code is below. 
Obviously the goal of this code can be achieved by searching for numbers with the standard windows (or whatever OS) search mechanism. Again this is a simplified version, in the real version it can check for any garbage characters and has some improvements to limit files like "Mahler - Symphony No. 5 - Adagietto.mp3" from showing up as a false positive.

Full Source Code File: NumberedFileFinder.java

p.s. I'm not going to do a full post for each day of the month. Instead I will shoot a picture or something out on my Twitter and then make a recap post here each week. If I come up with something awesome (certainly more awesome than today's) I'll make a full post.

Sunday, May 30, 2010

Friday, May 21, 2010

Thesis: Change of Plans

Many of the people who are closest to me have seen the struggle I have had attempting to finish my master's thesis at RIT. Throughout the past year and a half I have pursued a research topic in the area of speech understanding. More on the basic approach I have researched is in this post. Unfortunately while I was still at RIT and in the process of choosing this topic my professional interests swayed away from the general area of expertise found in the Computer Engineering department at RIT. I began to take courses in robotics, machining and real-time systems and after several academic and personal projects, many of which can be found in other posts on this site, I found an area of expertise that satisfied my need for continued learning, flexible/interesting/changing work and the expression of creativity. In short: I love building robots.

As a result of this change (or perhaps a refining) of interests and the lack of mentor-ship and expertise at RIT my chosen thesis topic, while still valid, no longer held the appeal that it did in the beginning. At the same time I had finished all of the required course work for a Masters degree and without the excuse of course work had great need to enter the working world. And so recently I was faced with a difficult choice: attempt to get an extension from RIT to finish the research that had lost appeal to me or finish school with my bachelor's degree + a slew of graduate courses. I can say officially that I have chosen the latter.

With all of the reasoning mentioned above there is one reason above all that swayed the decision. It is a bit of advice that I myself gave (but took 2 years to heed): "Your thesis should be something you can be proud of. It should lead you into an area that you want to be involved with for the rest of your life." For me that area is robotics not speech recognition/understanding.

And so I stand, finally, officially graduated and certified with a Bachelors of Science from RIT. My plans at this point are typical: get a job I enjoy so as to begin a career I can be proud of, find a place that I want to live and in general to 'get a life'. Although this decision has lifted a great weight from my shoulders, I still have a great deal of work to do before I can claim that I am happy. For now I can only observe that I feel happier.

In the future I may still pursue a master's degree at another school. I know for certain that I will take classes at some point in the future simply because I do love school and learning and a career in technology demands continued education. As for my research in speech understanding I will probably finish (at least to some degree) the idea simply to prove the validity of it. But it has officially been demoted to side project status, and it may take some time for me to want to open that can of worms again.

Fortunately for my followers and readers this means more interesting and fun project updates than previously! Especially now that I can follow my passions and hobbies without feeling guilty. You can take my word that there are some very cool ideas on my ever growing project list.

Thursday, April 15, 2010

DIY Droid Tripod Mount

I've been tinkering about with making panoramic pictures lately and when I'm out and about my Droid is the only camera I have. But taking panorama quality pictures with it is pretty tough. So last night I whipped together a very simple tripod mount.


It's pretty self explanatory...here's what you need:
  • Wood, I used 3/8" pine from the scrap pile.
  • Small screws
  • Wood glue
  • Drill and bits (1/4" for standard tripod screw)
  • Saw (I prefer the small teeth of a hack saw for little stuff like this.)
  • Paint
I had some in progress pics but Windows ate them. Essentially the only part I measured accurately was the slot the droid slides into, other than that it was just eyeballed. Two small screws hold the upright pieces (wood glue also). I used some paint I had from a robot project. Tripod screw threads right into the wood. I spent nothing upfront on this project...I'd estimate cost around $1 of material and maybe 30 minutes time went into it.
It fits quite snugly. Some sanding before painting helps keep it from scratching the phone (some cloth might be a nice feature...). Its not great if you need to tilt, but a strategic rubber-band can solve that.

Now I can toss it in my glove box put the tripod in the trunk and any panoramic scenes I drive by will no longer be lost opportunities.

(Stitched w/ Hugin)

Thursday, March 25, 2010

GameBoy (Classic) Work In Progress Part 2

This is mostly just to get some pictures up. I'm just getting this posted so I can try and refocus on thesis...I should be so easily sidetracked... Any future developments will be posted in the forum first...I'll post here as facts become more concrete.

The farthest I got with this setup was a man-in-the-middle setup (as shown below) where I could intercept the CPU's commands to the LCD passing them through the microcontroller and then to the LCD board. I had to move up to a ~11MHz crystal (not shown) on the microcontroller just to come close to allowing the signals to pass through unhindered. The best I managed was a slightly distorted picture...I'll need something faster to actually read the signals so I can reverse engineer them. I've also removed the GameBoy's oscillator so I could clock the GB at a slower speed. This did work but I haven't taken a ton of time to work on the coding side.

The goal when I can work on it again is simply to replace the CPU PBC outright. I will keep the LCD, Voltage Converter and Audio Jack PCBs interfacing them with a newer microcontroller. This would allow all manner of interesting hacks...I could use it as a wireless remote for things, a desktop clock w/ USB, get some emulated or custom games running...endless possibilities. For now I have to put it in a box and try to forget it.

Test Setup
LCD PCB Front LCD PCB Back
CPU PCB Front CPU PCB Back
Breadboard Setup
Audio Jack Front Audio Jack Back Voltage Converter
Front
Voltage Converter
Back