DSL502T + Ruby + Webrick + YAML = DIY Monitoring Appliance

At the top of the hill on my rural property is a bore that provides stock water for my stock and three neighboring properties.

So what does this have to do with DLink DSL502T routers, Ruby, Webrick and YAML?

From time to time faults in the various farm system drain water from the header tank faster than the bore pump can pull water out of the ground.... so the pump runs continually.  Expensive on power but also potentially damaging.  Normal use is about 1 hour per day in summer, much less in winter.

The problem was how to know if the pump was running excessively without climbing the hill.... and even if I did check it was hard to know if the pump was running because it had just reached to refill point or had been running for three days.

A couple of years back I built a bore monitor that used an IR beam to determine of the bore pump was running and could be queried over the wireless network by a ruby application.  By querying every 5 minutes and storing the data in a MYSQL database I could graph daily usage over time and see when things had gone awry.

The network connection in the original design was performed using an AVR AT90S8515 and a Packet Wacker ethernet interface.  For 2 years this worked well and then the Packet Wacker died.

Around this time i had been playing with DSL502T's to provide Amateur Radio IGate services and had a build environment configured for the OpenWRT firmware.   Included in the OpenWRT packages is Ruby and I know I could easily write a ruby program with a web interface (using Webrick) and simple data storage (using YAML) so replace the original monitor board.

It took some playing but I was able to build OpenWRT with Ruby and the required modules for Webrick and YAML to operate with the following configuration:

make menuconfig

With the following options:

Target System = TI AR7 [2.6]
Target Profile = No WiFi
Target Images = squashfs

Base System = base-files, br2648ctl, busybox, dropbear, hotplug2, libgcc, libpthread, libstdcpp, mtd, opkg, uci, uclibc, udevtrigger

Network = atm-tools, wget
Library = (none)
IPv6 = (none)

Kernel Modules = kmod-ipt-core, kmod-ipt-nathelper, kmod-sangam-atm-annex-a, kmod-ppp, kmod-pppoa, kmod-pppoe, kmod-ocx

Utilities = gpioctl

Languages = ruby, ruby-core, ruby-erb, ruby-irb, ruby-openssl, ruby-webrick, ruby-yaml

The ruby-erb and ruby-openssl libraries are required in addition to ruby-webrick if you actually want webrick to work.  Not including these libraries will cause errors when you require 'webrick' in your ruby code.

I have not attempted a minimum size configuration here... it is highly likely when not used as a modem that modules such as kmod-pppoa, kmod-pppoe and kmod-sangam-atm-annex-a can be excluded.

It's not blindingly fast serving pages but as a stand alone monitoring appliance interfaced to data collection sensors via the onboard serial port and providing a simple web interface showing the current status and historical trends it does the job for me.

Another great use for $1 modems.  Time to buy a few more for the stockpile.

 

Building a DLink DSL-502T Based IGate

This project came about because a group of amateur radio operators in Auckland wanted to improve the APRS receive coverage by using IGates to add receive only coverage around South Auckland.

We found that a really low cost way of doing this (both initial investment and ongoing operational costs) was to use DLink DSL-502T ADSL routers with customized firmware.

 Blog_DSL-502T-GenII.jpg

The DLink DSL-502T is very common in New Zealand.  It was the router of choice for many first time ADSL users who signed up with the large ISP's.  Over time many users want devices with more capability (wireless or more ports) so the routers are available at very low cost (or free). 

