1 # -*- coding: iso-8859-15 -*-
   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 *   #Llamo las librerias graficas de Tk
  10 import tkSimpleDialog   #Libreria de almacenamiento de dialogos
  11 import tkMessageBox     #Libreria de mensajes
  12 
  13 #pasos del motor
  14 #http://www.todorobot.com.ar/informacion/tutorial%20stepper/stepper-tutorial.htm
  15 #   A   B   C   D 
  16 # 1 1   0   1   0
  17 # 2 1   0   0   1
  18 # 3 0   1   0   1
  19 # 4 0   1   1   0
  20 
  21 # 1 1100
  22 # 2 1001
  23 # 3 0011
  24 # 4 0110
  25 
  26 # Usando bits 3:6 (pines del 5 al 8 del puerto paralelo)
  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 # Crear un objeto tipo Motor (crear un motor paso paso :)
  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 # Interfáz gráfica
 245 root = Tk()
 246 #Barra de herramientas
 247 toolbar = Frame(root)
 248 
 249 #Botones
 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()

Python/Code/ControlMotorPasoPaso (last edited 2010-09-20 20:38:51 by Kmilo)