Gas station without pumps

2018 July 18

Santa Cruz Shakespeare’s Love’s Labour’s Lost

Filed under: Uncategorized — gasstationwithoutpumps @ 23:10
Tags: , ,

Last week my wife, my mother-in-law, and I went to see the first preview of Love’s Labour’s Lost performed by Santa Cruz Shakespeare in Delaveaga Park.  The play has a simple, rather obvious plot, but there is a lot of fun wordplay (much of which is lost on modern audiences, even with a good dramaturg and director).  I suspect that SCS chose the play partly for the ease of understanding, but also because the near gender balance of the play makes their policy of gender-balanced casting easier.

Only four parts are cast cross-gender: Moth, Boyet, Holofernes, and the messenger Marcadé).  Moth is supposed to be young enough that gender is really irrelevant, Holofernes works perfectly well as a schoolmarm rather than a schoolmaster, and the messenger Marcadé is just a messenger, whose gender doesn’t matter.  That leaves Boyet, who is normally a lord attending the French princess and is often played as an older, gay man.  Converting the part to that of a middle-aged woman works well enough, except for one exit, when Boyet is sent to the King’s court, where no women are allowed.

SCS’s performance is worth seeing, but not stellar.  I found the performances by Tommy Gomez (as Don Adriano de Armado) and Kailey Azure Green (as his page Moth) to be the best—Don Adriano comes across more 3-dimensional than the part is usually played without losing any of the humor, and Kailey captured the essence of Moth well.

Usually Berowne’s part is the best one, but I did not find Brian Ibsen to be a convincing Berowne.  He rushed the speeches a bit and did not seem really to get into the part (he also may be a bit old for the part—he should be the quintessential fratboy, not obviously 10–15 years older than the other lords).  I suspect that he’ll do better as Thomas in Venus in Fur.

The four ladies of France, with Boyet barely visible in back. Photo from https://www.santacruzshakespeare.org/about/media-room/

The costuming was good (1916?), but the set was rather dull. Perhaps it will look better when it is lighted at night (the first preview is a matinée).  I’ll get another chance to see the performance in the evening with the lighting near the end of the run—perhaps I’ll change my mind about the set then.

 

Advertisements

2018 July 9

Monoprice delta 3d printer glass clips

Filed under: Uncategorized — gasstationwithoutpumps @ 14:50
Tags: , ,

In addition to the legs I added to my new Monoprice Delta Mini 3d printer, I’ve also added a 120mm borosilicate glass plate to the heated bed.  The glass plate needs to be immobilized, so I designed some clips loosely based on designs I saw on Thingiverse.

This is version 7 of the clip. The clip here is shown upside-down, which is how it is built on the printer. The rim holds the plate down, and the two cantilevered sections fit under the aluminum baseplate.  The image is exported directly from OpenSCAD.

Here is another view, with the clip the right way up, viewed from the pin side, rather than the glass side. The existing pin for holding down the aluminum plate rotates into place in the semicircular hole left for it.