For those who care about the technical details.... the official specification for a DSL-502T is

  • ADSL modem with ADSL2/2+ support to 24Mbit/s+.
  • Single 100MBps LAN port.
  • Single USB-B port (default firmware uses this to provide USB-over-ethernet to a PC host only, it's not clear if this can actually be used as a USB host)
  • Flash chip: 4MBytes - Samsung K8D3216UBC a 32Mbit NOR-type Flash Memory organized as 4M x 8
  • SDRAM: 16Mbytes - Nanya NT5SV8M16DS-6K
  • CPU: TNETD7300GDU Texas Instruments AR7 MIPS based

More complete hardware details are on the OpenWRT DSL-502T hardware page.


In it's IGate implement we don't use the ADSL modem or the USB-B port.  What the specification doesn't say is that there is an onboard serial port (even provided with soldered pin headers) which is perfect (with level conversion from RS-232 to 3.3V TTL) for connect to an TNC.

Using a DSL-502T as an IGate is as much an exercise of configuring software as it is connecting hardware.  The standard operating software makes the device an ADSL router.... we need to replace this so it becomes an IGate.

This article is written for those who are interested in how to build their own operating system image for the device and outlines the steps I followed.  It isn't hard if you have a Linux installation (real or in a VM).... I used Ubuntu 8.1 which work really well as a platform for building the operating software and flashing it into the routers.

If you don't want to get into the details and just want an image to flash visit the guys at WetNet who have prebuilt images available for download - for the DSL-502T you need an image compiled for an AR71xx.

Before going into the detail of how to we built and configured the firmware it is worth explaining what we wanted to achieve.

  • A standard set of firmware that we could flash into many routers.
  • Installation without needing to connect to each router to install extra packages or make configuration settings (unless absolutely necessary).
  • For the router to be able to indicate it's operational status using the front panel LED's (only Status, Ethernet and USB are controllable... it appears that the ADSL indicator is managed directly from the ADSL interface).
  • Central management of the APRSD configuration and have this automatically applied when the power is cycled on the router.

We achieved all these objectives using a custom OpenWRT build. 

It must be said that this project would not have been possible without the efforts of all those involved in the OpenWRT project (for creating the build scripts and environment), those who make it work on AR71xx based routers and those involved with the WebNet project who ported APRSD for the OpenWRT platform.  We are thankful to all these people and hope that the notes here benefit others wanting to package these components to build IGates.

The following outlines the process and scripts we used to configure the DSL-502T as an IGate to meet these objectives.

A suitably configured environment is required to build the OpenWRT firmware.  Assuming you are using Ubuntu 8.1

1.  Install the packages required by the OpenWrt Kamikaze buildsystem

sudo apt-get install build-essential binutils flex bison autoconf gettext texinfo sharutils subversion libncurses5-dev ncurses-term zlib1g-dev 

2.  Checkout and prepare Kamikaze and the packages.  We built out image based on Kamikaze 8.09.2

mkdir ~/openwrt
cd ~/openwrt
svn checkout svn://svn.openwrt.org/openwrt/branches/8.09 .

3.  I installed the minicom and ntpclient packages in the image.  Minicom is useful for checking the serial port works..... and ntpclient to keep the time correct.  Without ntpclient the box doesn't keep very good time.

./scripts/feeds install minicom
./scripts/feeds install ntpclient

4.  By default the serial ports are configured as serial consoles.  This needs to be disabled to use them to connect with a TNC.  Disabling the ports requires a customized /etc/inittab to be included in the flash image.  

Any files in the ./files folder of the build will be added to the flash image when it is built. 

Create the following ./files/etc/inittab to configure the serial ports so they can be used.

::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
#tts/0::askfirst:/bin/ash --login
#ttyS0::askfirst:/bin/ash --login
#tty1::askfirst:/bin/ash --login

5.  The default configuration for OpenWRT (at least for the version I built) is to bring the network up with a static IP address.  I wanted DHCP so a customized /etc/config/network needs to be included in the flash image. 

Create the following ./files/etc/config/network to configure the network for DHCP.

# Copyright (C) 2006 OpenWrt.org

config interface loopback
    option ifname    lo
    option proto    static
    option ipaddr    127.0.0.1
    option netmask    255.0.0.0

config interface lan
    option ifname    eth0
    option proto    dhcp   

 

6.  While we are making changes to /etc/config it is a good idea to configure the system name and timezone.

Create the following ./files/etc/config/system to configure the system name and timezone (in this case New Zealand).

config system
    option hostname    OpenWRT_IGate
    option timezone    NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0

 

7.  We installed the ntpclient package earlier but this still needs to be configured so it connects to an appropriate time server.

The configuration details are in /etc/init.d.

Create the following ./files/etc/init.d/ntpclient to start the ntpclient with an appropriate time server (or pool in this case).

#!/bin/sh
/usr/sbin/ntpclient -c 1 -s -h nz.pool.ntp.org &

8.  OpenWRT uses symbolic links between /etc/rc.d and /etc/init.d so we need to create these in ./files to reference the updated ntpclient start script.

Create the following symbolic link in ./files/etc/rc.d

ln -s ../init.d/ntpclient S55ntpclient

9.  Time to build OpenWRT for the AR7 based DSL-502T.  First it is necessary to configure the build:

make menuconfig

With the following options:

Target System = TI AR7 [2.6]
Target Profile = No WiFi
Target Images = squashfs

Base System = base-files, br2648ctl, busybox, dropbear, hotplug2, libgcc, libpthread, libstdcpp, mtd, opkg, uci, uclibc, udevtrigger

Network = atm-tools, wget
Library = (none)
IPv6 = (none)

Kernel Modules = kmod-ipt-core, kmod-ipt-nathelper, kmod-sangam-atm-annex-a, kmod-ppp, kmod-pppoa, kmod-pppoe, kmod-ocx

Utilities = terminal/minicom, gpioctl

10.  We wanted to default the Minicom configuration so it opened port /dev/ttyS0 at 9600 baud, did not send the default initialization string but instead sent the "VER" command to the TNC.

This is done by creating the file minirc.dfl in ./files/etc with the following contents:

pu port             /dev/ttyS0
pu baudrate         9600
pu minit            VER^M
pu mreset          
pu rtscts           No 

11.   The aprsd package (or other amateur radio packages) is not included in the OpenWrt source tree at the time of writing.  The packages can be downloaded from www.wetnet.net.

The OpenWrt-AX25.tgz that you download doesn't match the the folder structure required by the OpenWrt build (at least for version 8.09.2) so it is easiest to uncompress to a different location and then copy the files to the locations as shown in the following table:

OpenWRT-AX25.tgz OpenWRT Source
packages/libs/libax25 package/libs/libax25
packages/net/aprsd package/net/aprsd
packages/net/ax25-apps package/net/ax25-apps
packages/net/ax25-tools package/net/ax25-tools
packages/net/digi-ned package/net/digi-ned

 

12.  Ensure the aprsd and required libraries are flagged to be built:

make menuconfig

With the following additional options:

Library = libax25
Amateur Radio = aprsd

 

13.  If you are going to flash a single DSL-502T you can set the aprsd configuration by adding appropriately configured aprsd.conf, aprsd.config, INIT.TNC, RESTORE.TNC and welcome files to the ./files/etc/aprsd folder.  

Because we were going to install multiple DSL-502T IGates and were trying to create a standard image that could be flashed to all units it was important to have a more flexible configuration process for aprsd.

We went with the approach of storing the aprsd.config file for each unit on a central web server.  The files are named with the Ethernet MAC address of the router. 

The startup script downloads the appropriate config file on startup of the router and updates the version in flash if it has changed.  

The script we used is an extension to the standard aprsd startup script and is as follows:

#!/bin/sh /etc/rc.common
#
# Starts or stops aprsd server.
#
# Extended to perform additional DSL-502T IGate Configuration Load
#
#
# Ethernet and USB Leds are used to indicate status of router configuration
#
# Ethernet
#    Off =
#    On = IP Address OK from DHCP
#    Flash = No IP Address from DHCP
#
# USB
#    Off =
#    On = APRSD Configuration OK
#    Flash = APRSD Configuration Invalid 

START=91

# Initially both off
echo none > /sys/class/leds/ethernet/trigger
echo none > /sys/class/leds/usb/trigger

APRSD_CONF="/etc/aprsd/aprsd.conf"
APRSD_CONFIG="/etc/aprsd/aprsd.config"
SERVER="http://www.mywebserver.co.nz/"
MYMAC=`ifconfig eth0 | head -1 | grep 'HWaddr ' | cut -c39-55`
MYIP=`ifconfig eth0 | head -2 | tail -1 | grep 'inet addr:' | cut -c21-33`

if [ -z $MYIP ]; then
        echo heartbeat > /sys/class/leds/ethernet/trigger
        exit 1
else
        echo default-on > /sys/class/leds/ethernet/trigger
fi

cd /etc

if [ -n $MYMAC ]; then
        wget -q -N $SERVER$MYMAC.conf
fi

if [ -f $MYMAC.conf ]; then
        if [ ! -f $APRSD_CONFIG ]; then
                cp $MYMAC.conf $APRSD_CONFIG
        else
                CONFDIFF=`diff $MYMAC.conf $APRSD_CONFIG | wc -l`
                if [ $CONFDIFF -gt 0 ]; then
                        cp $MYMAC.conf $APRSD_CONFIG
                fi
        fi
fi

# Check if $APRSD_CONFIG has been correctly configured

if [ ! -f $APRSD_CONFIG ]; then
        echo heartbeat > /sys/class/leds/usb/trigger
        exit 1
fi

SERVERCALL=`cat $APRSD_CONFIG | grep 'AX_APRSD_SERVERCALL' | cut -d'=' -f 2`

if [ $SERVERCALL = '"nocall"' ]; then
        echo heartbeat > /sys/class/leds/usb/trigger
        exit 1
fi

chmod 745 $APRSD_CONFIG
. $APRSD_CONFIG

start() {
   echo  "Starting aprs server daemon. "
        # Create log directory - uncomment if you want logging
#       mkdir -p /var/log/aprsd       
        # Update aprsd.conf

        # Escape options that may include /
               
        AX_APRSD_PORT=`echo $AX_APRSD_PORT | sed 's/\//\\\&/g'`
        AX_APRSD_MYLOCATION=`echo $AX_APRSD_MYLOCATION | sed 's/\//\\\&/g'`
        AX_APRSD_NETBEACON=`echo $AX_APRSD_NETBEACON | sed 's/\//\\\&/g'`
       
        sed -i "s/\(tncport\)\(.*\)/\1 $AX_APRSD_PORT/" $APRSD_CONF
        sed -i "s/\(tncbaud\)\(.*\)/\1 $AX_APRSD_TNCBAUD/" $APRSD_CONF
        sed -i "s/\(servercall\)\(.*\)/\1 $AX_APRSD_SERVERCALL/" $APRSD_CONF
        sed -i "s/\(MyCall\)\(.*\)/\1 $AX_APRSD_MYCALL/" $APRSD_CONF
        sed -i "s/\(MyLocation\)\(.*\)/\1 $AX_APRSD_MYLOCATION/" $APRSD_CONF
        sed -i "s/\(MyEmail\)\(.*\)/\1 $AX_APRSD_MYEMAIL/" $APRSD_CONF
        sed -i "s/\(aprspath\)\(.*\)/\1 $AX_APRSD_PATH/" $APRSD_CONF
        sed -i "s/\(pass\)\(.*\)/\1 $AX_APRSD_PASS/" $APRSD_CONF
        sed -i "s/\(Server\)\(.*\)/\1 $AX_APRSD_SERVER/" $APRSD_CONF
        sed -i "s/\(NetBeacon\)\(.*\)/\1 $AX_APRSD_NETBEACON/" $APRSD_CONF
        #  start aprsd if enabled
        eval aprsd=$AX_APRSD
        if [ "$aprsd" = "TRUE" ]; then
                /usr/bin/aprsd -d
                echo default-on > /sys/class/leds/usb/trigger
        fi
                touch /var/lock/aprsd
}

stop() {
   echo  "Stopping aprs server daemon. "
        rm -f /var/lock/aprsd
        killall -q -INT aprsd
}

There are a few interesting things in the script.

  • The Ethernet and USB LED's on the DSL-502T are used to indicate status.
  • Ethernet flashing means no IP address was assigned so there is a problem somewhere with DHCP.
  • Ethernet on means an IP address was assigned.
  • USB flashing means that no aprsd.config file could be downloaded (and none already exists in flash).
  • USB on means that the device has a valid aprsd.config file (either newly downloaded or already existing).
  • When both Ethernet and USB LED's are lit the aprsd service will have been started.
  • The aprsd.config file was extended to include additional settings which are not included in the standard file and only exist in aprsd.conf.

14.  With all the modules selected the OpenWRT image is ready to build.

make

This could take a while.  Everything going well you will see a string of make messages, the last few messages if all went well being:

 make[2] package/rootfs-prepare
 make[3] package/preconfig
 make[2] target/install
 make[3] -C target/linux install
 make[6] -C target/linux/generic-2.6/image/lzma-loader clean compile

Your image is now built and available at ./bin/openwrt-ar7-squashfs.bin

This is the image that you flash to your DSL-502T with the command:

./scripts/adam2flash-502T.pl 192.168.1.1 -setmtd1 ./bin/openwrt-ar7-squashfs.bin

Note:  Depending on the version of your DSL-502T the default IP address may be 10.1.1.1 (rather than 192.168.1.1)

Once the firmware is installed the DSL-502T will restart.... the restart process can take up to 60 seconds.  An operational IGate will be flashing the Status LED (like a heartbeat) and have Ethernet and USB LED's on.

Check your IGate appears using APRS.FI but note that your NetBeacon is not sent immediately on startup.... it will only be sent after the specified time.   Setting the NetBeacon interval to 1 minute initially to check the IGate appears and once you are properly communicating with the APRS-IS server update the NetBeacon interval to something more reasonable - we use 60 minutes.

 

 

WDXC FT-450 Dial Kit

Following are some photos of the WDXC FT-450 Dial Kit and the steps to fit this to my Yaesu FT-450.

My FT-450 and the kit as received from Japan.

FT-450 and Kit

Closeup of the FT-450 with the standard tuning dial.....

FT-450 with standard dial

The rubber ring around the standard tuning dial removed to allow access to the hex nut....

FT-450 with rubber ring removed

Standard tuning dial removed and comparison between the old and new tuning dials.....

FT_450 with dial removed

 The new tuning dial installed.

 

FT-450 with new dial

 

 

Thoughts on the Puxing PX888

After a recent change in cars I was reluctant to reinstall the FT-7800 because it would involve drilling holes in the interior panels.  I thought it best to let the car get over 100000km before I did that. 

I was also enjoying having the FT-7800 as a base station rig so used the VX-5 for a while for the occasional chat on simplex or the Auckland 6625 repeater but I wanted something I could leave permanently in the vehicle and that would allow me to use a speaker mic.

While commuting I mostly listen to podcasts rather than ragchew so I wasn't looking for a huge investment in new gear... just something that was small so it would fit into the CD storage cabinet on a Honda Accord, could connect to a mag mount antenna on the car, could be programmed with a few of the commonly used frequencies and allowed me to connect a speaker mic (the VX5 should do all that but mine has a problem with the speaker mic not working and it is too old to be worth fixing).

Scanning through e-Bay I noticed the VHF handhelds available from various China/Hong Kong suppliers and was surprised to see fairly positive comments on eham.net and dxportal.com.   There are many suppliers and models but Puxing was generally well supported and there was good community behind the radios with an active Yahoo Group.  It was certainly positive enough that US$80 including shipping was worth a try.  

 Puxing PX888

I looked at various online vendors and ebay sellers and decided to go with www.asiaradiosales.com - primarily based on the fact that their website looked fairly professional.  The ordering and payment through Paypal was easy... the web site showed the order as "Processing" and indicated that the payment had been received.... and so it sat for 5 days until I finally sent an email inquiring if the items had been shipped. 

I didn't get a personal reply... just an automated message from the web site software now indicating that my order was "Delivered".  Interesting.... it certainly wasn't here. 

In the message I did receive a registered mail tracking number (actually I received a number with no indication of what it was... it was only through extensive googling that I discovered an RAxxxxxHK number is registered mail reference) so I could see that the parcel was proceeding through the Hong Kong postal system, onto a flight to NZ and arrived in Auckland 3 days later. 

Not bad once things started moving.... I guess there was a glitch in the order process somewhere... so for anyone else ordering keep an eye on your order status and if it doesn't move in a couple of days send a prompting email.... just don't expect a reply from a real person.  I guess you can't expect much for an $80 radio.

As well as the PX888 I also ordered a speaker microphone, programming cable and female SMA to BNC and PL259 adaptors for connection to external antennas.  

If you are considering this style of radio I think this is the minimum list of items to order.... the extras a not expensive and they make the radio a lot more usable.

So what is good about the PX888.....

  • Seems solid, well built and not overly large or heavy (but not like a toy either).
  • Transmit and receive performance is similar to my Yaesu VX5 (to my ear anyway) using the supplied antenna or the whip on the car.
  • The display is clear and easy to read with a choice of 3 colors.
  • The programming software (while typical of software written by hardware engineers so the UI leaves a little to be desired) is easy to use and is the quickest way to get the radio configured and on the air with the frequencies you want.
  • The speaker microphone works.
  • It is more tolerant than the VX5 of the overload from the Auckland Sky Tower.
  • The voice announcements (believe it or not..... really useful when changing channel without looking).
  • It's a basic 2m handheld that works with very few surprises.
  • The price.

 Compared to the VX5.....

  • The operation isn't quite so easy.... most stuff done through menu's.... it's there but with more keypresses.  Many of the options on the VX5 are press and hold which works really well.
  • There seems to be more "hiss" behind the signal on receive.... but it could just be that the received audio seems to have more "treble".


To get started in the shortest amount of time.....

  • You must buy the programming cable
  • While you wait for the radio to arrive
    • Join the Puxing777 (yes they talk about the PX888 as well) group on Yahoo groups and read the messages and files.
    • Read the PX888D Enhanced User Manual by "linkinpark9812".  This is a fabulous document and really helps explain the features and more importantly what some of the options in the programming software mean.
    • Download the PX888 sofware from Puxing (don't expect it to come with your programming cable.... at least not from asiaradiosales.com) and load your frequencies and set the radio configuration options based on the Enhanced User Manual.
  • As soon as your radio arrives install the battery and antenna, program it with your configuration and get on the air.  It took me 15 minutes.


Will it survive?

  • The radio... not sure... still early days and I have seen comments on burned out finals but I am very surprised at how well it works for the price.
  • The power supply for the charger is junk.... mine didn't work at all... no big deal for me as I have other 12v supplies but could be a problem for some.

Would I order another.... definitely.



 

 

fishpond.co.nz integration

My RailTrack web site has been a lot of fun to develop but I really need to find a way to cover at least some of the hosting costs.

Tried adding Amazon links to books relevant to the topic (trains!) and while I did get a few clicks through it wasn't wildly successful. 

I think there are two issues here:

  • The rapidly declining New Zealand dollar makes everything from the US particularly expensive.... and then there are the Amazon freight charges!
  • The Amazon generated links didn't seem to change very often so there wasn't a lot to draw users through.

Not much I can do about the dollar and I am sure I could sort out the second one by managing the section of product myself.... but instead I am going to try out fishpond

To keep the customers happy they seem to have a good product range at reasonable NZ$ prices and shipping is affordable.

To keep me happy they provide a downloadable XML feed for selected product categories so I can load this and use it as the basis for selecting products for the site.

RailTrack is based on Rails (it is a web site on trains.... what else would you expect) so hpricot came to the rescue for the XML parsing.... sure the requirements weren't that challenging but the gem is so nice to use..... 

Fishpond catalog records look like:


    <PRODUCT NUM="3575385">
    <ATTRIBUTE1><![CDATA[Engine Drivers Manual: How to Prepare, Fire and Drive a Steam Lo]]></ATTRIBUTE1>
    <author><![CDATA[ Topping, Brian]]></author>
    <isbn>0860935396</isbn>
    <PRODUCT_URL><![CDATA[http://www.fishpond.co.nz/Books/Nonfiction/Transport/Railroads/General/product_info/3575385/?ref=1402]]></PRODUCT_URL>
    <IMAGE>http://image.fishpond.co.nz/9780860935391.jpg</IMAGE>
    <SHIPMENT_COST>4.95</SHIPMENT_COST>
    <RRP>$72.99</RRP>
    <PRICE>$70.48</PRICE>
    <CURRENCY>NZD</CURRENCY>
    </PRODUCT>

 

 

and the model import method looks like:


    def self.import(sourcefile)
        doc = open(sourcefile) { |f| Hpricot(f) }
        (doc/"products/product").each do |book|
            mi = Merchandise.find_by_vendor_product(book.attributes['num'])
            if mi.nil?
                mi = Merchandise.new
            end
            mi.vendor_product = book.attributes["num"]
            mi.isbn = book.at("isbn").inner_text
            mi.title = book.at("attribute1").inner_text
            mi.author = book.at("author").inner_text
            mi.vendor_url = book.at("product_url").inner_text
            mi.vendor_image = book.at("image").inner_text
            mi.rrp = book.at("rrp").inner_text.to_s.sub!("$","")
            mi.vendor_price = book.at("price").inner_text.to_s.sub!("$","")
            mi.vendor_shipping = book.at("shipment_cost").inner_text
            mi.vendor_currency = book.at("currency").inner_text
            puts mi.isbn
            mi.save
        end
    end

 

 

 

RF Datalink using a PICAXE UART

Living on a farm presents some interesting opportunities for electronic projects. My current work in progress is wireless monitoring of the water levels in the large 5000 Gallons tanks we have on the property.

Many years back I ordered some simple 433.920 mhz transmitter and receiver modules (similar to the RF Link Transmitter and Receiver from SparkFun Electronics) for the parts bin. I didn't have a specific project in mind although at the time did some basic experimentation with limited success..... partly becaue I didn't really have the time to coding a robust manchester encoding scheme to ensure the receiver DC balance was correct for the bit slicer.

The water tank monitoring project got the parts out of the bin and back on the workbench.... but how to build a reliable RF link with the least amount of effort?

Firstly a statement of requirements:

  • Single direction data link
  • Small amount of data to transfer (4 bytes)
  • Multiple transmitters sharing the same frequency
  • The receiver is centrally located on a high location but the transmission paths can be up to 300 meters (clear line of sight).

The solution was to use low cost/easy to program PICAXE 08M parts.

Each tank has a PICAXE 08M which reads the tank level and periodically builds a data packet and transmits it on 433.920 mhz.

There is a central 433.920 mhz receiver which has a PICAXE 18X (only because it was in the junkbox... other parts could equally be used) dedicated to decoding the received packets and for valid packets outputting a serial data message to be recorded in the database.

To make this work

  • Data must be sent from transmitters to the receiver in packets.
  • Each packet must have an ID so the receiver knows which transmitter sent it.
  • The receiver must have some way of validating that the packet received is valid and complete.
  • The packet assembly and disassembly must be performed by a part with 256 bytes of code space and a limited programming language.

The message format I used is as follows:

PreAmble $55,$55,$55,$55,$55,$55
Packet Header $FF,$00,$01,$7F
Transmitter ID STATIONID,INVSTATIONID
Transmitter Data TANKLEVELH,INVTANKLEVELH
  TANKLEVELL,INVTANKLEVELL
  PKTCOUNT,INVPKTCOUNT
Packet Checksum CHECKSUM,INVCHECKSUM
Finalization $AA,$AA,$AA,$AA

The PreAmble is sent before the data packet to set the receiver DC balance for the packet that follows.

The Packet Header is used by the receiver to identify the start of what might be a valid packet. Having received a header the receiver reads the next 8 bytes which comprise the packet of data. Each byte that is sent is immediately followed by it's inverse. I have found that up to 2400 baud this works fine to maintain the receiver DC balance and ensure reliable decoding (assuming the received signal level is sufficient).

Following the 8 bytes of data is the packet checksum. The packet checksum is the low byte of the sum of STATIONID, TANKLEVELH, TANKLEVELL and PKTCOUNT.

If the packet checksum is valid for the received data packet then the receiver PICAXE accepts this as a valid packet.

This is by no means a scheme that for high performance data transfer but for simple single direction links using low cost parts I have found it to work well.

The great thing is that PICAXE 08M Software UART does all the sending and receiving.

I use the PICAXE SERIN command to receive the data. SERIN handles fixed length packets very well including the search that identifies the packet header but the downside is that it cannot be interrupted while waiting for a new packet. Unfortunately this means the receiving PICAXE is dedicated to decoding incoming packets and cannot do other things. To do that would require coding closer to the hardware (not PICAXE basic), writing your own packet management code and probably a hardware UART that generates interrupts as new bytes are received.

My objective was to get something workable and reliable. That I have achieved. Use fewer parts and you get to write more code.

Here is the code for those who want to try something similar. I can't see why this technique would not work with any microcontroller.

 


' PICAXE 08M Tank Level Transmitter
'
' Pin Assignments:
' 0 = (Out) Serial
' 1 = (In) Tank Level ADC
' 2 = (Out) Tramsitter Serial Data
' 3 = (In)
' 4 = (Out) Power Up Control for Transmitter and LM324

#picaxe 08m

' Important - Change this for the device being installed
'
' Current assignments as follows"
'
' $00 = Big Shed 25000 litre tank
' $01 = House 25000 litre tank
' $02 = Bore tank


symbol STATIONID = $00

' Constants - Pin Assignments

symbol TANKLEVEL = 1
symbol TXDATA = 2
symbol POWER = 4

' Constants - Other

symbol SENDDELAY_H = $300
symbol SENDDELAY_L = $5
symbol FASTTXLIMIT = 48
symbol POWERSETTLE = 150

' Variable Usage

symbol TANKLEVELW = w0
symbol TANKLEVELL = b0
symbol TANKLEVELH = b1
symbol INVTANKLEVELL = b2
symbol INVTANKLEVELH = b3
symbol PKTCOUNT = b4
symbol INVPKTCOUNT = b5
symbol FASTTXCOUNT = b6
symbol INVSTATIONID = b8
symbol CHECKSUM = b9
symbol INVCHECKSUM = b10

PKTCOUNT = 0
FASTTXCOUNT = 0

main:

' Power Up the Transmitter and LM324

low POWER
pause POWERSETTLE


' Read ADC for tank level

readadc10 TANKLEVEL,TANKLEVELW
sertxd("Tank Level : ",#TANKLEVELW,CR,LF)

' Transmit to base

gosub transmit

' Shutdown the Transmitter and LM324

high POWER

' Short delay is sent on startup until it has been sent STARTUPCOUNT times and then reverts to the long delay

if FASTTXCOUNT > FASTTXLIMIT then maindelay_h
sleep SENDDELAY_L
FASTTXCOUNT = FASTTXCOUNT + 1
goto main2
maindelay_h:
sleep SENDDELAY_H
main2:

' Add extra random delay to keep stations out of sync

nap STATIONID
goto main

transmit:

' Transmits lead $55 bytes followed by station id and tank level high/low bytes
' All data transmitted is followed by it's inverse to keen DC level correct for receiver

PKTCOUNT = PKTCOUNT + 1
INVPKTCOUNT = $FF-PKTCOUNT
INVTANKLEVELH = $FF-TANKLEVELH
INVTANKLEVELL = $FF-TANKLEVELL
INVSTATIONID = $FF-STATIONID

CHECKSUM = STATIONID + TANKLEVELH + TANKLEVELL + PKTCOUNT
INVCHECKSUM = $FF-CHECKSUM

' Send data

serout TXDATA,N600,($55, $55, $55, $55, $55, $55, $FF, $00, $01, $7F, STATIONID, INVSTATIONID, TANKLEVELH, INVTANKLEVELH, TANKLEVELL, INVTANKLEVELL, PKTCOUNT, INVPKTCOUNT, CHECKSUM, INVCHECKSUM, $AA, $AA, $AA, $AA)

' Make sure transmitter is off at the end

low TXDATA
return

 


' PICAXE 18 Tank Receiver
'
'
'
' Pin Assignments:
' In0 =
' In1 = Transmitter Serial In
' In2 =
' In6 =
' In7 =
' Out0 =
' Out1 =
' Out2 = Decoded Packet Data Out
' Out3 =
' Out4 = Decode OK LED
' Out5 =
' Out6 =
' Out7 =


#picaxe 18x

' Constants - Other

symbol RAMBASE = $50
symbol TXMAX = $07
symbol TXBUFFER = $03
symbol VALIDRX = $04
symbol DECODEOUT = $02

' Variables

symbol TANKLEVELW = w0
symbol TANKLEVELL = b0
symbol TANKLEVELH = b1
symbol INVTANKLEVELL = b2
symbol INVTANKLEVELH = b3
symbol PKTCOUNT = b4
symbol INVPKTCOUNT = b5
symbol CHECKSUM = b8
symbol INVCHECKSUM = b9
symbol STATIONID = b10
symbol INVSTATIONID = b11
symbol TEMP1 = b12
symbol TEMP2 = b13

init:
' Initialize the RAM so there is not data from any station - 2 bytes per station

FOR TEMP1 = 0 TO TXMAX
TEMP2 = TEMP1 * TXBUFFER
TEMP2 = TEMP2 + RAMBASE
poke TEMP2,0
TEMP2 = TEMP2 + 1
poke TEMP2,0
TEMP2 = TEMP2 + 1
poke TEMP2,0
NEXT

rxloop:
serin 1,N600,($FF, $00, $01, $7F),STATIONID, INVSTATIONID, TANKLEVELH, INVTANKLEVELH, TANKLEVELL, INVTANKLEVELL, PKTCOUNT, INVPKTCOUNT, CHECKSUM, INVCHECKSUM

' Check if the Packet Received is valid

TEMP1 = STATIONID + TANKLEVELH + TANKLEVELL + PKTCOUNT
IF TEMP1 = CHECKSUM THEN rxok

rxinvalid:
sertxd("Invalid Packet - Checksum Invalid",13,10)
goto rxloop

rxok:
' Debugging Information

toggle VALIDRX
sertxd("Valid Packet Received",CR,LF)
sertxd("Station ID : ",#STATIONID,CR,LF)
sertxd("Tank Level : ",#TANKLEVELW,CR,LF)
sertxd("CheckSum : ",#CHECKSUM,CR,LF)

' Save the new data into RAM

TEMP1 = STATIONID
TEMP2 = TEMP1 * TXBUFFER
TEMP2 = TEMP2 + RAMBASE
poke TEMP2,TANKLEVELH
TEMP2 =TEMP2 + 1
poke TEMP2,TANKLEVELL
TEMP2 = TEMP2 + 1
poke TEMP2,PKTCOUNT

' Write all data in RAM to the serial Port

serout DECODEOUT,T4800,($2B)

' Remote Station 0
FOR TEMP1 = 0 TO TXMAX
TEMP2 = TEMP1 * TXBUFFER
TEMP2 = TEMP2 + RAMBASE
peek TEMP2,TANKLEVELH,TANKLEVELL,PKTCOUNT
serout DECODEOUT,T4800,(TANKLEVELH,TANKLEVELL,PKTCOUNT)
NEXT
serout DECODEOUT,T4800,(CR,LF)

goto rxloop

 

 

APRS in an Ammunition Can

The Papakura Amateur Radio Club has been fairly active with technical projects in 2008.  The project for the last quarter has been assembly of OpenTracker kits using PCB's and component kits supplied by Keith ZL1BQE and Ian ZL1VFO.

The plan in early 2009 is to combine the assembled OpenTracker boards with Maxon DM-2550 radios and a GPS/Radio interface board developed by Keith and Ian to form a self contained APRS unit.

There was plenty of enthusiasm for the project.... so much so that we ran out of PCB's.... so I built my OpenTracker using a DSE Prototyping board... a little more time consuming but not difficult and a good way to better understand the circuit.


My plan was to package the OpenTracker, Maxon, GPS, Interface circuits and battery into a rugged and easy to carry unit that I would move from car to car and at least one take flying in the Citabria or Cub.  Surfing the net for packaging ideas I noticed a few articles where projects had been packaged in used ammunition cans.

New Zealand is not a great place for Army Surplus but I tracked down 30 calibre boxes (and larger) at Kiwi Disposals in Karangahape Road for NZ$12.50. Good condition.... a little disappointing that they were labeled as containing blank rounds but you can't have everything.  


I must at this point mention that I am not an experienced metal or woodworker.... do the approach I took was very much influenced by my limited selection of tools and availability of easy to work materials.

I wanted to make a slide in/out module that would fit into the can and hold the following items securely:

    1 x Maxon DM-2550 Data Radio
    1 x Radio / GPS / Power Interface board
    1 x Ashtech G-8 GPS Receiver Module
    1 x OpenTracker Module
    1 x 12v SLA Battery
    
A 30 calibre looks like quite a big box before you start trying to package everything inside!

I also wanted the top panel to be recessed sufficiently that the box could close without hitting the RF Out, GPS Antenna connectors and other switches.

So my solution was to start with a $4.00 kitchen cutting board from The Warehouse.  



This had some nice features.....

    A handle.
    Easy to cut, file and generally shape as required.

But it wasn't perfectly flat... as you may notice in the photos.
     
I cut it to size to form a base board and front panel and joined these with some 90 degree aluminium brackets that were sitting on the workbench (no idea why I had these... must have been for another never completed project).  I need some sealant between the base board and front panel to hide the bend in the baseboard.


Played around with spacing of the various components to see where they could fit.  The final placement was really determined by the battery and Maxon as the two largest components.

The interface board was mounted above the Maxon.  This is not the Keith/Ian special but provides

    11.7 volts to the Maxon using an LM317
    5v to the GPS module using an 8221L switching regulator
    RS232 level conversion of the GPS TTL in/out so the OpenTracker understands the data
    3v Memory Backup battery for the GPS
    A mounting place for the OpenTracker board
    
The Ashtech G-8 GPS module is one I got from Derek Fortune Zl1UF a few years back. 

Not as small and thrifty on power as the newer units but seems to work well enough for this application.  The main issue with the G-8 is in the default configuration the RMC NMEA message is not enabled so the OpenTracker will not get a position lock. 

Enabling this is easy enough with a PC (and the correct documentation) but the configuration change is lost as soon as power is removed... unless a backup battery is fitted.  It will be interesting to see how long the battery lasts.... it if proves to be a problem there is enough space on the board to fit an 8 pin Micro with software to configure the GPS on power up.

 

What is on next Wednesday......

Sometimes a simple programming exercise can be a lot of fun and really help someone out.

David (ZL1DK.... the guy who manages the Papakura Radio Club website http://www.qsl.net/zl1vk) asked me the other week if there was any way to have the banner in the top corner that advertised the meeting for the upcoming Wednesday evening to update automatically.  He had done the banner using animated GIF's and was changing the file manually.

Ideally I would have done this as a server side process but the free www.qsl.net hosting doesn't allow such flexibility.... so javascript for the browser provided the solution instead.  Not something I write a lot of but quite satisfying to get a good result.

For anyone who cares here is the script that solved the problem....


// Work out which happening this week message to display

var currentTime = new Date();
var day = currentTime.getDate();
var dow = currentTime.getDay();
var hour = currentTime.getHours();

// Offset to the closest Wednesday

var wed_adj = 3-dow;
var next_meeting = new Date(currentTime);

if (wed_adj < 0)
{
 // Passed Wednesday this week so next meeting on the following Wednesday

 next_meeting.setDate(next_meeting.getDate() + wed_adj + 7);

}
else if (wed_adj == 0 && hour < 20)
{
 // Wednesday and before 2000 hours so next meeting is still today
 

}
else if (wed_adj == 0 && hour >= 20)
{
 // Wednesday and after 2000 hours so next meeting is next week

 next_meeting.setDate(next_meeting.getDate() + 7);

}
else
{
 // Before Wednesday so next meeting is Wednesday this week

 next_meeting.setDate(next_meeting.getDate() + wed_adj);

}

var weekno = 0;

// If the month of the next meeting is not the same as the current month then week 1

if (currentTime.getMonth() != next_meeting.getMonth())
{
    weekno = 1;
}
else
{
    // From the next meeting work out how many previous Wednesdays there are in the month

    var test_meeting = new Date;
    test_meeting.setTime(next_meeting.valueOf());
    while (test_meeting.getMonth() == next_meeting.getMonth())
    {
        weekno++;
        test_meeting.setDate(test_meeting.getDate() - 7);
    }
}  
document.write("\"What'shttp://www.qsl.net/zl1vk/PRCMulti/Banner" + weekno + ".gif\">");

 

 

Take a Message....

Sometimes you are just in the right place at the right time....

On Sunday 21 September the New Zealand Warbirds and various private aircraft did a fly-past of the Auckland Cenotaph to mark the anniversary of the Battle of Britain in 1940. 

Among the aircraft that flew that day was Miles Messenger IIA ZK-CMM. 

Miles Messenger ZK-CMM

The Messenger was owned by the late Dave Cowie and is flown at these events and air shows by my mate Andrew Hope.  (From time to time… and never often enough I fly with Andrew in his Citabria…. Check out www.citabria.co.nz if you are interested in tailtragger training in New Zealand). 

I didn’t get to see the fly-past but did head out to Ardmore to watch the aircraft returning and have a closer look at a few particularly the Messenger….

Miles Messenger ZK-CMM

Miles Messenger ZK-CMM

Miles Messenger ZK-CMM

For those unfamiliar with the type here is what Wikipedia has to say about the Miles Messenger….

The Messenger was designed to meet a British Army requirement for a robust, slow speed, low maintenance, air observation post and liaison aircraft. The aircraft designed was a cantilever low-wing monoplane with fixed tailwheel powered by the de Havilland Gipsy Major 1D in-line engine. The prototype was converted from a Miles M.28 Mercury and first flew at Woodley on 12 September 1942. The aircraft had a good short field performance but only a small order for use as a VIP transport was placed for the British Royal Air Force as the Messenger I.

Wartime users of the aircraft included Field Marshal Sir Bernard Montgomery and Marshal of the RAF Lord Tedder.

After the war the Messenger 2A was built for the civilian market. The production aircraft were built at Newtownards in Northern Ireland and flown to Woodley for final fitting out. After 71 aircraft were built production of the aircraft ceased in 1948.

During the war a prototype aircraft was built as the M.48 Messenger 3 with fully retractable flaps. The model was not further developed as it did not provide any advantage over the other variants.

When the RAF retired surviving aircraft in 1948 they were in good condition and were converted for civilian use as the Messenger 4A.

The aircraft was a popular touring and racing aircraft during the late 1940s and early 1950s. In 1954 Harold Wood won the King's Cup Race air race at 133 mph. 

The full Wikipedia article is available here - http://en.wikipedia.org/wiki/Miles_Messenger

ZK-CMM is a Messenger IIA and was built in 1947 so never saw wartime service.  It is however painted in the color scheme of Field Marshal Bernard Mongomery’s private aircraft. 

Some historical information on ZK-CMM thanks to the Museum of Berkshire Aviation - http://home.comcast.net/~aero51/html/index.htm

Miles Messenger M.38 IIA ZK-CMM was built for the UK civil market as G-AJVL (c/n 6372) at Newtownards, Northern Ireland and flown unpainted to Woodley for final painting, upholstering and sale. She was listed on 02-07-1947 with Tyne Taxis of Woolsington. Bryan Price started work with Tyne Taxis in 1947 and his first job was to go to the Miles factory at Woodley, Reading and pick up a new Messenger - none other than G-AJVL (now ZK-CMM).

Bryan flew G-AJVL from Reading to Newcastle on 14-07-1947 and flew it for Tyne Taxis for the next 12 to 18 months. Bryan later emigrated to New Zealand in the early 1950's, along with Peter Proctor (Tyne Taxis Manager), Brian Chadwick (Tyne Taxis Engineer) and today (April 2004) lives in
Christchurch N.Z.. Cancelled in November 1949, the aircraft was exported to Australia to become VH-BJM on 28-12-1950 for use by Sam Hecker of Maryborough, until the registration was cancelled 20-10- 63 due to D.C.A policy re glue failures. Purchased by Ken Orrman of Shepparton (1978) and later by Bill Thompson (December 1988).

Bill Thompson rebuilt the aircraft, pretty much replacing the entire woodwork over a period of four and a half years and involving some 5,500 hours' work.

It returned to the Australian register on 06-08-1993 as VH-BJH and was sold to G Ireland of Capalaba, Queensland, on 10-10-1996, followed by Mike and Elizabeth Apps of Canberra. On 07-10-1997 it was re-registered as VH-ZMM. During the latter part of WWII Messengers were used by some well known high ranking officers as VIP transports, including Field Marshall Montgomery and Marshall of the RAF, Lord Tedder.

VH-BJH had been painted to represent an example of this type, including camouflage and invasion stripes and the British military serial of RG333 was added to represent the first of three such aircraft used by Montgomery. (The RAF number should have been RH368 as this was the only Messenger with Invasion Stripes from logbook of F/L Trevor Martin, Monty's Pilot.)

The aircraft was purchased in Australia in November 2003 by Dave Cowie, dismantled under the supervision of Stan Smith and transported to NZ in December in a 40-ft container (which is no mean feat considering the one piece wing spans 36 ft).

Reassembled at North Shore Airfield, where it is now based, the Messenger was registered as ZK-CMM on 22nd of January 2004 with its Certificate of Airworthiness being issued on 11th February 2004. First New Zealand flight was on the 13th February by Stan Smith. The aircraft performed extremely well and confirmed its STOL reputation. The only modifications are the fitting of Cleveland disc brakes and some "new" instruments.

After the fly-past Andrew was returning the aircraft to it’s hanger at North Shore….. “I’m looking for some company… want a ride?”  How many possible answers are there to that question?

Impressions of the messenger…..

  • No electric starter…. So the pilot (or his/her assistant) gets a strong right arm starting a warm engine (Andrew tells me that the engine starts a lot more predictably when cold). 
  • It’s an English engine…. The prop spins the opposite direction.
  • The high chord wing…. stall speed is around 35 knots.
  • The oleo landing gear… for rough and unprepared strips behind enemy lines.
  • The little propeller on the right wing that drives the generator….
  • The three tails….
  • Gull wing doors…
  • The forward visibility…. or lack of.  I think I have been spoiled by the Citabria which has great visibility from the front seat….. the Messenger is much worse although nothing like a Tiger Month, J3 from the back seat or a real warbird.  A little S turning and looking down the side of the cowling helps.
  • In the cockpit things are quite snug… you wouldn’t want two large guys in the front seats unless they were very good friends…..
  • The smell of warm oil and fuel when you push the throttle forward for takeoff….
  • The ridiculously short ground roll on takeoff….
  • The sedate feel…. nothing happens fast, easy to fly accurately (certainly in departure from Ardmore and crusie which are the bits I flew), the rudder is important to stay in balance but doesn’t have a lot of authority.
  • The wallowing feeling…. As you get out of step trying to correct the yaw with rudder….
  • Flying over the Hauraki gulf at 1000 feet with the side window open and your arm out in the breeze.
  • The amount of rudder work needed to stay straight on the North Shore runway after landing.
  • Wiping the oil off the cowling as the aircraft cools after another successful flight… you can almost see it smiling.

Recreational flying is all about experiences…. And this was a great one. 

As a recreational pilot one reason to learn to fly a taildragger is the range of interesting and different aircraft types you can enjoy.  It’s not that hard… and will make you a better pilot for it.  Since checking out in the Citabria I have had the opportunity to fly a J3 Cub, PA18 Cub and now the Messenger.  And there are so many more out there to try…..

(Check out www.citabria.co.nz if you are interested in taildragger training in New Zealand).

 

Yaesu FT-7800R Mobile Installation

Living in the south Auckland countryside and working in the city means a reasonable commute (50kms/40 minutes on a good day) each way.  A lot of this time is filled listening to podcasts but for several years I had also been taking my Yaesu VX5.  

The VX5 is a neat little rig but at only 5 watts it was limited use for simplex,  it was a very wide receive front end so connecting it to my mobile antenna would cause serious overload as I passed through the central city, I ran it from batteries because a connecting to the car accessory socket caused too much noise on transmit and the installation was a bit messy.... cables snaking into the car from the antenna and the handheld lying on the passenger’s seat.  

I hadn't taken much notice of the prices on amateur transceivers until a recent trip to Los Angeles where I picked up a Yaesu FT-450 at HRO for US$750 (NZ$1000)… that is another story.  US prices for 2m/70cm transceivers were great but I wasn't going to the US in the foreseeable future... only Hong Kong next week.

Google told me there was one amateur radio dealer in Hong Kong - CQ Shop and emails in advance of traveling asking what models they stocked and pricing went unanswered.... so while there I just went for a visit.  CQ Shop is in Sham Shui Po... 4-5 MTR stops away from Tsim Tsa Tsui in a part of the city with few tourists and plenty of small shops selling electronic stuff to the locals.  Unlike the tourist combat zone of Tsim Tsa Tsui you don't need to bargain at CQ Shop... they are very helpful and will give you a price that is more than fair (actually cheaper than HRO because there is no state sales tax to add) (no interest here.... just a satisfied customer).  Compared to the large stores in the US the range is limited... mainly focusing on VHF/UHF transceivers and accessories.... makes sense given the lifestyle in Hong Kong I don't see many opportunities for large HF antennas and high power.  

I purchased a Yaesu FT-7800R for Hk$1780.00 (US$266 / NZ$360).  A great deal compared to NZ prices.  The CQ Shop staff were really helpful and because they knew it was for export they were very happy (actually insisted) on powering up the rig and checking it on both transmit and receive.

Why the FT-7800R?

I like Yaesu gear.  Not that I dislike other brands but my first contact with Amateur Radio was with ZL1BOK in the late 70's and he had a Yaesu FTDX-400 and this has certainly influenced my buying decisions.... I currently have an FT-450,FT-736R,FT-101ZD,FT-5200,VX5 and now the FT-7800R.



  • A removable head.   I wanted to install the rig in the Honda Civic I drive each day so the install options were limited.40-50w out on 2m (70cm less important as most 70cm stuff around Auckland is through repeaters but I do a bit of 2m simplex).
  • Not excessively affected by strong off frequency signals.
  • Wide band receive... specifically air band AM.
  • Enough buttons and knobs (rather than menus) so it can be operated by feel while driving.
  • Not too expensive.... I have enough other expensive hobbies (horses and airplanes).


Looking at the various options from Yaesu, Icom and Kenwood the FT-7800R won out.  I didn't think the extra paid for a "real" dual band rig like the FT-8800 was worth it... I have enough trouble listing to one QSO without trying to listen to two... I had no requirement for cross band repeat and I thought the lighted buttons on the FT-7800R would make it a lot easier to operate in the dark.

So the FT-7800R it was....  

Unlike the US the separation kit is not included in the standard price from CQ Shop.  It is quite pricey to buy the standard Yaesu kit separately so I went for the eBay option and ordered a third party kit from one of the vendors on eBay.  I could easily have made the cables myself but the plastic mount for the control heard was what I really wanted.  
If you do buy the kit on Ebay watch make sure you check the pricing carefully... the vendors often list multiple of the same item with completely different prices and shipping costs.  Mine ended up costing around AU$20 (the Yaesu kit seems to be around US$60) once shipping to NZ was included.... and was the best deal I could find at the time. It arrived, exactly as advertised and well packed within a week of ordering.

While waiting for the separation kit I planned the installation.... my main worry was how to get through the firewall to connect to the battery.  

The Civic has some existing grommets with cables but try as I might I would not cut through the rubber to push the rig power cables through.  The big stereo guys insist this is possible but after a few hours trying I gave up.  I also didn't want to drill through the firewall either so I took the alternative option and ran the cable from the engine compartment through the door pillar and behind the trim in the cab.  Not quite as tidy but pretty good.

Cables Into Cab


The rig is mounted in the trunk (boot in England/NZ/Australia) and screwed to the back of the passenger seats.

Rig in Trunk


The power cables connect "almost" directly to the battery.  The negative is on the same bolt that connects the battery negative lead to the chassis.  The positive is on the same bolt that connects the battery positive into the fuse box.  This needed a small amount of cutting of the plastic fuse box to allow the cable to enter but the result is very tidy.

Power from Fusebox

Power from Fusebox

Both positive and negative cables are protected by 10 amp fuses as close as possible to their attach points.  If anything shorts downstream these should blow and stop any damage.

To get the power cables into the cabin they route between the hood and the passenger door and then behind the internal trim.  

To prevent chaffing of the wires (particularly below the hood where there are sharp edges) the sites are run inside clear plastic tube.

The power cables run behind the trim down the passenger side of the car and emerge in the trunk.

The separation cables (panel and audio) run behind the trim on the driver’s side of the car and emerge under the driver seat.

The head unit is mounted using the separation kit mounting between the stick shift and the brake.  I spent a lot of time considering locations and I am very pleased with this... it is tidy, all the controls fall nicely to hand and it is easy to glance down if needed to read the display.

Head Unit Installation


There is a Jaycar communications speaker mounted under the driver’s seat.

The DTMF mic still floats around in the cabin and often sits on the passenger seat.  I guess I should install the mic holder.

Overall I am very pleased with the FT-7800R and how the installation worked out.  The rig works well and I have had good reports on the TX quality, no noise on the signal from the ignition or alternator.  The only thing that could be better is extra volume when driving at 100km on rough chip roads... although this is more an issue with the noise proofing (or lack of) in the Civic rather than a problem with the rig.

Would I buy another FT-7800R?  Absolutely.

 

Constellation for the Hitachi HPW-600ET

The Hitachi HPW-600ET (ePlate) is a Windows CE H/PC Pro Tablet with no keyboard.

The ePlate has the following specification:



Operating System Windows CE 2.11
Processor 128 MHz Hitachi SH4
Display 640 x 480 pixel 256 color LCD
Memory 16 MB SDRAM


Hitachi HPW-600ET

The following files are required to install Constellation on the Hitachi HPW-600ET:
Constellation 1.3 CAB (HPW-600ET)

Installation Instructions     
   
   1. Download the Constellation installation CAB.
   2. Use ActiveSync to establish a connection to the Handheld PC.
   3. Copy the Constellation installation CAB to the Handheld PC.
   4. On the Handheld PC open File Explorer and run the installation CAB.

 


Page 9 of 11

Powered by Easytagcloud v2.1

Contact Andrew Quinn

jaquinn@ihug.co.nz http://twitter.com/jaquinn