The LatestWelcome to the new and improved PlanetChristmas website! Checked out our new forums? Click here to join us.
|
PlanetChristmas Do It Yourself ComputerizingHow do I computerize... like what hardware do I need to build something from scratch?
There are several different techniques to connect the Christmas lights to your computer. Perhaps the easiest and cheapest to implement is X-10 technology. You can buy the control modules at many stores and it's easy to set-up. The only drawback is it takes about two seconds to send a command, so if you want the lights to flash fast, this isn't the way to go.
Digital control is the most versatile method of controlling your lights. You can toggle lights on and off as fast as the computer can send an instruction... which is very fast. Your infrastructure setup will look like a star. The computer and high voltage electricity is at the center and everything radiates out from it. You can go through a lot of wire, but maintenance is easy.
How is the computer connected to the
Christmas lights?
For starters, checkout D-Light or Light-O-Rama for easy to build kits and software packages. Nuts and Volts magazine also has a couple of good articles.
You might even consider some gear from the robotics world. Click here to see a great article about using USB relay ports to create a full holiday light system (include Microsoft source code examples.)
Here's how PlanetChristmas did it over 20 years ago with descriptions from the original website. The information is a bit dated but you can get a feel for the basics
Each of these I/O lines is connected to a solid state relay (3-5VDC input, 120VAC output... they typically cost $5-$18 each depending on the current load (I use a 7 amp rated version from Magnecraft.)) Relay details can be found at Magnecraft. I buy the relays from Newark Electronics (1-800-463-9275) Delivery is usually 3-5 days from one of their warehouses. They take credit cards. I use Magnecraft part number W226R-7-5A1 which translates to Newark Catalog part number 23F5606... which is at the bottom left on page 808 of Newark's recent catalog. Pricing is based on volume, time of day, day of the month and fullness of the moon... in other words, whatever the salesman feels like when you call... I've never gotten any consistency.
Each of the computer I/O lines (called a circuit) is connected to the appropriate strings in the yard. Most circuits are in groups of four or eight so chasing effects can be used. Here are some closeup pictures of a solid state relay box. To see a simple electrical schematic, click here.
Keep in mind, this isn't the only way to interface the computer digital output to the Christmas lights. Hill Robertson and his Computer Christmas website can also show you some great ways of doing this trick, also!
If building all this hardware makes you nervous, consider Light-O-Rama or D-Light. The computer program was originally written in Microsoft's QBASIC and ran on DOS 6.22. A simple OUT(0) command is written to a port to toggle it on or off. See some Source Code below! I also use a short test program to easily command each circuit during initial setup... it's useful if you are trying to understand how to program the digital in/out board. Today, it is still a DOS based program, but I use POWERBASIC to compile it (mainly because it allows the program to be bigger than 64K in size) and run it in Windows 98 DOS mode. The computer spends most of the time in a wait state, but the full light show takes about 15 minutes. In reality, the computer could be an old IBM PC (the original one) and the show would run fine.
How do I build a control box?
The key to connecting the computer to the light strings is the blue eight port switching boxes. This is where the 5VDC output of the computer is magically connected to the 120VAC required for the Christmas lights. The trick is to use solid state relays. Click here for a datasheet for these relays. The relays I use can be ordered from Newark Electronics.
And here is a basic electrical schematic of the blue box above:
There are eight identical circuits (of the above schematic.. see below) The brown perfboard on the right of the blue box above is where two of the 74LS08 IC chips are mounted... the 74LS08 is optional... it was added in the early days before the driver chips on the digital I/O boards got a nit more powerful. The yellow neon indicator lights seen at the top of the box are wired in parallel to the high voltage output which monitors when an individual circuit is on. The blue toggle switch on the left turns on the high voltage to the entire box and is monitored by the green indicator light next to the toggle switch. The fat, gray wire leaving the bottom of the box is the master cable controlling 8 high voltage circuits. The thin gray wire on the right of the box comes directly from the CyberResearch I/O card in the PC.
Here is the full schematic of one of the blue boxes used to switch the light circuits. The output of the digital I/O card in your computer feeds into the left side of this schematic, where the low voltage input of the 74LS08 input buffers are. The output of the buffers connect directly to the low voltage input side of the solid state relays. The high voltage output of the relays are terminated on terminal strips for easy connections to extension cords which feed the Christmas lights around the house.
Note that the 5 volts required for the 74LS08 IC's is gotten from the computer by tapping into one of the power cables that feed a floppy drive.
![]()
I use this program to test all of the different electrical circuits. I can command any individual circuit to turn on or off as well as chase groups of 8. This program is written for DOS in QBASIC
'Used to check individual circuits of Xmas display LU$ = "Last update 04-25-98 at 07:03." DEFINT A-Z DIM p(48) LP$ = "off": 'on if line printer is available test = 0: 'set to one if I/O board is not installed ' Initialize the time variables CLS PRINT LU$ LOCATE 5, 1 PRINT "Initializing global variables..." mc% = 48: ' max number of 8 circuit boxes df = 32000 A = 1 B = 2 C = 4 D = 8 E = 16 F = 32 G = 64 H = 128 a(1) = 1 a(2) = 2 a(3) = 4 a(4) = 8 a(5) = 16 a(6) = 32 a(7) = 64 a(8) = 128 PRINT "Initializing I/O board variables..." BAS = 768: ' 300 hex for I/O Board #1 192 Circuits BIS = 800: ' 320 hex for I/O Board #2 192 Circuits 'I/O Board #1 Setup for all ports to OUT OUT BAS + 3, 128 OUT BAS + 7, 128 OUT BAS + 11, 128 OUT BAS + 15, 128 OUT BAS + 19, 128 OUT BAS + 23, 128 OUT BAS + 27, 128 OUT BAS + 31, 128 'I/O Board #2 Setup for all ports to OUT OUT BIS + 3, 128 OUT BIS + 7, 128 OUT BIS + 11, 128 OUT BIS + 15, 128 OUT BIS + 19, 128 OUT BIS + 23, 128 OUT BIS + 27, 128 OUT BIS + 31, 128 'Individual BYTES for Board #1 p(1) = BAS + 0 p(2) = BAS + 1 p(3) = BAS + 2 p(4) = BAS + 4 p(5) = BAS + 5 p(6) = BAS + 6 p(7) = BAS + 8 p(8) = BAS + 9 p(9) = BAS + 10 p(10) = BAS + 12 p(11) = BAS + 13 p(12) = BAS + 14 p(13) = BAS + 16 p(14) = BAS + 17 p(15) = BAS + 18 p(16) = BAS + 20 p(17) = BAS + 21 p(18) = BAS + 22 p(19) = BAS + 24 p(20) = BAS + 25 p(21) = BAS + 26 p(22) = BAS + 28 p(23) = BAS + 29 p(24) = BAS + 30 'Individual BYTES for Board #2 p(25) = BIS + 0 p(26) = BIS + 1 p(27) = BIS + 2 p(28) = BIS + 4 p(29) = BIS + 5 p(30) = BIS + 6 p(31) = BIS + 8 p(32) = BIS + 9 p(33) = BIS + 10 p(34) = BIS + 12 p(35) = BIS + 13 p(36) = BIS + 14 p(37) = BIS + 16 p(38) = BIS + 17 p(39) = BIS + 18 p(40) = BIS + 20 p(41) = BIS + 21 p(42) = BIS + 22 p(43) = BIS + 24 p(44) = BIS + 25 p(45) = BIS + 26 p(46) = BIS + 28 p(47) = BIS + 29 p(48) = BIS + 30 GOTO 1000 100 ' turn everything off ========================================= FOR ZZ% = 1 TO mc% OUT p(ZZ%), 0 NEXT ZZ% RETURN ' Turn everything on ========================================== FOR z% = 1 TO mc% OUT p(z), 255 NEXT z% RETURN 200 ' Delay Routine delay 0.05 RETURN 1000 ' **************************************************************** ' START OF USER INTERFACE ' ************************************************************** CLS 'PRINT LU$ LOCATE 1, 1 COLOR 2, 0 PRINT "TESTIT Circuit Tester Instructions/ A B C D E F G H" PRINT "----------------------------------- ======================" PRINT "Enter box number (1-27) 1 2 3 4 5 6 7 8" PRINT "followed by letter(s) A-H" PRINT "followed by + for on, - for off or z for chase" PRINT "ZALL will chase all circuits in all boxes" PRINT "! will turn all circuits in all boxes off" PRINT "*, exit or end will exit this program" PRINT "----------------------------------------------------" PRINT "example: 12A+ will turn on circuit A in box 12" PRINT " 12+ will turn on all circuits in box 12" PRINT " 12- will turn off all circuits in box 12" PRINT " 12z will chase the circuits in box 12" PRINT " ZALL will chase ALL of the boxes" PRINT " ! will turn all boxes and circuits off" PRINT " * will exit the program" PRINT "----------------------------------------------------" COLOR 7, 0 lc$ = " " LOCATE 23, 1 COLOR 4, 0 PRINT LU$ COLOR 7, 0 1100 LOCATE 19, 1 COLOR 10, 0 PRINT "last command: "; lc$; : 'IF CN > 0 THEN PRINT CN COLOR 7, 0 1150 LOCATE 21, 9 PRINT " " LOCATE 21, 1 COLOR 15, 0 PRINT "command: "; COLOR 7, 0 LINE INPUT ""; C$ IF ASC(C$) = 27 THEN CLS : END 'PRINT ASC(C$) C$ = UCASE$(C$) IF C$ = "*" THEN CLS : END IF C$ = CHR$(27) THEN CLS : END IF C$ = "END" THEN CLS : END IF C$ = "EXIT" THEN CLS : END lc$ = C$ + " " GOSUB 2000 GOTO 1100 2000 'process the command IF LEFT$(C$, 1) = "!" THEN GOSUB 100: RETURN IF C$ = "ZALL" THEN 2500 BN = VAL(C$): 'pull box number from the command IF BN < 0 OR BN > mc% THEN er$ = "first value between 1 and" + STR$(mc%): GOSUB 10000: RETURN 'find the command tail ct$ = RIGHT$(C$, 1) IF ct$ = "+" THEN 2100 IF ct$ = "-" THEN 2100 IF ct$ = "Z" THEN 2175 er$ = "be sure to add a + or - at the end of the command": GOSUB 10000: RETURN 2100 'now find the stuff in the middle (if any...) FOR I = 1 TO 10 y$(I) = "" NEXT counter = 1 FOR I = 1 TO LEN(C$) X$ = MID$(C$, I, 1): IF ASC(X$) > 64 AND ASC(X$) < 73 THEN y$(counter) = X$: counter = counter + 1 NEXT GOTO 2150 'print out the results LOCATE 10, 50 PRINT "results... counter="; counter - 1 FOR I = 1 TO 10 LOCATE 10 + I, 50 PRINT " " NEXT FOR I = 1 TO 10 LOCATE 10 + I, 50 PRINT "y("; I; ") = "; y$(I) NEXT 2150 IF ct$ = "+" THEN 2200 IF ct$ = "-" THEN 2400 2175 'chasing LOCATE 23, 1 COLOR 28, 0 PRINT " ***** press any key to stop chasing ***** " COLOR 7, 0 FOR j = 1 TO 8 OUT p(BN), a(j) GOSUB 200 NEXT j ' FOR j = 7 TO 2 STEP -1 ' OUT p(BN), a(j) ' GOSUB 200 'NEXT j C$ = INKEY$ IF C$ = CHR$(27) THEN 2180 IF C$ = "" THEN 2175 2180 OUT p(BN), 0 LOCATE 23, 1 PRINT " " RETURN 2200 'turn on a box LOCATE 23, 1 PRINT " " IF counter = 1 THEN CN = 255: OUT p(BN), CN: RETURN: 'turn on all of box CN = 0 FOR I = 1 TO counter IF y$(I) = "A" THEN CN = CN + 1 IF y$(I) = "B" THEN CN = CN + 2 IF y$(I) = "C" THEN CN = CN + 4 IF y$(I) = "D" THEN CN = CN + 8 IF y$(I) = "E" THEN CN = CN + 16 IF y$(I) = "F" THEN CN = CN + 32 IF y$(I) = "G" THEN CN = CN + 64 IF y$(I) = "H" THEN CN = CN + 128 NEXT I IF BN > 255 THEN BN = 255 OUT p(BN), CN RETURN 2400 'turn off a box LOCATE 23, 1 PRINT " " IF counter = 1 THEN CN = 0: OUT p(BN), CN: RETURN: 'turn off all of box CN = 255 FOR I = 1 TO counter IF y$(I) = "A" THEN CN = CN - 1 IF y$(I) = "B" THEN CN = CN - 2 IF y$(I) = "C" THEN CN = CN - 4 IF y$(I) = "D" THEN CN = CN - 8 IF y$(I) = "E" THEN CN = CN - 16 IF y$(I) = "F" THEN CN = CN - 32 IF y$(I) = "G" THEN CN = CN - 64 IF y$(I) = "H" THEN CN = CN - 128 NEXT I IF BN < 0 THEN BN = 0 OUT p(BN), CN RETURN 2500 'chasing all of them LOCATE 23, 1 COLOR 28, 0 PRINT " ***** press any key to stop chasing ***** " COLOR 7, 0 FOR j = 1 TO 8 FOR BN = 1 TO mc% OUT p(BN), a(j) NEXT BN GOSUB 200 NEXT j FOR j = 7 TO 2 STEP -1 FOR BN = 1 TO mc% OUT p(BN), a(j) NEXT BN GOSUB 200 NEXT j C$ = INKEY$ IF C$ = "" THEN 2500 FOR BN = 1 TO mc% OUT p(BN), 0 NEXT BN LOCATE 23, 1 PRINT " " RETURN 10000 'error condition LOCATE 23, 1 PRINT " " LOCATE 23, 1 PRINT "ERROR: "; er$ BEEP RETURN |

PlanetChristmas
uses boards from a company called
CyberResearch (







How
did Chuck Smith do the original PlanetChristmas?

