Monday, August 16, 2010

Technical Difficulties

I popped onto the blog this evening on a whim and after I got over my shock at how long it had been since my last post I noticed that about 10 photos were missing from my last few Interactive Exhibit Design posts. At first I thought I was dealing with an issue Blogger was experiencing over the spring and into the summer but it turned out instead that I was suffering from the way I had initially uploaded the photos. I write most of my blogs in Pages or Word and then copy and paste them into the compose window. In the case of the two blogs that were missing photos I had imported the photos directly into my Pages document instead of into blogger and as a result those photos disappeared. I'm not exactly sure when it happened but it must have been relatively soon after I published the blog.

So all 13 of you must be desperately wondering why I disappeared along with my photos this past summer. Oh, who am I kidding, most of you know exactly what I was doing because you were too. As part of our MA Public History students at UWO have to complete a 12 week internship. From May 17th, until August 10th I was completing mine with The Promised Land Project at Huron University College. With my classmate Shelagh Staunton I planned and executed the oral history component of the project. I'm hoping to follow with a blog about that experience in the near future as well as a few more that I've had up my sleeve but just not had time to finalize and publish.

Wednesday, May 5, 2010

Adventures with the EM406a GPS

I was going through my files and realized I never posted this series of videos that I shot while working with the EM406a Paralax GPS.




















The two codes that I talk about throughout are here:


Paralax Code:
/*
 Example code for connecting a Parallax GPS module to the Arduino
 Igor Gonzlez Martn. 05-04-2007
 English translation by djmatic 19-05-2007
 Listen for the $GPRMC string and extract the GPS location data from this.
 Display the result in the Arduino's serial monitor.
 */ 
 #include
 #include
 int ledPin = 13;                  // LED test pin
 int rxPin = 0;                    // RX PIN 
 int txPin = 1;                    // TX TX
 int byteGPS=-1;
 char linea[300] = "";
 char comandoGPR[7] = "$GPRMC";
 int cont=0;
 int bien=0;
 int conta=0;
 int indices[13];
 void setup() {
   pinMode(ledPin, OUTPUT);       // Initialize LED pin
   pinMode(rxPin, INPUT);
   pinMode(txPin, OUTPUT);
   Serial.begin(4800);
   for (int i=0;i<300;i++){       // Initialize a buffer for received data
     linea[i]=' ';
   }   
 }
 void loop() {
   digitalWrite(ledPin, HIGH);
   byteGPS=Serial.read();         // Read a byte of the serial port
   if (byteGPS == -1) {           // See if the port is empty yet
     delay(100); 
   } else {
     linea[conta]=byteGPS;        // If there is serial port data, it is put in the buffer
     conta++;                      
     Serial.print(byteGPS, BYTE); 
     if (byteGPS==13){            // If the received byte is = to 13, end of transmission
       digitalWrite(ledPin, LOW); 
       cont=0;
       bien=0;
       for (int i=1;i<7;i++){     // Verifies if the received command starts with $GPR
         if (linea[i]==comandoGPR[i-1]){
           bien++;
         }
       }
       if(bien==6){               // If yes, continue and process the data
         for (int i=0;i<300;i++){
           if (linea[i]==','){    // check for the position of the  "," separator
             indices[cont]=i;
             cont++;
           }
           if (linea[i]=='*'){    // ... and the "*"
             indices[12]=i;
             cont++;
           }
         }
         Serial.println("");      // ... and write to the serial port
         Serial.println("");
         Serial.println("---------------");
         for (int i=0;i<12;i++){
           switch(i){
             case 0 :Serial.print("Time in UTC (HhMmSs): ");break;
             case 1 :Serial.print("Status (A=OK,V=KO): ");break;
             case 2 :Serial.print("Latitude: ");break;
             case 3 :Serial.print("Direction (N/S): ");break;
             case 4 :Serial.print("Longitude: ");break;
             case 5 :Serial.print("Direction (E/W): ");break;
             case 6 :Serial.print("Velocity in knots: ");break;
             case 7 :Serial.print("Heading in degrees: ");break;
             case 8 :Serial.print("Date UTC (DdMmAa): ");break;
             case 9 :Serial.print("Magnetic degrees: ");break;
             case 10 :Serial.print("(E/W): ");break;
             case 11 :Serial.print("Mode: ");break;
             case 12 :Serial.print("Checksum: ");break;
           }
           for (int j=indices[i];j<(indices[i+1]-1);j++){
             Serial.print(linea[j+1]); 
           }
           Serial.println("");
         }
         Serial.println("---------------");
       }
       conta=0;                    // Reset the buffer
       for (int i=0;i<300;i++){    //  
         linea[i]=' ';             
       }                 
     }
   }
 }

