Tag Archives: featured

A Mean Blue S2000 at Speed Ventures February 15, 2014

To get warmed up for this year’s season of NASA track days, I signed up for a Speed Ventures autocross at Auto Club Speedway in Fontana, California.

Speed Ventures hosts the autocross event on one of the infield parking lots at the same time as a track day event on the Roval course, a demanding circuit with a mix of high-speed banked sections on the NASCAR oval mixed with a more technical infield course.

In between my autocross run groups I took the opportunity for an impromptu photo shoot – including some on track action – with Chris’ Wiita’s awesome 2007 Honda S2000 AP2.

Chris Wiita was there for the Speed Ventures track day with his Laguna Blue Pearl S2000, which he’s been modifying and tuning since purchasing it in 2010, when it was bone stock. Chris started by dialing in the car for autocross and moved on to track days in 2013, where he’s been setting highly respectable lap times at various California road courses, including a 1:58 on the Roval with street tires. You can see a video of that run here.

Laguna Blue Pearl is probably the best color this car was ever available with, if not the best Honda color ever!
Sparco Rev seats and blue Schroth harnesses adorn the interior. A Hard Dog Fabrication roll bar anchors the harnesses, provides rollover protection, and a place to mount a GoPro!
As clean and sharp looking as this car is, the mods are pretty much all business.
The APR-250 wing is supported by custom aluminum uprights that Chris designed and built. The uprights are skeletonized to reduce weight but the holes are covered with composite panels to reduce drag.
Chris set a 1:58 lap time on 255/40/17 Hankook RS3s
Hawk HP+ pads slow this AP2 down lap after lap without fade, but once this car gets an upgrade in the power department, a big brake kit will probably make an appearance. Knowing Chris it will be something we haven’t seen before on an S2k.
The custom water-jet cut and machined aluminum wing risers attach to steel brackets connected directly to the frame to transfer maximum downforce to the rear tires.
Stack oil temperature and pressure gauges give Chris a clear indication of how the engine is dealing with being pushed hard on the track.
Chris’ S2000 currently sits on Enkei PF01s wrapped in 255-40-17 Hankook RS3s, but he tells me that big upgrades in the wheel and tire department are on the way.
The massive APR GT-250 wing really dominates the appearance of this S2000 on the track. It looks wider than the car!
Chris records all of his laps on multiple GoPro cameras to review and share at te end of the day.
The carbon fiber wingstand brace and plastic airfoil really show Chris’ attention to detail. This Honda S2000 has a lot of interesting modifications that aren’t seen anywhere else.


2013 Porterfield Glen Helen RallyCross Finale

Last Sunday was the final race of the 2013 Porterfield RallyCross Series at Glen Helen Raceway. I showed with and competed in my Apocalypse Wagon, scored enough points to hold my lead, and won the 2013 season! The rest of the day was spent shooting thousands (THOUSANDS) of photos of the highly-entertaining afternoon run groups.

Here are some of my favorites. I shot these photos using my new Canon 70D with the EF-S 55-250mm f/4-5.6 IS STM lens. I try to minimize post-processing. Usually just a bit of contrast and exposure adjustment.

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.

(c) Copyright 2013, Steven T. Snyder, All Rights Reserved.

Reading a Dymo USB scale using Python

For an experimental project I’m working on, I wanted to read the weight from a  DYMO M10 digital postal scale with USB support. I expected the scale to show up as a virtual COM port, since older digital scales used RS232 for their computer interface,but the scale shows up as a USB HID (Human Interface Device) in Windows.

I found Micah Carrick’s site which shows how to read from a MagTek credit card reader in Linux using PyUSB 1.0. Like the DYMO M10, the MagTek reader uses the USB HID device class so the basic method for getting data from the device is the same.

The first step is to install PyUSB 1.0. Unzip the contents of the archive from the PyUSB sourceforge page and run python setup.py install.

Using PyUSB on Windows requires installing a suitable backend such as libusb-win32. After installing libusb-win32, it’s necessary to install a device filter for the scale. Connect the USB scale to the computer and press the power button. Windows should detect the scale and install the device driver automatically. The DYMO M10 shows up in Device Manager as a “USB Input Device” with vendor ID 0922 and product ID 8003.

Using the libusb-win32 Filter Wizard, install a device filter for the scale. It will show up in the list as “vid:0922 pid:8003 rev:0100 USB Input Device”.

Now it’s possible to read data from the scale using the usb module in Python:

import usb.core
import usb.util

VENDOR_ID = 0x0922
PRODUCT_ID = 0x8003

# find the USB device
device = usb.core.find(idVendor=VENDOR_ID,

# use the first/default configuration
# first endpoint
endpoint = device[0][(0,0)][0]

# read a data packet
attempts = 10
data = None
while data is None and attempts > 0:
        data = device.read(endpoint.bEndpointAddress,
    except usb.core.USBError as e:
        data = None
        if e.args == ('Operation timed out',):
            attempts -= 1

print data

The data packet is a 6-element array; for example:

array('B', [3, 2, 11, 255, 0, 0])

The 1st element has always had the value 3 in my tests, so I’m not sure what it does.

The 2nd element indicates whether the value is stable.

The 3rd element (value 11 in the example above) is probably a flag byte. The only values I have observed so far are 2 and 11. A value of 2 indicates that the scale is in kg mode, and a value of 11 indicates that the scale is in lbs/ounces mode. Curiously, whenever the scale reads 0, it seems to indicate lbs/oz mode.

Thanks to Daniel Rice (see his comment below), we now know what the 4th element (index 3) is for; it’s for calculating the scaling factor when reading in ounces. In the above example it has a value of 255. This is in fact the signed value -1, which indicates that the raw value is in tenths, due to a scaling factor of 10^-1 or 0.1. For a value of 254, the scaling factor is 10^-2, or 0.01. I’ll refer to this value as scaling_factor below.

The elements at indices 4 and 5 are used to calculate the weight.

In kg mode:

grams = data[4] + (256 * data[5])

In pounds/ounces mode:

ounces = scaling_factor * (data[4] + (256 * data[5]))

If you check the mode, you can just convert to whatever unit you need no matter what mode the scale is in.


raw_weight = data[4] + data[5] * 256

if data[2] == DATA_MODE_OUNCES:
    ounces = raw_weight * scaling_factor
    weight = "%s oz" % ounces
elif data[2] == DATA_MODE_GRAMS:
    grams = raw_weight
    weight = "%s g" % grams

print weight

The scale is capable of reading negative values if you zero it and then remove the weight, but I haven’t yet figured out how to get negative weight values yet. The scale itself displays the correct value, but the data packet reads as if it were zero, except the second array element has a value of 5 instead of 2.

I also haven’t figured out how to determine when the reading has stabilized. Nicholas Piasecki’s article on reading a Stamps.com USB scale in C# says that the 2nd element in that scale’s data packet reads 4 when the value is stable, but 4 is all I observe when reading a positive non-zero weight value, even when the values are changing rapidly.

I hope this information has been useful to you. If you have any questions or have anything to add, please post a comment!