Automated Chameleon Misting System

Cheap.

The best time to mist Binx, my veiled chameleon, is in the early afternoon. This way the moisture has time to entirely dissipate before night falls and it gets cold. Unfortunately, I can't always be there to mist the cage, so this simple automated solution does the job.


UPDATE: October 25, 2000
Now that I've been using the system for a while, I have some minor improvements to recommend:

The folks at www.baskinglizards.com have a nice 12-page PDF document on how to do something similar with inexpensive parts, and includes a handy shopping list. For someone looking for an off-the-shelf solution, they also sell Mister Kits and useful parts.


The misting nozzles are responsible for dispersing the water as much as possible. They must be very low flow to permit a long steady mist without over-soaking the terrarium. I bought these nozzles as part of a kit from www.barrs.com. They flow 0.4 gallons per hour on 60 PSI. The actual flow rate depends on how hard I pump up the tank -- perfect.

A complete kit with three nozzles, tubing, and a hose adapter is only $19. I put a 3/8" hole through the top screen, and mounted one nozzle with a washer above and below. This way it is well secured, and points straight down.

If you want a higher flow rate, Home Depot sells the Arizona Mist "Redi-Mist" outdoor water misting system (for cooling patios) with hose, six nozzles, and connectors for only $8.00 (Sept 2000). Each brass nozzle flows one gallon per hour, so these were a bit much for my small terrarium.  

The water is stored in this one-gallon sprayer tank. It's a simple "Garden Basics" garden sprayer from Wal-Mart, with the misting wand cut off. Cost: $9.00. The pressure is plenty for the nozzle, and it doesn't need frequent pumping. I fill the tank only partially full to ensure that any unattended catastrophies can't flood the terrarium (or hallway) too bad.  

The flow controller is an "Orbit" brand 3/4" inline sprinkler valve. Another great find from the Home Depot sprinkler isle at only $10.00. Make sure you get a valve without a vacuum breaker -- they're cheaper, smaller, and don't leak when switching off.

When the controller gets 12-24v on the solenoid, the valve opens. It can be manually switched as well. It does a very good job of closing tight; the misting nozzle does not drip when the valve is closed. I'm impressed.

The 3/4" NPT pipe threads needed a "3/4" NPT to NHT" adapter to connect to the hose fitting in the Barrs mister kit. A few pipe clamps and adapters connect it to the garden sprayer hose. More cheap stuff from Home Depot. I'm sure there's a cleaner way to connect this, but anything that doesn't leak works for me.  

The whole mess sits in a pastic bucket for extra protection. If any hoses or fittings spring a leak in my absence, there isn't enough water in the tank to fill the bucket, so it should be largely contained. It also hides all the Brazil-like hose and wire clutter nicely.

Sorry about the dark picture. It's just the tank and valve in a bucket.  

The sprinkler valve is wired to a 12v DC transformer. It seems that 12v DC (200 mA) opens this solenoid just fine, and doesn't make a noisy buzz like the normal 24v AC sprinkler transformers. On DC, it's silent.

The 12v power transformer is plugged in to an Appliance Module from X-10. This allows it to be controlled by any X-10 transmitter in the house, including the computer. I use the MisterHouse automation software to make the whole thing programmable. The Perl code is very simple -- attached below.

You could just as easily connect the valve to a plain 'ol programmable sprinkler timer. The cheapest one I found was $19 from yes, Home Depot. The X10 computer control is more flexible, and has more geek appeal.

The picture to the left shows the mister on. You can see how fine the water mist is. A full two minutes of high-pressure misting puts a heavy dew on the leaves and starts dripping to the floor. Less pressure in the tank can stretch it out longer.  

The Perl code to control the mister is pretty boiler-plate for MisterHome. The X10 Appliance controller is an X10_Item named $chameleon_mist. Most of the code deals with a backup timer. This is to make absolutely sure that the misting switch is turned OFF. In case something interferes with the first OFF command, it's sent a few more times shortly after.


#
# Misting control
#
$mist_timer = new Timer();      # Primary mist timer
$mist_backup = new Timer();     # Backup timer to resend
my $mist_backup_cycle = 0;      # Backup cycle count 
my $mist_retry_delay =  10;     # Resend off command this often.

#
# One mist daily, for 150 seconds at 3 hours past sunrise (Approx 9:40 AM)
#
&start_binx_mist(150) if (time_now "$Time_Sunrise+3:00");

#
# Start the mister
#
sub start_binx_mist {
    my ($mist_duration) = @_;
    print_log ("Starting Binx Mist for $mist_duration seconds.");
    unset $mist_backup;
    set $mist_timer $mist_duration;
    set $chameleon_mist ON;
}

#
# If the mister turned on, and we didn't do it, then turn it off
# immediately.  Someone's messing around with a controller.
#
if ((state_now $chameleon_mist eq ON) && (!active $mist_timer)) {
    print_log ("Who turned the mister on?!");
    &end_binx_mist;
}

#
# If the timer expired, then turn the mister off now.
#
&end_binx_mist if (expired $mist_timer);

#
# End the misting, and start the backup timer to ensure
# it's really off.  Send the retry three times.
#
sub end_binx_mist {
    print_log ("Ending Mist.");
    set $chameleon_mist OFF;
    $mist_backup_cycle = 3;
    set $mist_backup $mist_retry_delay;
}
if (expired $mist_backup) {
    print_log ("(safety mist off \#$mist_backup_cycle)");
    set $chameleon_mist OFF;
    set $mist_backup $mist_retry_delay if (--$mist_backup_cycle);
}

#
# This is for manual control, allowing us to request an immediate misting
# for some number of seconds.  Great for testing or dry days.
#
my $num_list = join (",", (1 .. 30)) . ",45,60,90,120,150,200,240,360";
$v_binx_mist = new Voice_Cmd("Binx mist [on,off,$num_list]");
if ($state = said $v_binx_mist) {
    $state = "10" if ($state eq "on");
    &end_binx_mist if ($state eq "off");
    &start_binx_mist($state) if ($state =~ /\d+/);
}


Steve Haehnichen