Arduino Forums Code

//Created August 15 2006
//Heather Dewey-Hagborg
//reworked to GPS reader
//Dirk, december 2006
#include
#include
#define bit9600Delay 84
#define halfBit9600Delay 42
#define bit4800Delay 188
#define halfBit4800Delay 94
byte rx = 6;
byte tx = 7;
byte SWval;
char dataformat[7] = "$GPRMC";
char messageline[80] = "";
int i= 0;
void setup() {
  pinMode(rx,INPUT);
  pinMode(tx,OUTPUT);
  digitalWrite(tx,HIGH);
  digitalWrite(13,HIGH); //turn on debugging LED
  SWprint('h');  //debugging hello
  SWprint('i');
  SWprint(10); //carriage return
  Serial.begin(9600);
}
void SWprint(int data)
{
  byte mask;
  //startbit
  digitalWrite(tx,LOW);
  delayMicroseconds(bit4800Delay);
  for (mask = 0x01; mask>0; mask <<= 1) {
    if (data & mask){ // choose bit
digitalWrite(tx,HIGH); // send 1
    }
    else{
digitalWrite(tx,LOW); // send 0
    }
    delayMicroseconds(bit4800Delay);
  }
  //stop bit
  digitalWrite(tx, HIGH);
  delayMicroseconds(bit4800Delay);
}
char SWread()
{
  byte val = 0;
  while (digitalRead(rx));
  //wait for start bit
  if (digitalRead(rx) == LOW) {
    delayMicroseconds(halfBit4800Delay);
    for (int offset = 0; offset < 8; offset++) {
delayMicroseconds(bit4800Delay);
val |= digitalRead(rx) << offset;
    }
    //wait for stop bit + extra
    delayMicroseconds(bit4800Delay);
    delayMicroseconds(bit4800Delay);
    return val;
  }
}
void char2string()
{
  i = 0;
  messageline[0] = SWread();
  if (messageline[0] == 36) //string starts with $
  {
    i++;
    messageline[i] = SWread();
    while(messageline[i] != 13 & i<80) //carriage return or max size
    {
i++;
messageline[i] = SWread();
    }
    messageline[i+1] = 0; //make end to string
  }
}
void loop()
{
  digitalWrite(13,HIGH);
 //only print string with the right dataformat
  char2string();
  if (strncmp(messageline, dataformat, 6) == 0 & i>4)
  {
    for (int i=0;i
    {
Serial.print(messageline[i], BYTE);
    }
  }
  //Serial.print(SWread(),BYTE); //use this to get all GPS output, comment out from char2string till here
}

This Blog was also invaluable! Many Thanks!
http://upuptothesky.blogspot.com/2009/04/gps-module-up-and-running.html

Friday, April 16, 2010

Look Ma! I'm on iTunes!

I woke up this morning to an email from the iTunes store. That wouldn't necessarily be an unusual thing I make it my habit to download any songs they have free on a weekly basis and lately I've been "buying" a lot of free apps. Today's email however was a little different, The Interactive Exhibit Design Podcast has been reviewed and is now on iTunes! I'm not sure what I'm more excited about, the fact that its there or the fact that I can now vanity search on the iTunes Store!

You can go see it at the following link!

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=368031289 



Thursday, April 15, 2010

Podcasting Revisited!

Podcasting Revisited
A few days ago I finally posted my blog about getting ready to podcast and I thought I’d revisit it now that I’ve proceeded into the editing and posting portion of the activity. This is the stuff that happens before a podcast can be posted to a website or submitted to iTunes and its what most casual podcast listeners know the least about. Until very recently I was just like all those casual listeners. My background is oral history, I knew plenty about recording, transcribing, and storing interviews but absolutely nothing about putting them on the web. 
So, I started where most people have started since early on in the decade. I opened up my Safari browser and typed “submitting podcasts to itunes” into the google search box.  I got 1,790,000 results in 0.24 seconds. Conveniently the first one was Apple - iTunes - Podcasts - Making a Podcast. Unfortunately, as I scrolled down the page and started reading it got scary.
I started panicking at number 3. I knew what xml was (sort of) and I knew what an RSS was but I had no idea what they were talking about. Thankfully, most people don’t and so blogger and google have apparently made it easy. I have yet to actually use their tools, so I’ll get back to that in a little later.
The first thing, however, that any new podcaster should know is you are responsible for hosting your podcast. Thankfully, there are a few free options out there, but its important to recognize that they can be severely limited. For example, PodOmatic has a free service but it is limited to 500mb of storage and 15g of bandwidth per month. Keep in mind that 500mb is not that much data- roughly half a gig. In a world where we are rapidly filling the 160g + hard drives that come standard on our computers it just isn’t much. To better illustrate I clicked on a random mp3 in my iTunes library. A 4 minute and 17 second song with a bit rate of 192kbs and a sample rate of 44.100GHz is 5.9mb. Assuming my podcast is of a similar quality the longest episode is currently around 17minutes if I bring out my cross multiplication skills we get: 11.52mb. I know it doesn’t look like much but thats 2.3 percent of my total storage meaning I can only have approximately 43 podcasts of a similar size. Now lets consider bandwidth. If you only have one 11.52mb file on your 15g bandwidth account and 50 people download it thats 576mb of data, approximately 3.3% of your monthly allotment. Lets say however that you are an overnight star and suddenly you have thousands of downloads much as podcasts like Diggnation and Tekzilla do. I couldn’t find exact figures but lets say that 5000 people download it you’ve suddenly used 56.25 gb. Now lets say you have hosted your full 500mb - you’ll run out of bandwidth in almost no time at all. Obviously this is not a good solution if you plan on a) being extremely prolific, or b) extremely popular. 
Thankfully, for those of us with no idea how popular or unpopular our podcasts will be and a vested interest in keeping what little money we have there is at least one free option with unlimited storage and unlimited bandwidth. That is: archive.org. You can access this option either directly through archive.org or through ourmedia.org. Both options allow you to determine what copyright you’d like to have on your podcast when you upload. I honestly have yet to figure out what exactly the downside is to hosting with archive.org. There must be one or far fewer people would go with paid services like godaddy.com, hipcast, or PodOmatic Pro. For my purposes however, and despite the disturbing lack of a downside, using archive.org and creative commons licensing makes far more sense. In fact I recently discovered that one of my favourite podcasts Ladies of Leet is hosted on archive.org!
At this point, for my purposes I could be done. I could write blog posts, post the link to the served file and call it a day, but I got it into my head that I’d like to try submitting it to iTunes. This brings us back to my panic at the beginning of this blog in order to submit to iTunes your blog needs to be saved in RSS 2.0, a form of xml, and must contain some very specific iTunes tags. The issue: I wouldn’t know how to access the xml if my life depended on it and the best I could do if I managed is copying and pasting the tags conveniently provided to me by my copy of podcasting for dummies and hoping I’d placed them correctly. Sadly, the reality is I could probably figure it out but even after two semesters of just trying things my initial reaction is still to assume I can;t  do it. Conveniently though, you can use FeedBurner and SmartCast to create iTunes ready podcasts. 
In order to create a FeedBurner feed with your podcast, navigate to feedburner.google.com. I’ve already claimed my feed so I see this:

From there put the link to your blog in the field, click the I am a podcaster checkbox a box and click next. From there if you follow FeedBurner’s directions you’ll automatically get a FeedBurner feed and they’ll apply SmartCast to your feed. The last step is to go back into Blogger click the settings link under the appropriate blog. In my case I have two so I had to make sure I was changing the settings for my Interactive Exhibit Design Podcast Blog.

First go to the formatting tab. Under formatting scroll down to “Show Link Fields” use the drop down menu to select “Yes”

Next go to the “Site Feeds” tab. Under site feeds enter your FeedBurner feed in the field(you’re given this at the end of the FeedBurner process - if you forgot to note it you can see it by clicking on your feed on the main page then clicking the Edit Feed Details link). Give it about 24 hours after you do this and then check your rss feed. You can use feedvalidator.org or subscribe to it using an RSS reader like NetNewsWire. If you’re able to subscribe to the RSS and you see something resembling whats below. You’re golden.

So, when you see something like this, its time to submit your RSS to iTunes. To do this you’ll need to have an iTunes account. Open up your iTunes and go to the iTunes Store. Once you’ve loaded the iTunes store click the podcast tab at the top of the home screen. Once this page loads you’ll be looking at the main Podcast page, on the right side of the screen there will be a menu that reads Podcast Quick Links, the second last link is “Submit a Podcast.”

Click this link and you’ll see the following: 

Enter the RSS feed link into the field and click continue. At this point if it worked you’ll see something like this:

If the details are correct then you’re good to go and you can click submit. The iTunes store will ask you to confirm your submission by logging onto your account and once you have you should receive a confirmation email. At that point all thats left to do is wait, your podcast is in iTunes digital hands and they’ll have to decide if your podcast is appropriate etc. Mine hasn’t been approved yet but since I just submitted it this morning thats to be expected. My research says it usually takes 48-72 hours.  Hopefully in 48-72 hours I’ll be adding my iTunes Store link to this post!

Whatever became of the emailing cat water dish?


As all thirteen of my readers know, back in February I had an obsession. I wanted desperately to get my cats’ water dish to email me when it was low on water. This obsession came legitimately, over the winter this year our apartment was so warm all the time that sometimes it felt like the water dish was empty well before the cats could possibly have consumed as much water as the darn thing held and in a busy world it would get neglected. Don’t get me wrong, I’m certainly not the best cat parent but it never went dry. Our cats use a Catit Fresh & Clear; Clear water fountain. It has a two liter capacity and it pumps water through a foam filter, up over a dome to keep the water aerated, cool, and clean of debris. Yes, I know my cats are spoiled. I’d just like to mention that they came that way - as kittens they refused to drink standing water. As it was the middle of July and as far we could tell the stubborn little animals had hardly had any water at all we decided it was best to concede to their wishes and purchase a water fountain. The major issue with every fountain we’ve had however is that the well is obscured. You can’t tell by looking at them how much water is in it. Hence the obsession.
So, whatever happened to the obsession? The same thing that happened to most of my projects in IED this year. The rest of my life happened, procrastination happened, and more than anything barking up the wrong tree happened. Early in the project while I was discussing the emailing cat dish idea with my father he suggested that I use a laser sensor, much like they do in the Bedford Institute of Oceanography’s fish lab (his former workplace). In the case of the fish lab they use the laser sensor to set off an alarm if tank levels get too high. A red laser beam extends across the top of the tank to a sensor and if the circuit is broken by rising water levels an alarm sounds. Don’t get me wrong this is a great idea but the major issue is one of applying the system on a much smaller project. The fish labs tanks are huge, easily 1000x bigger than my cats tiny 2L water dish and the technology that I could find, in particular the waterproof technology I could find was much too big. A depth sensor designed to measure depths of 0-13’ was way too big. The probe itself was almost a foot long. Most of the lasers I could find were easily themselves about 5cm long which in a well that is only 17cm across and obscured by a tube could make things difficult. 
I brought this problem up in class and Dr. Turkel brought up the idea of using force-sensing resistors. I thought it was a great idea, I just needed to make sure that the dish actually touches the ground so that resistors could be installed. Somewhere between that class and now however the cat dish drifted out of my scope. Maybe it was because my marking assignment arrived on my desk or because we ordered a waveshield for another project, it might also be because I got distracted researching podcasting but the cat dish drifted out of my consciousness. It did however reappear when I started working with Google SketchUp. I realized I hadn’t really made any progress with the cat dish and decided to try to make a 3D representation of it with SketchUp. What follows are the results of those attempts. I still have not gotten it perfect but I’ll add some pictures of the dish so you can see why and whats missing. At the moment I’ve concentrated on the outside, all my attempts on the inside have been fraught with annoyances and embarassing exclamations of “Ooooh, why did you do that?!?” in class. 

