Subtotal: 0
View Cart

Analog Thermometer

The thermometer face, which includes the 5'-6" diameter circle, the raised edge, back bracing and letters were all made from two 36" x 96" sheets of 0.065" cold rolled copper. The letters are raised on short pieces of 3/8" x 3/8" rectangular brass rod held on from the back with 1/4" x 10-24 round head brass machine screws and medium thread lock. The pointer is of brass tubing, sheet and a 1/8" by 4" round brass disk for counter weight. The counter weighted end is also filled with a low melting point lead bismuth alloy. It is held in place on the main drive shaft through a slotted hole that is tightened with a 1/2" x 10-24 brass machine screw and medium thread lock. Also on the outside of the building and above the main drive shaft is a copper water shield and an 0-ring on the drive shaft under the water shield that prevents water from running down the shaft into the building wall.

The thermometer mechanism is comprised of two parallel rotating shafts held in place with pillow blocks mounted to nylon boards and separated by four 3/8" threaded rods assembled in clockwork fashion. The main drive shaft extends through the building wall on the west end, and on the east is machined down to 1/4" to which is attached a 1.25" timing belt pulley. The secondary drive shaft's east end is also machined down to 1/4" to which is attached a 3.75" timing belt pulley. Attached to its west end through a machined brass adapter is a Hitec servo. A spring servo saver protects the servo and allows the servo some freedom of movement should the pointer or any part of the mechanism become jammed or be moved sharply against the servo such as in the case of King Kong grabbing the pointer in an attempt to climb the building facade; at least the servo will be saved. The servo is capable of 180 degree rotation, but it is most accurate within the middle 90 degrees of that rotation. The timing belt pulleys are in a 3 to 1 ratio so that the servo's 90 degree rotation is multiplied to 270 degrees on the output shaft. Those 270 rotational degrees are divided into 100 Fahrenheit degrees on the thermometer face.

The servo is connected to and controlled by a BASIC Stamp 2 module. It has a built in serial connection and is meant to be connected to a PC computer in order to test and install the program that it will use to control the mechanisms to which it is attached. The controller is mounted in a covered electrical box just below the drive mechanism on the west building wall. Also connected the controller are a power supply which provides the system with 5 volts DC power and a thermistor which is a variable resistor the resistance of which changes with changes in temperature. The thermistor is mounted outside on a north facing shady wall and is protected from the rain by being installed in a short length of small diameter copper tubing. The servo is operated by pulses of electricity that are sent to it from the controller. It has an internal feedback system that receives the pulses, interprets them and rotates to and remains at the location that is proportional to the pulse.

The BS2 is programmed (the actual program is displayed below) on start up to send pulses to the servo that correspond to the center of its rotation, so on startup the thermometer will always go immediately to 50 degrees. The BS2 will continue to send the start up pulse at the rate of once every twenty milliseconds. After doing that 200 times, it pauses a few milliseconds to measure the resistance in the thermistor by sending a pulse through that circuit. It translates the results of that measurement into degrees and retranslates it into the correct servo pulse for the newly measured temperature. Next it compares the old pulse to the new one. If there is no difference, it resumes pulsing the same as before; if there is a difference, it creates and begins sending a new pulse that is corrected a small amount in the proper direction, and the cycle begins again about every four seconds. The thermometer will move only one degree at a time every fifteen seconds or so until it stabilizes at the correct temperature. It takes three to five cycles to increase the pulse an amount equal to one degree Fahrenheit on the thermometer face.

 

 

The controller program follows:

'{$STAMP BS2}

low 0
low 1
sensor var word
result var byte
pulse var word
newpulse var word
loopcount var byte
pulse = 847
loopcount = 0

main:
pulsout 1,pulse
loopcount = loopcount + 1
if loopcount = 200 then update
pause 15
goto main

update:
rctime 0,0,sensor
low 0
'debug ? sensor
z var word
result = 255
z = sensor
lookdown z, >=[42482, 41366, 40250, 39268, 38286, 37304, 36332, 35340, 34476, 33612, 32748, 31884, 31020, 30272, 29524, 28776, 28028, 27280, 26648, 26016, 25384, 24752, 24120, 23576, 23032, 22488, 21944, 21400, 20961, 20521, 20082, 19642, 19203, 18797, 18390, 17983, 17577, 17171, 16798, 16424, 16051, 15677, 15304, 14964, 14623, 14283, 13942, 13602, 13295, 12988, 12680, 12373, 12066, 11792, 11518, 11244, 10970, 10696, 10455, 10214, 9973, 9732, 9491, 9283, 9075, 8867, 8659, 8451, 8276, 8101, 7926, 7751, 7576, 7421, 7266, 7110, 6955, 6800, 6660, 6520, 6380, 6240, 6100, 5970, 5840, 5710, 5580, 5450, 5342, 5234, 5127, 5019, 4911, 4827, 4743, 4658, 4574, 4490, 4426, 4362, 4297, 4233, 4169, 4119, 4069], result
lookup result, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], result
'debug ? result
r var byte
servo var word
temp var word
r = result
lookdown r, =[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], servo
debug ? servo
lookup servo, [1075, 1070, 1065, 1060, 1055, 1050, 1045, 1040, 1035, 1030, 1026, 1021, 1017, 1012, 1008, 1003, 998, 994, 989, 985, 980, 975, 971, 966, 962, 957, 952, 948, 943, 939, 934, 929, 925, 920, 916, 911, 906, 902, 897, 893, 888, 883, 879, 874, 870, 865, 860, 856, 851, 847, 842, 837, 833, 828, 824, 819, 814, 810, 805, 801, 796, 791, 787, 782, 778, 773, 768, 764, 759, 755, 750, 745, 741, 736, 732, 727, 722, 718, 713, 709, 704, 699, 694, 690, 685, 680, 675, 670, 665, 660, 655, 650, 645, 640, 635, 630, 625, 620, 615, 610, 605], newpulse
if newpulse > pulse then increment
if newpulse < pulse then decrement
goto main
increment:
pulse = pulse + 1
goto main
decrement:
pulse = pulse - 1
debug ? pulse
goto main

Home    |    Contact Us    |    Job Opportunities    |    About Parallax    |    Privacy Statement    |    Terms Of Use    |    Copyright 2008 by Parallax, Inc.