1
2 """
3 Control de velocidad, posición y sentido de giro de un motor paso a paso bipolar.
4 Jorge Ernesto Guevara Cuenca 45694
5 """
6
7 import parallel
8 import time
9 from Tkinter import *
10 import tkSimpleDialog
11 import tkMessageBox
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 puerto=parallel.Parallel()
29 puerto.setData(0)
30 class Motor:
31 tiempo = 0
32 giro = 0
33 grados = 0
34 def velocidad (self, vel):
35 """ Calcula el tiempo que debe retardarse cada una de las secuencias"""
36 mseg=vel/1000
37 return mseg/24
38 def giroizquierda (self, tiempo):
39 """
40 Hacer girar el motor un paso hacia la izquierda.
41 Retorna 1 que indica que el giro se efectuo hacia la izquierda
42 """
43 if tiempo==0:
44 tiempo=0.001
45 puerto.setData(48)
46 time.sleep(tiempo)
47 puerto.setData(24)
48 time.sleep(tiempo)
49 puerto.setData(71)
50 time.sleep(tiempo)
51 puerto.setData(96)
52 time.sleep(tiempo)
53 puerto.setData(0)
54 return 1
55 def giroderecha (self, tiempo):
56 """"
57 Hacer girar el motor un paso hacia la derecha.
58 Retorna 2 que indica que el giro se efectuo hacia la derecha.
59 """
60 if tiempo==0:
61 tiempo=0.001
62 puerto.setData(96)
63 time.sleep(tiempo)
64 puerto.setData(72)
65 time.sleep(tiempo)
66 puerto.setData(24)
67 time.sleep(tiempo)
68 puerto.setData(48)
69 time.sleep(tiempo)
70 puerto.setData(0)
71 return 2
72 def girargrados (self, grados, giro, tiempo):
73 """"
74 Gira el número de grados, en sentido y con velocidad indicados por el usuario
75 """
76 for i in range(grados):
77 if giro==1:
78 self.giroizquierda(tiempo)
79 if giro==2:
80 self.giroderecha(tiempo)
81
82
83 pap = Motor()
84
85 def botongi (event):
86 """ Boton para hacer girar el motor hacia la izquierda """
87 pap.giro=pap.giroizquierda(pap.tiempo)
88 for i in range(23):
89 pap.giroizquierda(pap.tiempo)
90 def botongd ():
91 """ Boton para hacer girar el motor hacia la derecha """
92 pap.giro=pap.giroderecha(pap.tiempo)
93 for i in range(23):
94 pap.giroderecha(pap.tiempo)
95 def botonvel ():
96 """ Boton para pedir al usuario la velocidad del motor """
97 vel=float(tkSimpleDialog.askstring('Velocidad','Digite velocidad en mSeg'))
98 pap.tiempo=pap.velocidad(vel)
99 def botongrad15 ():
100 """" Boton girar 15 grados """
101 if pap.giro==0:
102 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
103 if pap.giro!=0:
104 pap.girargrados(1, pap.giro, pap.tiempo)
105 def botongrad30 ():
106 """" Boton girar 30 grados """
107 if pap.giro==0:
108 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
109 if pap.giro!=0:
110 pap.girargrados(2, pap.giro, pap.tiempo)
111 def botongrad45 ():
112 """" Boton girar 45 grados """
113 if pap.giro==0:
114 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
115 if pap.giro!=0:
116 pap.girargrados(3, pap.giro, pap.tiempo)
117 def botongrad60 ():
118 """" Boton girar 60 grados """
119 if pap.giro==0:
120 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
121 if pap.giro!=0:
122 pap.girargrados(4, pap.giro, pap.tiempo)
123 def botongrad75 ():
124 """" Boton girar 75 grados """
125 if pap.giro==0:
126 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
127 if pap.giro!=0:
128 pap.girargrados(5, pap.giro, pap.tiempo)
129 def botongrad90 ():
130 """" Boton girar 90 grados """
131 if pap.giro==0:
132 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
133 if pap.giro!=0:
134 pap.girargrados(6, pap.giro, pap.tiempo)
135 def botongrad105 ():
136 """" Boton girar 105 grados """
137 if pap.giro==0:
138 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
139 if pap.giro!=0:
140 pap.girargrados(7, pap.giro, pap.tiempo)
141 def botongrad120 ():
142 """" Boton girar 120 grados """
143 if pap.giro==0:
144 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
145 if pap.giro!=0:
146 pap.girargrados(8, pap.giro, pap.tiempo)
147 def botongrad135 ():
148 """" Boton girar 135 grados """
149 if pap.giro==0:
150 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
151 if pap.giro!=0:
152 pap.girargrados(9, pap.giro, pap.tiempo)
153 def botongrad150 ():
154 """" Boton girar 150 grados """
155 if pap.giro==0:
156 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
157 if pap.giro!=0:
158 pap.girargrados(10, pap.giro, pap.tiempo)
159 def botongrad165 ():
160 """" Boton girar 165 grados """
161 if pap.giro==0:
162 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
163 if pap.giro!=0:
164 pap.girargrados(11, pap.giro, pap.tiempo)
165 def botongrad180 ():
166 """" Boton girar 180 grados """
167 if pap.giro==0:
168 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
169 if pap.giro!=0:
170 pap.girargrados(12, pap.giro, pap.tiempo)
171 def botongrad195 ():
172 """" Boton girar 195 grados """
173 if pap.giro==0:
174 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
175 if pap.giro!=0:
176 pap.girargrados(13, pap.giro, pap.tiempo)
177 def botongrad210 ():
178 """" Boton girar 210 grados """
179 if pap.giro==0:
180 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
181 if pap.giro!=0:
182 pap.girargrados(14, pap.giro, pap.tiempo)
183 def botongrad225 ():
184 """" Boton girar 225 grados """
185 if pap.giro==0:
186 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
187 if pap.giro!=0:
188 pap.girargrados(15, pap.giro, pap.tiempo)
189 def botongrad240 ():
190 """" Boton girar 240 grados """
191 if pap.giro==0:
192 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
193 if pap.giro!=0:
194 pap.girargrados(16, pap.giro, pap.tiempo)
195 def botongrad255 ():
196 """" Boton girar 255 grados """
197 if pap.giro==0:
198 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
199 if pap.giro!=0:
200 pap.girargrados(17, pap.giro, pap.tiempo)
201 def botongrad270 ():
202 """" Boton girar 270 grados """
203 if pap.giro==0:
204 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
205 if pap.giro!=0:
206 pap.girargrados(18, pap.giro, pap.tiempo)
207 def botongrad285 ():
208 """" Boton girar 285 grados """
209 if pap.giro==0:
210 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
211 if pap.giro!=0:
212 pap.girargrados(19, pap.giro, pap.tiempo)
213 def botongrad300 ():
214 """" Boton girar 300 grados """
215 if pap.giro==0:
216 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
217 if pap.giro!=0:
218 pap.girargrados(20, pap.giro, pap.tiempo)
219 def botongrad315 ():
220 """" Boton girar 315 grados """
221 if pap.giro==0:
222 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
223 if pap.giro!=0:
224 pap.girargrados(21, pap.giro, pap.tiempo)
225 def botongrad330 ():
226 """" Boton girar 330 grados """
227 if pap.giro==0:
228 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
229 if pap.giro!=0:
230 pap.girargrados(22, pap.giro, pap.tiempo)
231 def botongrad345 ():
232 """" Boton girar 345 grados """
233 if pap.giro==0:
234 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
235 if pap.giro!=0:
236 pap.girargrados(23, pap.giro, pap.tiempo)
237 def botongrad360 ():
238 """" Boton girar 360 grados """
239 if pap.giro==0:
240 tkMessageBox.showwarning("Warning","No ha definido un sentido de giro")
241 if pap.giro!=0:
242 pap.girargrados(24, pap.giro, pap.tiempo)
243
244
245 root = Tk()
246
247 toolbar = Frame(root)
248
249
250 botonizquierda = Button(toolbar, text="Izquierda")
251 botonizquierda.bind('<ButtonRelease-1>', botongi)
252 botonizquierda.pack(side=LEFT, padx=2, pady=2)
253
254 botonderecha = Button(toolbar, text="Derecha", command=botongd)
255 botonderecha.pack(side=RIGHT, padx=2, pady=2)
256
257 botonvelocidad = Button(toolbar, text="Ajustar velocidad", command=botonvel)
258 botonvelocidad.pack(side=TOP, padx=2, pady=2)
259
260 v = IntVar()
261 Radiobutton(
262 toolbar, text="Girar 360 grados", variable=v, value=24, command=botongrad360).pack(
263 side=BOTTOM,anchor=W)
264 Radiobutton(
265 toolbar, text="Girar 345 grados", variable=v, value=23, command=botongrad345).pack(
266 side=BOTTOM,anchor=W)
267 Radiobutton(
268 toolbar, text="Girar 330 grados", variable=v, value=22, command=botongrad330).pack(
269 side=BOTTOM,anchor=W)
270 Radiobutton(
271 toolbar, text="Girar 315 grados", variable=v, value=21, command=botongrad315).pack(
272 side=BOTTOM,anchor=W)
273 Radiobutton(
274 toolbar, text="Girar 300 grados", variable=v, value=20, command=botongrad300).pack(
275 side=BOTTOM,anchor=W)
276 Radiobutton(
277 toolbar, text="Girar 285 grados", variable=v, value=19, command=botongrad285).pack(
278 side=BOTTOM,anchor=W)
279 Radiobutton(
280 toolbar, text="Girar 270 grados", variable=v, value=18, command=botongrad270).pack(
281 side=BOTTOM,anchor=W)
282 Radiobutton(
283 toolbar, text="Girar 255 grados", variable=v, value=17, command=botongrad255).pack(
284 side=BOTTOM,anchor=W)
285 Radiobutton(
286 toolbar, text="Girar 240 grados", variable=v, value=16, command=botongrad240).pack(
287 side=BOTTOM,anchor=W)
288 Radiobutton(
289 toolbar, text="Girar 225 grados", variable=v, value=15, command=botongrad225).pack(
290 side=BOTTOM,anchor=W)
291 Radiobutton(
292 toolbar, text="Girar 210 grados", variable=v, value=14, command=botongrad210).pack(
293 side=BOTTOM,anchor=W)
294 Radiobutton(
295 toolbar, text="Girar 195 grados", variable=v, value=13, command=botongrad195).pack(
296 side=BOTTOM,anchor=W)
297 Radiobutton(
298 toolbar, text="Girar 180 grados", variable=v, value=12, command=botongrad180).pack(
299 side=BOTTOM,anchor=W)
300 Radiobutton(
301 toolbar, text="Girar 165 grados", variable=v, value=11, command=botongrad165).pack(
302 side=BOTTOM,anchor=W)
303 Radiobutton(
304 toolbar, text="Girar 150 grados", variable=v, value=10, command=botongrad150).pack(
305 side=BOTTOM,anchor=W)
306 Radiobutton(
307 toolbar, text="Girar 135 grados", variable=v, value=9, command=botongrad135).pack(
308 side=BOTTOM,anchor=W)
309 Radiobutton(
310 toolbar, text="Girar 120 grados", variable=v, value=8, command=botongrad120).pack(
311 side=BOTTOM,anchor=W)
312 Radiobutton(
313 toolbar, text="Girar 105 grados", variable=v, value=7, command=botongrad105).pack(
314 side=BOTTOM,anchor=W)
315 Radiobutton(
316 toolbar, text="Girar 90 grados", variable=v, value=6, command=botongrad90).pack(
317 side=BOTTOM,anchor=W)
318 Radiobutton(
319 toolbar, text="Girar 75 grados", variable=v, value=5, command=botongrad75).pack(
320 side=BOTTOM,anchor=W)
321 Radiobutton(
322 toolbar, text="Girar 60 grados", variable=v, value=4, command=botongrad60).pack(
323 side=BOTTOM,anchor=W)
324 Radiobutton(
325 toolbar, text="Girar 45 grados", variable=v, value=3, command=botongrad45).pack(
326 side=BOTTOM,anchor=W)
327 Radiobutton(
328 toolbar, text="Girar 30 grados", variable=v, value=2, command=botongrad30).pack(
329 side=BOTTOM, anchor=W)
330 Radiobutton(
331 toolbar, text="Girar 15 grados", variable=v, value=1, command=botongrad15).pack(
332 side=BOTTOM, anchor=W)
333
334 toolbar.pack(side=TOP, fill=X)
335
336 root.mainloop()