Saturday, July 22, 2017

Graupner Mosquito



Graupner offered the Mosquito kit from about 1975 on. At the time, it was one of the first electric (under-)powered gliders, also usable as a pure glider, or with a 0.8 to 1.5 ccm Cox motor.

What's somewhat special about it is the sleek nose section, accomplished by moving the electric motor back from the front, using an extension to the prop.

Built from plan in about 6 months. Total weight in the original glider version was 1100g. With 'Jumbo 540 F G6' motor, 6:1 gear and NiCd battery, it was around 1600g.

Wingspan2500 mm
Length1100 mm
Wings Area44 dm2
Tail Area7.5 dm2
Weight1300 g
MotorMVVS 2.5 1350
Prop9 x 5, folding
Battery3S LiPo, 2200 mAh

First flight June 3, 2017. Very slow, majestic, low sink rate, flat glide. Typically flights of about 15 minutes require motor run time of only about 3 minutes, leaving the LiPo 80% charged.




Sunday, January 1, 2017

Graupner Bugsier

Very slow progress, but progress nevertheless over the holidays on Graupner Bugsier.




Sunday, June 26, 2016

ARRL Field Day

Put up a Super Antennas YP-2 2-element portable Yagi for 20m, on temporary mast leaning against the house. Antenna was about 5.5m above ground.
This antenna used to be offered by W6MMA.







Friday, June 24, 2016

Graupner Cherry Rebuild

Had flown a Graupner Cherry II when it first came out. Was comparably heavy back then with NiCd batteries and somewhat under-powered.
Recently found one on EBay, which had a fiberglass fuse compared to the soft plastic fuse of my earlier one. Unfortunately, crashed on the first landing. Reason was probably that I had the airlerons mixed to both move down to slow the plane for landing. While the plane did slow down, it also suddenly rolled over and fell out of the sky.





Decided to build up a Cherry look-a-like as a purely wooden construction. Used the one remaining wing from the crash as a template. Compared a scanned copy of the airfoil with others in Profili, found a good match in the Eppler E211. The wing is fully sheeted, with a slight undercamber. To build the wing, the bottom sheeting was placed onto standoffs with a contour matching the underside of the ribs; ribs and spars were added, then the top sheeting.

Wingspan2.2m
Length1.02m
Wing Area35.5dm2
Weight1.250 kg (with battery)
AirfoilE211
MotorMVVS 3.5/1200
Battery3cell LiPo, 2500mAh
Prop10x6 Aeronaut CAM
Max CurrentAbout 30 Amp

First flight was in January 2015. Rapid vertical climbout on full throttle. Can easily take off on half throttle. Slows down nicely when just gliding around. Now pulling ailerons 'up' for landing instead of 'down' to avoid tip-stalls. Still needs long approach because of flat glide path.

What would have been nice: Rudder control for better looking tight circles, and inner wing flaps for landing.

Still, fun airplane and the MVVS motor turned out to be terrific: Easy to mount in comparably tight glider noses, amazing climbout. Example for flying it one summer morning: About 2 minutes of motor runtime resulted in 18+ minutes of flying!



On another summer morning, achieved a 28 minute flight with 4 minutes of motor runtime. Still having trouble spotting thermals "right then" when flying thought them, but at the end of a flight it's pretty obvious when there must have been some. KCRC Model-of-the-month in August 2016.

Saturday, August 8, 2015

Eindecker Model IV

Roughly 100 years ago, most airplanes had at least two wings. Biplanes. Anthony Fokker went against this trend. Based on his experience flying radio control airplanes, he was well aware of the "Ugly Stick" type of model airplane. So he created a full-size ugly stick, which became known as the Fokker Eindecker. Most people are aware of the Model III: Round engine in the front, machine gun that could fire through the propeller arc, wing-warping for roll control.

My model is about the lesser known Model IV variant of the Fokker Eindecker: Upright cylinder engine, ailerons. The cylinder block in front of the pilot provided a certain amount of protection from incoming fire, but unfortunately prevented mounting a machine gun, so the Model IV was mostly used as a reconnaissance plane. For this reason, Manfred von Richthofen had little use for the airplane. Nor had his brother, Lothar. But his girlfriend, the Baroness von Kräsch, loved the plane, which is why my model includes a replica of her in the control position.

