Controlando el Movimiento · Página 93
Capítulo 4: Controlando el Movimiento MICROCONTROL DEL MOVIMIENTO Los microcontroladores cada día hacen que se muevan las cosas de su alrededor con seguridad al lugar correcto. Si tiene usted una impresora de inyección de tinta, la cabeza impresora que se mueve sobre la hoja al imprimir la mueve un motor paso a paso que controla un microcontrolador. La puerta de la tienda de abarrotes que usted atraviesa está controlada por un microcontrolador, y la charola que deposita el CD en su DVD también está controlada por un microcontrolador.
SEÑALES ENCENDIDO/APAGADO Y MOVIMIENTO DEL MOTOR Los motores microcontrolados reciben secuencias de señales high y low similares a las que usted ha estado enviando a los LEDs. La diferencia es que el microcontrolador tiene que mandar estas señales a velocidades que son generalmente más rápidas que los ejemplos de parpadeo de LEDs del capítulo 2. Si usted fuera a utilizar un circuito LED para monitorear señales de control, algunas harían que el LED parpadeara tan rápido que el ojo humano no podría detectar sus cambios. Paracería que el LED brilla atenuado. Otros mostrarian un parpadeo muy rápido y algunos podrían ser más discernibles. Algunos motores requieren mucha circuitería para ayudarle al microcontrolador que haga que trabajen, otros motores requieren parte mecánicas extras para hacer que trabajen correctamente en las máquinas. Para empezar, de todos los diferentes tipos de motores el motor servo con el que usted experimentará en este capítulo es el más sencillo. Como pronto usted lo verá el BASIC Stamp lo controla facilmente y requiere pocos o ningún circuito adicional, y tiene una salida mecánica que es fácil de conectar a las cosas que usted quiere mover.
PRESENTANDO AL SERVOMOTOR Un motor servo para hoby es un dispositivo que controla la posición, usted los encuentra en carros de radiocontrol RC, barcos o aviones. En carros RC, el servo mantiene el volante para controlar que tan brusco gira el carro. En un barco RC, mantiene el timón en posición para dar vueltas. Los aviones RC típicamente tienen varios servos para la posición de los diferentes alerones para controlar el movimiento del avión. En vehículos impulsados por máquinas de gas, otro servo mueve la leva de la máquina para controlar su velocidad. Un ejemplo de un avión RC y su radio control lo muestra la Figura 4-1. El hobista vuela el avión manipulando la palanca del joystic del radio control, y éste hace que los servos del avión controlen las posiciones de los alerones y el timón del avión.
Página 94 · ¿Qué es un Microcontrolador?
Figura 4-1 Modelo de Avión y su Radio control.
¿Entonces, cómo mantiene el joystich del radio control una cierta posición que hace que el alerón del avión mantenga cierta posición? El radio control convierte la posición del joystick en pulsos de radio que duran cierta cantidad de tiempo. El tiempo que dura cada pulso indica la posición de uno de los joysticks. En el avión RC, un radio-receptor convierte estos pulsos de radio en pulsos digitales. (señales high/low) y las manda a los servos del avión. Cada servo tiene un circuito interno que convierte estos pulsos digitales a una posición que conserva el servo. La cantidad de tiempo que duran cada pulso es lo que le indica a los servos la posición que deben mantener. Estos pulsos de control sólo duran unas pocas milésimas de segundo, y se repiten cada 40 a 50 veces por segundo para hacer que el servo mantenga la posición indicada. La Figura 4-2 muestra un dibujo del Servo Normalizado de Parallax. El conector se usa para conectar el servo a la alimentación (Vdd y Vss) y a la Fuente de Señal (un pin E/S del BASIC Stamp). El cable (2) tiene tres alambres que van a Vdd, Vss y a la línea de señal del conector al servo. La flecha es la parte del servco que se parece a la estrella (3) de cuatro picos. Cuando está girando el servo, la estrella es la parte móvil que el servo mantiene en diferentes posiciones. El tornillo de cruz (4) une la estrella con la flecha de salida del servo. La caja (5) contiene los sensores, el circuito de control, un motor de DC y engranes. Estas partes trabajan en conjunto para recibir las señales high/low del BASIC Stamp y las convierte en posiciones que mantiene la estrella del servo.
Controlando el Movimiento · Página 95
2
Figura 4-2 3
Servo Normalizado de Parallax
1
(1)Conector (2)Cable (3)Estrella (4)Tornillo de sujeción del la estrella a la flecha del servo (5)Caja
4
5
En este capítulo, usted programará el BASIC Stamp para mandar señales a un servo que controla la posición de la estrella del servo. Al hacer que BASIC Stamp mande señales que le indiquen al servo que mantenga diferentes posiciones, sus programas también pueden organizar el movimiento del servo. Sus pogramas, incluso, pueden monitorear botónes push y usar la información para conocer que botones push están presionados y ajustar la posición que el servo mantiene (control de posición servo de botones push). El BASIC Stamp también puede programarse para recibir mensajes que usted teclea en la Terminal Debug y usar esos mensajes para controlar la posición del servo (control de posición servo de la terminal).
ACTIVIDAD #1: CONECTANDO Y VERIFICANDO EL SERVO En esta actividad , usted seguirá las instrucciones para conectar un servo a la fuente de su tablilla y a el BASIC Stamp.
Página 96 · ¿Qué es un Microcontrolador?
Partes del Servo y el circuito LED
Un Servo Normalizado Parallax Un Resistor –470 Ω (amarillo-violeta-café). Un LED de cualquier color. El circuito LED se usará para monitorear las señales que manda el BASIC Stamp al servo. Recuerde que el circuito LED no se necesita para que el servo funcione. Sólo se usa para que le ayude a “ver” las señales de control Precaución. Para las acitivades de este libro use solamente un Servo Normalizado de Parallax Otros servos pueden tener diferentes especificaciones que pudieran no ser compatibles con estas actividades.
Construyendo los Circuitos Servo y LED
En el capítulo 1, usted identificó la Tablilla y versión de software usando la “Ayuda” del BASIC Stamp Help.Usted necesitará conocer que tablilla y versión usted tiene para encontrar la instrucción de construcción del circuito servo para su tablilla. 9 Si todavía no sabe que tablilla y revisión tiene, abra BASIC Stamp Editor Help y haga click en la liga: Getting Started with Stamps in Class de la Página Principal. Ahora, siga las indicaciones para determinar que Tablilla tiene. 9 Si usted tiene una Tablilla con puerto USB (cualquier revisión) o Serie (Revisión C o más nueva) vaya a la sección de abajo de Stamp HomeWorkBoard Servo Circuit 9 Si usted tiene una Tablilla (Revisión C o más recientes va a Stamp HomeWorkBoard Servo Circuit de la página 99. 9 Si su Tablilla no está en la lista arriba mencionada, vaya a www.parallax.com/Go/WAM Servo Circuit Connection para encontrar las instrucciones de su tablilla. Cuando haya seguido la instrucciones de su circuito servo de su Tablilla, vaya a la Actividad #2: Programa de Prueba del Control Servo en la página 101. Circuito Servo de la Tablilla Board of Education
Estas instrucciones se usan en todas las revisiones de puerto USB así como también en la revisiones C o más recientes de puerto Serie. 9 Apague la fuente como lo muestra la Figura 4-3
Controlando el Movimiento · Página 97
Reset
0
1
2
Figura 4-3 Desconecte la fuente. Ponga en 0 el interruptor de 3 posiciones.
La Figura 4-4 muestra el conector del servo en la Tablilla. Aquí es donde usted conecta el servo. Esta Tablilla tiene un jumper que usted puede usar para conectar la fuente de alimentación del servo ya sea Vin o Vdd. El jumper es una pieza rectangular egra removible que indica la flecha entre los dos conectores del servo. 9 Verifique el jumper se conecta a Vdd como lo muestra la Figura 4-4. Si éste se fija en Vin, jale el jumper rectangular de los pines donde está colocado y entonces presionelo sobre los dos pines más cercanos a la etiqueta Vdd.
15 14 Vdd 13 12 Red Black
X4
Figura 4-4 Jumper del Conector Servo conectado a Vdd
X5
Vin
El jumper le permite escoger la fuente de alimentación (Vin o Vdd) del Servo Normalizado de Parallax. Si está usted utilizando una batería de 9 V, fíjelo a Vdd. No use eliminadores de batería de Pared de 9 V. Si esta usted utilizando 4 baterias AA, un paquete baterias 6V con ambas funciona correctamente.
Si está usando una Fuente de Alimentación use solamente Vdd. Antes de conectar la fuente de alimentación a la Tablilla, asegúrese de verificar las especificaciones si son compatibles con las características que indica el BASIC Stamp Editor Help.
La Figura 4-5 muestra el esquemático del circuito que contruirá en su Tablilla. 9 Construya el circuito mostrado en la Figura 4-5 y Figura 4-6 9 Asegúrese que está bien conectado el servo. Los alambres, blanco, rojo y negro deben estár alineados como lo muestra la Figura 4-6.
Página 98 · ¿Qué es un Microcontrolador?
P14 470 Ω
Figura 4-5 Esquemático del Servo y LED indicador de la Tablilla.
LED
Vss Vdd
White
P14
Red
Servo
Black
Se utiliza en Tablillas con puerto serie revisión C o más recientes, o con cualquier versión de Tablilla con puerto USB.
Vss
15 14 Vdd 13 12
White Red Black
Red Black
X4
Vdd X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
X5
Vin
Vss
+
Figura 4-6 Servo e indicador LED de la Tablilla de Educación
standard servo www.parallax.com
Hasta ahora, usted ha colocado en la posición 1 el interruptor de 3 posiciones. Ahora muévalo a la posición 2 para alimentar el conector del servo.
Controlando el Movimiento · Página 99
9 Suministre alimentación al conector del servo ajustando el interruptor de 3 posiciones como lo muestra la Figura 4-7. Su servo puede girar un poquito cuando lo conecta a la alimentación.
Figura 4-7 Alimentación a la Tablilla del Conector del Servo.
Reset
0
1
2
En este capítulo cuando vea las instrucción “Energic su Tablilla” mueva a la posicion 2 el interruptor de 3 posiciones. De igual forma cuando vea las instrucciónes “Desconecte la Alimentación de su Tablilla” mueva a la posición 0 el interruptor de 3 posiciones. 9 Desconecte la Alimentación de su Tablilla. 9 Vaya a la Actividad #2 en la página 101. Circuito Servo de la Tablilla BASIC Stamp
Si está conectando su servo a la Tablilla BASIC Stamp (Rev C o más reciente) usted necesitará estás partes adicionales de su kit: Un conector de 3 terminales macho/macho (lo muestra la Figura 4-8) Cuatro alambres para conexión.
Figura 4-8 Parte extra de 3 pines macho/macho de la tablilla BASIC Stamp.
La Figura 4-9 muestra el esquemático de los circuitos servo y LED en su Tablilla BASIC Stamp. Las instrucciónes que siguen después de la figura le mostrarán como construir con seguridad este circuito. 9 Desconecte la batería de 9 V de su Tablilla. 9 Construya el indicador LED y el circuito conector del servo mostrado por el esquemático de la Figura 4-9 y el diagrama de alambrado de la Figura 4-10.
Página 100 · ¿Qué es un Microcontrolador?
P14 470 Ω LED
Vss
Figura 4-9 Esquemático del servo y LED indicador en la Tablilla.
Vdd
P14
White Red
Servo
Black
Vss
Figura 4-10 Circuitos del LED indicador y conector servo en la Tablilla.
9 Conecte el servo al conector servo como lo muestra la Figura 4-11. 9 Asegurese que los colores del cable del servo están correctamente alineados con los colores identificados en la imagen. 9 Verifique dos veces sus conexiones.
Controlando el Movimiento · Página 101
Cuidado Solamente use una batería de 9V cuando el Servo Normalizado de Parallax esté conectado a la Tablilla BASIC Stamp. No use ningún tipo de Fuente de Alimentación o Eliminador de Baterias que se alimente al contacto de AC. Para mejores resultados, asegurese que su bateria está nueva. Si está usando una batería recargable asegurese que está bien cargada. Debe tener una capacidad de energía de 100mAh (miliamperes por hora) o mayor.
9 Reconecte la batería de 9 V a su Tablilla. El servo puede girar ligeramente cuando hace la conexión.
Figura 4-11 El servo conectado a la Tablilla.
ACTIVIDAD #2: PROGRAMA DE PRUEBA DEL CONTROL DEL SERVO A Un gradodo es la medida de un ángulo y se indica con el símbolo o. La Figura 4-12 muestra diferentes mediciones de ángulos que incluye 30, 45, 90, 135 y 180 grados. Cada grado de la medición de un ángulo representa 1/360 parte de un círculo, así 90 grados representan una medición de ¼ de un círculo ya que 90/360 = ¼. En forma semejante un ángulo de 180 grados es ½ círculo ya que 180/360 = ½ y usted puede calcular fracciones semejantes diferentes a las mediciones que muestra la figura.
Página 102 · ¿Qué es un Microcontrolador?
Figura 4-12 Ejemplo de mediciones de variosángulos.
El Servo Normalizado de Parallax puede hacer que la estrella fije posiciones dentro de un rango de 180 grados, así la medida de un grado puede ser útil para describir las posiciones que mantiene el servo. La Figura 4-13 muestra ejemplos de un servo con un trozo de alambre que está sujeto con dos hoyos de su estrella y un doblez. La dirección del alambre muestra el ángulo de la estrella del servo y la figura muestra ejemplos de 0, 45, 90, 135 y 180 grados. Figura 4-13 Ejemplos de posiciones de la estrella del servo.
Your servo horn’s range of motion and mechanical limits will probably be different from what’s shown here. Instructions on how to adjust it to match this figure come after the first example program.
En la fábrica, el montaje de la estrella del servo se hace al azar, entonces las posiciones de su servo probablemente sean diferentes a las que muestra la Figura 4-13. En la práctica, la estrella de su servo pudiera estár montada en un rango de +/- 45 grados. El servo de la Figura 4-14 muestra un ejemplode un servo cuya estrella se montó 20 grados en sentido de la manecillas del reloj respecto a la Figura 4-13. Después de que usted encuentre el centro el rango de movimiento de la estrella de su servo usted puede usarlo como una referencia de 90 grados o ajustar la estrella mecánicamente para que coincida con el de la Figura 4-13 siguiente las instrucciones posteriores de esta actividad.
Controlando el Movimiento · Página 103
Figura 4-14 Ejemplos de posición de la estrella del servo antes de los ajustes mecánicos.
Este es un ejemplo de una estrella montada en la flecha de salida del servo cerca de 20 grados en sentido invervso de las manecillas del reloj con referencia a la Figura 4-13.
Usted puede encontrar el centro del rango de movimiento del servo girando con precaución la estrella para encontrar sus límites mecánicos en sentido directo e inverso de las manecillas del reloj. La posición media entre estos dos límites es el centro o posición de 90 grados. La posición del centro del servo pudiera estar en cualquier lugar de la región mostrada en la figura 4-15. El centro del rango de movimiento de la estrella de su servo pudiera estar en esta región.
Figura 4-15 Rango de posiciones posibles del centro.
Página 104 · ¿Qué es un Microcontrolador?
En los siguientes pasos gire la estrella del servo lentamente no la fuerce! El servo tiene límites mecánicos interconstruidos para prevenir que la estrella gire fuera del rango de movimiento de 180 grados. Gire suavemente la estrella y tenga la sensibilidad de sentir cuando llega a unos de sus límites mecánicos. No trate de forzarla más allá de esos límites porque podría dañar los engranes internos del servo.
9 Verifique que está desconectada la alimentación de su Tablilla. 9 Suavemente gire la estrella del servo para encontrar los límites mecánicos en sentido directo e inverso a las manecillas del reloj. La estrella del servo gira con poca fuerza hasta que alcanza los límites. NO TRATE DE GIRAR LA ESTRELLA MÁS ALLÁ DE SUS LÍMITES, sólo girela lo suficiente para alcanzar los límites. 9 Gire la estrella del servo hasta la mitad de los dos límites. Esta es aproximadamente la posicón del centro del servo. 9 Con la estrella en la posición central, sujete un trozo de alambre en la estrella y orientele hacia la parte superior de la región que muestra la Figura 4-15. Recuerde que la dirección en que apunta el alambre en la figura es solamente un ejemplo, su dirección puede apuntar en cualquier parte de esta región. Adonde quiera que apunte cuando está en el centro de su región de movimiento deberá estar muy cerca de la posición de 90 grados. Nuevamente, esta posición puede variar de un servo a otro debido a la forma en que la estrella se sujeta al servo. Programando las Posiciones del Servo
La gráfica en la Figura 4-16 se llama Diagrama de Tiempos y muestra ejemplos de señales high/low que el BASIC Stamp tiene que mandar al servo para que esté en la posición de 90 grados. Figura 4-16 Diagrama de Tiempos de la Señal Servo Pulsos de 1.5 ms hacen que el servo mantenga una posición “central” de 90 grados.
Controlando el Movimiento · Página 105
El diagrama de tiempos muestra que las señales high duran 1.5 ms separadas por señales low que duran 20 ms. Los puntos ...a la derecha de las señales es una forma de indicar que las señales high de 1.5 ms y las señales low de 20 ms una y otra y otra vez para mantener la posición del servo. El símbolo “20ms” indican que el tiempo low puede tener un valor aproximado, y que realmente puede variar unos pocos milisegundos arriba y abajo del valor de 20 ms con el siguiente para no afectar la posición de la estrella del servo. Esto se debe a que la cantidad de tiempo de la señal high dura hasta que le dice al servo que posición conservar, y esto tiene que ser preciso. Hay una instrucción especial llamada PULSOUT que da un control preciso a su programa sobre la duración de las señales high muy breves, a las que se les llama comunmente pulsos. Esta es la sintaxis de la instrucción PULSOUT: PULSOUT Pin Duration. Con la instrucción PULSOUT usted puede escribir el código en PBASIC para hacer que BASIC Stamp fije la posición del servo en 90 grados usando como guía el diagrama de tiempos. El argumento “Pin” de la instrucción PULSOUT tiene que ser un número que le indica al BASIC Stamp que pin de E/S deberá transmitir el pulso. El argumento “Duration” de la instrucción PULSOUT que vale 2 millonésimas de segundo representa los incrementos de tiempo del pulso. 2 millonésimas de segundo es igual a 2 microsegundos y se abrevia 2us. Una millonésima de segundo se llama microsegundo. La letra Griega μ se usa en lugar de la palabra micro y la letra s se usa en lugar de segundo. Esto facilita escribir y tomar notas, porque en lugar de escribir 2 microsegundos, usted puede escribir 2 μs. Recordatorio: Una milésima de segundo se llama milisengundo y se abrevia ms. Equivalencias: 1ms = 1000 μ s. En otras palabras, usted puede meter mil millonesimas de segundo dentro de una milésima de segundo.
Ahora que sabe como usar la instrucción PULSOUT, el programa ServoCenter.bs2 manda pulsos de contro repetidamente para hace que el servo mantenga la posición de 90 grados. La instrucción PULSE 14, 750 mandará un pulso de 1.5 ms al servo. Hace esto porque el argumento Duration de la instrucción PULSOUT especifica el número de 2us de duración del pulso. Como el argumento Duration vale 720, la instrucción PULSOUT hará que el pulso dure 750x2us = 1500 us = 1.5 ms ya que hay 1000 us en 1 ms. Después que termina el pulso high la instrucción PULSOUT hace que el pin E/S ahora mande señales bajas.
Página 106 · ¿Qué es un Microcontrolador?
Entonces, la instrucción PAUSE 20 que sigue del PULSOUT hace que el BASIC Stamp mande señales low durante 20 ms. Con las dos instrucciones dentro del bucle DO...LOOP el high de1.5 ms seguido por el low de 20 ms se repetiran una y otra y otra vez haciendo que el servo mantenga su posición Programa Ejemplo; ServoCenter.bs2 ' ¿Que es un Microcontrolador? - ServoCenter.bs2 ' Mantiene el Servo en su posicion central de 90 grados. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!", CR DO PULSOUT 14, 750 PAUSE 20 LOOP
Prueba de la Posición Central del Servo en 90 grados
La posición del Servo en 90 grados se llama posición central porque el punto de 90 grados está en el centro del rango de movimiento de 180 grados. Los pulsos de 1.5 ms hacen que el servo mantenga la estrella en su posición central, la cual deberá estar cerca del punto medio que usted determinó al fijar los límites mecánicos del servo. Usted puede usar la posición del centro para mantener al servo como la referencia de 90 grados, o usar un desarmador para quitar y reposicionar la estrella para que el alambre sujeto a la estrella apunte hacia arriba. Las instrucciones de ajuste están en la sección titulada: Opcional: Ajuste Central de 90 grados de la estrella del servo. Si usted usa la posición del centro, sin ajustarlo, como una referencia cualquier otra posición del servo está respecto a la posición de 90 grados. Por ejemplo, la posición de 45 grados debería ser 1/8 de una vuelta en sentido de las manecillas del reloj, y la posición de 135 grados debería ser 1/8 de vuelta en sentido inverso de la manecillas del reloj. Estos ejemplos se mostraron en la Figura 4-14. Vamos a encontrar cual es la verdadera posición central de la estrella de su servo: 9 Gire suavemente la estrella del servo a uno de sus límites mecánicos. 9 Aplique alimentación a su Tablilla. Si tiene una Tablilla Board of Education, asegurese que el interruptor de 3 posiciones está en la posición 2. 9 Corra el programa ServoCenter.bs2.
Controlando el Movimiento · Página 107
Tan pronto como está el programa cargado la estrella del servo deberá girar a su posición central y ahí permanecer. El servo “mantiene” esta posición porque los servos normalizados están diseñados para resistir fuerzas externas que los empujen. Es por esto que el servo mantiene en esa posción el volante de los carros RC, el timón de los barcos o los alerones del avión. 9 Anote la posición central de su servo. 9 Suavemente aplique un giro a la estrella como cuando lo hizo para encontra sus límites mecánicos. El servo debe reaccionar y mantener la estrella en la posición central. Si desconecta la energía, usted puede girar el servo afuera de su posición central. Cuando usted conecta la energía, el programa se reinicia y el servo moverá inmediatamente la estrella a la posición central y ahí la mantendrá. 9 ¡Inténtelo! Opcional – Ajuste de la estrella del servo en el centro de 90 grados
Como opción usted puede ajustar la estrella del servo para hacer que el alambre de la estrella apunte hacia arriba cuando se está ejecutando el programa ServoCenter.bs2 como lo muestra el lado derecho del Figura 4-17. Si usted hace este ajuste mecánico, esto simplificará los ajustes de los ángulos del servo porque cada ángulo se parecerá a los de la Figura 4-13. Usted necesitará un Desarmador de Cruz # 2 para este ajuste opcional.
Página 108 · ¿Qué es un Microcontrolador?
Output shaft
Phillips Screw
Figura 4-17 Centrado mecánico del Servo Usted puede remover y reposicionar la estrella de la flecha de salida del servo con un pequeño desarmador.
Horn
9 Desconecte la alimentación de su Tablilla. 9 Quite el tornillo que fija la estrella del servo con la flecha de salida, y luego suavemente jale hacia fuera la estrella de la caja para liberarla. Las partes se parecerán a el lado izquierdo de la Figura 4-17. 9 Conecte la alimentación a su Tablilla. El programa deberá hacer que el servo mantenga la flecha de salida en la posición central. 9 Regrese la estrella a la flecha de salida del servo y haga que el alambre sujeto en ella apunte hacia arriba como lo muestra el lado derecho de la Figura 4-17. Ajuste fino. Pudiera ser que no sea posible tener un alineamiento perfecto debido al ajuste de la estrella con la flecha sin embargo será muy cercano. Entonces usted puede ajustar el alambre sujeto a la estrella y así compensar esta pequeña desviación y hacer que el alambre apunte hacia arriba.
9 Desconecte la alimentaciós de su Tablilla. 9 Apriete el tornillo de cruz. 9 Conecte la alimentación a su Tablilla para que el programa haga que el servo mantenga nuevamente su posición central. El alambre sujeto a la estrella ahora deberá apuntar hacia arriba (o casi hacia arriba) indicando la posición de 90 grados.
Controlando el Movimiento · Página 109
Su Turno – Programas para que el Servo Apunte en Direcciones Diferentes
La Figura 4-18 muestra unas pocas instrucciones PULSOUT que le indican al servo mantener ciertas posiciones importantes como 0, 45, 90, 135 y 180 grados. Las instrucciones PULSOUT son aproximadas. Y usted podría tener que ajustar los valores ligeramente para obtener posiciones angulares más precisas. Usted puede modificar el argumento Duration de las instrucciones PULSOUT para mantener cualquier posición de este rango. Por ejemplo, si usted desea mantener la posición de 30 grados, el argumento Duration de las instrucciones PULSOUT deberá ser 417, este valor es 2/3 del valor de los argumentos Duration entre 250 ( 0 grados) y 500 (45 grados). Los tiempos de los pulsos de la Figura 4-18 posicionarán la estrella del servo muy cerca de los ángulos mostrados pero estas no son necesariamente exactas. Usted puede experimentar con diferentes valores de Duration de PULSOUT para tener posiciones más precisas.
9 Haga una copia de ServoCenter.bs2 con el nombre TestServoPositions.bs2 9 Cambie el argumento Duration de PULSOUT de 750 a 500 y ejecute el programa moficado para verificar que el servo se mantiene en la posición de 45 grados. 9 Repita esta prueba con argumentos Duration de 1000 (135 grados) y 417 (30grados). 9 Trate de predecir el argumento Duration que necesita para una posición que no está escrita en la Figura 4-18, y verifique que servo gira la estrella y la mantiene en la posición que desea. Por ejemplo pueden ser las posiciones 60, 120 grados etc. Mantenga su programa con argumentos Duration de PULSOUT en rango de 350 a 1150. El rango de 250 a 1250 es en “Teoría” pero en la práctica el servo podría tratar de empujar contra sus límites mecánicos. Eso puede reducir la vida útil del servo. Su usted desea maximixar el movimiento del rango de su servo, cuidadosamente verifique que gradualmente se acerquen a la posición de su servo justamente dentro de sus límites mecánicos, su desgaste será normal en lugar de ser excesivo.
Página 110 · ¿Qué es un Microcontrolador?
Figura 4-18: Posiciones de Estrella del Servo, Instrucciones PULSOUT y Duración del Pulso en ms.
Resolviendo la Ecuación
Asociada a la instrucción PULSOUT de la Figura 4-18 hay un número que corresponde a los milisegundos que dura cada pulso. Por ejemplo, el PULSOUT 14, 417 manda 0.834 ms de duración, y para PULSOUT 14, 500 manda 1.0 ms. Si usted tiene el BASIC Stamp 2 y desea convertir el tiempo en milisegundos al argumento Duration de la instrucción PULSOUT, use esta ecuación: Duración = número de milisegundos x 500 Por ejemplo, si usted no conocía que el argumento Duration para 1.5 es 750, así es como usted debía calcularlo:
Controlando el Movimiento · Página 111
Duration = 1.5 x 500 = 750
La razón por la que tenemos que multiplicar el número de milisegundos de un pulso por 500 se obtiene del argumento PULSOUT Duration poque Duration está en términos de unidades de 2 us en la BS2. ¿Cuántas unidades de 2μ hay e1 ms? Para saberlo solamente divida 2 millonésimas en 1 milésimas. 1 2 ÷ = 500 1,000 1,000 ,000
Si la instrucción es PULSOUT 14, 500, el pulso durará 500 x 2us = 1000 us = 1.0 ms. (Recuerde: 1000 us = 1 ms) Usted puede calcular Duration de una instrucción PULSOUT desconocida usando esta ecuación: Número de ms = Duración / 500 ms Por ejemplo, si usted ve la instrucion PULSOUT 14, 850, ¿cuánto dura verdaderamente ese pulso? Número de ms = 850 / 500 ms = 1.7 ms Escriba el Código a partir de los Diagramas de Tiempo
La Figura 4-19 muestra los diagramas de la señal que el BASIC Stamp manda al Servo para que su estrella mantenga una posición de 135 grados. Como el diagrama de tiempo muestra pulsos repetidos separados por señales low de 20 ms, el bucle DO...LOOP del programa ServoCenter.bs2 proporciona un buen punto de inicio y todo lo que se necesita es ajustar la duración de los pulsos high. Para calcular el argumento Duration de la instrucción PULSOUT para los pulsos de 2 ms en el diagrama de tiempos, usted puede usar la ecuacion Duration de la Sección Resolviendo la Ecuación. Duración = número de milisegundos x 500 = 2 x 500 = 1000
Cuando sustituimos 1000 en el argumento Duration de la instrucción PULSOUT , el bucle de control del servo se parecerá a esto: DO
Página 112 · ¿Qué es un Microcontrolador?
PULSOUT 14, 1000 PAUSE 20 LOOP
9 Verifique este bucle en una copia de ServoCenter.bs2 y verifique que la estrella del servo se coloca aproximadamente en 135 grados. 9 Repita este ejercicio para los diagramas de tiempo en la Figura 4-20 Figura 4-19 Diagramas de Tiempo para la posición de 135 grados Son pulsos de 2 ms separados por 20 ms
Figura 4-20 Diagramas Tiempo para posición de grados
de la 45
Son pulsos de 1 ms separados por 20 ms
ACTIVIDAD #3: CONTROL DEL TIEMPO DE RETENCIÓN DEL SERVO La Animatrónica usa la electrónica para animar props y efectos especiales, y los servos son la herramienta común en este campo. La Figura 4-21 muestra un ejemplo de una mano robótica de un proyecto de Animatrónica, que usa servos para controlar los dedos. El programa PBASIC que controla los movimientos de la mano hace que los servos mantengan las posiciones durante cierta cantidad de tiempo. En la actividad anterior, nuestros programas hicieron que el servo mantenga en forma contínua ciertas. Posiciones indefinidamente. Esta actividad lo introduce en la forma de escribir códigos que hacen que el servo mantenga ciertas posiciones durante ciertas cantidades de tiempo.
Controlando el Movimiento · Página 113
Figura 4-21 Mano Animatrónica Hay cinco servos en la parte inferior derecha de la imagen que jalan los cables de frenado y se comunican con los dedos para hacerlos flexibles. El BASIC Stamp proporciona el control de cada dedo.
Bucles FOR...NEXT para controlar el Tiempo del Servo que Mantiene una Posición
Si usted escribe el código para hace que un LED parpadee una vez por segundo, usted puede anidar el código en un bulce FOR...NEXT para que repita tres veces el parpadeo por tres segundo. Si su LED parpadea cinco veces por segundo, usted tiene que hacer que bucle FOR...NEXT se repita quince veces para obtener el parpadeo del LED por tres segundos. Como las instrucciones PULSOUT y PULSE que controlan su servo son responsables de mandar señales high/low estas también hacen que el LED parpadee. Las señales que mandamos a los servos en la actividad anterior hacen que el LED se ilumine poco, quizá con un aparente parpadeo, esto se debe porque las señales high/low son muy rápidas y los tiempos en high son muy breves. Reduzcamos la velocidad de las señales en 1/10 y veremos que el LED parpadea. Programa Ejemplo. SlowServoSignalForLed.bs2
Comparado con el servo de señal centrada, este programa ejemplo incrementa la duración de PULSOUT y PAUSE por un factor de 10 para que puedamos ver la señal con un LED indicador que parpadea. El bucle FOR…NEXT del programa se repite casi 5 veces por segundo, haciendo que 15 repeticiones hacen que el LED parpadee por tres segundos. 9 Desconecte la alimentación de su servo:
Página 114 · ¿Qué es un Microcontrolador?
Si tiene una Tablilla Board of Education coloque el interruptor de 3 posiciones en la posición 1, para desconectar la alimentación del servo. La posición 1 mantiene la alimentación del resto del sistema. o Si tiene usted una Tablilla de BASIC Stamp Homework, temporalmente desconecte el alambre que se conecta a Vdd. Esto desconecta la alimentación del servo. Meta y ejecute el programa SlowServoSignalsFor Led.bs2 Verifique que el LED parpadea rapidamente durante 3 segundos. Cambie el valor EndValue del bucle FOR...NEXT de 15 a 30 y vuelva a ejecutar el programa. Como el bucle se repite dos veces, el LED deberá parpadear ahora durante 6 segundos. Conecte la alimentación de su servo: o Si tiene una Tablilla Board of Education coloque el interruptor de 3 posiciones en la posición 2, para conectar la alimentación del servo. o Si tiene usted una Tablilla de BASIC Stamp Homework, conecte el alambre que se conecta a Vdd. o
9 9 9 9 9
' ¿Que es un Microcontrolador – SlowServoSignalsForLed.bs2 ' Haga un 1/10 más lentas las señales de su servo para ver que parapadea el LED indicador. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Programa Ejecutandose!", CR counter
VAR
Word
FOR counter = 1 to 15 PULSOUT 14, 7500 PAUSE 200 NEXT
Programa Ejemplo ThreeServoPositions.bs2
Si usted cambia PULSOUT 14, 7500 a PULSOUT 14, 750 y PAUSE 200 a PAUSE 20, tendrá usted un bucle FOR...NEXT que manda brevemente la señal de posición central al servo. Como ahora la señales durarán 1/10 de las duraciones del programa SlowServoSignalsForLed.bs2 todo el bucle FOR...NEXT tomará 1/10 de tiempo en ejecutarse. Si el objetivo es hacer que el servo mantenga una posición particular durante tres segundos simplemente proporciona diez veces más pulso al incrementarse el argumento de 15 a 50 “EndValue” del bucle FOR...NEXT.
Controlando el Movimiento · Página 115
FOR counter = 1 to 150 PULSOUT 14, 750 PAUSE 20 LOOP
' Se Centra durante 3 segundos.
El programa ejemplo ThreeServoPositions.bs2 hace que el servo mantenga tres posiciones diferentes como lo muestra la Figura 4-22, cada una durante 3 segundos. Figura 4-22 ThreeServoPositions.bs2 El programa hace que el servo mantenga cada posición durante tres segundos..
9 Meta y ejecute el programa ThreeServoPositions.bs2. 9 Verifique que el servo mantiene cada posición en la secuencia de la Figura 4-22 durante tres segundos. La última posición que el servo mantendrá por 3 segundos es 135 grados y luego el programa se detiene. La estrella del servo estará en la misma posición incluso si el BASIC Stamp deja de mandar pulsos de control. La diferencia es que durante los tres segundos que el BASIC Stamp mantiene la posición de 135 grados, el servo resiste cualquier fuerza que trate de mover la estrella de esta posición. Al terminar los 3 segundos se puede girar con la mano la estrella del servo. Una forma para saber si el servo está recibiendo señales de control es observando el LED indicador que está conectado al pin P14. Cuando está iluminado el LED esta indicando que el servo está recibiendo señales de control y manteniendo su posición. Cuando se detienen las señales el LED estará apagado. 9 Vuelva a ejecutar el programa (o presione y libere el botón de Reset). 9 Tan pronto que el servo va a la posición de 135 grados, mire el LED indicador de señal mientras aplica fuerza de rotación a la estrella. Usted debe ser capáz de sentir la reacción del servo mientras que el LED brilla muy poco indicando que el servo todavía está recibiendo señales de control. En el momento en que se
Página 116 · ¿Qué es un Microcontrolador?
apaga el LED sabemos que ya no se envian señales de control, el servo deja de mantener su posición y ahora usted puede girar la estrella. 9 Cuando se detiene la señal de 135 grados, verifique que el LED muestra que las señales están detenidas y que el servo le permite girar la estrella afuera de la posición de 135 grados. ' Que es un Microcontolador – ThreeServoPositions.bs2 ' El Servo mantiene las posiciones 45, 90, and 135 degree durante 3 seconds cada una. ' {$STAMP BS2} ' {$PBASIC 2.5} counter
VAR
Word
PAUSE 1000 DEBUG "Posicion = 45 grados...", CR FOR counter = 1 TO 150 PULSOUT 14, 500 PAUSE 20 NEXT
' 45 grados durante 3 segundos.
DEBUG "Posicion = 90 grados...", CR FOR counter = 1 TO 150 PULSOUT 14, 750 PAUSE 20 NEXT
'90 grados durante 3 segundos.
DEBUG "Posicion = 135 grados...", CR FOR counter = 1 TO 150 PULSOUT 14, 1000 PAUSE 20 NEXT
'135 grados durante 3 segundos.
DEBUG "Todo hecho.", CR, CR END
Su Turno – Ajustando la Posición vs Ajustando el Tiempo de Retención.
El programa ThreServoPositions.bs2 supone que la ejecución de 50 pulsos del servo del bucle FOR...NEXT le toma 1 segundo. También esto puede usarse para ajustar el tiempo de retención del argumenteo EndValue del bucle FOR...NEXT. Por ejemplo si usted desea
Controlando el Movimiento · Página 117
que el servo sólo mantenga su posición durante dos segundos, cambie el argumento EndValue de 150 a 100. Para cinco segundos cambielo de 150 a 250, y así sucesivamente... 9 Haga una copia del programa ThreServoPositions.bs2 9 Modifique el argumenteo EndValue del bucle FOR...NEXT y experimente con diferentes valores para diferentes tiempos de retención. 9 Opcional: Particularice las posiciones de retención ajustando el argumento Duration de la instrucción PULSOUT. Tiempo de Repetición del Bucle FOR...NEXT – Verdaderamente es 1/44 de segundo no un 1/50
Un 1/50 de segundo es una aproximación de repetición del bucle. Un 1/44 de segundo es una aproximación mas cercana. Considere cuanto tiempo requiere ejecutar cada elemento del bucle FOR...NEXT . La instrucción PULSOUT 14, 750 está en la midad del rango de las posibles duraciones del pulso, de tal forma que se puede tomar como promedio de la duración del pulso. Manda un pulso que dura 750 x 2us = 1500 us = 1.5 ms. La instrucción PAUSE 20 provoca un retardo en el programa de 20 ms. Un bucle FOR...NEXT con una instrucción PULSOUT y una PAUSE requiere 1.3 ms para procesar todos los números e instrucciones. Aunque esto significa que la señal low entre los pulsos dura verdaderamente 21.3 ms en lugar de 20 ms, esto no afecta el funcionamiento del servo. Los tiempos low pueden estar apagados unos pocos milisegundo, pero los pulsos high tienen que tener duraciones muy precisas por eso la instrucción PULSOUT es muy precisa. Entonces, el tiempo total del bucle FOR...NEXT que requiere para repetirse es 1.5 ms + 20 ms + 1.3 ms = 22.8 ms, esto ses 22.8 milésimas de segundo. ¿Cuántas 22.8 milésimas de segundo caben en 1 segundo? Dividamos 0.028 entre 1 y obtenemos: 1 segundo/0.028 segundos/repetición = 43.86 repeticiones = 44 repeticiones Esta es la razón por la que el bucle se repite a razón de 44 repeticiones por segundo. El número total de repeticiones en 1 segundo se llama “Hertz” y se abrevia Hz. Así, podemos decir que la señal del servo se repite o tiene una Frecuencia cercana a 44 Hz. Ciclos y hertz (Hz): Cuando una señal se repite a si misma un cierto número de veces, cada repetición se llama ciclo. El número de ciclos es un segundo se mide en Hertz. Hertz se abrevia Hz.
Los valores largos o cortos de PULSOUT Duration hacen que el bucle FOR...NEXT tome un poco más o menos tiempo para repetirse. El PULSOUT Duration de 750 está en la
Página 118 · ¿Qué es un Microcontrolador?
mitad del rango de duración de los pulsos de control del servo que muestra la Figura 4-18. Entonces usted puede usar 44 en su código como referencia para el número de los pulsos del servo en un segundo. Si usted necesita mayor precisión repita las ecuaciones de la instrucción PULSOUT que está utilizando. Por ejemplo, si el bucle tiene una instrucción PULSOUT con Duration de 1000 en lugar de 750, al pulso dura 2ms en lugar de 1.5 ms. El bucle todavía tiene una pausa de 20 ms y 1.3 ms de tiempo de proceso. Entonces la suma es 2 + 20 + 1.3 = 23.3 ms. Dividimos 1 s entre este número para encontra la razón del bucle FOR...NEXT y obtenemos 1/0,023 = 42.9 = 43 Hz. Resumen de Contro del Bucle FOR...NEXT del Servo
La Figura 4-23 detalla la función de cada número del bucle FOR...NEXT del control del servo. El EndValue del bucle FOR...NEXT determina el número de 1/44 de segundo en que el servo mantiene una posición. El valor 750 manda un pulso de 1.5 ms que instruye al servo que mantenga una posición de 90 grados de acuerdo con la Figura 4-18. El argumento “pin” de la instrucción PULSOUT escoge el pin de E/S para mandar las señales de control al servo. Entonces, 14 hace que la instrucción PULSOUT mande una señal high breve (pulso) al servo conectado en la terminal pin P14. Cuando se termina el pulso ahora el pin manda una señal low. Entonces, la instrucción PAUSE 20 asegurá quela señal low dure aproximadamente 20 ms antes del siguiente pulso.
Servo I/O pin
Number of 44ths of a second to hold the position
FOR counter = 1 TO 132 PULSOUT 14, 750 PAUSE 20 NEXT Position to hold
Figura 4-23 Control del Servo Del Bucle For...Next
Required 20 ms between each pulse
En promedio un bucle FOR...NEXT que manda una sola instrucción PULSOUT al servo seguida por una PAUSE 20, se repite 44 veces por segundo. Y como el bucle se repite 132 veces, hace que el servo mantenga la posición 135 grados durante 3 segundos. Esto se debe a que: 132 repeticiones entre 44 repeticiones/segundo = 3 segundos
Controlando el Movimiento · Página 119
Si su aplicación o proyecto necesita que el BASIC Stamp manda una señal servo para determinado número de segundo, solamente multiplique el número de segundo por 44 y use el resultado en el argumento EndValue del bucle FOR...NEXT. Por ejemplo, si su señal necesita que dure cinco segundos: 5 segundo x 44 repeticiones/segundo = 220 repeticiones
ACTIVIDAD #4: CONTROLANDO LA POSICIÓN CON SU COMPUTADORA La Automatización de las Fábricas frecuentemente incluyen comunicación de microcontroladores con grandes computadoras. Los microcontroladores leen los sensores y transmiten los datos a la computadora principal. La computadora principal interpreta y analiza los datos de los sensores y regresa información de posiciones a los microcontroladores. Los microcontroladores pueden actualizar la velocidad de una banda rotatoria , o una posición específica, o un mecanismo o la tarea que controla un motor. Usted puede usar la Terminal Debug para mandar mensajes de su computadora a el BASIC Stamp como lo muestra la figura 4.22. El BASIC Stamp tiene que programarse para que “escuche” los mensajes que manda usted con la Terminal Debug, y también tiene que almacenar los datos que usted manda de una o más variables.
Figura 4-24 Mandando Mensajes a el BASIC Stamp Haga click en el cuadro de la esquina superior izquierda y escriba su mensaje. Una copia del mensaje que escribió aparece en la ventana inferior. A esta copia se le llama “ECO”.
Página 120 · ¿Qué es un Microcontrolador?
En esta actividad, usted programará el BASIC Stamp para recibir dos valores de la Terminal Debug, y usará estos valores para controlar el servo. 1. El número de pulsos a enviar al servo. 2. El valor de Duration que usa la instrucción PULSOUT. También programará el BASIC Stamp usando estos valor para controlar el servo. Partes y Circuito
Los mismos de la Actividad #2 Programando el BASIC Stamp para Recibir Mensajes de la Terminal Debug
La programación del BASIC Stamp para que mande mensajes a la Terminal Debug se usando la Instrucción DEBUG. La programación del BASIC Stamp para que reciba mensajes de la Terminal Debug se hace usando la Instrucción DEBUGIN. Al usar DEBUGIN, también puede declarar una o más variables para que el BASIC Stamp almacene la información que recibe. Este es un ejemplo de una variable que usted puede declarar para que el BASIC Stamp almacene un valor Pulses VAR Word
Posteriormente en el programa, usted usará esta variable para almacenar un número que recibe de la instrucción DEBUGIN. DEBUGIN DEC pulses
Cuando el BASIC Stamp recibe un valor numérico de la Terminal Debug, lo almacena en la variable “pulses” El formadto DEC le dice a la instrucción DEBUGIN que los caracteres que usted envía serán digitos que forman un número decimal. Tan pronto como usted pisa la tecla “Enter” el BASIC Stamp almacenará, como un número decimal, los dígitos que recibe en la variable “pulses”. Y luego avanzará. Aunque no está incluido en el Programa Ejemplo, usted puede agregar una línea para verificar que BASIC Stamp procesó el mensaje. DEBUG CR, "Usted mandó el valor: ", DEC pulses
Controlando el Movimiento · Página 121
Programa Ejemplo: ServoControlWithDebug.bs2
La Figura 4-25 muestra la localización de las ventanas de la Terminal Debug junto con la Ventana de Recepción. La Ventana de Recepción es la que hemos estado usando para mostrar los Mensajes que recibe la Terminal Debug del BASIC Stamp. La Ventana de Transmisión le permite a usted escribir los caracteres y números y transmitirlos a el BASIC Stamp.
Figura 4-25 Ventanas de la Terminal Debug
Å Ventana de Transmisión
En la Figura 4-25, se escribión el número 264 en la Ventana de Transmisión de la Terminal Debug. Abajo, en la Ventana de Recepción se muestra una copia del valor 264 cerca del mensaje “Meta Tiempo de Ejecución”. A esta copia se le llama “eco” y solamente se muestra en la Ventana de Recepción si el rectángulo, de la esquina inferior derecha, Echo Off está sin verificar. Eco es cuando usted manda un mensaje a traves de la ventana Transmitir de la Terminal Debug, y aparece una copoa en la ventana Recibir de la Terminal Debug. Hay una ventanita para checar en la esquina inferior derecha de la Terminal Debug, y usted puede hacer click para ver que ya checó. En esta actividad, como deseamos mostrar los “ecos” en la ventana de Recepción, la ventanita EchoOff quedará vacia, sin checar.
9 Meta el programa ServoControlWithDebug.bs2 en el Editor de BASIC Stamp y ejecútelo. 9 Si la ventana de Transmisión es muy pequeña, agrandela usando el ratón haciendo clik en el Separador y arrastrelo hacia abajo. El Separador está justamente abajo del mensaje de texto “Enter run time as a” en la Figura 4-25. 9 Asegurese que la ventanita Echo Off de la esquina inferior derecha esta vacia.
Página 122 · ¿Qué es un Microcontrolador?
9 Haga click en la ventana Transmit de arriba, para colocar ahí su cursor y escribir los mensajes. 9 Cuando la Terminal Debug le indique “Enter run time as a number of pulses” escriba el número 132, y luego presione la tecla Enter de su computadora 9 Cuando la Terminal Debug le indique “Enter position as a PULSOUT duration” escriba el número 100 y luego presione “Enter”. La duración de PULSOUT Duration debe ser un número entre 350 y 1150. Si usted mete números fuera de este rango el programa los cambiar a losn números más cercanos de 350 o 1150. Si el programa no tiene esta característica de seguridad, se pueden meter ciertos números que pudierán hacer que el servo trate de girar a un posición más allá de sus propios límites mecánicos. Aunque esto no daña al servo, puede disminuir su vida útil.
El BASIC Stamp mostrará el mensaje “Servo en Ejecución” mientras manda pulsos al servo. Cuando ha terminado el envió de pulsos, mostrará el mensaje “Hecho” durante 1 segundo. Entonces, le indicará que meta nuevamente el número de pulsos. De buen humor asegurese de seguir la indicación de meter valores entre 350 y 1150 para el valor de PULSOUT. 9 Experimente metiendo otros valores del rango 350 a 1150 para valores de PULSOUT Duration y valores para el número de pulsos entre la entre 1 a 65534. Se requieren cerca de 44 pulsos para hacer que el servo mantenga una posición por 1 segundo. Para hacer que el servo mantenga una posición durante 5 minutos usted deberá meter 13200 en el indicador “número de pulsos”. Esto es: 44 pulsos/segundo x 60 segundos/minuto x 5 minutos = 13200 pulsos ¿Por qué se usan los valores de 1 a 64434? Si usted verdaderamente desea saberlo, lea toda la sección FOR...NEXT del Manual BASIC Stamp para aprender acerca de error del rango de la variable, 16-bit rollover. Se hace un error cuando está haciendo sus programas.
' ¿Que es un Microcontrolador? - ServoControlWithDebug.bs2 ' Manda Mensajes a BASIC Stamp para controlar el servo usando ' la Terminal Debug. ' {$STAMP BS2} ' {$PBASIC 2.5} counter pulses duration
VAR VAR VAR
Word Word Word
PAUSE 1000 DEBUG CLS, "Tiempo de ejecución del Servo: ", CR, " ~44 pulsos en 1 segundo", CR,
Controlando el Movimiento · Página 123
"Posición del Servo ", CR, " 350 <= PULSOUT Duration <= 1150", CR, CR DO DEBUG "Meta el tiempo de ejecución ", CR, "como numero de pulsos: " DEBUGIN DEC pulses DEBUG "Meta la posición como", CR, "Duración de PULSOUT: " DEBUGIN DEC duration duration = duration MIN 350 MAX 1150 DEBUG "Servo en ejecución...", CR FOR counter = 1 TO pulses PULSOUT 14, duration PAUSE 20 NEXT DEBUG "Hecho", CR, CR PAUSE 1000 LOOP
Funcionamiento del programa ServoControlWithDebug.bs2
En este programa se declaran tres variables tamaño “Word” counter pulses duration
Var Var Var
WORD WORD WORD
Se declara la variable “counter” porque la usa el bucle FOR…NEXT. (Para detalles, vea Capítulo 2, Actividad 3). Las variables “pulses” y “duration” se usan para un par de actividades. Ambas se usan para recibir y almacenar valores que manda la Terminal Debug. La variable “pulses” también se usa para fijar el número de repeticiones en el bucle FOR...NEXT que proporciona pulsos al servo, y la variables “duration” se usa para fijar la duración de cada pulso de la instrucción PULSOUT. La instrucción DEBUG proporciona un recordatorio que hay cerca de 44 pulos en 1 segundo en el bucle FOR...NEXT, y el argumento de PULSOUT Duration que controla la posición del servo puede valer entre 350 y 1150. DEBUG CLS, "Tiempo de Ejecución del Servo :", CR,
Página 124 · ¿Qué es un Microcontrolador?
" ~44 pulsos en 1 segundo", CR, "Posicion del Servo :", CR, " 350 <= Duración de PULSOUT <= 1150", CR, CR
El resto de el programa se anida dentro de un bucle DO...LOOP sin un WHILE o sin el argumento Condition de la instrucción UNTIL de tal manera que las instrucciones se ejecutan una vez y otra y otra vez. DO ‘No se muestra el resto del programa. LOOP
La instrucción DEBUG se usa para mandar su (el “usuario” del software) mensaje para meter el número de pulso. Entonces, la instrucción DEBUGIN espera que usted meta los dígitos que forman el número y que presione la tecla “Enter” de su teclado. Los digitos que usted metión se convierten en un valor que almacena la variable “pulses”. El proceso se repite con unas segundas instrucciones DEBUG y DEBUGIN que cargan otro valor que usted también mete en la variable “duration”. DEBUG "Meta el tiempo de ejecución como ", CR, "número de pulsos: " DEBUGIN DEC pulses DEBUG "Meta la posición como", CR, "Duración de PULSOUT: " DEBUGIN DEC duration
Despues que ha metido el segundo valor, es útil mostrar un mensaje mientras se está ejecutando el servo para que no intente meter el segundo valor durante este tiempo: DEBUG “El servo está ejecutandose...” , CR
Mientras el servo está ejecutandose intente suavemente mover la estrella del servo fuera de su posición de retención. El servo se resiste a esta ligera presión aplicada a la estrella. For Counter = StartValue hasta EndValue {STEP StepValor} …NEXT Esta es la sintaxis del bucle FOR…NEXT del Manual BASIC Stamp. Y muestra que usted necesita un Counter, StartValue y un EndValue para controlar cuantas veces en si mismo se repite el bucle. Si usted desea agregar un número diferente a uno al valor Counter, tambien hay un StepValue opcional para cada bucle.
Controlando el Movimiento · Página 125
Como en los ejemplos anteriores, la variable “counter” se usó para mantener el ajuste de las repeticiones del bucle FOR...NEXT. La variable “counter” afuera del bucle FOR...NEXT introduce algunas nuevas técnicas usando variables para definir como se comporta el programa (y el servo). Hasta este ejemplo, los bucles FOR...NEXT han usado constantes como 10 o 132 en el argumento EndValue. En este bucle FOR...NEXT el valor de la variable pulsos se usa para controlar el EndValue del bucle FOR...NEXT. Entonces, usted fija el valor de “pulses” metiendo un número en la Terminal Debug, y éste controla el número de repeticiones que ejecuta el bucle FOR...NEXT, y este a su vez controla el tiempo que el servo mantiene una posición dada. FOR counter = 1 to pulsos PULSOUT 14, duration PAUSE 20 NEXT
También, en los ejemplos anteriores, valores constantes tales como 500, 750 y 1000 se usaron para el argumento “duration” de la instrucción PULSOUT. En este bucle, una variable llamada “duration” que usted determina metiendo valor en Ventana de Transmisión de la Terminal Debug, ahora define la duración del pulso de la instrucción PULSOUT, y esta a su vez controla la posición que el servo mantiene. Tómese su tiempo para ServoControlWithDebug.bs2.
entender
el
bucle
FOR...NEXT
del
programa
Este es uno de los primeros ejemplos de las cosas maravillosas que usted puede hacer con argumentos y variables de las instrucciones de PBASIC. Destaca la utilidad de funcionamiento que un módulo con microcontrolador programable como el BASIC Stamp puede realizar.
Su Turno – Ajuste de límites con Software
Imaginemos que este sistemade control servo computarizado se ha desarrollado para que trabaje a control remoto. Quizá un guardia de seguridad lo usará para abrir una puerta que él o ella observa con una cámara remota. Quizá un colega estudiante lo usará para controlar puertas de una red de pasajes confusos de ratones que buscan alimento. Quizá un cañonero militar lo usé para apuntar el cañón a un objetivo particular. Si usted está diseñando el producto para alguien más lo use, la última cosa que usted desea darle al usuario (guardia de seguridad, colega estudiante, cañonero militar) es la posibilidad que meta números erroneos que puedan dañar el equipo. Mientras ejecuta el programa ServoControlWithDebug.bs2, es posible hacer un error mientras escribe el valor de duration en la Terminal Debug. Digamos que accidentalmente
Página 126 · ¿Qué es un Microcontrolador?
usted escribe 100 en lugar de 1000 y presiona “Enter”. El valor 100 provocaría que el servo trate de girar a una posición más allá de sus límites mecánicos. Aunque esto no daña instantáneamente el servo, esto no beneficia la vida útil del servo. Entonces el programa tiene una línea que previene este error que puede causar daño: duration = duration MIN 350 MAX 1150
Esta instrucción corregiría el 100 que accidentalme escribió y cambiaría la variable “duration” a 350. Si usted accidentalmente escribe 10000 esto reduciría la variable “duration” a 1150. Usted puede hacer algo equivalente con un par de instrucciones IF...THEN: IF duration < 350 THEN duration = 350 IF duration > 1150 THEN duration = 1150
Hay algunas máquinas que incluso corrigen automáticamente al valor más cercano y se tuvieran resultados indeseable. Por ejemplo, una máquina de control númerico que corta algúna clase de material costoso, usted no desearía que la máquina suponga 350 cuando usted escribió 1000, pero accidentalmente escribió 100 Si no corta el material al ajuste de 350 esto generaría un error costoso. Entonces, podemos tomar otra aproximación a su programa e indicarle que sus valores están fuera de rango y volver a intentar. Este es un ejemplo de cómo puede moficar el código para que haga esto: 9 Guarde el programa ejemplo ServoControlWithDebug.bs2 con un nuevo nombre ServoControlWithDebugYourTurn.bs2 9 Reemplace estas dos instrucciones: DEBUG "Meta la posicion como", CR, "Duración de PULSOUT: " DEBUGIN DEC duration
Con este bloque de instrucciones : DO DEBUG " Meta la posicion como ", CR, " Duración de PULSOUT: " DEBUGIN DEC duration IF duration < 350 THEN DEBUG "El Valor de Duracion como mínimo debe ser 350", CR PAUSE 1000 ENDIF
Controlando el Movimiento · Página 127
IF duration > 1150 THEN DEBUG "El Valor de Duracion no puede ser mayor que 1150", CR PAUSE 1000 ENDIF LOOP UNTIL duracion >= 350 AND duracion <= 1150
9 Guarde el programa 9 Ejecute el programa y verifique que se repite hasta que usted mete un valor correcto en el rango 350 a 1150.
ACTIVIDAD #5: CONVIRTIENDO POSICIÓN A MOVIMIENTO En esta actividad, usted programará el servo para cambiar la posición a diferentes velocidades. Al cambiar la posición a diferentes velocidades, usted hará que la estrella del servo gire a diferentes velocidades. Usted puede usar esta técnica para hacer que el servo controle el movimiento en lugar de la posición. Programación la Razón de Cambio por Posición
Usted puede usar un bucle FOR...NEXT para hacer que el servo haga un barrido a través de un rango de movimiento como esto: FOR counter = 500 TO 1000 PULSOUT 14, counter PAUSE 20 NEXT
El bucle FOR...NEXT hace que la estrella del servo empiece en 45 grados y luego gire lentamente en sentido inverso de las manecillas del reloj hasta que llegue a 135 grados. Debido a que “counter” es el índice del bucle FOR...NEXT el counter se incrementa una unidad cada vez que se ejecuta el bucle. El valor de “counter” también se usa en el argumento “duration” de la instrucción PULSOUT, lo que significa que la duración de cada pulso se hace un poquito más grande cada vez que se ejecuta el bucle. Como cambia la variable “counter” también lo hace la posición de la estrella del servo. Los bucles FOR...NEXT tienen un argumento opcional: StepValue de STEP. El argumento StepValue puede usarse para que el servo gire más rápido. Por ejemplo, usted puede usar el argumento StepValue para agragar 8 cada vez que el bucle se ejecuta (en lugar de 1) modificando la frase FOR de la siguiene manera: FOR counter = 500 to 1000 STEP 8
Página 128 · ¿Qué es un Microcontrolador?
Usted también puede hacer que el servo gire en la dirección contraria contando en forma descendente en lugar de ascendente. En PBASIC, los bucles FOR...NEXT contarán en forma inversa si el argumento StarValue es mayor que el argumento EndValue. Este es un ejemplo para hacer que el bucle FOR...NEXT cuente de 1000 hacia 500. FOR counter = 1000 to 500
Usted puede combinar el conteo descendente con un argumento StepValue para hacer que el servo gire más rápidamente en la dirección de las manecillas del reloj de la siguiente manera: FOR counter = 1000 TO 500 STEP 20
El truco para hacer que el servo gire a diferentes velocidades es haciendo que los bucles FOR…NEXT cuenten en forma ascendente y descendente con diferentes tamaños de escalón. El siguiente programa usa estas técnicas para hacer que la estrella del servo gire hacia delante y atrás a diferentes velocidades. Programa Ejemplo: ServoVelocities.bs2
9 Meta y ejecute el programa: ServoVelocities.bs2 9 Conforme se ejecuta el programa, observe como cambía el valor de “counter” en la Terminal Debug. 9 También observe como el servo se comporta diferente cuando se ejecutan dos bucles distintos FOR...NEXT Hay cambios de dirección y velocidad en la estrella del servo. ' ¿Que es un Microcontrolador? - ServoVelocities.bs2 ' El servo gira lentamente en direccion contraria a manecillas del reloj, . luego rapidamente en direccion de manecillas del reloj ' {$STAMP BS2} ' {$PBASIC 2.5} counter
VAR
Word
PAUSE 1000 DO DEBUG "El ancho del Pulso se incrementa por 8", CR FOR counter = 500 TO 1000 STEP 8 PULSOUT 14, counter PAUSE 7 DEBUG DEC5 counter, CR, CRSRUP NEXT
Controlando el Movimiento · Página 129
DEBUG CR, "El ancho del Pulso disminuye por 20", CR FOR counter = 1000 TO 500 STEP 20 PULSOUT 14, counter PAUSE 7 DEBUG DEC5 counter, CR, CRSRUP NEXT LOOP
Funcionamiento del programa ServoVelocities.bs2
El primer bucle FOR...NEXT cuenta en forma ascendente de 500 a 1000 en pasos de 8. Como la variable “counter” se usa como argumento “duration” de la instrucción PULSOUT, la estrella del servo gira en sentido inverso a las manecillas del reloj en pasos que son ocho veces más pequeños que el menor paso posible. FOR counter = 500 TO 1000 STEP 8 PULSOUT 14, counter PAUSE 7 DEBUG DEC5 counter, CR, CRSRUP NEXT ¿ Por qué PAUSE 7 en lugar de PAUSE 20? La instrucción DEBUG DEC 5 counter, CR, CRSRUP toma alrededor de 8 ms para ejecutarse. Esto significa que PAUSE 12 podría mantener el retardo de 20 ms entre pulso. Unos pocos experimentos de ensayo y error mostraron que PAUSE 7, dio al servo el movimiento más suave. Ya que el tiempo “low” de 20 ms entre los pulsos del servo no necesitan ser precisos, estos son correctos para sintonizarlo y ajustarlo. Más Formatos de DEBUG y caracteres de control son caracteristicas de la instrucción DEBUG que muestra el valor de la variable “counter”. Este valor se imprime usando el formato decimal de 5 dígitos (DEC5). Despues que se impimer el valor, hay un retorno de carro (CR). Después de eso, el carácter de control CRSRUP (cursor arriba). Manda al cursor de regreso a la línea anterior- Esto genera el valor nuevo del “counter” para que se imprima sobre el valor viejo cada vez que se ejecuta el bucle.
El segundo bucle FOR...NEXT cuenta en forma descendente de 1000 a 500 en pasos de 20. La variable “counter” también se usa en este ejemplo como un argumento para la instrucción PULSOUT, entonces la estrella del servo gira en sentido de las manecillas del reloj. FOR counter = 1000 TO 500 STEP 20 PULSOUT 14, counter PAUSE 7 DEBUG DEC5 counter, CR, CRSRUP NEXT
Página 130 · ¿Qué es un Microcontrolador?
Su Turno – Ajustando las Velocidades
9 Use diferentes valores STEP para hacer que el servo gire a diferentes velocidades. 9 Y ejecute el programa despues de cada modificación. 9 Observe el efecto de cada nuevo valor de StepValue y vea que tan rápido gira la estrella del servo 9 Experimente con diferentes valores (entre 3 y12) de” Duration” de la instrucción PAUSE para encontrar el valor que de al servo el movimiento más suave para cada nuevo valor de StepValue.
ACTIVIDAD #6: BOTÓNES PUSH – PARA CONTROLAR EL SERVO En este capítulo usted ha escrito programas que hacen que el servo realice una serie de movimientos predeterminados, y también ha controlado al servo usando la Terminal Debug. Uste trambien puede programar el BASIC Stamp para que controle al servo usando entradas con botones push. En esta actividad usted: • •
Construirá un circuito para controlar el servo con entradas de botones push. Programará el BASIC Stamp para controlar el servo con entradas de botones
Cuando lo haya hecho, usted será capaz de mantener presionado un botón push para hacer que el BASIC Stamp gire el servo en una dirección, y mantener presionado el otro botón para que el servo gire en dirección contraria. Cuando los botones push no están presionados el servo mantendrá la última posición en que se movió. Partes extra para los botones push que controlan el servo
En esta actividad usará las mismas partes de las actividades anteriores. Además usted necesitara juntar las siguientes partes para el circuito de los botones push: Dos Botones push – normalmente abiertos Dos Resistores de 10 KΩ (café-negor-naranja) Dos Resistor de 220 Ω (rojo-rojo-café) Tres alambres para puentes. Juntando los Botones push del Circuito de Control
La Figura 4-26 muestra el circuito de los botones push que usará para controlar el servo. 9 Agregue este circuito a los circuitos servo y LED que ha estado usando hasta este punto. Cuando lo haya hecho su circuito: se parecerá a:
Controlando el Movimiento · Página 131
Será semejante a la Figura 4-27 si usted está usando la Tablilla Board of Eduación con puerto USB (cualquier revisión) o puerto Serie (revisión C o más reciente) o Será semejante a la Figura 4-28 si usted esta usando la Tablilla BASIC Stamp Home Work Board (revisión C o más reciente) 9 Si su tablilla no esta en la lista arriba mencionada, busque la sección Servo Circuits Connections dowload en la liga www.parallax.com/Go/WAM para encontrar las instrucciones de su tablilla. o
Vdd P4
Vdd
Figura 4-26 Circuitos Botones push para Control del Servo
220 Ω P3 220 Ω 10 kΩ
Vss
10 kΩ
Vss
15 14 Vdd 13 12
White Red Black
Figura 4-27 Circuitos Servo y Botones push agregrados a la Tablilla Board of Education
Red Black
X4
Vdd X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
X5
Vin
Vss
+
standard servo www.parallax.com
Tablilla Board of Education puerto Serie Rev C o más reciente o puerto USB cualquier revisión.
Página 132 · ¿Qué es un Microcontrolador?
Figura 4-28 Circuitos Servo y Botones push agregrados a la Tablilla. HomeWorkBoard. Tablilla HomeWork Rev C o más reciente.
9 Verifique los botones push conectados al pin P3 usando la versión original del programa ReadPushbuttonState.bs2. La sección que tiene este programa y las instrucciones de su uso comienzan en la paágina 67. 9 Modifique el programa para que ahora lea por el pin P4. 9 Ejecute el programa modificado para verificar que el botón push está conectado en el pin P4. Programando el Control del servo con botones push
Se pueden usar los bloques de código de IF...THEN para verificar los estados de los botoes push para sumarlos o restarlos de una variable de nombre “duration”. Esta variable se usa en el argumento “duration” de la instrucción PULSOUT. Si se presiona uno de los botones push, se incrementa el valor de “duration”. Si se presiona el otro botón push, disminuye el valor de “duration”. Se usa un bucle anidado de IF...THEN para decidir si la variable “duration” es muy grande (mayor que 1000) o es muy pequeña (menor que 500). Programa Ejemplo: ServoControlWithPushbuttons.bs2
Este programa ejemplo hace que la estrella del servo gire en sentido inverso a las manecillas del reloj cuando se presiona el botón push conectado al pin P4. La estrella del
Controlando el Movimiento · Página 133
servo seguirá girando hasta que se libere el botón push y el valor de duración sea menor que 100. Cuando se presiona el botón push conectado al pin P3, la estrella del servo gira en sentido de las manecillas del reloj. El servo también está limitado en su movimiento en sentido de la manecillas del reloj porque a la variable “duration” no le está permitido ir más debajo de 500. La Terminal Debug muestra el valor de “duration” cuando se está ejecutando el programa. 9 Meta el programa: ServoControlWithPushbuttons.bs2 en el Editor de BASIC Stamp y ejecútelo. 9 Verifique que el servo gira en sentido inverso a las manecillas del reloj cuando mantiene presionado el botón push conectado al pin P4. 9 Verifique que el servo gira en sentido de las manecillas del reloj cuando mantiene presionado el botón push conectado al pin P3. 9 Verifique que tan pronto se alcanza el límite de duration<500 o lo excede el servo deja de girar en la dirección de la manecillas del reloj. ' ' ' ' ' '
¿Que es un Microcontrolador - ServoControlWithPushbuttons.bs2 Mantenga presionado el botón push de P4 para que el servo gire en sentido inverso de las, manecillas del reloj o presione el botón push P3 para qgire en sentido directo {$STAMP BS2} {$PBASIC 2.5}
duration VAR duration = 750 PAUSE 1000
Word
DO IF IN3 = 1 THEN IF duration > 500 THEN duration = duration - 25 ENDIF ENDIF IF IN4 = 1 THEN IF duration < 1000 THEN duration = duration + 25 ENDIF ENDIF PULSOUT 14, duration PAUSE 10 DEBUG HOME, DEC4 duration, " = duration" LOOP
Página 134 · ¿Qué es un Microcontrolador?
Su Turno – Límites Mecánicos vs. Límites por Software
Los limitadores mecánicos previenen que el servo gire más allá de 0 y 180 grados, que corresponde a argumentos de PULSOUT Duration en la vecindad de 250 y 1250. El programa ServoControlWithPushbuttons.bs2 también tiene límites por software, definidos por las instrucciones IF...THEN que previenen que usted use un botón push para que el servo gire más allá de cierto punto. En contraste con los limitadores mecánicos, los límites del software son muy fácil de ajustar. Por ejemplo, usted puede hacer que el botón push controle el servo en un rango muy amplio de movimiento simplemente reemplazando cada ejemplo de 500 por 350 y los 1000 por 1150. También puede usted darle al servo un rango de movimiento más angosto reemplazando los ejemplos de 500 con 650 y los de 1000 con 850. Los límites por software incluso, no necesitan ser simétricos. Por ejemplo, usted podría cambiar los limites por software del rango 500-1000 por el rango de 350 a 750. 9 Experimente con diferentes limites de servo por software, incluyendo 350 a 1150, 650 a 850 y 350 a 750. 9 Verifique cada conjunto de limites por software para asegurarse que se comportan como usted lo espera. También usted puede cambiar la velocidad de giro del servo mientras mantiene presionado un botón push. Por ejemplo, si usted cambia los dos valores de 25 del programa por 50, el servo responderá dos veces má rápido. Alternadamente, usted podría cambiarlos a 30 para hacer que el servo responde un poquito más rápido, o a 20 para que responda lentamente o a 10 para que responda muy lentamente. 9 ¡Inténtelo!
RESUMEN Este capítulo introdujo el movimiento microcontrolado usando un Servo Normalizado de Parallax. Un servo es un dispositivo que se mueve para mantener una posición particular basado en las señales electrónicas que recibe. Estas señales toman la forma de pulos que duran entre 0.5 y 2.5 ms, y que se mandan aproximadamente cada 20 ms al servo para mantener su posición. El programador puede usar la instrucción PULSOUT para hacer que el BASIC Stamp mande estas señales . Como los pulsos tienen que mandarse cada 20 ms para que el servo mantenga su posición las instrucciones PULSOUT y PAUSE generalmente se colocan en alguna parte del bucle. Las variables o constantes pueden usarse para determinar tanto el
Controlando el Movimiento · Página 135
número de repeticiones del bucle como el argumento “Duration” de la instrucción PULSOUT. En este capítulo presentamos varias formas para obtener los valores en la variables. La variable puede recibir el valor desde la Terminal Debug usando la instrucción DEBUGIN. El valor de la variable puede pasar a través de una secuencia de valores cuando se usa como argumento de “Counter” del bucle FOR..NEXT. Esta técnica puede usarse para hacer que el servo haga movimientos de barrido. Si las instrucciones IF...THEN se usan para monitorear los botones push y se pueden usar par sumar o restar la variable utilizada en el argumento “Duration” de la instrucción PULSOUT cuando se presiona cierto botón push. Esto permite el control de la posición y los movimientos de barrido dependiendo de la construcción del programa y como se activen los botones push. Preguntas
1. Cuáles son las cinco partes externas de un servo? ¿ Para que se usan? 2. ¿Se requiere un circuito LED para un servo funcione? 3. ¿Qué instrucción control el tiempo “low” de la señal que se manda al servo? ¿Qué instrucción controla el tiempo “high”? 4. ¿Qué elemento de programación puede usted usar para controlar la cantidad de tiempo que el servo usa par manteer una posición particular? 5. ¿Cómo usa usted la Terminal Debug para mandar mensajes a el BASIC Stamp? 6. ¿Qué tipo de bloque de Códigos puede usted escribir para limitar el rango de movimiento del servo? Ejercicios
1. Escriba un bloque de Códigos que barra el valor de PULSOUT para controlar un servo desde una “duration” de 700 a 800, y luego regrese a 700 en incrementos de (a) 1 y (b) 4. 2. Agregue un bucle anidado FOR...NEXT a la respuesta del ejercicio 1b para que proporcione diez pulsos anted de incrementar por 4 el argumento “Duration” de PULSOUT. Proyecto
1. Modifique el programa ServoControlWithDebug.bs2 para que monitoree un interruptor Supresor. Si se presiona el interruptor Supresor (el botón push está conectado en el pin P3), la Terminal Debug no deberá aceptar ningúna instrucción, y deberá mostrar “Presione el Interruptor de Inicio para arrancar la maquinaria”. Cuando está presionado el Interruptor de Inicio ( el botón push está conectado en
Página 136 · ¿Qué es un Microcontrolador?
el pin P3) el programa deberá funcionar normalmente. Si se desconecta y luego se reconecta la energía, el programa deberá comportarse como si se hubiera presionado el Interruptor Supresor. Soluciones
Q1. Conector – Conecta al servo a la fuente de alimentación y a la fuente de señal; 2) Cable – lleva la alimentación y la señal del conector al servo; 3) Estrella – Es la parte movil del servo; 4) Tornillo – Sujeta la estrella del servo a la flecha de salida; 5) Caja – Contiene el motor de DC, engranes y circuitos de control. Q2. No, el LED solamente nos ayuda a ver como se comportan las señales de control. Q3. El tiempo “low” lo controla la instrucción PAUSE. El tiempo “high” lo controla la instrucción PULSOUT. Q4. Un bucle FOR...NEXT Q5. Escriba mensajes en la Ventana de Transmisión de la Terminal Debug. Use la instrucción DEBUGIN y una variable para hacer que BASIC Stamp reciba los caracteres. Q6. Ya sea anidando la instrucción IF...THEN or una instrucción que use los operadores MAX y MIN para mantener la variable en ciertos rangos. E1. b) Agrege STEP 4 a los bucles a) Incrementos de 1 FOR...NEXT . FOR counter = PULSOUT 14, PAUSE 20 NEXT FOR counter = PULSOUT 14, PAUSE 20 NEXT
700 TO 800 counter
800 TO 700 counter
FOR counter = 700 TO 800 STEP 4 PULSOUT 14, counter PAUSE 20 NEXT FOR counter = 800 TO 700 STEP 4 PULSOUT 14, counter PAUSE 20 NEXT
E2. Considere que ha declarado una variable de nombre “pulses”: FOR counter = 700 TO 800 STEP 4 FOR pulses = 1 TO 10 PULSOUT 14, counter PAUSE 20 NEXT NEXT FOR counter = 800 TO 700 STEP 4
Controlando el Movimiento · Página 137
FOR pulses = 1 TO 10 PULSOUT 14, counter PAUSE 20 NEXT NEXT
P1. Existen varias soluciones; aquí presentamos dos. '¿Qué es un Microcontrolador - Ch04Prj01Soln1__KillSwitch.bs2 ' Manda mensajes a BASIC Stamp para controlar el servo usando ' la Terminal Debug mientras no se presione el Interruptor Supresor. ' Contribucion del: Professor Clark J. Radcliffe, Departmento ' of Ingeniría Mecanica, Michigan State University ' {$STAMP BS2} ' {$PBASIC 2.5} counter VAR Word pulses VAR Word duration VAR Word DO PAUSE 2000 IF (IN3 = 1) AND (IN4 = 0) THEN DEBUG "Press Start switch to start machinery. ELSEIF (IN3 = 0) AND (IN4 = 1) THEN DEBUG CLS, "Meta el numero de pulsos:", CR DEBUGIN DEC pulses
", CR ,CRSRUP
DEBUG "Meta la duración de PULSOUT:", CR DEBUGIN DEC duration DEBUG "Servo en ejecución...", CR FOR counter = 1 TO pulses PULSOUT 14, duration PAUSE 20 NEXT DEBUG "DONE" PAUSE 2000 ENDIF LOOP
Abajo presentamos una versión que incluso puede detectar un botón presionado y que manda señales al servo. Esto es importante en maquinaria que se necesitan
Página 138 · ¿Qué es un Microcontrolador?
DETENER INMEDIATAMENTE cuando se presiona el Interruptor Supresor. El programa usa la técnica de “espera” que estudiamos en el Juego de Reacción de Tiempo en la capítulo 3, Actividad #5, en tres lugares diferentes del programa. Usted puede verificar que el programa se detiene mandando una señal de contro al servo observando la señal del indicador LED conectado al pin P14. ' ' ' ' '
¿Que es un Microcontrolador? - Ch04Prj01Soln2__KillSwitch.bs2 Manda mensajes a BASIC Stamp para controlar el servo usando la Terminal Debug mientras no se presione el Interruptor Supresor {$STAMP BS2} {$PBASIC 2.5}
counter pulses duration
VAR VAR VAR
Word Word Word
PAUSE 1000 DEBUG "Presione el Interruptor de Inicio P4)para arrancar maquinaria." DEBUG CR DO:LOOP UNTIL IN4 = 1 DEBUG "Presione el Interruptor Supresor (P3) para detener maquinaria." DEBUG CR DEBUG CR, CR, "Tiempo de Ejecución del Servo:", CR, " ~44 pulsos en 1 segundo", CR, "Posición del Servo:", CR, " 350 <= PULSOUT Duration <= 1150", CR, CR DO IF IN3 = 1 THEN DEBUG "Presione el Interruptor de Inicio (P4) .", CR DO:LOOP UNTIL IN4 = 1 DEBUG "Presione el Interruptor Supresor (P3) para detener " DEBUG "maquinaria.", CR ENDIF DEBUG "Meta el tiempo de Ejecucion como", CR, "numero de pulsos: " DEBUGIN DEC pulses DEBUG "Meta la posición como", CR, "Duración del PULSOUT : " DEBUGIN DEC duration duration = duration MIN 350 MAX 1150 DEBUG "Servo se está ejecutando...", CR FOR counter = 1 TO pulses
Controlando el Movimiento 路 P谩gina 139
PULSOUT 14, duration PAUSE 20 IF IN3 = 1 THEN DEBUG "Presione el Interruptor de Inicio (P4) para arrancar " DEBUG " maquinaria.", CR DO:LOOP UNTIL IN4 = 1 DEBUG "Presione el Interruptor Supresor (P3) para detener " DEBUG " maquinaria.", CR ENDIF NEXT DEBUG "HECHO", CR, CR PAUSE 1000 LOOP
Página 140 · ¿Qué es un Microcontrolador?