Several of the dimensions of the clip are critical, and getting them even half a millimeter off made the clip non-functional. Because I’m not very good at measuring (nor very observant about all the dimensions I needed to measure, it took me seven tries to get a design that would work.

To make the design easier, I recalibrated my printer based on the Make magazine dimensional accuracy test object. The test object was printing a little smaller than it should, so I scaled the steps/mm calibration from the 113 steps/mm to 116 steps/mm. To make the change, I gave the “m503;” command to get the current settings, then “m92 x116 y116 z116;” to rescale the steps, and finally “m500;” to save the settings in non-volatile storage. I power-cycled the 3d printer and confirmed that the settings had been saved with “m503;”.

I designed the clips with OpenSCAD and sliced them with Cura, using 0.1mm/layer, 3 layers for the walls, and 4 layers top and bottom (I think—Cura does not save any of this metadata in the gcode file except the layer height).  The V7 clip supposedly uses 70cm of filament, which at 1.24 g/cm3 or 3g/m for 1.75mm diameter PLA is about 2.1g of PLA per clip. At 2¢/g, the clips cost under 20¢ for materials, even with the 6 failed designs, but I spent a lot of time on the design and a fair amount on the printing (each print run takes about 15–20 minutes, so there were about 3–4 hours of printing involved).

Some parts of the design were simple, like getting the 120mm diameter circular arc and the 2mm wide lip to hold down the glass plate. The harder parts were getting the pin diameter and distance from the glass plate right, leaving room on the bottom for the alignment pin, and making the clip under the plate thin enough not to interfere with the button movement for the automatic bed leveling.

This is the top view of all 7 clip designs showing the evolution from a pair of circular arcs to a more solid object.

The bottom views are more informative. V1 did not extend below the aluminum plate at all, and had too small a radius for the pin. V2 extended below the plate, but did not wrap around it and the cutout for the plate did not extend back far enough. V3 extended the cutout for late back far enough, but got the angle wrong. V4 tried wrapping around the edge of the plate, but got the depth of the slot wrong—I also had to cut some of the print with diagonal cutters to make room for the alignment pin. V5 fixed the angle of the slot and left room for the pin, but did not correct for the change in angle by increasing the slot depth. V6 got the slot depth and other XY dimensions right and reinforced the side of the slot by adding triangular panels to the clip, but was too thick below the plate, so that the buttons wouldn’t press. V7 extended the plates to reinforce the slot for the whole length of the slot and had only 1mm below the plate.

Here are the clips in place, holding down the glass plate after reprinting Make‘s dimensional test.

The prints pop off the glass plate very easily—perhaps too easily.  I used the last of our spray fixative on the plate before printing, as an attempt with nothing on the plate ended up with no adhesion—I’ll probably go buy some hair spray to use as fixative for future prints.

The glass plate does result in a shiny bottom layer for the prints—a much smoother bottom layer than the slightly textured surface of the provided bed.

Here are the dimensions of the dimensional test printed on the glass bed:

nominal 25mm 20mm 15mm 10mm
center X 24.95mm 19.95mm 15mm 10mm
center Y 24.85mm 19.9mm 15mm 10mm
outer X 25.05mm 19.95mm 14.9mm 10mm
outer Y 25.15mm 20mm 15.25mm 10mm

Center Z height: 20.4mm  Outer Z height: 20.5mm

The X measurements are using the edges with a notch, and the Y measurements are from the perpendicular pair of edges. The center measurements are from the copy closer to the center of the bed. All XY dimensional inaccuracy is less than 1%, so the step size is adjusted about as good as I can make it (maybe I could change the X to 116.1 steps/mm and Y to 115.9 steps/mm) , but the Z dimension is 2–2.5% too large, so I should set the Z steps/mm to 113.4.

Here is the OpenSCAD code for the clip. It is not the most elegant way to describe the clip (because of the evolution of the code over the 7 versions), but it works. (Update 2018 July 15: I’ve made the clips available on Thingiverse: https://www.thingiverse.com/thing:3001881)

// Clip for holding down 120mm diam glass plate
// on Monoprice Delta printer
// Kevin Karplus
// 2018 July 6 

// xy plane is top of the clip.

thickness= 3;   // thickness of glass in mm
radius = 60;   // radius of glass in mm

overhang_thickness = 2;   // thickness of overhanging lip that holds glass
overhang_width = 2;     // how fare lip extends over the glass.
glass_angle = 42;   // arc in degrees of lip for glass

above_plate= thickness+overhang_thickness;

plate = 2;      // Existing plate is 2mm thick
below_plate=1;  // Max thickness below plate
                // (2mm space, but need 1mm travel for bed leveling)

height = above_plate + plate + below_plate;

pin_radius = 5.5;   // radius of circle cut away for pin
big_pin_radius = pin_radius+4; // size of ring around pin

pin_center = radius + 11;

plate_angle = 100;   // angle of plate edges in degrees.

intersection()
{
    difference()
    {
        union()
        {

            // Part that holds down glass
            intersection()
            {
                difference()
                {   // outer-edge
                    cylinder(r=radius+4, h=height, $fn=180);  // outer edge
                    translate([0,0,overhang_thickness]) cylinder(r=radius, h=height, $fn=180); //glass edge
                    cylinder(r=radius-2, h=3*height, center=true, $fn=180);// inner edge
                } // end difference

                // wedge to reduce arg
                linear_extrude(height=3*height, center=true)
                {   polygon(points=[ [0,0],
                        [100,100*tan(glass_angle/2)],
                        [100,-100*tan(glass_angle/2)]]);
                }

            } // end intersection

            // part that connects with existing clip pin
            translate([pin_center,0,0])
                difference()
                {   cylinder(r=big_pin_radius, h=height, $fs=0.2);  //outer edge
                    cylinder(r=pin_radius, h=3*height, center=true, $fs=0.2); // edge contacting pin

                    // cut to half circle
                    translate([3*pin_radius,0,0])
                        cube([6*pin_radius,6*pin_radius,3*height], center=true); 

                } // end difference

            // triangular fill to reinforce join between pin and glass
            translate([pin_center,0,0])
            {   outside_x= pin_center - cos(glass_angle/2)*(radius+4);
                linear_extrude(height=height)
                {    polygon(points=[ [-big_pin_radius, 0], [0, big_pin_radius],
                        [-outside_x, big_pin_radius+outside_x*tan(plate_angle/2)]]);
                };
                linear_extrude(height=height)
                {    polygon(points=[ [-big_pin_radius, 0], [0, -big_pin_radius],
                        [-outside_x, -big_pin_radius-outside_x*tan(plate_angle/2)]]);
                };
            } // end translate
        } // end union

        // cut away space for baseplate
        triangle_x = 40;  // large enough to cut everything
        triangle_y = triangle_x * tan(plate_angle/2);

        translate([pin_center+3,0,above_plate])
            {    linear_extrude(height=plate)
                    polygon(points=[[0,0],
                                [-triangle_x,-triangle_y],
                                [-triangle_x,triangle_y]]);
            }
    }

    // keep only those parts that don't interfere with the alignment pin
    // trimming the cantilevered below-plate part to a narrow rim
    union()
    {
        // everything above the plate is fine
        translate([0,0,above_plate/2]) cube([500,500,above_plate+0.001], center=true);
        // below the plate, make circular keep-regions
        keep_radius=22;
        translate([pin_center+8, keep_radius, above_plate])
            cylinder(r=keep_radius, h=height, $fn=180);
        translate([pin_center+8, -keep_radius, above_plate])
            cylinder(r=keep_radius, h=height, $fn=180);
    }
}

Analog Discovery breadboard adapter

Filed under: Circuits course,Data acquisition — gasstationwithoutpumps @ 11:16
Tags: , ,

As I mentioned in Analog Discovery Impedance Analyzer, I recently bought two new attachments for my Analog Discovery 2.  I reviewed the Impedance Analyzer in the earlier post, so in this one I’ll review the breadboard breakout.

The breadboard breakout provides a simple way to attach the Analog Discovery 2 to a breadboard, without using the female headers that come with the device.

Here is the breadboard adapter, plugged into the end of a breadboard.

The Analog Discovery 2 can plug into the breadboard vertically, which is compact, but requires disassembly to put the test setup back in its box for carrying.  Here it is shown plugged into the last 15 rows of the breadboard, but I had to move it in two rows to keep the weight of the AD2 from tipping the breadboard.

I tried doing a little work with the breadboard adapter and found it to be a mixed blessing. I used it for testing a circuit where I needed both oscilloscope channels, one power supply, and one waveform generator, which would normally use 7 of the 30 wires on the AD2.  Some of the wires (the power, ground, and oscilloscope 1- and 2- wires) could be quite short, as they connected to the power busses on the breadboard, but the other wires had to be fairly long, as they had to skip past all the trigger and logic-analyzer inputs that I wasn’t using.  I could have plugged the adapter into the breadboard the other way around, but then the AD2 itself would interfere with convenient wiring.  It would have been nice to have the most frequently used connections at the tip of the adapter, instead of the base of the adapter.

For a fixed setup, where the oscilloscope channels are always looking at the same signals, the breadboard adapter is more convenient that the standard flywire connections, which have a tendency to slip off the double-ended male headers that I use for connecting them to the breadboard.  The female headers of the flywires are not designed for many cycles of attaching and detaching, and end up getting too loose after a while.

But for debugging, when the oscilloscope channels have to be moved rapidly from node to node, the breadboard adapter is less convenient than having the separate flywires—unless much longer wires are used (with the attendant problems of extra inductance and capacitive pickup of 60Hz interference). Losing 17 rows of the breadboard to the adapter is also a problem, as it leaves only 47 rows of a standard 64-row breadboard, or 15 rows of half-length breadboard for building the test circuit.

I think that I will use the adapter for lecture demos, where I have fixed wiring to carry around, as I can spend less time setting up the demo just before class, at the cost of slightly more time the night before. My standard lecture setup will use a full-length breadboard with the adapter in one end and a Teensy LC in the other end (for PteroDAQ demos) using up 31 of the 64 rows, leaving me with the equivalent of about a half-length breadboard in the center for the circuitry being demonstrated.

I don’t know yet whether I’ll find the adapter useful for regular debugging—probably not much.

2018 July 4

Resuming jogging

Filed under: Uncategorized — gasstationwithoutpumps @ 20:16
Tags: , ,

After a three-week break to let my tendons and bursæ heal (see Taking a break from jogging), I started jogging again today, cautiously.

I went to Santa Cruz Running Company on Monday and bought a pair of running shoes. I ended up buying ASICS Kayano 24 shoes in size 10½ US (44.5 European, 9½ UK), for about $142 (including tax),  which is somewhat more than I would have paid on-line, had I known that those were the shoes I wanted, though less than I would have paid a month ago (the shoe is now last-season’s model).

I’m glad to pay the 20–30% premium for the ability to try on 8 different pairs of shoes from different manufacturers (as well as seeing a little slow-mo video of my running on the treadmill, to see if I had an problems with rotation of my feet—none were visible).  The shoes I had originally thought I wanted, because of the big toe box, ended up not being comfortable, because the stiffening at the toe pressed down on my big toe nail—there was plenty of room horizontally, but not enough vertically.

The shoes I ended up with have soft mesh uppers and conform better to my feet.

The tenderness in my pes anserinus tendon (or bursa underneath) is almost gone, so I tried taking a short run this morning: just 1.5km with no hills.  I’m going to switch to an alternate-day schedule to give more healing time between runs and to give me more warning if I start damaging my tendons or bursæ again.  I’ll ramp up the distance more slowly this time also.

It is unlikely that I’ll be up to Bike Santa Cruz County’s  12km run on 26 August 2018, but it is more important to me that I don’t make the minor injury worse.

2018 July 1

Analog Discovery Impedance Analyzer

Filed under: Circuits course,Data acquisition — gasstationwithoutpumps @ 17:54
Tags: ,

One of the new toys I got this week was the Impedance Analyzer board for my Analog Discovery 2 (I also got a Breadboard Breakout, but I won’t discuss that in this post).

Here they are in the bags they shipped in.

And here they are unwrapped.

I tried testing out the impedance analyzer board today, to see how well it worked, and to try to determine the precision of the reference resistors they used, since Digilent does not seem to have provided that information on their datasheets.

The impedance analyzer board is used just like any other setup for using the Analog Discovery impedance meter: you select the reference resistor and the range of frequencies, run open-circuit and short-circuit compensation, then insert the impedance to measure and do a sweep. The only difference is that the board uses latching relays to select the reference resistor, rather than having to wire it yourself. The board has 6 resistors: 10Ω, 100Ω, 1kΩ, 10kΩ, 100kΩ, and 1MΩ.

I did several tests, many of which seemed rather inconclusive. One fairly consistent result was that the open compensation saw the open circuit as essentially a 1.63pF capacitance. One exception was the 10Ω resistor, which reported 5.4pF, but I suspect that is due to measurement error from quantization—as 1.6pF at 1MHz is still about -j 100kΩ and the 10Ω resistor would have only 0.001 times the voltage across the open circuit. These capacitance measurements were only consistent above about 3kHz—at lower frequencies I had rather noisy results, probably again because of quantization problems measuring small voltages across the reference resistor.

The short-circuit compensation reported values roughly proportional to the size of the reference resistor, with a maximum around 24mΩ for the 10Ω reference to 148Ω for the 1MΩ reference. The impedance changed a lot with frequency, with a maximum around 18kHz. The phase change varied a lot with frequency also.

I used the impedance meter to measure some 0.1% resistors that I had purchased previously to use as reference resistors in my own impedance setups. The impedance measured was not constant with frequency (generally fairly flat at low frequency, then peaking a little around 70kHz, then dropping off with higher frequency). The variation with frequency was as much as 2–3%. Incidentally, the latest version of Waveforms (3.8.2) still has the bug where the impedance meter sometimes exports the frequencies as if they had been stepped linearly, instead of logarithmically. [Update 2018 July 2: Digilent says that the bug will be fixed in the next release.  Based on their rate of updates lately, that should be soon.]

The impedance of the 10kΩ±0.1% resistor is not constant with frequency. This plot has a linear y axis, to accentuate the fairly small change that is measured.

I decided to measure each of the precision resistors using each of the reference resistors at 100Hz, with settling time set to 2ms and 32 cycles. (I probably should use a longer settling time for more accuracy at low frequencies and average 10 or more measurements.) I’ve marked in red those measurements that are off by more than 1%:

Reference 100Ω ±0.1% 1kΩ ±0.1% 10kΩ ±0.1% 100kΩ ±0.1%
10Ω 98.81Ω 986.3 9955 77.97k
100Ω 99.83Ω 998.8 9936 98.91k
1kΩ 99.88Ω 998.6 9980 99.69k
10kΩ 100.4Ω 998.5 9971 99.88k
100kΩ 106.1Ω 1005 9987 99.97k
1MΩ 118.3Ω 1042 10000 99.97k

The results are best when using a reference resistor within a factor of 10 of the resistor being measured, and those results seem to be within about 0.2% of the correct value, which suggests that Digilent is using 0.2% resistors (or that they got very lucky with standard 1% resistors).  The one set of bad values is from the 10Ω reference—the resistance of the relay contacts may be big enough to throw off that measurement, though I would have expected measurements to be too big, if that were the source of the error.

Next Page »

Blog at WordPress.com.

%d bloggers like this: