Wiki source code of Tracker ver 3.0 Manual
Last modified by Eric Nantel on 2023/02/08 13:43
Hide last authors
1.1 | 1 | {{html wiki="false" clean="true"}} | |
6.1 | 2 | <body> | |
1.1 | 3 | ||
6.1 | 4 | <div id="container"> | |
5 | <p align="center"><span class="headlg">Tracker ver 3.0 Manual.</span> | ||
6 | </p><p align="center">Author: Jim Frye<br> | ||
7 | Date: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%B %d, %Y" startspan -->October 20, 2009<!--webbot bot="Timestamp" i-CheckSum="31103" endspan --></p> | ||
8 | <table border="0" width="100%"> | ||
9 | <tbody><tr> | ||
10 | <td width="50%" align="center"><span class="headmd">Table of Contents</span></td> | ||
11 | <td width="50%" align="center"><span class="headmd">Links</span></td> | ||
12 | </tr> | ||
13 | <tr> | ||
14 | <td width="50%"> | ||
15 | <ul class="toc"> | ||
7.1 | 16 | <li><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#trackerlay">Tracker</a> | |
6.1 | 17 | <ul class="toc"> | |
7.1 | 18 | <li class="toc"><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#trackerfeat">Mounting the Tracker Sensor</a></li> | |
19 | <li class="toc"><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#testing">Testing the Tracker Sensor</a></li> | ||
6.1 | 20 | </ul> | |
21 | </li> | ||
7.1 | 22 | <li><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#usingtrack">Using the Tracker</a> | |
6.1 | 23 | <ul class="toc"> | |
7.1 | 24 | <li class="toc"><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#theory">The Theory</a></li> | |
25 | <li class="toc"><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#course">Making a Course</a></li> | ||
26 | <li class="toc"><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#moreinfo">Additional Information</a></li> | ||
6.1 | 27 | </ul> | |
28 | </li> | ||
29 | <!--<li><a href="#trouble">Troubleshooting</a> | ||
30 | <ul class="toc"> | ||
31 | <li class="toc"><a href="#gentroub">General Troubleshooting</a></li> | ||
32 | </ul> | ||
33 | </li>--> | ||
7.1 | 34 | <li><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#program">Programming Examples</a> | |
6.1 | 35 | <ul class="toc"> | |
7.1 | 36 | <li class="toc"><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#bs2_01">Basic Stamp 2: Simple</a></li> | |
37 | <li class="toc"><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/view/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/#bs2_02">Basic Stamp 2: Advanced</a></li> | ||
6.1 | 38 | </ul> | |
39 | </li> | ||
40 | </ul> | ||
41 | </td> | ||
42 | <td width="50%" valign="top"> | ||
43 | <ul class="toc"> | ||
44 | <li><a href="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/WebHome/tra01v7.pdf" target="_blank">Tracker Schematic (pdf)</a></li> | ||
45 | </ul> | ||
46 | </td> | ||
47 | </tr> | ||
48 | </tbody></table> | ||
49 | <hr width="95%" color="#808080"> | ||
50 | <p align="center"><span class="headmd"><a name="trackerlay">Tracker.</a></span></p> | ||
51 | <p><img border="0" src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/WebHome/trackm01.gif" width="477" height="800"></p> | ||
52 | <p><span class="headsm"><a name="trackerfeat">Mounting the Tracker Sensor</a></span></p> | ||
53 | <p>The sensor can be mounted the the underside of a robot chassis toward the front of the vehicle. Position the sensor close to the floor with the | ||
54 | red LEDs facing up. The sensor will operate in an extremely wide range from about 0.5" from the floor to almost touching the surface. The | ||
55 | sensor appears to be immune to normal ambient lighting, although it may be necessary to shield the sensor from extremes.</p> | ||
56 | <p><img border="0" src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/WebHome/trackm02.jpg" width="400" height="300"></p> | ||
57 | <hr width="95%" color="#808080"> | ||
58 | <p><span class="headsm"><a name="testing">Testing the Tracker Sensor</a></span></p> | ||
59 | The sensor can easily be tested by following this simple step-by-step procedure. | ||
60 | <ol> | ||
61 | <li>Prepare a test bed using a sheet of white paper and a short section of black electrical tape.</li> | ||
62 | <li>Apply a regulated 5vdc to the red wire and ground to the black wire.</li> | ||
63 | <li>Hold the sensor about 0.25" above the white paper and notice the red LEDs turn on. If not, quickly remove power and double-check your | ||
64 | wiring.</li> | ||
65 | <li>Move the sensor over the electrical tape positioning each of the three IR sensor pairs over the tape one at a time. You will notice the LED | ||
66 | that's positioned over the tape go out and come back on as it's moved back to the white section of the paper.</li> | ||
67 | <li>You can connect the outputs to a microcontroller to test them, or just connect the outputs to a volt meter. Each output will go high when | ||
68 | positioned over white, and low when positioned over black.</li> | ||
69 | </ol> | ||
70 | <hr width="95%" color="#808080"> | ||
71 | <p align="center"><span class="headmd"><a name="usingtrack">Using the Tracker</a></span></p> | ||
72 | <p><span class="headsm"><a name="theory">The Theory</a></span></p> | ||
73 | <p>The theory behind line tracking is actually pretty simple. An infrared LED is paired with an infrared detector. The LED is illuminated and | ||
74 | directed to the surface where the line is to be detected. The detector is biased on and fed into a comparator to clean up the signal.</p> | ||
75 | <p>In order to keep the electronics as simple as possible a 74HC14 Schmidt-trigger hex inverter will replace the comparator circuitry. The very high | ||
76 | input impedance, built in hysteresis and low parts count makes the CMOS version an excellent alternative.</p> | ||
77 | <p><span class="headsm"><a name="course">Making a Course</a></span></p> | ||
78 | <p>Here is a list of the verified materials that can be used to make a line tracking course. I am sure with experimentation, other materials can be | ||
79 | used with equally successful results.</p> | ||
80 | <ul> | ||
81 | <li>Black electrical tape on white or light colored floor tile</li> | ||
82 | <li>Black electrical tape on white 3mm Sintra PVC. A 4x8' sheet can be cut into 32 12" square panels. Each panel can have a straight or | ||
83 | turning pattern, so the course can be changed. A radius of 6" can easily be made. This combination makes a great, durable, portable, and | ||
84 | re-configurable line tracking course.</li> | ||
85 | <li>Black Sharpie marker on end rolls of newsprint or butcher paper. With this material the course can be made as long as needed. Use this for | ||
86 | line tracking dragsters.</li> | ||
87 | </ul> | ||
88 | <p><span class="headsm"><a name="moreinfo">Additional Information</a></span></p> | ||
89 | <p>The programming is very simple. The outputs go low when the LED/IR Detector pair is positioned over a black surface, and high when positioned | ||
90 | over a white surface. Check for detection of a line. If the center surface sees the line, go forward. If the left sensor sees the line, turn left. | ||
91 | If the right sensor sees the line, turn right. You will want the robot to remember which sensor saw the line last and continue to make corrections | ||
92 | in order to negotiate turns where the line will be out of the sensors' view for a limited amount of time. I have included some sample files for the | ||
93 | Basic Stamp. There is even some code that can handle a search for the line if it loses it completely. Experiment with the code and have fun.</p> | ||
94 | <p><img border="0" src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/servo-erector-set-system/ses-electronics/ses-sensors/tracker-v3.0/WebHome/trackm03.jpg" width="400" height="300"></p> | ||
95 | <!--<hr width="95%" color="#808080"> | ||
96 | <p align="center"><span class="headmd"><a name="trouble">Troubleshooting</a></span></p> | ||
97 | <p><span class="headsm"><a name="gentroub">General Troubleshooting</a></span></p> | ||
98 | <p>[Copied from Bot Board page:] The green power (PWR) LED should glow if the regulator is getting the proper power. You must make sure to connect | ||
99 | the battery or wall pack with the proper polarity. This means the red wire is positive (+) and the black wire is ground (-). <font color="#FF0000">If | ||
100 | you connect the battery or wall pack with the polarity reversed, the regulator and the microcontroller can be instantaneously and permanently | ||
101 | damaged!</font> Check your wiring carefully before applying power.</p> | ||
102 | <p>The maximum voltage for VL is 9.6vdc. If you use a higher voltage the regulator may overheat and you could get burned!</p> | ||
103 | <p>Orient the microcontroller with its Pin 1 oriented toward the arrow by the Reset button. If the microcontroller is installed backwards it will | ||
104 | not be damaged by the Bot Board, but it will not be recognized by the IDE.</p>--> | ||
105 | <hr width="95%" color="#808080"> | ||
106 | <p align="center"><span class="headmd"><a name="program">Programming Examples</a></span></p> | ||
107 | <p><span class="headsm"><a name="bs2_01">Basic Stamp 2: Simple Line Following</a></span></p> | ||
108 | <div class="code"> | ||
109 | <p>'program: ltrack1.bas<br> | ||
110 | 'This program does simple line following. | ||
111 | </p><p>symbol error_level = b0<br> | ||
112 | symbol left_sensor = pin5<br> | ||
113 | symbol center_sensor = pin6<br> | ||
114 | symbol right_sensor = pin7<br> | ||
115 | low 0 'Left Servo<br> | ||
116 | low 1 'Right Servo</p> | ||
117 | <p>start: 'Line seen, correct direction<br> | ||
118 | if left_sensor = 0 then a<br> | ||
119 | if right_sensor = 0 then b<br> | ||
120 | if center_sensor = 0 then c<br> | ||
121 | 'Line not seen, do last action<br> | ||
122 | if error_level = 1 then a<br> | ||
123 | if error_level = 2 then b<br> | ||
124 | if error_level = 3 then c<br> | ||
125 | goto start</p> | ||
126 | <p>a: error_level = 1<br> | ||
127 | pulsout 0,150 'Left wheel stop<br> | ||
128 | pulsout 1,200 'Right wheel forward<br> | ||
129 | pause 10<br> | ||
130 | goto start</p> | ||
131 | <p>b: error_level = 2<br> | ||
132 | pulsout 0,200 'Left wheel forward<br> | ||
133 | pulsout 1,150 'Right wheel stop<br> | ||
134 | pause 10<br> | ||
135 | goto start</p> | ||
136 | <p>c: error_level = 3<br> | ||
137 | pulsout 0,200 'Left wheel forward<br> | ||
138 | pulsout 1,200 'Right wheel forward<br> | ||
139 | pause 10<br> | ||
140 | goto start</p> | ||
141 | </div> | ||
142 | <p><span class="headsm"><a name="bs2_02">Basic Stamp 2: Advanced Line Following</a></span></p> | ||
143 | <div class="code"> | ||
144 | <p>'program: ltrack2.bas<br> | ||
145 | 'This program does advanced line<br> | ||
146 | 'following. If it loses the line it will<br> | ||
147 | 'do a search for it.</p> | ||
148 | <p>symbol x = b0<br> | ||
149 | symbol y = b1<br> | ||
150 | symbol correct = b2<br> | ||
151 | symbol lost = b3<br> | ||
152 | symbol left = pin5<br> | ||
153 | symbol center = pin6<br> | ||
154 | symbol right = pin7<br> | ||
155 | low 0 'Left Servo<br> | ||
156 | low 1 'Right Servo<br> | ||
157 | lost = 1<br> | ||
158 | correct = 1</p> | ||
159 | <p>'Line seen, correct position<br> | ||
160 | start:<br> | ||
161 | if right = 0 then on_trac_right<br> | ||
162 | start1:<br> | ||
163 | if left = 0 then on_trac_left<br> | ||
164 | start2:<br> | ||
165 | if center = 0 then on_trac_center</p> | ||
166 | <p>'Line not seen, do last action<br> | ||
167 | lost = lost + 1<br> | ||
168 | if lost = 40 then find_line<br> | ||
169 | if correct = 1 then off_trac_center<br> | ||
170 | if correct = 2 then off_trac_left<br> | ||
171 | if correct = 3 then off_trac_right<br> | ||
172 | goto start</p> | ||
173 | <p>on_trac_center:<br> | ||
174 | correct = 1<br> | ||
175 | lost = 0<br> | ||
176 | gosub forward<br> | ||
177 | goto start<br> | ||
178 | on_trac_left:<br> | ||
179 | correct = 2<br> | ||
180 | lost = 0<br> | ||
181 | gosub left_turn<br> | ||
182 | goto start1<br> | ||
183 | on_trac_right:<br> | ||
184 | correct = 3<br> | ||
185 | lost = 0<br> | ||
186 | gosub right_turn<br> | ||
187 | goto start2</p> | ||
188 | <p>off_trac_center:<br> | ||
189 | correct = 1<br> | ||
190 | gosub forward<br> | ||
191 | goto start<br> | ||
192 | off_trac_left:<br> | ||
193 | correct = 2<br> | ||
194 | gosub left_turn<br> | ||
195 | goto start<br> | ||
196 | off_trac_right:<br> | ||
197 | correct = 3<br> | ||
198 | gosub right_turn<br> | ||
199 | goto start</p> | ||
200 | <p>find_line:<br> | ||
201 | for x=1 to 50<br> | ||
202 | gosub look<br> | ||
203 | gosub left_spin<br> | ||
204 | next<br> | ||
205 | for x=1 to 100<br> | ||
206 | gosub look<br> | ||
207 | gosub right_spin<br> | ||
208 | next<br> | ||
209 | for x=1 to 50<br> | ||
210 | gosub look<br> | ||
211 | gosub left_spin<br> | ||
212 | next<br> | ||
213 | for x=1 to 50<br> | ||
214 | gosub look<br> | ||
215 | gosub forward<br> | ||
216 | next<br> | ||
217 | goto find_line</p> | ||
218 | <p>look:<br> | ||
219 | if right = 0 then start<br> | ||
220 | if left = 0 then start<br> | ||
221 | if center = 0 then start<br> | ||
222 | return</p> | ||
223 | <p>forward:<br> | ||
224 | pulsout 0,200 'Left wheel forward<br> | ||
225 | pulsout 1,200 'Right wheel forward<br> | ||
226 | pause 10<br> | ||
227 | return</p> | ||
228 | <p>left_turn:<br> | ||
229 | pulsout 0,150 'Left wheel stop<br> | ||
230 | pulsout 1,200 'Right wheel forward<br> | ||
231 | pause 10<br> | ||
232 | return</p> | ||
233 | <p>right_turn:<br> | ||
234 | pulsout 0,200 'Left wheel forward<br> | ||
235 | pulsout 1,150 'Right wheel stop<br> | ||
236 | pause 10<br> | ||
237 | return</p> | ||
238 | <p>left_spin:<br> | ||
239 | pulsout 0,100 'Left wheel reverse<br> | ||
240 | pulsout 1,200 'Right wheel forward<br> | ||
241 | pause 10<br> | ||
242 | return</p> | ||
243 | <p>right_spin:<br> | ||
244 | pulsout 0,200 'Left wheel forward<br> | ||
245 | pulsout 1,100 'Right wheel reverse<br> | ||
246 | pause 10<br> | ||
247 | Return</p> | ||
248 | </div> | ||
249 | </div> | ||
250 | </body> | ||
1.1 | 251 | {{/html}} |