My first attempt at the cat dish with SketchUP. I still haven’t figured out how the circle got all of those sides but my attempts at a dome ended in a many sided dome shape.

The same thing happened with the next example. Here you can see that I was operating off of my memory of the dish and I’ve added an angled in edge that I don’t think is actually there on further examination. As you can see this one also fell victim to the many sided dome problem.

This is my first attempt where the dome actually worked. I’m still unsure why exactly the edges ended up many sided again but you can see that I was trying to bring in the angled edge after a closer look at the dish.

This was my attempt later that same night with the cat dish in front of me. Its not actually that bad. Its missing a few details. The column containing the power cord and the fact that the edge is actually one intact piece including the dome connected by ribs but in my opinion overall not a bad effort with SketchUp.

What the cat dish actually looks like:


I decided just for the sake of completion to have a look at what I could have done with this dish. Maybe I’ll set a summer goal of getting this working. Watch for it! Probably one of the best examples I’ve been able to find for how I could get this working is Project 4 in Tom Igoe’s Making Things Talk: the networked cat. In the example Igoe uses force sensitive resistors to tell a webcam to take a picture and put it on the internet, he also has Processing email him when the cat sits on its bed. He fabricated a mat to go underneath his cat’s bed including those resistors. In order to adapt this for the cat dish I would have to adapt it to the exact size of the dish and I would probably try to encase the whole thing in something waterproof. I think just a simple cover of clear plastic would be fine. Then Igoe tested it using the following Arduino testing code available for download here or viewable at google books.

Next Igoe connects it and creates a graph. Up to that point would for the most part use the same code as Igoe, it works, theres no point in changing it. What I would need to change, however, would be how the cat dish connects to a computer and the internet, I don’t know about you but leaving my computer in the vicinity of my cat’s dish isnt something I’m really excited about doing. Among other things, I like to use it. I could however connect something like a wifi shield or an xbee radio shield and use it to talk to processing from another room. Igoe uses an int Threshold function to tell Processing when to email him about the cat. Processing emails when a number greater than Igoes threshold is reached then samples again a few minutes later. I would need to play with the threshold. At the testing stage I’d check and record what the numbers look like when the dish is full and what they look like when it is “not full”. I could then determine what my threshold would be and could play with the numbers. In Igoe’s case he sets his “int threshold = 320” this means that whenever the sensors register a number higher than 320 they will send an email. In my case, if, for example, the number when the dish is no longer full is 200, that would  become my threshold. I would also need to change the void sendMail function, the if functions here would need to be adapted, as I mentioned above, I’m not the greatest cat parent. There is a good chance even with an email notification the cat dish would stay “not full” for awhile. I’d need to make sure that the delay was sufficient that I didn’t have an inbox full of “cat dish empty” emails. Though, given with my iPhone I now take my email everywhere it would most likely be an extremely effective tool.
So, unfortunately, its April and I don’t have a networked cat dish to show you but maybe I’ll be able to post one by the end of the summer. I’m definitely buying myself a copy of making things talk. I haven’t been overly successful with my Arduino and Processing projects but I am thoroughly interested and fully intend to get better at this.

