Saturday, January 28, 2012

Kodak Vest Pocket with Kodak Portra 160

Click for Flickr Set
Here's another roll on the Kodak Vest Pocket camera -- this time with Kodak Portra 160 print film in it.  I think we might have a winner.  Despite all the shots being totally light-leaked upon, this film really seems to suit the li'l guy.  The true winners are the indoor shots, where I had to make multi-second exposures.  The color is just fantastic, and the leaked light only adds character.

This roll was a single-variable experiment.  I'd taped over the window that shows the frame I'm on.  It looks more like the light is leaking in along the panel that opens to let you load and unload film rolls.  I'm gonna keep the frame window taped up, and I'll also tape around the panel for the next roll.  I just ordered more Kodak Portra 160 .. so it'll take a couple weeks to get the next batch of experiment data back.

Wednesday, January 25, 2012

Setting up FTDI (for XBee) on Mac OS X

My awesome brother and I have been playing with XBee radios for the past few days.  Darned near all of the programming interfaces -- and fancier breakout boards -- use a USB-to-FTDI serial translator.  I've got a new Air here that doesn't have the drivers installed yet.  So, since it took a minute or two to determine what I needed, here's my quick outline for the next time:
  • You want the Virtual Comm Port (VCP) version of the driver.
  • Plug in.  See if Terminal.app shows the new cu and tty devices, with `ls -l /dev/*usbserial*`
  • CoolTerm seems to be a nice terminal emulator.  (ZTerm still works, for the old-skoolers!)
  • Plug in USB .. to FTDI translator .. to breakout board .. to XBee radio.
  • XBees ship with 8N1 serial at 9600 baud.  Set your terminal emulator accordingly.
    • XBees don't echo your input, so turn on Local Echo in your terminal emulator.
  • In the terminal emulator, type "+++" to get into command mode.  XBee will reply "OK."
  • Continue building your robot army.