Today, there is no surviving example of the Fokker Eindecker Model IV, mostly because I made it all up. My model is actually an 80% sized copy of the Balsa USA Eindecker 40 model which I had built several years ago. That one used an OS Max 40, this one uses an OS FS 26.



Saturday, April 11, 2015

ISS SSTV

SSTV image sent by international space station on 145.800 FM on April 11, 2015.

Each image was sent in about 3 minutes, with 3 minute pause between images.
This pass was very low and thus short. First image had a little noise as ISS rose over the horizon. Second image started as ISS already vanished below horizon, so missing most of it.

Another pass, only about 15 degree max. elevation, resulted in this image:

Final pass on April 12, very low, only got end of what could have been an interesting image:

Sunday, April 5, 2015

Audio Attenuator for PSK/RTTY/SSTV/...

Been using a RIGblaster plug  & play interface between the computer and the radio for digital modes. Works OK, but to get the proper output level to drive the radio, the computer volume needed to be quite low, around 10%. Since the same computer is also used to play music, I always had to adjust the volume way down for radio use, then back up to listen to music.

Finally got around to build a simple attenuator. The junk box happened to contain a 4k potentiometer with nice knob, so I used that. Computer output connects to the pot, and its wiper goes to the RIGblaster. The computer (laptop) output volume is now simply set to "100%", which is easy to reproduce, and the attenuator was once adjusted to give proper audio drive to the radio.

People with more patience should be able to put a smaller trim pot inside the RIGblaster, but I preferred to keep that as is and instead plugging the attenuator in-line.


 In the picture, the pigtail on the right side of the black box goes into the computer's headphone jack. Audio from there is then attenuated, fed via the blue/green plug into the rigblaster and on into the radio.

Wednesday, October 8, 2014

Eclipse SWT CheckboxCellEditor hangs on Mac OS X

.. when using the wrong value type.

The CheckboxCellEditor requires an Integer as its value, i.e. the index of one of its labels. When instead providing the label text, the SWT event loop will hang on Mac OS X. The combo editor's setValue method has an assertion to check the value type, but this doesn't result in an Exception with normal settings. Instead, the debugger will typically show that the main loop is stuck in handling the mouse-down event which activated the cell editor.

The fix is simply to provide the correct value, but unfortunately the reason of the hangup is not immediately obvious, there is no exception or log message that indicates the wrong value type as the reason for the hangup.

Tuesday, April 1, 2014

Graupner Amateur

Built by using parts from an original kit found on EBay.



Wingspan 110 cm
Area 18dm2
Weight 650g
Motor Atlas AM2312/26
Prop 9x6
Battery 3cell LiPo, 2200 mAh

Started building just before Christmas 2013, first flight on 1st of March 2014.
Compared to the original, built as tail-dragger and with electric motor. Hood and front window are held by magnets, removed to access battery. Completed weight matches what original estimated for the free-flight configuration, without radio!

Flying it couldn't be better in no-wind conditions. Current draw is up to 10Amp, but plane still slightly climbs at 1/3 power, so full throttle is rarely necessary.

I happened to have grey Monokote around, so I tried to cover it as shown on the kit's box art. I'm surprised how pleasant the color combination turned out. The lettering and "Graupner" logo were cut from Monokote based on copies from the plans.




Sunday, February 9, 2014

LEGO Mindstorms RCX 2.0 in 2014...

I still have a LEGO Mindstorms RCX 2.0 from 2003, and once more the question was: Is it still possible to program the device?

The Windows XP computer that I had used in 2010 (with difficulty, see post from back then) is no more. A brief search only indicated that there's no driver for Windows Vista/7/8, let alone 64 bit. BUT: I always preferred using the RCX with LeJOS, i.e. Java, instead of the Windows based GUI. Then it turns out that Linux actually contains a `linuxusbtower` kernel driver in most distributions. So overall, this sounded easier than ever?!

After installing a current Ubuntu release, the LEGO USB tower was indeed recognized, creating `/dev/usb/legousbtower1` whenever plugged in. But LeJOS 2.1.0 just didn't work, giving various communication errors in the `firmdl` program. I tried to compile the `linuxusbtower` kernel driver from the 2.1.0 sources, but could not find an easy way to get the required kernel source includes.

The solution was to use the LeJOS 3.0.0 "release candidate" (from 2006). It communicated with the Ubuntu-provided `legousbtower` kernel driver just fine. Only quirks:

  • `lejos/bin/*` scripts needed to be `chmod`ed as executable
  • `lejos/bin/lejos` needed the same "export LD_LIBRARY_PATH" and "java -cp .." for the `*.so` shared library that was already in `lejos/bin/lejosjc`
These changes might be included in the latest CVS checkout, but the `*.tgz` download has the advantage that for example `firmdl` can be invoked right away without having to build anything.

Used Eclipse by creating a plain Java project, then removing the default JRE links and instead adding the `lejos/lib/*.jar` files to the build path.
So with Linux and Java, it's possible to use a 10+ year old LEGO brick, and it works just fine.
Compared to an Arduino, it is actually still quite attractive as an into to computer fun for teenagers: In one box, with batteries, you get a motor controller, sensor reader, and simple display and "beeper". With an Arduino, you'd have to add a battery box, speaker, motor shield, LCD, plus put that all into an enclosure.

Thursday, December 26, 2013

Great Planes ElectriCub

First Cub was an ElectriCub in 1996, with original Mabuchi 550 type can motor and NiCd. Flew OK, but nothing outstanding.
Second was the 20-sized Great Planes Cub with OS FS 26. A lot of fun in the air, but often hand-launched because hard to control on the ground.
Now found another ElectriCub kit on EBay. Came with yellow MonoKote, though unfortunately plain yellow, not the special Cub Yellow. Built it in about 6 month.




Outstanding flyer with 3 cell LiPo, brushless motor. Added ailerons, approximately scale sized, but forgot to remove dihedral from original kit design, so very little effect.Mixing rudder to airleron for relaxed flying. Second image shows transmitter in 'winter bag' for cold weather flying.

Tuesday, November 26, 2013

Futaba 9C Throttle Lock

To get a "Throttle Lock" for electric motors on the Futaba 9C while not in a heli mode:

  • Select one of the programmable mixes
  • SW: E, Posi: Down
  • Mix: On
  • Mas: Thro, Slv: Thro
  • Link, Trim: Leave Off
  • Offset: 0% (Throttle stick to idle, then hold rotary for 1sec)
  • Rate 'down': +100%, 'up': -100%
Similarly for the T8FG:
  • Offset Y at -100
  • Rate -100 for both directions

Friday, August 2, 2013

Super Slinky



This was a free plan in the January 2013 R/C Model Aeroplane magazine, by Alex Whittaker, including
 "...ye olde health warning. Super Slinky is the Yorkie bar of simple sportsters. She's not for girls, the faint-hearted, Guardian readers, those of a nervous disposition or Southern jessies. She's no trainer, follow-on trainer or first low winger. She's for experienced pilots, aerobatic hooligans and unrepentant throttle benders. The truth is, she's a very bad girl."

With a warning like that, I couldn't resist. The original idea of the plan is a very quick build. One type of rib, box fuse, plank tail. Of course it took me 3 month, using stick-build tail, one extra wing bay, and in general every attempt to not rush it.

Wingspan110 cm
Length90 cm
Area27.5 dm2
Weight1275 g
Loading46.4 g/dm2
AirfoilSemi-Symmetrical
EngineOS 25

First flight was on 2013/08/01, thanks to Bill L. for providing the wing rubber bands! Very easy to fly, maybe as a result of slightly larger wing and CG abt. 2cm in front of main spar, since several internet posts warned about a CG that is too far back. Later used the "Brush Script Std." font as template for wing marking.

Monday, April 1, 2013

"Throttle Hold" for RC boat or car

The Futaba T8 has a "smart" throttle hold option, meaning: The throttle hold will only engage when the throttle stick is close to the low position. Makes sense for an airplane or helicopter that uses a range of idle-to-full throttle. Does not help with a car or boat where you want reverse/stop/forward.

For a boat I wanted the throttle hold to hold the throttle output at 50%, but the built-in throttle hold function would only engage after moving the throttle stick near the full reverse position.

Fix: Use throttle curves.
Curve 1: usual 0..100% linear curve.
Curve 2: Always at 50%, with switch "SF" to engage, the same one I otherwise use for throttle hold.

Saturday, December 29, 2012

How to Glue ABS?!


.. can be like trying to nail Jello to the wall.

While starting on a model boat project that involves an ABS hull, the question came up how to best glue things to plastic: Wooden bulkheads, deck, metal drive tube, other plastic parts, ...

This specific boat I'm about to build is a Graupner Bugsier 3. Its hull is made from ABS plastic. For what it's worth, the site http://www.kuederli.com/bugsier3/ has a very nice description of building this kit. It does mention re-enforcing and sealing the hull with epoxy and glass mats, but doesn't mention a specific type of epoxy. Based on what I learned, plain epoxy will not work at all. The kit's instructions recommend Stabilit Express. Stabilit Express is a very good 2-component glue:
  • Nicely bonds to ABS, wood, metal, anything
  • Gap-filling
  • Sets in a short time
  • Can be drilled, sanded
...but it's very hard to obtain outside of Europe. http://www.hobby-lobby.com/ used to sell it, but won't any longer. Ordering it from German companies like Conrad seems impacted by shipping restrictions.

So I tried various glues in a very unscientific way: Glue snippet of ABS plus piece of wood to ABS, see how it holds up to me trying to pull it apart.

Here's what didn't work:
  • Various Epoxies (Tower Hobby, DevCon 30 min, UHU Plus endfest 300, Loctite Heavy Duty 5min, ...) - Usually a good bet for any glue task, but doesn't stick at all to ABS.
  • JB Weld MarineWeld, PC-11 Marine Epoxy - May be more resiliant to UV and water, but don't help with ABS.
  • Alumilite casting resin - Seemed like a good idea for flowing into bottom of hull to make is watertight, closing every little pinhole, but peels right off the ABS when hard.
  • JB Weld - Won't stick.
  • Gorilla glue - The foaming polyurethane variety. Very messy, doesn't stick to ABS. 
  • Contact cement - Spread on, let dry, then press parts together. Seem to stick, but separate easily once the glue dries.
While most of the above would initially appear OK, the hardened glue will simply 'pop' off the ABS as soon as you slightly deform the ABS or pull a little stronger.
What works with ABS:
  • Stabilit Express - we knew that.
  • UHU Hart - Nice for bonding wood to ABS, but also hard to obtain in the USA.
  • Acetone - sneaks into smallest gap, melts the ABS, gives perfect bond, but needs perfect 'fit'. Not gap-filling at all, doesn't bond to anything else. 
  • ZAP Slo, gap-filling CA - May be even better if surface is wetted with acetone just before adding CA. Since the
  • DevCon Plastic Welder, 'cream' colored - Smells a lot like Stabilit Express, may be the closest to it.
  • Loctite Plastic Bonding System - A pen-type heptane activator plus a CA-type glue. 
  • Loctite Plastic 5min Epoxy - Not to confuse with regular epoxy, this one somewhat works on ABS, but not as well as DevCon Plastic Welder nor the CA-type Bonding System.

Sunday, September 2, 2012

Another Dead Mac Disk. Backup Woes

The disk in an iMac died. Disk replacement was a little easier than in the one earlier this year.

After the replacement, tried Time Machine with an external USB-3 Toshiba drive. Worked fine twice, then the next morning it showed backup errors. The system.log listed file type modification errors. After a Disk Repair, backup functioned OK. Maybe the external drive goes to sleep over night?

Being in backup mode, tried the Control Panel "Backup & Restore" on a Windows computer. Ended in backup errors

c:\windows\system32\config\systemprofile\syncup 0x80070002 The sytem cannot find the file specified

