TD Moose

All things moose, and, then some.
RSS icon Email icon Home icon
  • An airbag saved my life but scared the crap out of me

    Posted on November 16th, 2011 tdmoose 2 comments

    I’m not going to knock airbags. I’m convinced that the airbag in my car saved my life, allowing me to sit here and write this. What I hope to convey is some sense of what happens when an airbag deploys. It startled me. For a moment I thought my car was on fire. I contemplated abandoning my car and taking my chances with the oncoming traffic on the highway.

    totalled volvo

    Sitting at the Lehman's lot in South Minneapolis

    Here is my car after it was towed to the body shop. At first glance, it may not look that bad. but this is a Volvo XC70, a car built like a tank. I suppose the design and durability of the car deserve some credit for my survival as well, but I still hate to think what would have happened if I had hit my head on the steering column, as I most certainly would have without the airbag.

    The accident is a swirl of vague memories. I was driving on the highway, and a rain storm had just ended. The storm came quickly and dropped incredible amounts of rain in a short time. With little warning, I hit a patch of standing water and the car hydroplaned. I tried my best to steer the car, and for a moment, I almost felt like I had it under control. But then, the car went into a spin. I’m sure it went around at least one full time before slamming into the concrete barrier in the middle of the freeway.

    I don’t remember the airbag popping out. What I remember is seeing a flash, and then flames shooting from the dash. I heard a whooshing sound, and the passenger compartment filled with smoke. The car continued to spin and finally came to a rest in the left lane, facing the oncoming traffic.

    Still dazed, and watching the oncoming cars swerve to miss me, I began to wonder if the car was on fire and whether I should abandon it immediately. I looked for sign of fire coming through the dashboard, but didn’t see any. I was perplexed by this and didn’t know yet the source of the flames I saw. The smoke in the car was still thick, and I was coughing, but I began to think that I could take some time to wait for the traffic to slow (as congestion began to build up). I think that was the correct decision, as abandoning my car earlier in a panic could have put me in the path of an oncoming car.

    It took a while before I began to understand what happened. My right wrist had what I had at first thought to be a bruise, but later, while riding in the tow truck, the driver looked over and said, “looks like you got an airbag burn.” I said I thought it was a bruise but he seemed convinced it was a burn. He explained that air bags are inflated with, as he called it, rocket fuel, and that as the bag deflates, hot gases and smoke escape through small holes in the back.

    That started to make sense. I looked it up online, and sure enough the propellent for airbags is similar to the solid-fuel propellent used for model rockets. When an accident happens, a sensor ignites the propellent, and with luck the airbag is fully inflated by the time your face hits it. As your face presses forward, the gas escapes through a couple of quarter sized holes in the back. It’s not uncommon for the escaping gas, still hot, to cause burns.

    If you have ever watched a model rocket launch, the sounds and smells are very much the same. Thrilling to be sure when part of a rocket launch, but frightening during an accident, when you don’t understand what is going on. Oddly, just a couple days after the accident, I watched a movie that had a scene where airbags deployed in an accident. It was a comedy, and the bags popped out and deflated, and everyone was stunned but OK. At least that part was accurate. But the air in the passenger compartment was pristine. Nobody was coughing. Nobody got burned. Nobody ran from the car as though it were on fire.

    I don’t think I’ve ever seen a depiction of an airbag deployment that matched what I remember. Up until shortly after my accident, I thought airbags inflated with compressed air. Now I know better. I hope that by sharing this, I can help spare someone else the anxiety and fear I felt because I was unprepared.

  • Arduino controlled LED matrix

    Posted on June 11th, 2011 tdmoose No comments

    Being bored one Winter day, I soldered some LEDs onto small circular breadboard.

    5 x 5 LED MatrixHere is what the matrix looks like. The anodes of  LEDs were wired in rows and the cathodes in columns. Thus, to turn on an LED, the proper row and column had to be set to high and low voltages. The next task was to hook this up to an Arduino board and create messages by flashing one character at a time. I drew out the characters on paper and then created binary numbers where the digit ’1′ represented an illuminated LED and ’0′ one that was turned off. A full character would look something like this.

    ‘B00100′

    ‘B01010′

    ‘B11111′

    ‘B10001′

    ‘B10001′

    In this case, this is the letter ‘A.’

    /*
    *
    * ABCs – Flash a message by displaying one character at a time on a 5 x 5 LED matrix.
    *
    * Designed for a homebrew LED matrix. LED cathodes are tied together in horizontal rows.
    * Anodes are tied together in vertical columns.
    *
    */

    #define numChars 3 // How many character patterns defined.
    #define numMsgChars 3 // How many characters in the message.

    // The ledDuration and dispCharRepeat control the total time a character is displayed.
    // Up to a point, increasing the ledDuration makes the display brighter.
    // The tradeoff is more flicker. Adjust both to get a suitable duration with acceptable flicker.
    #define rowDuration 750 // How many microseconds to keep a row of LEDs lit.
    #define dispCharRepeat 100 // Loop counter for number of times to loop through character display.

    #define msgDelay 3000 // How many milliseconds to delay before repeating message.

    // Each row of bytes are the LED patterns for each row. Digit ’1′ indicates the LED is on; ’0,’ off.
    // Left to right corresponds to top to bottom.
    // Here is the character ‘A,’ for example.
    //
    // row 0:  0 0 1 0 0
    // row 1:  0 1 0 1 0
    // row 2:  1 1 1 1 1  Squint hard enough, you might see the character pattern.
    // row 3:  1 0 0 0 1
    // row 4:  1 0 0 0 1
    byte pinData[numChars][5] = {
    {B00100,B01010,B11111,B10001,B10001}, // A
    {B11110,B10001,B11110,B10001,B11110}, // B
    {B01110,B10001,B10000,B10001,B01110}, // C
    };

    byte mask = B10000;
    int ledPin[5] = {7,6,5,4,3}; // Arduino pins assigned to cathodes.
    int rowPin[5] = {12,11,10,9,8}; // Arduino pins assigned to anodes.
    int dispChar[numMsgChars] = {0,1,2}; // Show the above character in this order.

    void setup()
    {
      int i;
      for(i=0;i<5;i++) // Loop through rowPin and ledPin to set modes and initial values to keep all LEDs off.
      {
        pinMode(ledPin[i], OUTPUT);
        pinMode(rowPin[i], OUTPUT);
        // Since these are LEDs, they will only glow when the rowPin is LOW and the ledPin is HIGH.
        // Start with every row and LED turned "off".
        digitalWrite(rowPin[i], HIGH);
        digitalWrite(ledPin[i], LOW);
      }
    }

    void loop()
    {
      int i; // Letter repetition counter.
      int dispCharNum; // Letter array counter.
      int pinVal;

      for(dispCharNum=0;dispCharNum<numMsgChars;dispCharNum++) // Loop through each character in the message.
      {
        for(i=0;i<dispCharRepeat;i++) // Display character for a while.
        {
          showLetter(dispCharNum);
        }
      }
      delay(msgDelay);
    }

    void showLetter(int dispCharNum) {
      int i; // LED position pin counter.
      int j; // LED row counter.
      int pinVal;

      for(j=0;j<5;j++) // for each row
      {
       
        for(i=0;i<5;i++) // Loop through each LED in the row.
        {
          pinVal = ((mask>>i) & pinData[dispChar[dispCharNum]][j]) ? HIGH : LOW; // Bit shift mask and bitwise AND to pinData.
          digitalWrite(ledPin[i], pinVal);  // if pinVal is 1, LED will be ON; if 0, OFF.
        }

        digitalWrite(rowPin[j], LOW);   // Set the rowPin to LOW so it can be the "ground" pin for the LED.    
        delayMicroseconds(rowDuration); // Keep the LED on long enough to be bright without flickering.
        digitalWrite(rowPin[j], HIGH);  // Set rowPin HIGH so it is no longer a ground pin.
       
        for(i=0;i<5;i++) // Loop through each LED in the row.
        {
          digitalWrite(ledPin[i], LOW); // Turn off the LED.
        }    
       
      }

    }

  • Web behaviors I’d like to see go away

    Posted on January 12th, 2011 tdmoose No comments
    Unboxing Sliders

    Unboxing Sliders

    I may be unleashing my inner Andy Rooney, but there are some Web behaviors that seem to have gone on too long. Here is my short list.

    Unboxing Videos

    By the time you get the boxed product home, I already know what it looks like, what it does, and how it works. I don’t need halting narration to tell me what I can see. If you really want me to watch, promise me that you will give me tips at the end on how to get rid of all the packing material.

    Machine-gun tweeting

    machine gun tweets

    machine gun tweets

    For example, tweeting constantly about the conference you are attending. I don’t care that “Joe Schlebotnik says all devices will be ‘massively media aware’ before the end of the decade. #expocon2010″

    Cut-and-paste Facebook memes

    Requests/demands to paste to my Facebook status. 90% of you won’t agree with this, but I’m counting on my friends to be among the 10% that do.

    Twitter #alternatemovietitles hash tags

    The first few were funny, but now that we’re down to #porn4aliens. . .

    Mystery links in Twitter

    Posting shortenened URLs with no context. Do you really think I’m going to click on the link in this tweet? “WTF? Check this out. bit.ch/dErpD3RP

  • My internal conflict regarding “The Social Network.”

    Posted on October 4th, 2010 tdmoose No comments

    I haven’t seen “The Social Network” , but, I plan to, despite negative assessments of its historical accuracy. Reviews of the movie seem to fall into one of two camps. Either it’s portrayed as a great story or as an inaccurate character assassination. I presume it’s possible to be both.

    The conflict stems from an old problem. Fiction takes liberty with the truth. If you’ve learned history from Shakespeare, for example, then much of what you believe may be wrong, distorted, or complete literary invention. Do I dismiss Macbeth, because it wrongly accuses Macbeth for murdering the King of Scotland in his sleep? Moving forward to more recently penned stories, do I shun the film Amadeus because there is little factual basis for the rivalry between Salieri and Mozart?

    I don’t, and so, I’m left to wonder, how do I make the distinction between unfair distortion and literary license. Is there one? Does it matter?

    I think it matters if a film is presented as as a documentary. In such a case, I think that is an imperative to disclose the sources of material, to check facts, and to present multiple points of view.

    The problem that I see, is the tendency of people to learn history from the movies, to take cinematic presentations at face value. Unfortunately, that problem is not likely to go away, and so, one could argue that even fictional portrayals should conform to at least minimal standards of accuracy. Another argument is that fictional portrayals of living people should adhere to a higher standard.

    The history of film is a sordid one. Films like “Birth of a Nation,” or “Triumph of the Will” challenge our ability to praise the art while ignoring the frightening messages behind them. For those unfamiliar with these films, the first is one that casts the Ku Klux Klan as heroes; the second, a propaganda film from which many iconic images of Hitler and Nazi Germany have been taken. Both are considered to be cinematic masterpieces.

    In such a context, I am willing to try to give “The Social Network” a fair viewing before dismissing it for reasons of inaccuracy.

  • Office vibration sensor.

    Posted on September 30th, 2010 tdmoose No comments

    The object was to create a sensor from common office objects. My first idea was to make a vibration sensor (great for detecting bosses with heavy footsteps or passing light rail trains). Here are some items that should be easy to find in any office.

    basic materials

    basic materials

    In just a few minutes, I came up with this. Not pretty, but effective.

    finished product

    finished product

    Best if used on something that wobbles at the slightest movement. That rickety shelving unit, perhaps?

  • Live from Gnomedex

    Posted on August 20th, 2010 tdmoose No comments

    The Moose is in Seattle now, recruiting sources for the Public Insight Network.

    Live Videos by Ustream

  • Posted on August 19th, 2010 tdmoose No comments
    Arriving in Seattle

    Arriving in Seattle

    Just getting into Seattle for the Gnomedex conference.  Should have just enough time to check in and head over the registration party. More later.

    Just noticed I’m wearing my Nerdery Overnight Website Challenge t-shirt. Really, I didn’t plan it that way.

  • Happy to have lost a night’s sleep

    Posted on March 22nd, 2010 tdmoose 3 comments

    We often work best under pressure and the things we accomplish under such conditions often make for the most enduring, meaningful memories.

    I spent over a full day working with 12 other teammates to create a new website for the non-profit organization, DesignWise Medical. In 24 hours we put together a site that, in my experience as a Web developer, could easily have taken weeks, if not months, to produce. Pending approval of some of the content, the site will be live within a week.

    The Challenge is a yearly event organized by Nerdery Interactive Labs. The goal is to match teams of developers and designers with non-profits eager to revamp, or start, their Web presence.

    The assembled nerds, or last most of them

    Our team, Full Court Press, was made up of 10 developers and designers, and 3 members from Designwise Medical. None of us had worked together previously, though many of us knew each other from the WordPress user group to which many us belong, or from other user groups.

    Throughout the following 24 plus hours, with little to no sleep, we worked together, each chipping in where we could to help others on our team. Arguments were few, and unless I was just not paying attention, never heated.

    We shared a cramped area defined by our square of four tables. A rat’s nest of cables and power cords in the center of the tables threatened to ensnare anyone who entered. As the hours wore on, and cans of Red Bull piled up, we went through waves of enthusiasm, slap-happiness, and flagging energy. The countdown clock, projected on two giant screens, constantly reminded us of the coming deadline of 9:00 AM.

    Some took cat naps in the sleeping room, or sought rejuvenation from the oxygen bar. Hours ticked by in what seemed like minutes. Lunch, dinner, dinner 2.0 (at midnight), and finally, breakfast, blurred together in a parade of sandwiches, chicken wings, burritos, pizza, and bagels. Caffeinated beverages flowed all day and night.

    There were moments of goofiness – the kind that often crop up during such times. Impromptu guitar sessions, a human pyramid, whoops and hollers when a Web page actually rendered without crashing.

    When we were done,we all had a great sense of pride in what we had accomplished. I am so grateful for the chance to work with such a talented group of people. Thanks also to the organizers and sponsors of this event. Hope to see you all at next year’s Challenge.

  • Old RC toy made into a garage alarm

    Posted on January 4th, 2010 tdmoose No comments

    My wife wants some sort of indicator to show when the garage door is open. The garage is visible through the back window, but sight lines make it difficult to determine. Also, when the shades are drawn, there is no visiblity. I considered X10 modules at first, but that just seemed like overkill when all I really wanted was a small led to illuminate.

    Then, I remembered an old RC toy car my son had. The controller unit was simple, with just one button. Pushing the button made the car go forward. Releasing it made it go backwards while turning. On the receiver (car) side, the controller signal caused a voltage to toggle between -1.5 volts and +1.5 volts. With a little testing, I found a point that toggled between 0 and +3 Volts. This was just enough to provide drive an LED. A magnetic reed switch from Axman Surplus worked perfectly for the door sensor. This switch is in the off mode when the magnet and reed unit are near each other (door closed). When the door opens, the magnet will be pulled away and complete the circuit. The transmitter and switch are hooked up to a PIC16F684 chip. The reed switch is connected to pin 4, which is configured as a digital input. When the reed switch is open (door closed), the signal on pin 2 goes high. This turns on an NPN2222 transistor, which in turn causes the transmitter to send a signal. The receiving unit goes to +3 volts on the output when there is no signal, and drops to 0 volts when there is a signal. In other words, when the door is down, the LED indicator is off. This may seem overly complicated, but it has one advantage. If the garage-side (transmitting) unit fails, the light will come on. Although this may be a false positive for the door being up, it indicates that something is wrong on the transmitting side (power failure, loose wire?).

    Circuitry from RC car repurposed as a garage door alarm

    Circuitry from RC car repurposed as a garage door alarm

  • Side glow cable with LEDs

    Posted on November 5th, 2009 tdmoose No comments

    Many projects require illumination.  An LED is often a good choice because it can be bright while using a minimum of current.  An ultra bright LED can even drive enough light through short lengths of side glow fiber optic cable.  This cable is flexible plastic cable with a reflective core to direct light to the side, as opposed to simply transmitting the light to the end of the cable.  While it is designed to be used with bright halogen bulbs that push light through hundreds of feet of cable, I was interested to see how well an LED could work with just a few feet of cable.

    My wife and I are interested in making safety clothing for night bicycle riding and thought this might be useful. We ordered a five foot section of 3mm wide cable from here. Once I had the cable in hand, I attached a bright red LED to each end with shrink tubing.

    End connections

    End connections

    A quick test shows that two LEDs provides a fairly even glow along the entire length of the tube. Each LED was rated to deliver 18,000 millicandelas of light.

    Two LEDs  powered up

    Two LEDs powered up

    This looks like it could be used on a bicycle helmet to provide a flashing illumination. More to come as we experiment.