You don't actually need CoolTerm or ZTerm, if you don't mind that `screen` won't do a local echo.  If you're okay with typing blind, a `screen /dev/cu.usbserial*` command should work just fine (as long there's only one usbserial device connected at a time).  Crafting a one-liner that fakes local echo is left as an exercise for our new robotic overlords.

Saturday, January 14, 2012

DS18B20 Temperature Sensor on Arduino

I just got a DS18B20 temperature sensor from adafruit, and it took a little sleuthing to get it working.  There are a few sources of sample code, but none of them tell you how to wire the silly thing in the first place.  I eventually got it.

I downloaded and installed the Dallas Temperature Control Library, then I used tushev's wiring diagram to hook it up to an Arduino Uno.  The "Tester" example that's included with the library confirmed that everything was in one piece.  Hopefully that helps, if you're in the same boat..

Two Rolls on the Kodak Vest Pocket

Click for Flickr Set
I got back the two rolls we shot on the Kodak Vest Pocket Autographic camera.  One's Efke R 100 black and white.  The other is Rollei Crossbird 200 color slide film.  I think I like the character of the color roll, which is a new brand to me.  I'll need to try some in another camera to see how much is the film and how much is the camera.  It looks like it's the film.

As you may have noticed, there's a bit of a light issue going on.  The baffles on the thing seem to be in one piece.  The shutter also looks pretty good.  The design of the Autographic model includes a nice wide door on the back .. so I might be taping over that for the next roll.  And the window for looking at the frame number is generous.  Plus, it was a very bright couple of days.  It's also really hard to get the film in the camera in the first place.  (Now I'm just making excuses.)

Click for Flickr Set
With the handful of variables, this is gonna be a really interesting experiment.  Testing one of the easier theories first, I'll use a changing bag for the load and unload of the film.

Updating AD DNS from Mac OS X or Linux

I've got a Mac in an AD environment with DHCP.  All the Windows machines end up with the right DNS in the domain.  Mine doesn't, so my command prompt always has someone else's PTR.  The AD admins set me up so the DC will honor my DNS updates without auth.  (Thanks guys!)  In this example, my machine is tron.sub.domain.com at 192.168.0.42.  Here's how I use nsupdate interactively, one command at a time, in a terminal, to restore reality:
  nsupdate
  > update delete tron.sub.domain.com A
  > send
  > update delete 42.0.168.192.in-addr.arpa PTR
  > send
  > update add tron.sub.domain.com 86400 IN A 192.168.0.42
  > send
  > update add 42.0.168.192.in-addr.arpa. 86400 IN PTR tron.sub.domain.com.
  > send
  > quit
nsupdate will take commands from a file or stdin, so one-liners and scripts are easy.  If you need to use auth, look at the -y or -k flag.  If your domain's SOA isn't quite aiming your client at the right server, the "server" command lets you specify where to send updates.  If your AD admins aren't as accommodating as mine, try buying them a beer.

Wednesday, January 11, 2012

Baby-Max Throws a Curveball

Okay, this one's gonna get interesting.  The Baby Max camera there, front and center, might take eight millimeter, or sixteen millimeter .. or something.  (17.5 mm?)  So I've started to create a foam insert for the old Holga to see if I can slice some 120 film *whey* down to whatever size the little guy wants.  And then there'll be a bunch of blind wrestling in a changing bag, too.

And who's going to process it?  I *think* the automatic machines can do just about any width, and I'm gonna use C-41 film to make it easier, but it's gonna be as much an adventure for my developer as it is for me.  Here we go!

Flipping Vertical Scrolling Behavior in X Windows

I've grown used to Mac OS "natural scrolling" on my trackpad.  So when I recently set up a few ubuntu netbooks, for a quick lab experiment, I wanted to have their trackpads behave the same.  It's actually pretty simple to tell X windows to flip 'em.

Short story, on a completely stock ubuntu, (and should work for anything) this will flip your scrolling:
  • open a terminal
  • run `echo "pointer =  1 2 3 5 4 6 7 8 9 10 11 12" >> ~/.Xmodmap`
  • logout of your X windows session.
  • log back in.
  • ta-da.
Long story, since the days of the dinosaurs, X Windows has been really nice about letting you remap your mouse keys .. southpaws would frequently swap their left and right buttons.  The `xmodmap` command provides an interface for this stuff.  Try `man xmodmap` and `xmodmap -help` for more details.  The above instructions just append a custom button setting to the rc file that xmodmap evaluates at log in.

Up and down scroll are considered physical buttons 4 and 5, respectively.  The "pointer = " statement above has 4 and 5 swapped.  Simple as that.

Use `xmodmap -pp` to display your current button mappings, and `xmodmap -e "pointer = default"` to reset to normal.  If you want to suss out where all of your buttons are, launch `xev` to see what events X is handling .. look for the ButtonPress event and note the "button" attribute.

Sunday, January 8, 2012

More Shots on the Viewmaster Mark II

I shot another roll of slide film on the Viewmaster Mark II.  With the last roll, I hand-crafted some reels and chopped up the film in the process.  Briefly, what I did was scan an existing viewmaster reel, then print that on card stock.  I cut out frames on the cardstock reel with an exacto, then sliced up my film and taped it to the card.  This actually works surprisingly well.  Just slip it into a normal viewer carefully.

Click here for the Flickr set.
For this roll, I'm going to keep the film intact.  I'm pretty sure I can craft a viewer of my own that will let me slide the whole strip through it, with a mask that'll only show one pair at a time.  So instead of advancing the usual round disc to see frames, I'll slide the film one frame's width through the contraption.  It'll likely be totally hand-done, but if I get excited and try to 3D print it, I'll post the files for everyone to join in.

First Roll on the Coronet Three-D

Click here for the Flickr Set.
I just got back the first roll from my Coronet Three-D camera.  I'm kinda "meh" about it, but it could be my own fault .. I'm not subtracting the film's mask color correctly.  Also, it looks like this one prefers to be closer to the subject than my Sputnik does.

As you can tell from one or two pairs of frames, it likes to spontaneously fall apart.  Poof!  Playful little thing, that way..

Thursday, January 5, 2012

Kodak Vest Pocket Autographic

Check out the new arrival, a Kodak "Vest Pocket" camera.  This is the "Autographic" style, which means there's a small door on the back, that you can flip open and write directly on the film backing (possibly score, instead, not sure yet).  It takes 127 film, and I've loaded a roll of the Efke R 100, black and white.

It's totally adorable .. the whole thing collapses down flat, so it can fit in your vest pocket.  For a time, it was sold as the "soldier's camera," because it was so portable.  Also, one of these seems to've gone to the top of Mt. Everest.

They were probably manufactured between 1915 and 1926.  Mine has all sorts of lists of the patents that it's covered under, and one of them is from Nov 8, 1921.  So I'm squarely between world wars.  (i.e. not much market for soldiers.)

Exposure is going to be interesting.  The pre-set shutter speeds are a twenty-fifth or fiftieth of a second.  There's a B setting.  The aperture isn't listed in f-stops tho .. a dial sets it between "portrait" and "clouds" sizes.  I'm shooting this first roll using the smallest aperture (clouds) and the fiftieth of a second shutter .. in bright sunlight.  I'll try some B shots, as well.  I love science (physics?) experiments!

Sunday, January 1, 2012

Using RGB LEDs on an Arduino

Click to embiggen.
For some reason, it wasn't easy to find sample code or pinouts for using a common-cathode RGB LED with Arduino.  I think I'm missing something obvious, but oh well.  So, I messed around and got it to work.

  • The longest pin takes 5v in.
  • Grounding the other three illuminate red, blue and green.
  • You can use digital PWM outputs to ground those pins.
  • Setting a pin to 0 illuminates that color.  1023, off.
  • Setting a pin to an intermediate value adjusts its brightness.
I've done a super simple diagram, at right.  And copypasted some bare-bones code that runs through each pin, in turn, grounding it for a half second.  These links go directly to the sketch, and the fritzing diagram.


//
// RGB LED figure-er-out-er by gabe.                 gms@causalloop.com
//    an Arduino & Beer (tm) Production.                blog.fnaard.com
//
// Run your RGB LED's longest pin to 5v.  Run the other pins to digital
// pins 9, 10 and 11.  I've put a 330 ohm resistor, in series, between
// each of those three pins and its corresponding digital pin.
//
// This sketch runs through pins 9, 10, 11 grounding each one in turn ..
// for sussing out which pin illuminates which color inside the thing.
//
// You gotta set all the pins to OUTPUT, so that you can write values
// to them.  They won't actually output any voltage .. in fact, they'll
// act as ground.  Setting a value for the pin will adjust its PWM rate
// and that adjusts how much electricity can flow through that color LED.
//
// Put simply, it's what you do with single-color LEDs, but in reverse.


void setup () {
  pinMode ( 11, OUTPUT );
  pinMode ( 10, OUTPUT );
  pinMode (  9, OUTPUT );
}


// Now just run through the pins, setting each one to full brightness (0)
// for a half second, while setting the other two to off (255).


void loop () {
  analogWrite ( 11, 255 );
  analogWrite ( 10, 255 );
  analogWrite (  9, 0    );        // Red, on mine.
  delay(500);
  analogWrite ( 11, 255 );
  analogWrite ( 10, 0    );
  analogWrite (  9, 255 );     // Green on mine.
  delay(500);
  analogWrite ( 11, 0    );
  analogWrite ( 10, 255 );
  analogWrite (  9, 255 );     // Blue on mine.
  delay(500);
  analogWrite ( 11, 255 );
  analogWrite ( 10, 255 );     // Everyone off.
  analogWrite (  9, 255 );
  delay(1000);                   // Pause longer.  For dramatic effect.
}