Wednesday, April 14, 2010

Interactive Exhibit Design Podcast!

I've created a new blog to host my Interactive Exhibit Design podcast. The posts are still a work in progress but all of the files have been linked. Next to get them uploaded to iTunes!

So, fellow IED-ers go have a listen to yourself at the Interactive Exhibit Design Podcast!

Also, I'd love it if you followed me or linked your interviews in your own podcasts.

Saturday, April 10, 2010

Creating a Podcast or My Introduction to the H4 Handy Recorder by Zoom

On March 17th, I started writing the following blog post. At the time I was sitting on the couch in the NiCHE room on the first floor of the Social Science Centre at UWO like I have almost every Wednesday afternoon since January. I had just retrieved a box containing the H4 Handy Recorder, its various cords, power adapters, and a rather large navy blue and white manual. I was completely convinced that I needed to know all of the ins and outs of the recorder in order to do a good job recording and totally overwhelmed by that glued together mound of paper. The following passage is what came of that:
  As part of one of my interactive exhibit design projects I’m learning how to record a podcast. Specifically, how to record a podcast with the H4 Handy Recorder from Zoom. I think its going to be a lot of fun- once I finally get there. At the moment, however, I’ve barely hit page 12 of the manual and I’ve already encountered a concept that Zoom seems to think I should understand but I’ve never heard of. 
What on earth is the difference between on-mic and off-mic recording? As far as I can tell from the diagram I’ve been given it might be the difference between recording one instrument instead of the whole band. Another option is that it is the difference between recording instruments that are mic-ed or amped over acoustic. One way or the other I figure we’ll be recording our interviews between 30-50 cm from the mic. Next step, making sure it actually sounds good. The H4 Handy Recorder has A LOT of options. On the front there are the track buttons. Apparently this thing can record up to four tracks at a time and this would allow me to interact with the tracks on the recorder. I’m assuming this is to change the recording properties on each track though who knows I might correct myself before the end of this class. One way or the other I don’t need multitrack recording, so, its interesting but totally beyond my scope. There are also several indicator lights and a menu button with playback controls. For me, this may be all I need to worry about. I’m a little concerned however about the jog dial and the three gain switches.  I need to check what exactly mic gain is. On a positive note, it doesn’t matter what it is as long as I follow Zoom’s suggestion that I adjust gain so that the display reads just below zero. I’m assuming this means that the input will be loud enough.
There is an almost funny feeling of panic through that. I guess I was feeling a bit of pressure. I’d just scheduled my six classmates into 30 minute interview slots starting the following Friday and I didn’t know exactly what I was doing. 
Thankfully, recording my podcast was one of the easiest things I’ve done in awhile. Part of the ease I think came from the fact that my MacBook Pro comes, like most do, with iLife and GarageBand preinstalled and earlier in the semester I decided I wanted a section of the Fraggle Rock theme for my ringtone so I’d played a bit and was generally familiar with the program. The Handy Recorder is designed to not only function as a portable/handheld recorder but also it can be connected as a peripheral mic to a computer using a Digital Audio Workstation like GarageBand. Later on the evening of the 17th I was able to figure out how to connect the recorder to my computer by browsing the manual for a minute or two (its on page 80 if you’re looking) and then through trial and error managed to figure out how to use it with GarageBand. Over the course of the next week or so I recorded interviews ranging from nine to seventeen minutes long which I’m hoping to put up on my website after I’ve edited them- written a jingle (if I’m feeling creative though thats unlikely to happen this late in the semester) and added my own brief introduction to them. I’ll post as soon as they’re available.