Hexatron: Build Your Own Six Legged Walking Robot
Transcription
Hexatron: Build Your Own Six Legged Walking Robot
CHAPTER 1 Hexatron: Build Your Own Six Legged Walking Robot Build a programmable, six legged walking robot that responds to its environment and demonstrates artificial intelligence! This autonomous robotic lifeform is the perfect platform to carry out your own experiments and explore the world of robotics. FIGURE 1.1 Hexatron autonomous walking robot. Thinkbotics Technologies Project Book © 2005 Karl P. Williams 1 Hexatron: Build Your Own Six Legged Walking Robot Walking robots: They are one of the most interesting results of today's advanced technology. With the popularity of Microchip's PIC microcontrollers and the development of compilers to support them, building mobile robots with “brains on board” has never been easier. In the past, a big problem with mobile robots was that they were often tethered to their computers. The support electronics, microprocessors and batteries were too large to carry onboard. The robots, like the computers that controlled them were large, power hungry machines. Keeping the robots close to their host computers placed limitations on the environments that the robots could operate in and the real world experiments that could be carried out. The robots were restricted to university laboratories, out of the hands of the electronics experimenters and enthusiasts. That has all changed... Building the hexapod robot presented in Figure 1.1 will allow you to experience the excitement of creating your own artificial lifeform that can walk, explore its environment and react to sensory feedback. This hexapod robot is unique because it uses two direct current gear motors contained in one unit to power the six legs. One gear motor drives the 3 legs on the left side of the robots' body and the other gear motor drives the 3 legs on the right side. The robots' body and legs are constructed with standard aluminum pieces and fasteners that are available at most hardware stores. The robot controller circuit is designed around the PIC 16F819, which contains 16 I/O pins and five 12-bit analog-to-digital converters. Another feature of this device is a software selectable internal oscillator that can be configured to run between 2 - 8 MHz. With the sophistication of the new PIC microcontrollers, the robot controller board uses fewer parts than would have been required a couple of years ago. The instructions for building and programming the robot will be divided into two sections - the body and the brain. The first section will deal with the mechanical aspect of the construction and the second part will deal with the electronics, programming, walking gaits and experiments. The complete list of parts necessary to build the robot is shown in Table 1.1. TABLE 1.1 Complete list of parts necessary to build the robot Part Description Quantity Semiconductors 2 U1 78L05 5-volt regulator 1 U2 PIC 16F819 microcontroller 1 Q1 - Q4 2N4401 NPN general purpose transistor 4 Q5 - Q8 2N4403 PNP general purpose transistor 4 D1, D2 Light emitting diodes 2 D3 - D10 1N4148 diodes 8 Thinkbotics Technologies Project Book TABLE 1.1 Complete list of parts necessary to build the robot Part Description Quantity Resistors R1 4.7 KΩ 1/4 watt 1 R2 - R3 5 KΩ potentiometer with a 1/8" diameter and 5/8" length shaft 2 R4,R5 470 KΩ 1/4 watt 2 0.1 μfd 5 Capacitors C1,C2,C3,C4,C5 Miscellaneous Sharp GP2D12 module Sharp infrared sensor module 1 PZ1 Piezo speaker 1 SW1 On/off toggle switch SPST 1 BT1 3V battery holder (2 x AA) 2 M1-M2 Tamiya dual motor gearbox - item 70097 1 Connectors 2 connector female header 2.5 mm spacing 4 JP1-JP10 2 post male header connector 2.5 mm spacing 10 Connectors 3 connector female header 2.5 mm spacing 3 JP11-JP14 3 post male header connector 2.5 mm spacing Ribbon wire 3 strand 8 inches 4 Ribbon wire 2 strand 16 inches Hookup wire 18 gauge plastic coated Standoffs 2-56 x 1 1/4-inch 4 Machine screws for standoffs 2-56 x 1/4-inch 8 Machine screws 6/32 x 1-inch 14 Machine screws 6/32 x 1/2-inch 2 2 feet Locking nuts 6/32 16 Nylon washers 6/32 40 Nylon spacers 1/4 x 5/16-inch 6 Machine screws 2-56 x 1/4-inch 2 Nuts 2-56 2 BT2 9 volt battery connector - PCB mount 1 Rubber feet Non slip rubber 6 Heat shrink tubing 1/8-inch diameter © 2005 Karl P. Williams 10 inches 3 Hexatron: Build Your Own Six Legged Walking Robot TABLE 1.1 Complete list of parts necessary to build the robot Part Description Quantity Printed circuit board Available at www.thinkbotics.com 1 Controller board battery 9 volt 1 Motor supply batteries 1.5 volt type ‘AA’ 4 Aluminum stock 1/2 x 1/8-inch Aluminum stock 1/4 x 1/4-inch 5 inches Flat aluminum stock 1/16-inch thick 4-1/2” x 6” Flat aluminum stock 1/16-inch thick 1-3/4” x 3-1/2” 4 feet-3 inches Mechanical Construction The Chassis The first step in creating the robot is to construct the aluminum base to which the legs, electronics, gearmotors, batteries and the controller circuit board will be fastened. This will require the use of a hacksaw (or a band saw with a metal cutting blade), a power drill, table vice and a metal file. Cut and drill a piece of 1/16-inch thick flat aluminum (4 1/2-inches wide x 6-inches long) to the dimensions shown in Figure 1.2. Drill all of the holes indicated in Figure 1.3 using a 5/32 inch drill bit except for the two holes that are marked as being drilled with a 1/4-inch bit. Use a metal file to smooth the edges and remove any burs from the drill holes. Bend the aluminum inward on 90-degree angles according to the bending lines shown in Figure 1.2. Use a bench vice or the edge of a table to bend the pieces. Locate the two 3-volt battery packs (2 x AA) and fasten them to the bottom of the body chassis with two 2-56 x 1/4-inch machine screws and nuts. Use Figure 1.4 and Figure 1.5 as a guide when attaching the battery packs to the body chassis. Next, wire the battery packs together in series to achieve a 6-volt output by following the wiring guide shown in Figure 1.4. Note that the 6-volt output wires are fed through the hole in the bottom of the chassis up to the top side as indicated in Figure 1.4. If the lengths of the wires, measured from the top of the robot chassis, are not at least 5 inches long then add extension wire. Solder a 2 connector female header to the end of the 6-volt output wires. Insulate each of the connections with a 1/2-inch piece of heat shrink tubing. At this point in the construction, the body chassis with 4 Thinkbotics Technologies Project Book Mechanical Construction the two 3-volt (2 x AA) battery packs fastened to the underside should look like the one pictured in Figure 1.6. FIGURE 1.2 Body Chassis aluminum cutting and bending guide. © 2005 Karl P. Williams 5 Hexatron: Build Your Own Six Legged Walking Robot FIGURE 1.3 Body Chassis aluminum drilling guide. 6 Thinkbotics Technologies Project Book Mechanical Construction FIGURE 1.4 Battery wiring and power lead routing diagram. FIGURE 1.5 Underside view of the chassis. © 2005 Karl P. Williams 7 Hexatron: Build Your Own Six Legged Walking Robot FIGURE 1.6 Battery packs fastened to the body chassis - top view. The Gearbox Next, assemble the Tamiya twin motor gearbox using the instructions supplied with the motor kit for a gear ratio of 203:1. Apply the supplied lubrication to the gears so that they mesh smoothly and run quietly when the motors are in operation. Use a hack saw to cut each of the motor output shafts to a length of 5/8 of an inch as indicated in Figure 1.7. Cut two pieces of 2-strand connector wire to a length of eight inches each. On one end of each of the cables solder a two connector female header and use heat shrink tubing to protect the solder joints. Solder the first wire of the first connector cable to one of the power terminals of the left motor. Solder the second wire of the first connector cable to the remaining power terminal of the left motor. Repeat this procedure for the second connector cable and the right motor. Solder a 0.1 μf capacitor (C4,C5) across the terminals of each motor, shown in Figure 1.7, to reduce RF (radio frequency) interference. Feedback Potentiometers Locate the two 5 KΩ potentiometers and attach a 4-inch long, 3 strand connector wire to each one according to Figure 1.8. Solder a 3-connector female header to the other end of each wire as shown in Figure 1.9. Insulate each of the connections with a 1/2-inch piece of heat 8 Thinkbotics Technologies Project Book Mechanical Construction shrink tubing. Before the legs are attached to the chassis, each of the potentiometer shafts must be set to their middle positions. This is accomplished by the procedure that follows. Use Figure 1.10 as a guide to attach a 5-volt DC supply to the outer terminals of the first potentiometer. Attach the leads of a multimeter to the middle terminal and ground so that the voltage can be read. Turn the potentiometer shaft until you get a reading of 2.5 volts. Calibrate the second potentiometer using the same procedure. FIGURE 1.7 Tamiya dual motor gearbox configuration. FIGURE 1.8 Potentiometer wiring diagram. © 2005 Karl P. Williams 9 Hexatron: Build Your Own Six Legged Walking Robot FIGURE 1.9 Potentiometers with connector wires attached. FIGURE 1.10 Procedure to center the potentiometer shafts. Now that the gear-motors and potentiometers are wired, it is time to attach them to the robots body chassis. Position the gearmotor as shown in Figure 1.11 and secure it to the chassis using the two machine screws and nuts that came with the motor kit. Mount each of the potentiometers in the 1/4-inch holes at the back of the robot chassis as shown in Figure 1.11. 10 Thinkbotics Technologies Project Book Constructing the Legs and motor shaft mounts Make sure that the nuts are secured tightly so that the potentiometers do not move out of position when the robot is in operation. FIGURE 1.11 Twin motor gearbox and Potentiometers attached to the chassis. Constructing the Legs and motor shaft mounts The Legs Using the 1/2 x 1/8-inch aluminum stock, cut and drill 6 leg pieces labeled A, four outer leg linkage pieces labeled B, two middle leg linkage pieces labeled C and two leg sensor linkage pieces labeled D according to the dimensions shown in Figure 1.12. Use a 5/32-inch bit to drill the holes. The Motor Shaft Mounts Fabricate the motor output shaft mounts and potentiometer shaft mounts using 1/4-inch x 1/ 4-inch aluminum square stock according to the dimensions shown in Figure 1.13. The motor shaft mounts are labeled as parts E and the potentiometer shaft mounts are labeled as parts F. © 2005 Karl P. Williams 11 Hexatron: Build Your Own Six Legged Walking Robot FIGURE 1.12 Cutting and drilling guide for the leg and linkage pieces. When the pieces are finished, thread a 6/32 diameter x 3/16-inch set screw in each of the holes that were threaded with the 6/32-inch tap. Figure 1.14 shows a completed motor shaft mount and potentiometer shaft mount. 12 Thinkbotics Technologies Project Book Constructing the Legs and motor shaft mounts FIGURE 1.13 Motor and potentiometer shaft mount fabrication diagram. FIGURE 1.14 Completed motor and potentiometer shaft mounts. © 2005 Karl P. Williams 13 Hexatron: Build Your Own Six Legged Walking Robot Assembling The Legs Now that the individual pieces for the legs and linkages have been constructed, it is time to put them all together to form the mechanical part of the walking machine. Refer to Figure 1.15 and Figure 1.16 when assembling the legs. Start by attaching one of the motor shaft mount pieces labeled E to the shaft of the right motor with the flat edge facing away from the motor. Make sure that the end of the shaft is flush with the face of the motor linkage and secure it in place by tightening the set screw. Attach piece A to motor mount piece E with a 6/32 x 1-inch machine screw with a nylon washer separating the two. On the same machine screw, place another washer, then linkage piece B, then a washer and then another linkage piece B. Secure all of the pieces together with a 6/32-inch locking nut. Attach two leg pieces A and linkage piece C to the chassis at the locations shown in Figure 1.15 and Figure 1.16. Attach potentiometer shaft mount F to the potentiometer shaft, but do not fasten the set screw at this time. Attach linkage piece D to piece F by placing a 6/32-inch nylon washer between the pieces and secure with a 6/32 x 1-inch machine screw and locking nut. Starting from the front of the robot, attach leg piece A to linkage B with a 6/32 x 1-inch machine screw and locking nut. Separate the pieces with a 6/32 x 5/16-inch plastic spacer. Do the same with middle leg piece A and linkage piece C but add two nylon washers along with the 6/32 x 5/16inch plastic spacer. Attach the back leg piece A to pieces D and B, with a 6/32 x 5/16-inch plastic spacer between pieces A and D and a nylon washer between pieces D and B. Tighten all of the locking nuts with enough pressure to hold the parts in place but still allow them to move freely without any resistance. Perform the above procedure for the left side of the robot. When everything is in place, use your finger to manually rotate the gearboxes so that the middle leg on each side is in the downward position and perpendicular to the chassis. Tighten the set screw on both of the potentiometer shaft mount pieces F. If you suspect that the potentiometer shafts have been moved from their middle positions, then re-calibrate each one before tightening the set screw (see Figure 1.10). When the mechanics are complete, add a rubber foot to the end of each leg. This will give the feet more friction and help to grip when the robot is walking on slippery or uneven surfaces. Head And Infrared Sensor Mount Fabricate the robot's head using a 1 3/4-inch x 3 1/2-inch piece of flat 1/16-inch thick aluminum. Follow the cutting, drilling and bending diagram shown in Figure 1.17. Locate the Sharp IR detector module and secure it to the head section with the mounting machine screws and nuts that came with it. See Figure 1.18 for orientation. Attach the head to the body using two 6/32 x 1/2-inch machine screws and locking nuts as shown in Figure 1.18. 14 Thinkbotics Technologies Project Book Constructing the Legs and motor shaft mounts FIGURE 1.15 Leg and linkage parts assembly diagram - outside view. © 2005 Karl P. Williams 15 Hexatron: Build Your Own Six Legged Walking Robot FIGURE 1.16 Leg and linkage parts assembly diagram - inside view. 16 Thinkbotics Technologies Project Book Constructing the Legs and motor shaft mounts FIGURE 1.17 Cutting, drilling and bending guide for the robots head section. © 2005 Karl P. Williams 17 Hexatron: Build Your Own Six Legged Walking Robot FIGURE 1.18 Finished mechanical assembly of the robot. The mechanics and sensors of the walking robot are now assembled into place. All that is needed to bring the robot to life are the electronics and microcontroller programming. In the next section of this chapter, the electronics, wiring, sensors (infrared and leg position) and programming of the PIC16F819 microcontroller will be covered. 18 Thinkbotics Technologies Project Book Constructing the electronics Constructing the electronics In the second part of this project, the electronics, printed circuit board fabrication, wiring, and PIC microcontroller programming will be covered. This is where building the robot gets fun! Circuit Description Hexatron's controller board schematic is shown in Figure 1.19. The circuit is designed around Microchip's PIC 16F819 microcontroller. The main part of the circuit is made up of two H-bridge motor controller configurations that consist of two 2N4401(NPN) and two 2N4403 (PNP) transistors each. The 1N4148 diodes create a voltage path to ground to protect the transistors from any transient high voltage spikes produced by the DC motors when they are first turned on. The H-bridges are used to control the two direct current motors contained in the Tamiya gearbox that drives the legs. The left motor drives the leg mechanism on the left side of the robot's body and the right motor drives the legs on the right side of the body. By coordinating the movement of each set of legs, the robot is capable of walking forward, walking in reverse, turning to the left, and turning to the right. The regular I/O on Port B pins 0,1,2 and 3 of the pic 16F819 are used to control the H-bridge circuits that drive the DC gear motors. PortB pins 4 and 5 are used to control light emitting diodes. PortB pin 6 is used to output sound to a piezoelectric element. All of the other unused pins have header connectors attached so that they can be used to interface other sensors or output devices that you may want to add during experimentation. Three of the analog-to-digital converters on Port A (pins 0,1, and 2) of the 16F819 are used to read the voltages produced by the two leg position potentiometers (R2 and R3) and the output voltage produced by the Sharp GP2D12 Infrared ranger module. The Sharp GP2D12 ranger is an inexpensive sensor that takes a continuous distance reading and reports the distance as an analog voltage (0V to 3V) with a range of 10cm (~4") to 80cm (~30"). The interface is 3-wire with power, ground and the output voltage. The module requires a JST 3-pin connector, which is included with each detector package. The GP2D12 is shown in Figure 1.20. This circuit relies on the PIC 16F819 microcontroller, which functions according to its internal software. Programming the microcontroller will be discussed after the circuit board is completed and the robot is wired. © 2005 Karl P. Williams 19 Hexatron: Build Your Own Six Legged Walking Robot FIGURE 1.19 Hexatron's controller board schematic. FIGURE 1.20 GP2D12 infrared ranger module. 20 Thinkbotics Technologies Project Book Constructing the electronics Fabricating The Controller Printed Circuit Board The circuit is easiest built by fabricating a circuit board using the artwork shown in Figure 1.21. The circuit board can be produced using whatever method you are comfortable with. To use the artwork for the photofabricaton process, photocopy it onto a transparency. When you are ready to expose the copper board, orient the transparency exactly as shown in Figure 1.21. The exact size of the board should be 1 1/2 x 5-inches. If you are going to use the iron-on transfer method you will need to scan the foil pattern and then mirror the image so that the artwork is properly oriented when it is printed on to the transfer sheet and then ironed onto the copper board. The finished printed circuit board is also available to purchase from the authors web site located at www.thinkbotics.com. You can also download the image file free at the same location. If you don't want to fabricate a printed circuit board, the circuit is simple enough to construct on a 1 1/2 x 5-inch piece of standard perforated circuit board using point-to-point wiring. FIGURE 1.21 Hexatron's printed circuit board foil pattern. FIGURE 1.22 Printed circuit board component side parts placement. © 2005 Karl P. Williams 21 Hexatron: Build Your Own Six Legged Walking Robot Once the circuit board has been etched, drilled, and cut, use Figure 1.22 and Table 1.1 as a guide to place the parts on the board. Solder an 18-pin I.C. socket where part U2 (PIC 16F819) is shown. The PIC will need to be programmed before it is inserted into the socket (more about programming later). Solder all parts in place after they have been positioned on the board. Attach four 2-56 x 1 1/4-inch standoffs to the mounting holes on the circuit board and then mount the board to the back of the robot with the 9 volt battery closest to the head as shown in Figure 1.18. Use Figure 1.23 as a guide to connect all of the components to the controller circuit board. Mount the power switch (SW1) in the 1/4-inch hole on the top of the robot's head. Note that the left potentiometer (R2) is attached to JP13 and the right pot (R3) is attached to JP12. The Sharp GP2D12 is attached to JP11. The left motor is connected to JP2 and the right motor is connected to JP1. FIGURE 1.23 Robot wiring connections diagram. 22 Thinkbotics Technologies Project Book Programming the PIC 16F819 microcontroller Programming the PIC 16F819 microcontroller To program the microcontroller you will need a hardware programmer such as the EPIC Plus programmer and a compiler such as PicBasic Pro shown in Figure 1.24. Both the compiler and programmer are available from a company called microEngineering Labs (www.melabs.com). The program listings shown are produced for use with the PicBasic Pro compiler but can be translated to work with any PIC microcontroller compiler that you like. When the code has been compiled, a standard 8-bit Merged Intel HEX (.hex) file is created that can be used with any PICmicro programmer. This machine code file is then loaded into the EPIC Plus programming software and then transferred to the PIC. Once the PIC 16F819 has been programmed and inserted into the 18-pin socket on the controller board, it will start executing the code when power is supplied. Program 1.1 is called robot-test.bas and will be used to test all of the robot's functions. Once the program has been compiled, program the PIC16F819 with the robot-test.hex file listed in Program 1.2. For your convenience you can download the Basic and Hex files for this project from www.thinkbotics.com. When the 16F819 is programmed, insert it into the 18-pin socket on the controller board with pin 1 facing the notch in the socket (located closest to the transistors of the h-bridge section of the circuit). Make sure that a fresh 9-volt battery and four 1.5-volt AA batteries are placed in the battery holders. When the power is turned on the robot should produce sound from the piezo element, flash the light emitting diodes on and off in sequence, run the legs in a forward direction for 10 cycles and then go into a loop to test the infrared ranger. If you find one or both of the motors are moving in reverse then unplug the motor connector and reverse the pin connections. To test the ranger, move your hand in front of the robot at a distance of 4 to 5 inches. Because the output of this sensor module is nonlinear there is a dead zone of 2 inches directly in front of the robot. This is not a problem because the robot walks at a relatively slow speed and the program is looking at a wide range of values. If you want to accurately interpret the nonlinear voltages produced by the sensor a routine can be written that uses a lookup table to correlate all of the voltages to actual distances. © 2005 Karl P. Williams 23 Hexatron: Build Your Own Six Legged Walking Robot FIGURE 1.24 EPIC Plus programmer and PicBasic Pro compiler. PROGRAM 1.1 robot-test.bas program listing. ' Name : robot-test.bas ' Compiler : PicBasic Pro - MicroEngineering Labs ' Notes : Program to test the robot's functions @ DEVICE PIC16F819, INTRC_OSC_NOCLKOUT, WDT_OFF, LVP_OFF, PWRT_ON, PROTECT_OFF, BOD_OFF INCLUDE "modedefs.bas" TRISA = %00011111 TRISB = %00000000 DEFINE OSC 8 OSCCON = $70 M1 M2 M3 24 VAR PORTB.0 VAR PORTB.1 VAR PORTB.2 Thinkbotics Technologies Project Book Programming the PIC 16F819 microcontroller M4 LED1 LED2 PIEZO LCD VAR PORTB.3 VAR PORTB.4 VAR PORTB.5 VAR PORTB.6 VAR PORTB.7 LCD_BAUD CON N2400 LEFT_POT VAR PORTA.0 RIGHT_POT VAR PORTA.1 LOW M1 LOW M2 LOW M3 LOW M4 LOW LED1 LOW LED2 LOW PIEZO VAL_LEFT VAL_RIGHT LEG_STOP INFRARED TEMP VAR BYTE VAR BYTE VAR BYTE VAR BYTE VAR BYTE ' Set up the analog to digital converters DEFINE ADC_BITS 8 ' Set number of bits in result DEFINE ADC_CLOCK 1 ' Set clock source (01 = Fosc/8) DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds ADCON1 = 0 LEG_STOP = 136 ' Set porta pins to analog ' Leg stop potentiometer value START: SOUND PIEZO,[100,10,90,5,80,5,110,10] FOR TEMP = 1 TO 10 LOW LED1 HIGH LED2 PAUSE 100 © 2005 Karl P. Williams 25 Hexatron: Build Your Own Six Legged Walking Robot LOW LED2 HIGH LED1 PAUSE100 NEXT TEMP LOW LED1 FOR TEMP = 1 TO 10 GOSUB LEFT_FORWARD GOSUB RIGHT_FORWARD NEXT TEMP RANGER: ADCIN 2,INFRARED IF INFRARED > 100 AND INFRARED < 130 THEN SOUND PIEZO,[100,10,90,5] ENDIF GOTO RANGER END LEFT_FORWARD: VAL_LEFT = 0 LOW M1 LOW M2 HIGH M2 PAUSE 300 WHILE VAL_LEFT < (LEG_STOP - 3) OR VAL_LEFT > (LEG_STOP + 3) ADCIN 1,VAL_LEFT WEND LOW M2 RETURN RIGHT_FORWARD: VAL_RIGHT = 0 lOW M3 LOW M4 HIGH M3 PAUSE 300 26 Thinkbotics Technologies Project Book Programming the PIC 16F819 microcontroller WHILE VAL_RIGHT < (LEG_STOP - 3) OR VAL_RIGHT > (LEG_STOP + 3) ADCIN 0,VAL_RIGHT WEND LOW M3 RETURN PROGRAM 1.2 robot-test.hex file listing. :100000009F28A3003A088400380931208413A308EC :1000100003199A28F030A50022088038A400F03097 :10002000A5030319A5000319A30303199A2820089F :10003000A6002108A700163061202608A000270886 :10004000A1004520030120183808A21F3808A20883 :1000500003190301A40F2E2880060C282F28000066 :100060000F28841780059A28A000A00DA00D200D50 :10007000383941389F000030A100323062201F150E :100080001F194028A1011E089A28210820040319DD :10009000A00A8030201AA1062019A106A018A106E6 :1000A000210DA00DA10D9A28A301A200FF30A207E7 :1000B000031CA307031C9A280330A100E33062202D :1000C0005628A101F43EA000A109FE30031C6B28B4 :1000D000A00703186828A0076400A10F6828000083 :1000E00020187228201874280800A101A301A2007A :1000F00001307F28A101A301A20004307F28A800BD :1001000023082102031D8628220820020430031838 :100110000130031902302805031DFF309A280038EA :10012000031DFF300405031DFF309A280404031D3E :10013000FF309A2883130313831264000800831688 :100140001F308500860170308F00831206108316E1 :1001500006108312861083168610831206118316EA :1001600006118312861183168611831206128316D6 :1001700006128312861283168612831206138316C2 :1001800006139F0183128830BD000630BA0040304C :10019000B8006430A2000A3001205A30A2000530B5 :1001A00001205030A200053001206E30A2000A303C :1001B00001200130BE0064000B303E020318F62817 :1001C0000612831606128312861683168612643070 :1001D0008312542086128316861283120616831603 :1001E0000612643083125420BE0FDB2806128316D9 :1001F000061283120130BE0064000B303E02031869 :1002000005292C216D21BE0FFC2802303420BC00B2 :100210003C08A00064307520B2003C08A000823089 © 2005 Karl P. Williams 27 Hexatron: Build Your Own Six Legged Walking Robot :100220007A20B4003208840034088F20B400B5006E :10023000640034083504031929290630BA00403017 :10024000B8006430A2000A3001205A30A200053004 :100250000120052963002A29BF0106108316061014 :1002600083128610831686108312861483168610D6 :1002700083120130A3002C305520FE303D07B20020 :10028000FF300318013EB3003F08A000A10133086E :10029000A30032087C20B20002303D07B400B50153 :1002A000B50D3F08A000A1013508A3003408772050 :1002B000B4003208840034089620B400B50064000D :1002C000340835040319682901303420BF003D2962 :1002D00086108316861083120800C001061183164B :1002E0000611831286118316861183120615831652 :1002F000061183120130A3002C305520FC303D073D :10030000B200FF300318013EB3004008A000A10175 :100310003308A30032087C20B20004303D07B4004B :10032000B501B50D4008A000A1013508A3003408AF :100330007720B4003208840034089620B400B50059 :100340006400340835040319A92900303420C000A2 :0C0350007E290611831606118312080096 :02400E00303F41 :00000001FF When the robot is functioning properly, turn it off and remove the PIC16F819 from the 18pin socket on the controller board. In the next program, subroutines will be added to control the reverse movement of the legs. To enable the robot to turn left or right, the left legs move in one direction and the right legs move in the opposite direction. The robot's behavior will be to explore its environment by walking forward until it senses an object. When an object is sensed the robot will stop, make an alert noise, back itself up and then turn either to the left or right. Whether the robot turns to the left or the right will be determined by the action that it took the last time it encountered an object, alternating between a left or right turn. To make things interesting, the robot will blink its light emitting diodes and make insect noises with every step that it takes. Compile explore.bas listed in Program 1.3 and then program the PIC 16F819 with the explore.hex file listed in Program 1.4. Insert the PIC back into the socket and turn on the power. Also included at the end of this program is a subroutine to display the values produced by the analog-to-digital converters on a serial LCD display at 2400 baud. To use the subroutine, call it in a loop at the start of the program. The serial input of the LCD display is connected to PortB, pin 7. 28 Thinkbotics Technologies Project Book Programming the PIC 16F819 microcontroller PROGRAM 1.3 Explore.bas program listing. ' Name : explore.bas ' Compiler : PicBasic Pro - MicroEngineering Labs ' Notes : Hexatron Robot exploration program @ DEVICE PIC16F819, INTRC_OSC_NOCLKOUT, WDT_OFF, LVP_OFF, PWRT_ON, PROTECT_OFF, BOD_OFF INCLUDE "modedefs.bas" TRISA = %00011111 TRISB = %00000000 DEFINE OSC 8 OSCCON = $70 M1 VAR PORTB.0 M2 VAR PORTB.1 M3 VAR PORTB.2 M4 VAR PORTB.3 LED1 VAR PORTB.4 LED2 VAR PORTB.5 PIEZO VAR PORTB.6 LCD VAR PORTB.7 LCD_BAUD CON N2400 LEFT_POT VAR PORTA.0 RIGHT_POT VAR PORTA.1 LOW M1 LOW M2 LOW M3 LOW M4 LOW LED1 LOW LED2 LOW PIEZO VAL_LEFT VAL_RIGHT LEG_STOP INFRARED TEMP VAR BYTE VAR BYTE VAR BYTE VAR BYTE VAR BYTE © 2005 Karl P. Williams 29 Hexatron: Build Your Own Six Legged Walking Robot FLAG VAR BIT LEG_STOP = 136 FLAG = 0 ' Set up the analog to digital converters DEFINE ADC_BITS 8 DEFINE ADC_CLOCK 1 DEFINE ADC_SAMPLEUS 50 ADCON1 = 0 ' Set number of bits in result ' Set clock source (01 = Fosc/8) ' Set sampling time in microseconds ' Set porta pins to analog SOUND PIEZO,[100,10,90,5,80,5,110,10] START: SOUND PIEZO,[100,5,110,5] LOW LED1 HIGH LED2 GOSUB LEFT_FORWARD SOUND PIEZO,[80,5,90,5] LOW LED2 HIGH LED1 GOSUB RIGHT_FORWARD ADCIN 2,INFRARED IF INFRARED > 100 AND INFRARED < 130 THEN SOUND PIEZO,[100,10,90,5,100,5,110,10,80,20,90,20] FLAG = FLAG + 1 FOR TEMP = 1 TO 5 GOSUB LEFT_REVERSE GOSUB RIGHT_REVERSE NEXT TEMP IF FLAG THEN FOR TEMP = 1 TO 5 GOSUB LEFT_REVERSE GOSUB RIGHT_FORWARD NEXT TEMP ELSE 30 Thinkbotics Technologies Project Book Programming the PIC 16F819 microcontroller FOR TEMP = 1 TO 5 GOSUB RIGHT_REVERSE GOSUB LEFT_FORWARD NEXT TEMP ENDIF ENDIF GOTO START END ' motor control subroutines start here '------------------------------------------------------------LEFT_FORWARD: VAL_LEFT = 0 LOW M1 LOW M2 HIGH M2 PAUSE 300 WHILE VAL_LEFT < (LEG_STOP - 1) OR VAL_LEFT > (LEG_STOP + 1) ADCIN 1,VAL_LEFT WEND LOW M2 RETURN LEFT_REVERSE: VAL_LEFT = 0 LOW M1 LOW M2 HIGH M1 PAUSE 300 WHILE VAL_LEFT < (LEG_STOP - 1) OR VAL_LEFT > (LEG_STOP + 1) ADCIN 1,VAL_LEFT WEND LOW M1 RETURN © 2005 Karl P. Williams 31 Hexatron: Build Your Own Six Legged Walking Robot RIGHT_FORWARD: VAL_RIGHT = 0 LOW M3 LOW M4 HIGH M3 PAUSE 300 WHILE VAL_RIGHT < (LEG_STOP - 1) OR VAL_RIGHT > (LEG_STOP + 1) ADCIN 0,VAL_RIGHT WEND LOW M3 RETURN RIGHT_REVERSE: VAL_RIGHT = 0 LOW M3 LOW M4 HIGH M4 PAUSE 300 WHILE VAL_RIGHT < (LEG_STOP - 1) OR VAL_RIGHT > (LEG_STOP + 1) ADCIN 0,VAL_RIGHT WEND LOW M4 RETURN ' Display analog-to-digital converter values on serial LCD '------------------------------------------------------------CALIBRATE: ADCIN 0,VAL_RIGHT ' read A/D converter - porta.pin 0 serout LCD,LCD_BAUD,[254,128,"R:",#VAL_RIGHT," "] ADCIN 1,VAL_LEFT ' read A/D converter - porta.pin 1 serout LCD,LCD_BAUD,[254,134,"L:",#VAL_LEFT," "] ADCIN 2,INFRARED ' read A/D converter - porta.pin 2 serout LCD,LCD_BAUD,[254,192,"IR:",#INFRARED," "] RETURN 32 Thinkbotics Technologies Project Book Programming the PIC 16F819 microcontroller PROGRAM 1.4 Explore.hex file listing. :100000001529A501A400B7172730A300103014202C :100010000330A300E8301420A30164301420A301AE :100020000A30142024081F28A2002508A100240853 :10003000A000F4202008031DB713B71B0800303EB2 :10004000A6003A0884000930A70003102C20A60C53 :10005000A70B262803142C288413B71D3B2800085F :100060003804371D38068000841700083804031C44 :1000700038068000462800083804031C3806371963 :10008000380680008417380980054628370D063960 :10009000A0004F20A100A00A4F200000BC28003083 :1000A0008A002008820701348B3403342B34003457 :1000B00052340C34EF34A3003A08840038098B2002 :1000C0008413A30803191029F030A50022088038F2 :1000D000A400F030A5030319A5000319A303031915 :1000E00010292008A6002108A7001630BB202608EA :1000F000A0002708A1009F20030120183808A21F94 :100100003808A20803190301A40F8828800666286E :10011000892800006928841780051029A000A00DF7 :10012000A00D200D383941389F000030A100323039 :10013000BC201F151F199A28A1011E08102921088B :1001400020040319A00A8030201AA1062019A10654 :10015000A018A106210DA00DA10D1029A301A20038 :10016000FF30A207031CA307031C10290330A100C2 :10017000E330BC20B028A101F43EA000A109FE306C :10018000031CC528A0070318C228A0076400A10FFC :10019000C22800002018CC282018CE280800A10171 :1001A000A301A2000130D928A101A301A2000430BB :1001B000D928A80023082102031DE02822082002D4 :1001C000043003180130031902302805031DFF30E5 :1001D00010290038031DFF300405031DFF301029CE :1001E0000404031DFF301029A501A4011030A6004E :1001F000210DA40DA50D2208A4022308031C230F22 :10020000A50203180A292208A40723080318230FAC :10021000A5070310A00DA10DA60BF8282008102992 :100220008313031383126400080083161F308500B4 :10023000860170308F008312061083160610831219 :1002400086108316861083120611831606118312F8 :1002500086118316861183120612831606128312E4 :1002600086128316861283120613831606138312D0 :100270007E30BE003F1083169F0106308312BA0005 © 2005 Karl P. Williams 33 Hexatron: Build Your Own Six Legged Walking Robot :100280004030B8006430A2000A305B205A30A2002F :1002900005305B205030A20005305B206E30A2009C :1002A0000A305B20E62252290630BA004030B800FE :1002B0006430A20005305B206E30A20005305B2068 :1002C000061283160612831286168316861283126E :1002D00064220630BA004030B8005030A200053029 :1002E0005B205A30A20005305B20861283168612EE :1002F00083120616831606128312E2215229023057 :100300008E20BC003C08A0006430CF20B2003C0826 :10031000A0008230D420B400320884003408E920E0 :10032000B400B5006400340835040319DF29063031 :10033000BA004030B8006430A2000A305B205A3066 :10034000A20005305B206430A20005305B206E30D7 :10035000A2000A305B205030A20014305B205A30DB :10036000A20014305B2083103F1C831483183F14B9 :10037000831C3F100130C1006400063041020318A5 :10038000C529A5222322C10FBC2964003F1CD42902 :100390000130C1006400063041020318D329A522B0 :1003A000E221C10FCA29DF290130C10064000630F3 :1003B00041020318DF2923226422C10FD6295229C2 :1003C0006300E029C0010610831606108312861010 :1003D00083168610831286148316861083120130CA :1003E000A3002C30AF20FF303E07B200FF300318CF :1003F000013EB3004008A000A1013308A300320869 :10040000D620B20001303E07B400B501B50D40085A :10041000A000A1013508A3003408D120B40032089F :1004200084003408F020B400B500640034083504BA :1004300003191E2A01308E20C000F329861083166E :10044000861083120800C00106108316061083125E :1004500086108316861083120614831606108312E4 :100460000130A3002C30AF20FF303E07B200FF3038 :100470000318013EB3004008A000A1013308A30007 :100480003208D620B20001303E07B400B501B50DE8 :100490004008A000A1013508A3003408D120B40011 :1004A000320884003408F020B400B5006400340839 :1004B000350403195F2A01308E20C000342A06104B :1004C0008316061083120800BD010611831606115B :1004D0008312861183168611831206158316061160 :1004E00083120130A3002C30AF20FF303E07B20052 :1004F000FF300318013EB3003D08A000A1013308FE :10050000A3003208D620B20001303E07B400B50186 :10051000B50D3D08A000A1013508A3003408D12085 34 Thinkbotics Technologies Project Book Programming the PIC 16F819 microcontroller :10052000B400320884003408F020B400B500640040 :10053000340835040319A02A00308E20BD00752A26 :1005400006118316061183120800BD0106118316D9 :10055000061183128611831686118312861583165F :10056000861183120130A3002C30AF20FF303E07EC :10057000B200FF300318013EB3003D08A000A10106 :100580003308A3003208D620B20001303E07B40081 :10059000B501B50D3D08A000A1013508A300340840 :1005A000D120B400320884003408F020B400B50033 :1005B0006400340835040319E12A00308E20BD00A0 :1005C000B62A8611831686118312080000308E2009 :1005D000BD000630BA008030B8000430B700FE30ED :1005E000202080302020523020203A3020203D082A :1005F0000120203020202030202001308E20C0001B :100600000630BA008030B8000430B700FE30202039 :10061000863020204C3020203A3020204008012015 :10062000203020202030202002308E20BC000630D8 :10063000BA008030B8000430B700FE302020C0304F :10064000202049302020523020203A3020203C0801 :0C06500001202030202020302020080055 :02400E00303F41 :00000001FF Conclusion The Hexatron robot should now be walking around, exploring its environment and avoiding obstacles as it goes. There are many other sensors that can be added to the robot such as a sonar rangefinder, cds light sensors, phototransistors, a compass module, wireless data linking, remote control, etc. There are still 5 unused I/O pins including 2 analog-to-digital converters that can be used for your own experiments. Have fun building and modifying the robot! About The Author Karl P. Williams is an independent robotics researcher, electronics experimenter, and software developer. He is with AGFA HealthCare Informatics, a leading medical imaging software company. He is the author of three robotics books titled Insectronics: Build your own six legged walking robot (ISBN: 0-07-141241-7), Amphibionics: Build your own biologically inspired robots (ISBN: 0-07-141245-x) and Build Your own Humanoid Robots (ISBN:0-07142274-9) all published by McGraw-Hill. A resident of Ontario, Canada, he has written for © 2005 Karl P. Williams 35 Hexatron: Build Your Own Six Legged Walking Robot the magazines Nuts and Volts, SERVO and Conformity. He hosts a couple of robotics web sites at (http://home.golden.net/~kpwillia) and (www.thinkbotics.com). 36 Thinkbotics Technologies Project Book