Fix mentioned on http://en.community.dell.com/support-forums/software-os/f/3526/p/19431232/20030578.aspx: Open the Windows navigator. In the left panel, it lists the Windows 7 "Libraries" for Documents, Music, Pictures, Videos. Each one contains a user specific folder like "My Documents", a shared folder and a "Sync Up" entry. Delete the Sync Up entry, and backup works fine.

Tuesday, July 17, 2012

Speedy Bee

Built from plans provided by KCRC member.

First flight around July 1, 2012.

Engine is OS FS-26.

Flies well, very not-speedy. Can fly inverted without dropping, loop in no space at all.

Is overall a bit flimsy because I decided to build it as suggested on plan with removable tail section, rubber-banded wing etc. Landing gear is very narrow, need to turn slowly on taxi to keep wingtips above ground.

Thursday, July 5, 2012

RIGblaster plug & play needs USB-2

Tried to communicate with a RIGblaster plug & play via Java RXTX.
The Rigblaster is essentially a USB-to-serial converter. All functioned fine on a new Windows 7 computer with 64 bit Java, until suddenly it didn't. The RXTX code hung somewhere in its CommPortIdentifier class that is used to open a port.

Reason turned out the type of USB port. This computer happens to have USB-2 as well as newer USB-3 ports. With USB-2 all is fine, with USB-3 the RXTX library hangs.

Wednesday, July 4, 2012

Eclipse E4 Selections, Events, Context Variables

Eclipse 4.2 includes the new "E4" APIs which offer different ways of communication between portions of your Eclipse application.
The Lars Vogel article http://www.vogella.com/articles/Eclipse4Services/article.html nicely lists these, and here are some comments from trying them out.

Selections

In Eclipse 3.x, you used the ISelectionProvider:

ISelectionProvider selections = null;
selections.setSelection(new StructuredSelection(selected_item));

Obtaining the selection provider could be circuitous, and the selection had to be published as an ISelection, typically a StructuredSelection.

On the receiving end, you needed to register a listener to the selection provider and unpack the ISelection.
In Eclipse E4, there is @Inject magic at play that can be difficult to debug, but the resulting code is sure nice:

// In a "GUI creation" routine invoked via @PostConstruct,
// arguments are injected because the @Inject is implied.
// To get an ESelectionService injected into other method,
// a specific @Inject would be required.
@PostConstruct
public void createControls(final Composite parent,
    final ESelectionService selections)
{
    // Create GUI...
    // ... monitor for example selection of list.
    MyModelObject my_selected_object = ...;
    // Publish any selectd model object or array of model objects "as is".
    // No need to wrap into StructuredSelection:
    selections.setSelection(my_selected_object);
});

To receive such a selection in another piece of E4 code:

// E4 will invoke this whenever the active selection changes.
// If the active selection is instanceof MyModelObject, it will be provided.
// Otherwise, null will be sent.
@Inject
public void handleChangedSelection(
    @Optional
    @Named(IServiceConstants.ACTIVE_SELECTION)
    final MyModelObject selected)
{
    // No need to unpack a StructuredSelection.
    // May only have to check for null
    System.out.println("Received changed selection " + selected);
}

If your selection listener happens to only receive null arguments, the reason is likely that the selected object does not match the type that you want to receive. To debug this, change the argument of your selection receiver from MyModelObject to just Object and check the type of the received object.
When porting existing code, you may by accident still publish a StructuredSelection that wraps your MyModelObject class. The E4 framework will not unwrap a StructuredSelection. Just publish and receive the exact class that you want to transfer!

Context Variables

There is only one global selection mechanism. If you want to pass updates on various model items between E4 components, you can use context variables.
Publishing anything into a context variable is as easy as publishing a selection, but note that you can now name the item that you put into the context. This allows you to publish different types of information under different names, effectively having access to multiple selection services.
You can either use a string or a class reference:

@Inject
public void methodThatPublishesContextVariable(final MWindow window)
{
    MyModelObject my_selected_object = ...;

    final IEclipseContext context = window.getContext();
    context.declareModifiable("my_item");
    context.set("my_item", my_selected_object);
}

Receiving the item updates is very similar to receiving the selection:

// E4 will invoke this whenever the named context variable changes.
@Inject
public void handleChangedItem(
    @Optional
    @Named("my_item")
    final MyModelObject item)
{
    // May have to check for null
    System.out.println("Received changed item " + item);
}

It is important to remember that the context is hierarchical!
In the publishing code it is tempting to directly ask E4 to inject the context like this instead of going via the MWindow as shown before:

@Inject
public void methodThatPublishesContextVariable(final IEclipseContext context)
{
    ...
    context.set("my_item", ...);
}

This will not work as expected! The context that your part gets injected will be the context of your part. You will then publish the context variable for "my_item" within that local context, and updates are not received by other parts. By instead asking for the window to be injected and publishing to the window's context, all parts within that window will receive updates:

@Inject
public void methodThatPublishesContextVariable(final MWindow window)
{
    final IEclipseContext context = window.getContext();
    ...
    context.set("my_item", my_selected_object);
}

If you want all windows of your application to receive updates, you can even use the application's context:

@Inject
public void methodThatPublishesContextVariable(final MApplication app)
{
    final IEclipseContext context = app.getContext();
    ...
    context.set("my_item", my_selected_object);
}

The scoped, hierarchical nature of the context variable mechanism therefore allows you to control who receives the updates: The same part, all parts in the window, or everything in the application.

Event Broker

Finally, the IEventBroker provides a lower level mechanism to post and receive events. When posting events, you can decide to simply post them in a fire-and-forget mode, or send them and wait for the receivers to handle them:

class MyClass
{
    // Receive event broker.
    // Could also fetch in code via
    // IEclipseContext.get(IEventBroker.class)
    @Inject
    private IEventBroker event_broker;
    
    void codeThatSendsEvents()
    {
        MyModelObject my_object = ...;
        event_broker.post("my_object", my_object);
    }

The 'post()' shown here is the fire-and-forget way. Use 'send()' to wait for receivers to handle the event.
To receive events for the topic "my_object" that carry data of type MyModelObject, use the following:

@Inject
public void receiveEvent(
    @Optional
    @UIEventTopic("my_object") final MyModelObject item)
{
    System.out.println("Received " + item);
}

When replacing @UIEventTopic with @EventTopic, events will be received on some event handling thread. The annotation @UIEventTopic asserts that events are received on the user interface thread, which is useful if your event receiver intends to make UI modifications, for example display the event in SWT widgets.




Friday, June 15, 2012

Eclipse Plugins with Native Code for Multiple Platforms

Eclipse plugins can contain native code. Since the native code is specific to a certain architecture, this should probably be put into a fragment that is then added to the 'main' plugin depending on the architecture.

Such fragments can support multiple platforms, for example Linux on both 32 and 64 bit CPUs, by adding something like this to the MANIFEST.MF:

Eclipse-PlatformFilter: (& (osgi.os=linux) (| (osgi.arch=x86)(osgi.arch=x86_64)))
Bundle-NativeCode
 lib/linux/x86/mylib.so;    osname=linux; processor=x86,
 lib/linux/x86_64/mylib.so; osname=linux; processor=x86_64

On Linux, the correct library for either CPU type will be now available.Excellent!

However, when combining such plugins into a feature-based product, a problem arises. Assume you have a fragment for windows, one for Linux, one for OS X. When you add the fragments to the product's feature, you must again specify their architecture:

   plugin
         id="org.mylib.linux"
         os="linux"
         arch="x86"
         ...
If you don't specify the os and arch in the feature, the build will fail: Eclipse will try to include your plugin on both Windows and Linux, but then complain that the "linux" plugin doesn't work on Windows and vice versa.

If you do specify the os and arch, however, you can only list one arch, even though our linux fragment would work on both x86 and x86_64.

The solution is to list the same fragment again in the fragment.xml with the other os and arch settings:

   plugin
         id="org.mylib.linux"
         os="linux"
         arch="x86_64"
         ...

Note that you may have to do this directly in the feature.xml. The feature editor's Plug-Ins tab doesn't support adding an already included plugin multiple times, but once you did add it in the feature.xml, you can view and edit it in there.