Professional Documents
Culture Documents
learn.parallax.com/print/book/export/html/216
Estos son los objetivos de las actividades de este captulo: 1. 2. 3. 4. 5. 6. 7. Realizar maniobras bsicas: adelante, atrs, girar a la izquierda, gire a la derecha, giro gira a la izquierda y la derecha, y la parada. Sintonice las maniobras de la Actividad # 1 para que sean ms precisos. Utilizar las matemticas para calcular los tiempos de servo run para hacer el BOE Shield-Bot viajar una distancia predeterminada. Escribe bocetos que hacen que el BOE Shield-Bot acelere gradualmente a desacelerar y de maniobras. Escribe funciones para realizar las maniobras bsicas, e incorporar las llamadas a funciones en los bocetos donde se necesitan. Disear una funcin para definir rpidamente las maniobras personalizados Guarde maniobras complejas en arreglos y escribir bocetos que reproducen estas maniobras Descargar Captulo 4 Cdigo Arduino
learn.parallax.com/print/book/export/html/216
[1]
1/48
16/01/14
learn.parallax.com/print/book/export/html/216
Hacia adelante
Alguna vez has pensado en qu direccin las ruedas de un coche tienen que recurrir a impulsarlo hacia adelante? Las ruedas giran direcciones opuestas en los lados opuestos del coche. Del mismo modo, para que el BOE Shield-Bot siga adelante, su rueda izquierda tiene que gire hacia la izquierda, pero su rueda derecha tiene que girar en sentido horario.
learn.parallax.com/print/book/export/html/216
2/48
16/01/14
learn.parallax.com/print/book/export/html/216
Recuerde que un boceto puede usar la biblioteca Servo w r i t e M i c r o s e c o n d sfuncin para controlar la velocidad y direccin de cada servo. A continuacin, puede utilizar el r e t a r d od ela funcin de mantener los servos corriente durante una cierta cantidad de tiempo antes de la eleccin de nuevas velocidades y direcciones. He aqu un ejemplo que har que el rodillo BOE Shield-Bot hacia adelante durante unos tres segundos y, a continuacin, detenga. Ejemplo de croquis: ForwardThreeSeconds Asegrese de que el interruptor de la BOE Shield se pone a 1 y el paquete de bateras est conectado en el Arduino. Introduce, guarda, y subir ForwardThreeSeconds a la Arduino. Desconecte el cable de programacin y poner el BOE Shield-Bot en el suelo. Mientras mantiene pulsado el botn de reinicio, mueva el interruptor a la posicin 3, y luego dejar ir. El BOE Shield-Bot debera impulsar durante tres segundos. //R o b t i c ac o ne lE s c u d oB O E-F o r w a r d T h r e e S e c o n d s //H a c e re lr o l l oB O ES h i e l d B o th a c i aa d e l a n t ed u r a n t et r e ss e g u n d o s ,yl u e g os ed e t i e n e . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 //At o d av e l o c i d a dh a c i aa d e l a n t e s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a d e l a y( 3 0 0 0 ) ;//. . .d u r a n t e3s e g u n d o s s e r v o L e f t . d e t a c h( ) ;//D e t e n e re le n v od es e a l e sd es e r v o s e r v o R i g h t . d e t a c h( ) ;
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d ad e b er e p e t i r }
learn.parallax.com/print/book/export/html/216 3/48
16/01/14
learn.parallax.com/print/book/export/html/216
Instancia de un objeto Un objeto es un bloque de cdigo pre-escrito que se puede copiar y volver a utilizar varias veces en un solo boceto. Cada copia, llamado un objeto ejemplo , se puede configurar de manera diferente. Por ejemplo, los dos s e r v o sdeclaraciones crean dos instancias del cdigo del objeto, llamado s e r v o L e f ty s e r v o R i g h t. Entonces, las funciones de cada instancia se puede llamar y configurar individualmente. As, s e r v o L e f t . a t t a c h( 1 3 )configura el s e r v o L e f tinstancia de objeto para enviar sus seales de control del servo al pin 13. Del mismo modo, s e r v o R i g h t . a t t a c h( 1 2 )dice al s e r v o R i g h tinstancia de objeto para enviar sus seales al pin 12. Un bosquejo inicia automticamente en su c o n f i g u r a c i nd ela funcin. Se ejecuta el cdigo en all una vez antes de pasar al c i r c u i t od ela funcin, que mantiene automticamente la repeticin. Ya que slo queremos que el BOE Shield-Bot siga adelante y dejar de una vez, todo el cdigo se puede colocar en la c o n f i g u r a c i nd ela funcin. Esto deja al b u c l ed efuncin vaca, pero eso est bien. Al igual que con todos los bocetos de movimiento, la primera accin d ec o n f i g u r a c i nbasta con hacer la seal sonora bocina piezoelctrica. La funcin de llamada de tono transmite una seal al pin digital 4 que hace que la bocina piezoelctrica reproduzca un tono de 3 kHz que tiene una duracin de 1 segundo. Dado que la funcin de tono funciona en segundo plano mientras que el cdigo pasa, delay (1000) impide que el BOE Shield-Bot se mueva hasta que el tono se hace jugando. v o i ds e t u p( )//i n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o A continuacin, el s e r v o L e f tinstancia de objeto se apega al pin digital 13 y el s e r v o R i g h tinstancia se apega a la patilla 12. Esto hace que las llamadas a s e r v o L e f t . w r i t e M i c r o s e c o n d safectan a las seales de control de servo enviados en el pin 13. Del mismo modo, las llamadas a s e r v o R i g h t . w r i t e M i c r o s e c o n d safectarn a las seales enviadas en el pin 12.
learn.parallax.com/print/book/export/html/216 4/48
16/01/14
learn.parallax.com/print/book/export/html/216
s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 Recuerde que nosotros necesitamos ruedas izquierda y derecha el BOE de Shield-Bot para convertir en direcciones opuestas para impulsar hacia adelante. La llamada de funcin s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 )hace que el servo gire a la izquierda a toda velocidad hacia la izquierda, y la llamada de funcin s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 )hace que la rueda derecha gire la velocidad en sentido horario. El resultado es el movimiento hacia adelante. El r e t a r d o( 3 0 0 0 )llamada a la funcin mantiene los servos funcionando a esa velocidad durante tres segundos completos. Despus de la demora, s e r v o L e f t . d e t a c hy s e r v o R i g h t . d e t a c hinterrumpir las seales de servo, que traen el robot a una parada. //At o d av e l o c i d a dh a c i aa d e l a n t e s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a d e l a y( 3 0 0 0 ) ;//. . .d u r a n t e3s e g u n d o s s e r v o L e f t . d e t a c h( ) ;//D e t e n e re le n v od es e a l e sd es e r v o s e r v o R i g h t . d e t a c h( ) ;
Despus de la c o n f i g u r a c i nd ela funcin se queda sin cdigo, el boceto avanza automticamente al b u c l ed ela funcin, que se repite indefinidamente. En este caso, estamos dejando vaco porque el boceto est hecho, por lo que se repite nada, una y otra vez, indefinidamente. v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { } Tu Turno - Ajustando Distancia Quieres cambiar la distancia recorrida? Slo tienes que cambiar la hora en la demora (3000). Por ejemplo, el retardo (1500) har que el BOE Shield-Bot ir para slo la mitad del tiempo, lo que a su vez har que viajar la mitad de distancia. Del mismo modo, el retardo (6000) har que sale por el doble del tiempo, y por lo tanto el doble de la distancia. Cambio de r e t a r d o( 3 0 0 0 )para r e t r a s a r( 1 5 0 0 )y volver a cargar el boceto. Los BOE Shield-Bot viajan slo la mitad de la distancia?
16/01/14
learn.parallax.com/print/book/export/html/216
s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//I z q u i e r d ar u e d ah a c i al ad e r e c h a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ad e r e c h ah a c i al ai z q u i e r d a Estas dos llamadas har que sus BOE Shield-Bot gire en el lugar para hacer un giro a la izquierda: //G i r aal ai z q u i e r d ae ns ul u g a r s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//I z q u i e r d ar u e d ah a c i al ad e r e c h a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a Estas dos llamadas har que sus BOE Shield-Bot gire en su lugar para un giro a la derecha: //G i r aal ad e r e c h ae ns ul u g a r s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o M i c r o s e g u n d o ss e r v o R i g h t . w r i t e( 1 7 0 0 ) ;//r u e d ad e r e c h ah a c i al ai z q u i e r d a Vamos a combinar todos estos comandos en un nico dibujo que haga que el Boe-Bot Shield se mueven hacia adelante, girar a la izquierda, gire a la derecha, y luego se mueven hacia atrs. Ejemplo Sketch: ForwardLeftRightBackward Introduce, guarda, y subir ForwardLeftRightBackward. Verifique que el BOE Shield-Bot hace que los movimientos hacia adelante-izquierda-derecha-atrs. //R o b t i c ac o ne lE s c u d oB O E-F o r w a r d L e f t R i g h t B a c k w a r d //S ed e s p l a z ah a c i aa d e l a n t e ,i z q u i e r d a ,d e r e c h a ,l u e g oh a c i aa t r sp a r al a sp r u e b a syp u e s t aap u n t o . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 //At o d av e l o c i d a dh a c i aa d e l a n t e s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o
learn.parallax.com/print/book/export/html/216 6/48
16/01/14
learn.parallax.com/print/book/export/html/216
s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a d e l a y( 2 0 0 0 ) ;//. . .d u r a n t e2s e g u n d o s //G i r aal ai z q u i e r d ae ns ul u g a r s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//I z q u i e r d ar u e d ah a c i al ad e r e c h a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a d e l a y( 6 0 0 ) ;//. . .d e0 , 6s e g u n d o s //G i r aal ad e r e c h ae ns ul u g a r s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ad e r e c h ah a c i al ai z q u i e r d a d e l a y( 6 0 0 ) ;//. . .d e0 , 6s e g u n d o s //At o d av e l o c i d a dh a c i aa t r s s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//I z q u i e r d ar u e d ah a c i al ad e r e c h a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ad e r e c h ah a c i al ai z q u i e r d a d e l a y( 2 0 0 0 ) ;//. . .d u r a n t e2s e g u n d o s s e r v o L e f t . d e t a c h( ) ;//D e t e n e re le n v od es e a l e sd es e r v o s e r v o R i g h t . d e t a c h( ) ;
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d ad e b er e p e t i r }
TIP - Para entrar en este bosquejo rpido, utilice las herramientas de edicin de men del software de Arduino (copiar y pegar) para hacer cuatro copias de las cuatro lneas que componen una maniobra (comentario, s e r v o L e f t . w r i t e M i c r o s e c o n d s, s e r v o R i g h t . w r i t e M i c r o s e c o n d sy r e t r a s o). A continuacin, modifique cada uno con valores individuales Tu Turno - pivotante Usted puede hacer la vuelta BOE Shield-Bot pivotando alrededor de una rueda. El truco est en mantener una rueda inmvil mientras el otro gira. Aqu estn las cuatro rutinas para adelante y hacia atrs de pivote turnos: //P i v o th a c i aa d e l a n t e i z q u i e r d a s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ;//p a r a d ad el ar u e d ai z q u i e r d a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a //P i v o th a c i ad e l a n t eal ad e r e c h a s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o
learn.parallax.com/print/book/export/html/216 7/48
16/01/14
learn.parallax.com/print/book/export/html/216
s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ;//p a r a d ad el ar u e d ad e r e c h a //P i v o th a c i aa t r s i z q u i e r d a s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ;//p a r a d ad el ar u e d ai z q u i e r d a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ad e r e c h ah a c i al ai z q u i e r d a //P i v o th a c i aa t r s d e r e c h a s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//I z q u i e r d ar u e d ah a c i al ad e r e c h a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ;//p a r a d ad el ar u e d ad e r e c h a Ahorra ForwardLeftRightBackward como P i v o t T e s t s. Cambie el parmetro de nosotros en cada writeMicroseconds llaman por lo que el boceto realizar todas las cuatro maniobras de giro: hacia adelante, izquierda, derecha, hacia atrs. Ejecute el esbozo modificado y verifique que las diferentes acciones de pivote funcionan. Trate de experimentar con las r e t a r d oconvocatorias de cada maniobra para que cada uno corre el tiempo suficiente para ejecutar un giro de 90 .
16/01/14
learn.parallax.com/print/book/export/html/216
Coloque el Escudo-Bot en un largo tramo de suelo liso, desnudo. Mantenga pulsado el botn Restablecer abajo mientras se mueve el interruptor de alimentacin en 2, a continuacin, dejar ir. Pulse el botn de reinicio, y luego ver de cerca para ver si su escudo BOE-Bot se desva hacia la derecha o hacia la izquierda a medida que viaja hacia adelante durante diez segundos. //R o b t i c ac o ne lE s c u d oB O E-F o r w a r d T e n S e c o n d s //H a c e re lr o l l oB O ES h i e l d B o th a c i aa d e l a n t ed u r a n t ed i e zs e g u n d o s ,yl u e g os ed e t i e n e . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 //At o d av e l o c i d a dh a c i aa d e l a n t e s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a d e l a y( 1 0 0 0 0 ) ;//. . .p o r1 0s e g u n d o s s e r v o L e f t . d e t a c h( ) ;//D e t e n e re le n v od es e a l e sd es e r v o s e r v o R i g h t . d e t a c h( ) ;
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d ad e b er e p e t i r } Tu Turno - Ajustando Servo Velocidad para Enderezar Ruta del BOE de Shield-Bot Si el BOE Shield-Bot gira ligeramente cuando se quiere que vaya hacia adelante, la solucin es bastante simple. Slo frenar la rueda ms rpido. Recuerde que desde el grfico de la curva de transferencia servo [2] que tiene mejor control de la velocidad en los servos en el rango de 1400 a 1600 ms. Tabla 4-1: us Parmetros en writeMicroseconds (nosotros) Velocidad mxima hacia Zona de velocidad lineal Punto la derecha comienza
learn.parallax.com/print/book/export/html/216
16/01/14
learn.parallax.com/print/book/export/html/216
1300
1400
1500
1600
1700
Digamos que tu Escudo BOE-Bot gira gradualmente izquierda. Eso significa que la rueda derecha gira ms rpido que el izquierdo. Dado que la rueda izquierda ya va tan rpido como sea posible, la rueda derecha tiene que ser ralentizado para enderezar la trayectoria del robot. Para reducir la velocidad, cambiar el n o s o t r o sparmetro en s e r v o R i g h t . w r i t e M i c r o s e c o n d s(n o s o t r o s )a un valor ms cercano a 1500. En primer lugar, intente 1400. Sigue yendo demasiado rpido? Sbelo 1410. Sigue aumentando el parmetro de 10 hasta los BOE Shield-Bot curvas ya no a la izquierda. Si cualquier ajuste sobrepasa "recto" y su escudo BOE-Bot comienza una curva hacia la derecha en vez, empezar a disminuir el parmetro de nosotros por cantidades ms pequeas. Ir mejorando que n o sparmetro hasta el BOE Shield-Bot va derecho hacia adelante. Esto se llama un proceso iterativo , lo que significa que se necesita tries y refinamientos repetidos para llegar al valor correcto. Si el BOE Shield-Bot se curvaba hacia la derecha en vez de la izquierda, que significa que usted necesita para reducir la velocidad de la rueda izquierda. Ests empezando con s e r v o L e f t . w r i t e M i c r o s e c o n d s ( 1 7 0 0 )por lo que el n o s parmetro tiene que disminuir. Trate de 1600, luego reducir en incrementos de 10 hasta que sea va directo o comienza a girar la otra direccin, y aumentar en un 2 si llega ms all. Modificar ForwardTenSeconds para que haga su Shield BOE-Bot siga recto hacia adelante. Use cinta adhesiva o una etiqueta adhesiva para etiquetar cada servo con lo mejor d en o s o t r o spara sus parmetros w r i t e M i c r o s e c o n d s (u s )llamadas a funciones. Si el BOE Shield-Bot ya viaja hacia adelante, trate las modificaciones que acabamos de mencionar de todos modos, para ver el efecto. Debe hacer que el BOE Shield-Bot para viajar en una curva en lugar de una lnea recta. Usted puede encontrar que hay una situacin completamente diferente cuando usted programa su Shield BOE-Bot ruede hacia atrs. Modificar ForwardTenSeconds para que haga el rollo Shield-Bot BOE hacia atrs durante diez segundos. Repita la prueba con una lnea recta. Repita los pasos para corregir el parmetro de nosotros para la llamada a la funcin writeMicroseconds para enderezar los viajes hacia atrs el BOE de Shield-Bot.
16/01/14
learn.parallax.com/print/book/export/html/216
El cambio ms pequeo que realmente marca la diferencia es 20. impulsos de control Servo se envan cada 20 ms, por lo que se ajustan a su r e t r a s ode funcin de llamada m s parmetro en mltiplos de 20. Si usted se encuentra con un valor ligeramente overshooting 90 y el otro ligeramente undershooting, elija el valor que hace girar un poco demasiado lejos, y luego reducir la velocidad de los servos ligeramente. En el caso de la izquierda que gira, ambos w r i t e M i c r o s e c o n d sn o s o t r o sl o sparmetros deben ser cambiados de 1300 a algo ms cercano a 1500. Comience con 1400 y luego aumentar gradualmente los valores para frenar los dos servos. Para que gira a la derecha, empezar por cambiar los n o s o t r o sl o s parmetros 1700-1600 y, a continuacin, experimentar con la reduccin en incrementos de 10 a partir de ah. Tu Turno - 90 RotatingTurns y Actualizaciones Sketch Modificar ForwardLeftRightBackward para que haga precisos giros de 90 de rotacin. Actualizacin de la etiqueta de cada servo con una anotacin sobre la funcin de retardo apropiado ms parmetro para un giro de 90 . Actualice las r e t a r d ode funcin m sparmetros en ForwardLeftRightBackward con los valores que se determinan para recta de desplazamiento hacia delante y hacia atrs. Moquetas puede causar errores de navegacin. Si usted est funcionando su BOE Shield-Bot sobre alfombra, no esperes resultados perfectos! La forma en que el pelo de la alfombra est sentando puede afectar la manera en que su escudo BOE-Bot viaja, especialmente en largas distancias. Para maniobras ms precisas, utilizar una superficie lisa.
learn.parallax.com/print/book/export/html/216
11/48
16/01/14
learn.parallax.com/print/book/export/html/216
EE.UU. unidades acostumbradas ejemplo: Si usted es 140 millas de distancia de su destino, y vas a viajar 70 millas por hora, que va a tomar 2 horas para llegar all.
Las unidades mtricas ejemplo: Si ests a 200 kilmetros de su destino, y vas a viajar 100 kilmetros por hora, que va a tomar 2 horas para llegar all.
Usted puede hacer el mismo ejercicio con el BOE Shield-Bot, a menos que usted tiene control sobre qu tan lejos est la destinacin. Aqu est la ecuacin que va a utilizar:
Introduzca, salve y corra ForwardOneSecond. Coloca el BOE Shield-Bot al lado de un gobernante. Asegrese de alinear el punto donde la rueda toca el suelo con el 0 en posicin cm / en la regla.
learn.parallax.com/print/book/export/html/216 12/48
16/01/14
learn.parallax.com/print/book/export/html/216
Pulse el botn de reinicio en su tablero para volver a ejecutar el boceto. Medir hasta qu punto su escudo BOE-Bot recorrida por registrar las mediciones de donde la rueda est tocando el suelo aqu: _______________ (o cm). //R o b t i c ac o ne lE s c u d oB O E-F o r w a r d O n e S e c o n d //H a c e re lr o l l oB O ES h i e l d B o th a c i aa d e l a n t ed u r a n t eu n os e g u n d o syl u e g os ed e t i e n e . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 //At o d av e l o c i d a dh a c i aa d e l a n t e s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a d e l a y( 1 0 0 0 ) ;//. . .d u r a n t e1s e g u n d o s e r v o L e f t . d e t a c h( ) ;//D e t e n e re le n v od es e a l e sd es e r v o s e r v o R i g h t . d e t a c h( ) ;
learn.parallax.com/print/book/export/html/216
13/48
16/01/14
learn.parallax.com/print/book/export/html/216
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d ad e b er e p e t i r } La distancia que acaba de grabar es su velocidad de BOE Shield-Bot, en unidades por segundo. Ahora, usted puede averiguar cuntos segundos el BOE Shield-Bot tiene que viajar para ir a una distancia determinada. Las pulgadas y los centmetros por segundo La abreviatura para pulgadas es en, y la abreviatura de centmetros es cm. Del mismo modo, pulgadas por segundo se abrevian en / s, y centmetros por segundo se abrevia cm / s. Ambas son medidas de la velocidad convenientes para el BOE Shield-Bot. Hay 2.54 cm de 1 pulg Usted puede convertir pulgadas en centmetros multiplicando el nmero de pulgadas por 2.54. Puede convertir centmetros a pulgadas dividiendo el nmero de centmetros por 2.54 Tenga en cuenta que los clculos estarn en trminos de segundos, pero el r e t r a s od ela funcin se necesita un parmetro que hay en trminos de milisegundos. As que, tome su resultado, que es en trminos de segundos, y se multiplica por 1.000. Entonces, utilizar ese valor en su r e t a r d ofuncin de llamada. Por ejemplo, para hacer que su carrera Shield BOE-Bot de 2,22 segundos, tendr que utilizar delay (2220) despus de que sus l l a m a d a s w r i t e M i c r o s e c o n d s. EE.UU. unidades acostumbradas ejemplo: A las 9 de / s, el BOE Shield-Bot tiene que viajar por 2,22 s para viajar 20 pulgadas
Las unidades mtricas ejemplo: A los 23 cm / s, el BOE Shield-Bot tiene que viajar por 2,22 s para viajar 51 cm.
learn.parallax.com/print/book/export/html/216
14/48
16/01/14
learn.parallax.com/print/book/export/html/216
As, el uso d er e t a r d o( 2 2 2 0 )despus de que sus w r i t e M i c r o s e c o n d sllama: s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ; d e l a y( 2 2 2 0 ) ; Tu Turno - Distancia Tu BOE de Shield-Bot Ahora es el momento de probar esto con distancias que usted elija. Decida qu tan lejos quieres que tu Escudo BOE-Bot para viajar. Utilice la siguiente ecuacin para calcular el nmero de milisegundos de desplazamiento hacia delante lo necesario para que la distancia:
Modificar ForwardOneSecond para hacer su Shield BOE-Bot avance de la mquina la cantidad de tiempo que determin, y probarlo. Qu tan cerca viene? Aumentar la precisin de sus distancias BOE Shield-Bot con dispositivos llamados codificadores que cuentan los agujeros en las ruedas el BOE de Shield-Bot a medida que pasan.
16/01/14
learn.parallax.com/print/book/export/html/216
En rampa es una manera de aumentar o disminuir gradualmente la velocidad de los servos en lugar de iniciar o detener bruscamente. Esta tcnica puede aumentar la esperanza de vida de las dos bateras de su BOE de Shield-Bot y sus servos.
Programacin de rampa
El siguiente diagrama muestra un ejemplo de cmo a la rampa hasta la velocidad mxima. El d ebucle declara un i n tllamado variable de v e l o c i d a d, y la utiliza para repetir el bucle 100 veces. Con cada repeticin del bucle, el valor de la v e l o c i d a daumenta en un 2 a causa de la v e l o c i d a d+=2 expresin en la p a r ade bucle i n c r e m e n t oparmetro. Dado que la v e l o c i d a dvariable es en cada w r i t e M i c r o s e c o n d sde llamar n o s o t r o s parmetro, afecta el valor cada vez que se p a r ae lbucle se repite. Con los 20 ms de retardo entre cada repeticin, el bucle se repite en alrededor de 50 veces por segundo. Eso significa que se necesita velocidad de 1 segundo para llegar a 100 en pasos de 2, y en ese momento, ambos servos se va sobre la velocidad mxima.
Echemos un vistazo ms de cerca a los viajes a travs del bucle de este diagrama: Primer viaje: l av e l o c i d a des 0, por lo tanto w r i t e M i c r o s e c o n d sllamadas terminan con n o s o t r o sparmetros de 1500. Segundo viaje: l av e l o c i d a des 2, por lo que tenemos s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 2 )y s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 4 9 8 ). Tercer viaje: l av e l o c i d a des de 4, as que tenemos s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 4 )y s e r v o R i g h t . w r i t e M i c r o s e c o n d s ( 1 4 9 6 ). Sigue de esta manera hasta el ... 50 viaje: v e l o c i d a des de 100, con s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 6 0 0 )y s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 4 0 0 ). Recuerde, eso es bastante cercano a toda velocidad, 1700 y 1300 son una exageracin. Ejemplo Sketch: StartAndStopWithRamping Introduzca, salve y corra StartAndStopWithRamping. Verifique que el BOE Shield-Bot acelere gradualmente a toda velocidad, mantiene toda velocidad por un tiempo, y luego se desacelera gradualmente a un punto. //R o b t i c ac o ne lE s c u d oB O E-S t a r t A n d S t o p W i t h R a m p i n g //R a m p a ,i rh a c i aa d e l a n t e ,r a m p ad eb a j a d a . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a
learn.parallax.com/print/book/export/html/216 16/48
16/01/14
learn.parallax.com/print/book/export/html/216
S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 f o r( i n tv e l o c i d a d=0 ,l av e l o c i d a d< =1 0 0 ;V e l o c i d a d+=2 )//r a m p ah a s t al av e l o c i d a dm x i m a . { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ;//u s=1 5 0 0 , 1 5 0 2 ,1 5 9 8 , 1 6 0 0. . . s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0 v e l o c i d a d ) ;//u s=1 5 0 0 , 1 4 9 8 ,1 4 0 2 , 1 4 0 0. . . d e l a y( 2 0 ) ;//2 0m sac a d av e l o c i d a d } d e l a y( 1 5 0 0 ) ;//At o d av e l o c i d a dp o r1 . 5s e g u n d o s f o r( i n tv e l o c i d a d=1 0 0 ;v e l o c i d a d >=0 ,l av e l o c i d a d-=2 )//r a m p ad ev e l o c i d a dc o m p l e t ap a r ad e t e n e r { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ;//u s=1 6 0 0 , 1 5 9 8 ,1 5 0 2 , 1 5 0 0. . . s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0 v e l o c i d a d ) ;//u s=1 4 0 0 , 1 4 0 2 ,1 4 9 8 , 1 5 0 0. . . d e l a y( 2 0 ) ;//2 0m sac a d av e l o c i d a d } s e r v o L e f t . d e t a c h( ) ;//D e t e n e re le n v od es e a l e sd es e r v o s e r v o R i g h t . d e t a c h( ) ;
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d aq u er e p e t i r } Tu Turno - Agregar rampa para otras maniobras Tambin puede crear rutinas para combinar con el aumento gradual de otras maniobras. He aqu un ejemplo de cmo la rampa a toda velocidad yendo hacia atrs en lugar de avanzar. La nica diferencia entre esta rutina y la rutina en rampa hacia adelante es que el valor de l av e l o c i d a dcomienza en cero y el recuento a -100. f o r( i n tv e l o c i d a d=0 ,l av e l o c i d a d >=1 0 0 ;V e l o c i d a d-=2 )//P a r or a m p aal ap l e n ai n v e r s a { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ;//u s=1 5 0 0 , 1 4 9 8 ,1 4 9 6. . .1 4 0 0
learn.parallax.com/print/book/export/html/216 17/48
16/01/14
learn.parallax.com/print/book/export/html/216
Usted tambin puede hacer una rutina para el aumento gradual de entrar y salir de un turno. He aqu un ejemplo de rampa de giro-derecha. Observe que en lugar de 1 5 0 0+l av e l o c i d a dde una rueda y 1 5 0 0v e l o c i d a dde la otra, ya que ambos son 1 5 0 0+v e l o c i d a d. Por giro a la izquierda en rampa, ambos seran 1 . 5 0 0v e l o c i d a d. f o r( i n tv e l o c i d a d=0 ,l av e l o c i d a d< =1 0 0 ;V e l o c i d a d+=2 )//P a r or a m p ad eg i r oal ad e r e c h a { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ;//u s=1 5 0 0 , 1 5 0 2 ,1 5 0 8. . .1 6 0 0 s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ;//u s=1 5 0 0 , 1 5 0 2 ,1 5 0 8. . .1 6 0 0 d e l a y( 2 0 ) ;//2 0m sac a d av e l o c i d a d } f o r( i n tv e l o c i d a d=1 0 0 ;v e l o c i d a d >=0 ,l av e l o c i d a d-=2 )//g i r a ral ad e r e c h ap a r ad e t e n e r { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ;//u s=1 6 0 0 , 1 5 9 8 ,1 5 9 7. . .1 5 0 0 s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ;//u s=1 6 0 0 , 1 5 9 8 ,1 5 9 7. . .1 5 0 0 d e l a y( 2 0 ) ;//2 0m sac a d av e l o c i d a d } Abra la ForwardLeftRightBackward bosquejo y guardarla como ForwardLeftRightBackwardRamping. Modificar el nuevo boceto para que su escudo BOE-Bot se elevar dentro y fuera de cada maniobra. Sugerencia: puede utilizar los fragmentos de cdigo anterior, y fragmentos similares de StartAndStopWithRamping.
16/01/14
learn.parallax.com/print/book/export/html/216
Hay una llamada a la funcin de ejemplo, en la funcin de configuracin, con la etiqueta en el diagrama anterior. Ese ejemplo () lnea indica el croquis que ir a buscar la funcin con ese nombre, ejecutar su cdigo, y volver cuando haya terminado. As, el boceto salta hacia abajo para anular ejemplo () y ejecuta los dos comandos en sus llaves. Luego, regresa a la llamada a la funcin, y contina desde all. Aqu est el orden de los eventos se pueden ver cuando se ejecuta el boceto: 1. El monitor muestra Serial "Antes llamada Ejemplo de funcin". 2. Despus de un retraso de un segundo, el monitor muestra "Durante ejemplo llamada a la funcin." Por qu? Debido a que el e j e m p l o( )llamada enva el cdigo para a n u l a re j e m p l o( ), que tiene la lnea de cdigo que imprime ese mensaje, seguido de un retardo de 1 segundo. Entonces, la funcin devuelve el e j e m p l ode llamada en l ac o n f i g u r a c i n. 3. El monitor muestra Serial "Despus ejemplo la funcin de llamada."
learn.parallax.com/print/book/export/html/216
19/48
16/01/14
learn.parallax.com/print/book/export/html/216
Ejemplo Sketch - SimpleFunctionCall Introduce, guarda, y subir SimpleFunctionCall. Vea el progreso de la carga, y tan pronto como lo ha hecho, abra el Serial Monitor. Cuidado con la terminal y verifique que la secuencia de mensajes se inicia con Antes, Durante y luego, a continuacin, despus de. //R o b t i c ac o ne lE s c u d oB O E-S i m p l e F u n c t i o n C a l l //E s t ec r o q u i sm u e s t r au n as e n c i l l al l a m a d ad ef u n c i n . v o i ds e t u p( ){ S e r i a l . b e g i n( 9 6 0 0 ) ; S e r i a l . p r i n t l n( " .A n t e sd el l a m a d aE j e m p l od ef u n c i n " ) ; d e l a y( 1 0 0 0 ) ; e j e m p l o( ) ;//E s t ae sl al l a m a d aal af u n c i n S e r i a l . p r i n t l n( " .D e s p u se j e m p l ol af u n c i nd el l a m a d a " ) ; d e l a y( 1 0 0 0 ) ;
learn.parallax.com/print/book/export/html/216
20/48
16/01/14
learn.parallax.com/print/book/export/html/216
learn.parallax.com/print/book/export/html/216
21/48
16/01/14
learn.parallax.com/print/book/export/html/216
Ejemplo Sketch - FunctionCallWithParameter Leer el boceto, y predecir lo que va a ver y escuchar cuando lo ejecuta. Ingrese y cargar FunctionCallWithParameter, a continuacin, abra el Serial Monitor. Cuidado con la terminal y escuchar los tonos. Fue correcta tu prediccin? Si es as, genial! Si no es as, echa un vistazo ms de cerca el boceto y asegurarse de que puede seguir el cdigo de cada llamada de funcin para la funcin y la espalda. Para mayor claridad, tomar otra mirada en el diagrama anterior. //R o b t i c ac o ne lE s c u d oB O E-F u n c t i o n C a l l W i t h P a r a m e t e r //E s t ep r o g r a m am u e s t r au n al l a m a d aau n af u n c i nc o nu np a r m e t r o . v o i ds e t u p( ){ S e r i a l . b e g i n( 9 6 0 0 ) ;
learn.parallax.com/print/book/export/html/216 22/48
16/01/14
learn.parallax.com/print/book/export/html/216
v o i dl o o p( ) { } v o i dt o n o( i n tH z )//f u n c i nd ep i t c hc o nH zd e c l a r c o m op a r m e t r o { S e r i a l . p r i n t( " F r e q u e n c y= " ) ; S e r i a l . p r i n t l n( H z ) ; t o n o( 4 ,H z ,1 0 0 0 ) ; d e l a y( 1 0 0 0 ) ; } Tu Turno - Expandir la funcin de dos parmetros Aqu hay una modificacin d et o n ofuncin que acepta dos parmetros: H zy m s. Este nuevo t o n ocontrola la funcin de la duracin de la seal. v o i dt o n o( H zi n t ,i n tm s ) { S e r i a l . p r i n t( " F r e q u e n c y= " ) ; S e r i a l . p r i n t l n( H z ) ; t o n o( 4 ,H z ,m s ) ; r e t a r d o( m s ) ; } Aqu hay dos llamadas a la modificacin d et o n ola funcin, uno para un segundo tono Hz 0.5 3500, y el otro para un tono Hz 1,5 segundos 2000: t e r r e n od ej u e g o( 3 5 0 0 ,5 0 0 ) ; t e r r e n od ej u e g o( 2 0 0 0 ,1 5 0 0 ) ;
learn.parallax.com/print/book/export/html/216
23/48
16/01/14
learn.parallax.com/print/book/export/html/216
Tenga en cuenta que cada una de estas llamadas al t e r r e n od ej u e g oincluye dos valores, uno para pasar al H zparmetro, y uno para pasar al m s parmetro. El nmero de valores en una llamada a la funcin debe coincidir con el nmero de parmetros en la definicin de esa funcin, o el boceto no se compilar. Ahorra FunctionCallWithParameter como FunctionCallWithTwoParameters. Vuelva a colocar el t e r r e n od ej u e g ocon la versin de la funcin de dos parmetros. Vuelva a colocar los parmetros individuales d et o n ollamadas con las llamadas de dos parmetros. Ejecute el esbozo modificado y compruebe que funciona.
learn.parallax.com/print/book/export/html/216
16/01/14
learn.parallax.com/print/book/export/html/216
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d ad e b er e p e t i r } a n u l a rh a c i aa d e l a n t e( h o r ai n t )//f u n c i nF o r w a r d { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a r e t a r d o( t i e m p o ) ;//M a n i o b r ad et i e m p om s } v o i dt u r n L e f t( h o r ai n t )//F u n c i nG i r oal ai z q u i e r d a { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//I z q u i e r d ar u e d ah a c i al ad e r e c h a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h a r e t a r d o( t i e m p o ) ;//M a n i o b r ad et i e m p om s } v o i dt u r n R i g h t( h o r ai n t )//F u n c i nG i r oal ad e r e c h a { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ad e r e c h ah a c i al ai z q u i e r d a r e t a r d o( t i e m p o ) ;//M a n i o b r ad et i e m p om s } ( t i e m p oi n t )//F u n c i nh a c i aa t r sh a c i aa t r ss i ne f e c t o { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//I z q u i e r d ar u e d ah a c i al ad e r e c h a s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ad e r e c h ah a c i al ai z q u i e r d a r e t a r d o( t i e m p o ) ;//M a n i o b r ad et i e m p om s } v o i dd i s a b l e S e r v o s( )//H a l ts e r v o s e a l e s { s e r v o L e f t . d e t a c h( ) ;//D e t e n e re le n v od es e a l e sd es e r v o s e r v o R i g h t . d e t a c h( ) ; } Usted debe reconocer el patrn de movimiento de su Boe-Bot Shield hace, sino que es el mismo hecho por el boceto ForwardLeftRightBackward. Este es un segundo ejemplo de las muchas maneras de estructurar un esquema que dar lugar a los mismos movimientos. Habr unos cuantos ejemplos ms antes del final del captulo. Tu Turno - Funcin de desplazamiento pone en bucle
learn.parallax.com/print/book/export/html/216 25/48
16/01/14
learn.parallax.com/print/book/export/html/216
Quieres mantener la realizacin de ese conjunto de cuatro maniobras una y otra vez? Slo tienes que mover esos cuatro maniobras llamadas de funcin de la c o n f i g u r a c i nd ela funcin en el b u c l ed ela funcin. Prueba esto: Guarde el dibujo con un nuevo nombre, como MovementsWithFunctionsInLoop Comente las d i s a b l e S e r v o s( )llamada a la funcin que est en l ac o n f i g u r a c i nmediante la colocacin de dos barras inclinadas a su izquierda, as: / / d i s a b l e S e r v o s Quite el / / E m p t y. . .comentario del b u c l efuncin no ser correcta! Corte la funcin de llamadas a r e m i t i r( 2 0 0 0 ), t u r n L e f t( 6 0 0 ), t u r n R i g h t( 6 0 0 )y h a c i aa t r s( 2 0 0 0 )de la c o n f i g u r a c i nd e la funcin y pegarlos en el b u c l ed ela funcin. Se debe tener este aspecto cuando haya terminado: v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 } //d i s a b l e S e r v o s( ) ;//t o d a v as em a n t i e n e ni n d e f i n i d a m e n t e
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { h a c i ad e l a n t e( 2 0 0 0 )//A v a n z ad u r a n t e2s e g u n d o s t u r n L e f t( 6 0 0 )//G i r aal ai z q u i e r d ad e0 , 6s e g u n d o s t u r n R i g h t( 6 0 0 )//G i r aal ad e r e c h ap a r a0 , 6s e g u n d o s h a c i aa t r s( 2 0 0 0 )//r e t r o c e d e rp o r2s e g u n d o s Sube el esbozo modificado y verifique que se repite la secuencia de cuatro maniobras de forma indefinida.
16/01/14
learn.parallax.com/print/book/export/html/216
Las reglas para s p e e d L e f ty s p e e d R i g h t ,se enumeran a continuacin, son fciles de recordar. Lo mejor de todo, con esta m a n i o b r afuncin que no tienes que pensar en las agujas del reloj y el giro a la izquierda ya. valores positivos para mover el robot hacia adelante valores negativos para mover el robot hacia atrs 200 para toda velocidad hacia adelante -200 A toda velocidad hacia atrs 0 de parada 100--100 gama para el control de velocidad lineal Las reglas para m s T i m eson: Los valores positivos para el nmero de ms para ejecutar la maniobra -1 Para desactivar la seal de servo Esto es lo que llama a esta funcin se ver como para la secuencia hacia delante-hacia atrs-izquierda-derecha-stop familiar: m a n i o b r a r( 2 0 0 ,2 0 0 ,2 0 0 0 ) ;//F o r w a r d2s e g u n d o s m a n i o b r a r( 2 0 0 ,2 0 0 ,6 0 0 ) ;//I z q u i e r d a0 , 6s e g u n d o s m a n i o b r a r( 2 0 0 ,2 0 0 ,6 0 0 )//D e r e c h o0 , 6s e g u n d o s m a n i o b r a r( 2 0 0 ,2 0 0 ,2 0 0 0 ) ;//B a c k w a r d2s e g u n d o s m a n i o b r a( 0 ,0 ,1 ) ;//s e r v o sD e s a c t i v a r Ejemplo Sketch - TestManeuverFunction Introduce, guarda, y subir TestManeuverFunction. Verifique que se completa el delantero, izquierda, derecha, atrs, detener la secuencia. //R o b t i c ac o ne lE s c u d oB O E-T e s t M a n e u v e r F u n c t i o n //S ed e s p l a z ah a c i aa d e l a n t e ,i z q u i e r d a ,d e r e c h a ,l u e g oh a c i aa t r sc o nf u n c i nd em a n i o b r a . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3
learn.parallax.com/print/book/export/html/216 27/48
16/01/14
learn.parallax.com/print/book/export/html/216
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d ad e b er e p e t i r } v o i dm a n i o b r a( i n ts p e e d L e f t ,i n ts p e e d R i g h t ,i n tm s T i m e ) { //S p e e d L e f t ,s p e e d R i g h tr a n g o s :B a c k w a r dL i n e a lp a r ol i n e a lA d e l a n t e //2 0 01 0 0. . . . . .0. . . . . .1 0 02 0 0 s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0+s p e e d L e f t ) ;//S e tI z q u i e r d av e l o c i d a dd e ls e r v o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0-s p e e d R i g h t ) ;//E s t a b l e c e rl ad e r e c h av e l o c i d a dd e ls e r v o i f( m s T i m e= =1 )//s im s T i m e=1 { s e r v o s e a l e s//D e t e n e r ;s e r v o L e f t . d e t a c h( ) s e r v o R i g h t . d e t a c h( ) ; } r e t a r d o( m s T i m e ) ;//D e l a yp a r am s T i m e } Tu Turno - Personaliza velocidad y duracin de Control Con la m a n i o b r ad ela funcin, 0 es detener, 100--100 es el rango de control de velocidad y 200 y -200 son una exageracin para mantener a los servos corriendo tan rpido como les sea posible. El boceto TestManeuverFunction hace que sea fcil definir maniobras personalizados rpidamente. Slo tiene que pasar nuevos parmetros para cada rotacin de la rueda y la duracin maniobra para cada llamada de la m a n i o b r ad efuncin. Por ejemplo, vamos a hacer el movimiento de la rueda izquierda a mitad de velocidad, mientras que la rueda derecha se mueve a toda velocidad para dibujar un arco durante 3 segundos. Esto es lo que llamada a la funcin se vera as: m a n i o b r a( 5 0 ,1 0 0 ,3 0 0 0 ) ; He aqu otro ejemplo de que mantiene la rueda izquierda quieta y mueve la rueda derecha hacia adelante para un giro de pivote izquierda: m a n i o b r a r( 0 ,2 0 0 ,1 2 0 0 ) ;
learn.parallax.com/print/book/export/html/216 28/48
16/01/14
learn.parallax.com/print/book/export/html/216
Trate de aadir tanto del ejemplo m a n i o b r ad elas llamadas a su dibujo. Trate de aadir las otras tres ruedas de pivote se convierte en la secuencia: adelante-derecha, hacia atrs-derecha, y hacia atrs-izquierda.
Qu es una matriz?
Una matriz es un conjunto de variables con un nombre comn. Cada variable en la matriz se conoce como un elemento . Aqu est una declaracin de matriz con ocho elementos: i n tn o t a[ ]={ 1 0 4 7 ,1 1 7 4 ,1 3 1 9 ,1 3 9 7 ,1 5 6 8 ,1 7 6 0 ,1 9 7 6 ,2 0 9 3 } ; El nombre de la matriz es l an o t a, y cada elemento de la matriz se puede acceder por su nmero de ndice. Las matrices son cero indexados , por lo que los elementos estn numerados del 0 al 7. El siguiente diagrama muestra cmo l an o t a[ 0 ]almacena 1047, n o t a[ 1 ]almacena 1174, n o t a [ 2 ]almacena 1319, y as sucesivamente, a travs de l an o t a[ 7 ], que almacena 2093.
learn.parallax.com/print/book/export/html/216
29/48
16/01/14
learn.parallax.com/print/book/export/html/216
Digamos que su cdigo necesita copiar l an o t a[ 3 ], que almacena el valor de 1397, a una variable llamada m y V a r. Su cdigo podra hacerlo de esta manera: m y V a r=n o t a[ 3 ] ; Su boceto puede cambiar valores de los elementos de la matriz tambin. Por ejemplo, puede cambiar el valor de 1976 a 1975, con una expresin como esta: n o t a[ 3 ]=1 , 9 7 5 ; Una matriz no tiene que ser pre-inicializado con los valores como lo es en el diagrama anterior. Por ejemplo, usted podra declarar una matriz con 8 elementos como esto: i n tm y A r r a y[ 8 ] ; Luego, su dibujo puede rellenar los valores de cada elemento posterior, tal vez con las mediciones del sensor, los valores introducidos desde el Serial Monitor, o cualquier nmero que necesita para almacenar. El siguiente diagrama muestra las notas musicales en el lado derecho de un teclado de piano. Cada pulsacin de una tecla de piano hace una cadena (o un altavoz si es elctrico) vibran a una frecuencia determinada. Comparar las frecuencias de los extremos izquierdos ocho teclas blancas a los valores de la matriz nota.
learn.parallax.com/print/book/export/html/216
30/48
16/01/14
learn.parallax.com/print/book/export/html/216
A continuacin, vamos a utilizar la matriz para hacer su Shield BOE-Bot, toque algunas notas musicales ...
16/01/14
learn.parallax.com/print/book/export/html/216
S e r i a l . p r i n t( " n o t a= " ) ; S e r i a l . p r i n t l n( n o t a[ 3 ] ) ; t o n o( 4 ,n o t a[ 3 ] ,5 0 0 ) ; d e l a y( 7 5 0 ) ;
v o i dl o o p( ) { } Ejemplo Sketch - PlayNotesWithLoop Muchas aplicaciones usan variables para acceder a elementos de una matriz. El siguiente PlayAnotherNote boceto declara una variable denominada n d i c ey lo utiliza para seleccionar un elemento de la matriz por su nmero de ndice. Lo familiar d ebucle puede incrementar automticamente el valor del n d i c e. El cdigo para jugar y mostrar las notas est dentro de la d ebucle, y e l n d i c ese utiliza para seleccionar el elemento de la matriz. Para el primer viaje a travs del bucle, e l n d i c eser 0, por lo que el valor almacenado en l an o t a[ 0 ]ser utilizado dondequiera n o t a[ i n d i c e ]aparece en una i m p r e s i no t o n od efuncin. Con cada viaje a travs del bucle, e l n d i c ese incrementar hasta que el boceto ha mostrado y tocado todas las notas de la matriz. Introduce, guarda, y subir PlayNotesWithLoop. Abra el Monitor de serie, tan pronto como el dibujo se realiza la carga. Verifique que el Serial Monitor muestra cada nota en la matriz como el altavoz reproduce. //R o b t i c ac o ne lE s c u d oB O E-P l a y N o t e s W i t h L o o p //M u e s t r ayr e p r o d u c eo t r oe l e m e n t od e la r r a yn o t a . i n tn o t a[ ]={ 1 0 4 7 ,1 1 4 7 ,1 3 1 9 ,1 3 9 7 ,1 5 6 8 ,1 7 6 0 ,1 9 7 6 ,2 0 9 3 } ; v o i ds e t u p( ) { S e r i a l . b e g i n( 9 6 0 0 ) ; f o r( i n ti n d e x=0 ;i n d e x< 8 ;i n d e x++ ) { S e r i a l . p r i n t( " i n d e x= " ) ; S e r i a l . p r i n t l n( n d i c e ) ; S e r i a l . p r i n t( " n o t a[ i n d e x ]= " ) ;
learn.parallax.com/print/book/export/html/216 32/48
16/01/14
learn.parallax.com/print/book/export/html/216
S e r i a l . p r i n t l n( n o t a[ i n d i c e ] ) ; t o n o( 4 ,n o t a[ n d i c e ] ,5 0 0 ) ; d e l a y( 7 5 0 ) ;
v o i dl o o p( ) { } Qu crees que pasar si se cambia el d ebucle para que coincida con la de abajo? Prubelo! f o r( i n ti n d e x=7 ;i n d e x >=0 ; n d i c ed e) ; Uso de la funcin sizeof Digamos que usted desea componer una meloda musical que tiene ms o menos, las notas. Es fcil olvidarse de actualizar el d ebucle para jugar el nmero correcto de notas. La biblioteca de Arduino tiene un s i z e o ffuncin que puede ayudar con esto. Se le puede decir tanto el tamao de la matriz de bytes, y el tamao del tipo de variable de la matriz (como i n t). Su cdigo puede entonces dividir el nmero de bytes para el tipo de variable en el nmero de bytes de la matriz. El resultado es el nmero de elementos de la matriz. He aqu un ejemplo del uso de esta tcnica. Se carga una variable llamada e l e m e n t C o u n tcon el nmero de elementos en la n o t amatriz: i n tn o t a[ ]={ 1 0 4 7 ,1 1 4 7 ,1 3 1 9 ,1 3 9 7 ,1 5 6 8 ,1 7 6 0 ,1 9 7 6 ,2 0 9 3 } ; i n te l e m e n t C o u n t=s i z e o f( n o t a )/s i z e o f( i n t ) ; Ms tarde, el d ebucle puede utilizar el e l e m e n t C o u n tvariable para tocar todas las notas de la matriz, incluso si agrega o elimina elementos: f o r( i n ti n d e x=0 ;i n d e x< e l e m e n t C o u n t ;i n d e x++ ) Introduce, guarda, y subir PlayAllNotesInArray. Abra el Monitor de serie, tan pronto como el dibujo se realiza la carga. Verifique de nuevo que el Serial Monitor muestra cada nota en la matriz como el altavoz reproduce. //R o b t i c ac o ne lE s c u d oB O E-P l a y A l l N o t e s I n A r r a y //U t i l i z as i z e o fp a r ad e t e r m i n a re ln m e r od ee l e m e n t o sq u ei n ta r r a y //Yl u e g om u e s t r aei m p r i m ec a d av a l o rd en o t ae nl as e c u e n c i a .
learn.parallax.com/print/book/export/html/216 33/48
16/01/14
learn.parallax.com/print/book/export/html/216
i n tn o t a[ ]={ 1 0 4 7 ,1 1 4 7 ,1 3 1 9 ,1 3 9 7 ,1 5 6 8 ,1 7 6 0 ,1 9 7 6 ,2 0 9 3 } ; v o i ds e t u p( ) { S e r i a l . b e g i n( 9 6 0 0 ) ; i n te l e m e n t C o u n t=s i z e o f( n o t a )/s i z e o f( i n t ) ; S e r i a l . p r i n t( " N m e r od ee l e m e n t o se na r r a y= " ) ; S e r i a l . p r i n t l n( e l e m e n t C o u n t ) ; f o r( i n ti n d e x=0 ;i n d e x< e l e m e n t C o u n t ;i n d e x++ ) { S e r i a l . p r i n t( " i n d e x= " ) ; S e r i a l . p r i n t l n( n d i c e ) ; S e r i a l . p r i n t( " n o t a[ i n d e x ]= " ) ; S e r i a l . p r i n t l n( n o t a[ i n d i c e ] ) ; t o n o( 4 ,n o t a[ n d i c e ] ,5 0 0 ) ; d e l a y( 7 5 0 ) ;
v o i dl o o p( ) { } Tu Turno - Aadir notas Trate de aadir las siguientes dos notas, D7 y E7, utilizando las frecuencias (redondeando hacia abajo) desde el diagrama del teclado. Su matriz se puede utilizar ms de una lnea, as: i n tn o t a[ ]={ 1 0 4 7 ,1 1 4 7 ,1 3 1 9 ,1 3 9 7 ,1 5 6 8 ,1 7 6 0 , 1 9 7 6 ,2 0 9 3 ,2 3 4 9 ,2 6 3 7 } ; Si usted est inclinado a la msica, tratar de escribir una serie que jugar muy poco desafinado.
learn.parallax.com/print/book/export/html/216
34/48
16/01/14
learn.parallax.com/print/book/export/html/216
16/01/14
learn.parallax.com/print/book/export/html/216
En cada paso por el bucle, d e n d i c ese incrementa en 1. As, con cada m a n i o b r ad ellamada, el siguiente elemento en cada matriz se pasa como un parmetro para la m a n i o b r ad ela funcin. La primera vez en el ciclo, e l n d i c ees 0, por lo que la m a n i o b r ad elos parmetros de la llamada se convierta en el elemento cero de cada matriz, as: m a n i o b r a( s p e e d s L e f t[ 0 ] ,s p e e d s R i g h t[ 0 ] ,l o st i e m p o s[ 0 ] ). Los valores reales que se pasan a la m a n i o b r ad ela funcin de este aspecto: l am a n i o b r a( 2 0 0 ,2 0 0 ,2 0 0 0 ). La segunda pasada por el bucle, e l n d i c ees 1, por lo que la funcin es la siguiente: l am a n i o b r a( s p e e d s L e f t[ 1 ] ,s p e e d s R i g h t[ 1 ] ,l o st i e m p o s[ 1 ] ), que se convierte en l a m a n i o b r a( 2 0 0 ,2 0 0 ,2 0 0 0 ). Ejemplo Sketch - ManeuverSequence Introduce, guarda, y subir ManeuverSequence a la Arduino. Verifique que el BOE Shield-Bot ejecuta los movimientos hacia adelante-izquierda-derecha-hacia atrs y luego se detiene. //R o b t i c ac o ne lE s c u d oB O E-M a n e u v e r S e q u e n c e //S ed e s p l a z ah a c i aa d e l a n t e ,i z q u i e r d a ,d e r e c h a ,l u e g oh a c i aa t r sc o nu n am a t r i zyl a //F u n c i nd em a n i o b r a . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a //F o r w a r dd e j p a r a d aal ad e r e c h ah a c i aa t r s // n d i c e01234 i n ts p e e d s L e f t[ ]={ 2 0 0 ,2 0 0 ,2 0 0 ,2 0 0 ,0 } ; i n ts p e e d s R i g h t[ ]={ 2 0 0 ,2 0 0 ,2 0 0 ,2 0 0 ,0 } ; i n tv e c e s[ ]={ 2 0 0 0 ,6 0 0 ,6 0 0 ,2 0 0 0 ,1 } ; S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 //D e t e r m i n a re ln m e r od ee l e m e n t o se nl al i s t ad es e c u e n c i a s . i n te l e m e n t C o u n t=s i z e o f( v e c e s )/s i z e o f( i n t ) ; //R e c u p e r a re l e m e n t o ss u c e s i v o sd ec a d al i s t ad es e c u e n c i a syd a r l e sd ec o m e r //P a r am a n i o b r a rf u n c i n . f o r( i n ti n d e x=0 ;i n d e x< e l e m e n t C o u n t ;i n d e x++ ) { m a n i o b r a( s p e e d s L e f t[ n d i c e ] ,s p e e d s R i g h t[ n d i c e ] ,l o st i e m p o s[ i n d i c e ] ) ;
learn.parallax.com/print/book/export/html/216 36/48
16/01/14
learn.parallax.com/print/book/export/html/216
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d ad e b er e p e t i r } v o i dm a n i o b r a( i n ts p e e d L e f t ,i n ts p e e d R i g h t ,i n tm s T i m e ) { //S p e e d L e f t ,s p e e d R i g h tr a n g o s :B a c k w a r dL i n e a lp a r ol i n e a lA d e l a n t e //2 0 01 0 0. . . . . .0. . . . . .1 0 02 0 0 s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0+s p e e d L e f t ) ;//S e tI z q u i e r d av e l o c i d a dd e ls e r v o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0-s p e e d R i g h t ) ;//E s t a b l e c e rl ad e r e c h av e l o c i d a dd e ls e r v o i f( m s T i m e= =1 )//s im s T i m e=1 { s e r v o s e a l e s//D e t e n e r ;s e r v o L e f t . d e t a c h( ) s e r v o R i g h t . d e t a c h( ) ; } r e t a r d o( m s T i m e ) ;//D e l a yp a r am s T i m e } Su BOE Shield-Bot realice lo familiar secuencial hacia adelante-izquierda-derecha-hacia atrs-parada de los movimientos? Est bien aburrido con l ahora? Quieres ver tu BOE Shield-Bot no otra cosa, o coreografiar su propia rutina? Tu Turno - Aadir a la Lista de Maniobras He aqu un ejemplo de una lista ms larga que puedes probar. Lo hace los cuatro pivotes despus de la secuencia de avance-izquierda-derecha hacia atrs. En este ejemplo, cuando e l n d i c ees 4, que va a utilizar el primer nmero de la segunda lnea de cada matriz. Cuando e l n d i c ees 5, que va a utilizar el segundo nmero en la segunda lnea de cada conjunto, y as sucesivamente. Observe que la lista de elementos de la matriz separados por comas figura entre llaves { }, y no importa si esa lista es de una sola lnea o extiende por varias lneas. i n ts p e e d s L e f t[ ]={ 2 0 0 ,2 0 0 ,2 0 0 ,2 0 0 , 0 ,2 0 0 ,2 0 0 ,0 ,0 } ; i n ts p e e d s R i g h t[ ]={ 2 0 0 ,2 0 0 ,2 0 0 ,2 0 0 , 2 0 0 ,0 ,0 ,2 0 0 ,0 } ; i n tv e c e s[ ]={ 2 0 0 0 ,6 0 0 ,6 0 0 ,2 0 0 0 , 1 0 0 0 ,1 0 0 0 ,1 0 0 0 ,1 0 0 0 ,1 } ; Ahorra ManeuverSequence como ManeuverSequenceExpanded. Cambiar la matriz para que coincida con los ejemplos con 9 elementos anteriores. Ejecute el esbozo modificado y verifica que la secuencia de giro es ejecutado despus de la secuencia de avance-izquierda-derecha hacia atrs.
learn.parallax.com/print/book/export/html/216 37/48
16/01/14
learn.parallax.com/print/book/export/html/216
Matrices de caracteres de uso no utilizan listas de elementos separados por comas. En lugar de ello, utilizan una cadena continua de caracteres. He aqu un ejemplo de la misma de edad, secuencia hacia adelante-izquierda-derecha-hacia atrs-stop en una matriz de caracteres: m a n i o b r a sc h a r[ ]=" f f f f f f f f f f l l l r r r b b b b b b b b b b s " ; La cadena matriz de caracteres tiene 10 fcaracteres. Ya que cada personaje representa 200 ms de tiempo de ejecucin, que se lleva adelante el BOE Shield-Bot durante 2 segundos. A continuacin, tres lpersonajes hacen 600 m de giro a la izquierda. Tres rpersonajes hacen un giro a la derecha, seguido por diez bpersonajes para ir hacia atrs, y luego una scarcter de parada completa la secuencia. Ejemplo de croquis: ControlWithCharacters Introduce, guarda, y subir ControlWithCharacters a la Arduino. Verifique que el BOE Shield-Bot ejecuta los movimientos hacia adelante-izquierda-derecha-hacia atrs y luego se detiene. //R o b t i c ac o ne lE s c u d oB O E-C o n t r o l W i t h C h a r a c t e r s //S ed e s p l a z ah a c i aa d e l a n t e ,i z q u i e r d a ,d e r e c h a ,l u e g oh a c i aa t r sp a r al a sp r u e b a syp u e s t aap u n t o . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a m a n i o b r a sc h a r[ ]=" f f f f f f f f f f l l l r r r b b b b b b b b b b s " ; S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a ld ei z q u i e r d aaP 1 3 s e r v o R i g h t . a t t a c h( 1 2 )//F i j a rs e a lc o r r e c t aaP 1 2 //m a n i o b r a sa n a l i z a rya l i m e n t a rac a d ac a r c t e rs u c e s i v oal af u n c i nd em a r c h a .
learn.parallax.com/print/book/export/html/216 38/48
16/01/14
learn.parallax.com/print/book/export/html/216
i n ti n d e x=0 ; h a c e r { i r( m a n i o b r a s[ i n d i c e ] ) ; }W h i l e( m a n i o b r a s[ i n d e x++ ]=' s ' ! ) ; } v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //V a c o ,n a d ad e b er e p e t i r } v o i dg o( c h a rc )f u n c i n//g o { s w i t c h( c )//C a m b i a rac d i g ob a s a d oe nc { c a s e' f ' ://cc o n t i e n e' f ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//At o d av e l o c i d a dh a c i aa d e l a n t e s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ; r o m p e r ; c a s e' b ' ://cc o n t i e n e' b ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//At o d av e l o c i d a dh a c i aa t r s s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; r o m p e r ; c a s e' l ' ://cc o n t i e n e' l ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 )//G i r a ral ai z q u i e r d ae ns ul u g a r s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ; r o m p e r ; c a s e' r ' ://cc o n t i e n e' r ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//G i r a ral ad e r e c h ae ns ul u g a r s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; r o m p e r ; c a s e' s ' ://cc o n t i e n e' s ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ;//S t o p s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ; r o m p e r ; } d e l a y( 2 0 0 ) ;//E j e c u t a rp o r0 . 2s e g u n d o s } Pruebe esta matriz se puede adivinar lo que har que el BOE Shield-Bot hace? m a n i o b r a sc h a r[ ]=" f f f f f f f f f f l l l r r r r r r l l l b b b b b b b b b b s " ; Despus de la m a n i o b r a sc a r a cmatriz y la inicializacin de costumbre, estas lneas traen los caracteres de la matriz y los pasan al i rfuncin (que se explica ms adelante).
learn.parallax.com/print/book/export/html/216 39/48
16/01/14
learn.parallax.com/print/book/export/html/216
i n ti n d e x=0 ; h a c e r { i r( m a n i o b r a s[ i n d i c e ] ) ; }W h i l e( m a n i o b r a s[ i n d e x++ ]=' s ' ! ) ; En primer lugar, e l n d i c ese declara y se inicializa a cero, para ser utilizado en un d o w h i l ebucle. Similar a un habitual m i e n t r a sbucle, d o w h i l eejecuta repetidamente comandos dentro de su bloque de cdigo mientras una condicin es verdadera, pero el t i e m p oparte viene despus de su bloque para el bloque siempre se ejecuta al menos una vez. En cada paso por el bucle, i r( m a n i o b r a s[ i n d i c e ] )pasa el carcter en m a n i o b r a s [ n d i c e ]al g ofuncin. El + +en + + n d i c esuma uno al n d i c evariable para la siguiente iteracin del bucle-recordemos que este es el incremento posterior del operador. Esto contina m i e n t r a s( m a n i o b r a s[ i n d i c e ] !=' s ' )que significa "mientras que el valor descargue de la m a n i o b r a sd ela matriz no es igual a 's'. " Ahora, echemos un vistazo a la m a r c h afuncin. Recibe cada personaje pas a su cparmetro, y lo evala sobre una base caso por caso, el uso de un s w i t c h/c a s ecomunicado. Para cada una de las cinco letras de la m a n i o b r a smatriz de caracteres, hay su correspondiente c a s ocomunicado en el s w i t c h( c )del bloque que se ejecutar si el personaje es recibida por i r. Si el m o v i m i e n t ofuncin de llamada pasa la fcarcter a la cparmetro, el cdigo en c a s of is ejecutada la mxima velocidad de avance familiar. Si pasa b, el cdigo hacia atrs a toda velocidad se ejecuta. El d e s c a n s oen cada caso sale del i n t e r r u p t o rd ebloque y el dibujo pasa a la siguiente orden, que es d e l a y( 2 0 0 ). Por lo tanto, cada llamada a s e g u i rlos resultados en una maniobra de 200 ms. Sin esa pausa al final de cada caso, el boceto continuara hasta el cdigo para el caso siguiente, dando lugar a maniobras no solicitados. v o i dg o( c h a rc )f u n c i n//g o { s w i t c h( c )//C a m b i a ral ab a s a d ae nc { c a s e' f ' ://cc o n t i e n e' f ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//At o d av e l o c i d a dh a c i aa d e l a n t e s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ; r o m p e r ; c a s e' b ' ://cc o n t i e n e' b ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//At o d av e l o c i d a dh a c i aa t r s s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; r o m p e r ; c a s e' l ' ://cc o n t i e n e' l ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 )//G i r a ral ai z q u i e r d ae ns ul u g a r s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ; r o m p e r ; c a s e' r ' ://cc o n t i e n e' r ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//G i r a ral ad e r e c h ae ns ul u g a r s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; r o m p e r ; c a s e' s ' ://cc o n t i e n e' s '
learn.parallax.com/print/book/export/html/216 40/48
16/01/14
learn.parallax.com/print/book/export/html/216
s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ;//S t o p s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ; r o m p e r ;
Trate de aadir un caso para la mitad de la velocidad de avance. Utilice el carcter "h", y recuerda que el rango de velocidad lineal de los servos es 1400-1600 pulsos de microsegundos. c a s e' h ' ://cc o n t i e n e' h ' s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 5 0 ) ;//L am i t a dd el av e l o c i d a dd ea v a n c e s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 4 5 0 ) ; r o m p e r ; Aadir una decena de hpersonajes a tu m a n i o b r a smatriz de caracteres. Tenga en cuenta que tienen que ser aadido a la izquierda de la sde caracteres para el boceto para llegar a ellos. Experimente un poco y aadir otro c a s ocomunicado por una maniobra diferente, como pivote hacia atrs izquierda, a continuacin, aadir algunos personajes de la nueva maniobra para su cadena de matriz. Puedes ver cmo esto es una manera conveniente para construir secuencias de maniobras?
16/01/14
learn.parallax.com/print/book/export/html/216
Escribir bocetos usando varias estrategias de los programas diferentes para realizar las mismas secuencias de maniobra Habilidades Robtica Cmo bsica maniobras rolling-robot se llevan a cabo mediante el control de la velocidad y la direccin de la rueda Qu son las diferencias entre las curvas graduales, pivote vueltas y girando en el lugar se vuelve, y combinaciones de velocidad de lo que la rueda / de direccin da dichas vueltas. Qu velocidad de rampa, es decir, cmo usarlo para que su robot se mueve sin problemas dentro y fuera de las maniobras, y cmo rampa es beneficioso para su Shield BOE-Bot Qu es la navegacin a estima, en el contexto de la robtica de nivel de entrada de navegacin El control de maniobra robot en tiempo de ejecucin para hacer el viaje BOE Shield-Bot una distancia predeterminada o girar a un ngulo particular Compensar la variacin de hardware mediante el ajuste de la velocidad del servo de marcha recta Habilidades de Ingeniera Hacer observaciones y mediciones para obtener las constantes de una frmula simple que caracteriza la relacin de causa y efecto entre la entrada del sistema y la salida del sistema. (S, suena de lujo, pero eso es lo que hiciste con esa regla.) La diferencia entre un ajuste de hardware y un software de ajuste Qu es un proceso iterativo, y utilizarla para los ajustes de software de prueba
Captulo 4 Desafos
Preguntas 1. En qu direccin la rueda izquierda tiene que recurrir a hacer que el Boe-Bot Shield ir hacia adelante? En qu direccin la rueda derecha tiene que girar? 2. Cuando los pivotes BOE Shield-Bot sobre una rueda a la izquierda, qu estn haciendo las ruedas? Qu cdigo es lo que necesita para sacar el BOE Shield-Bot pivote queda? 3. Si el BOE Shield-Bot se desva ligeramente hacia un lado cuando se est ejecutando un boceto para hacer que vaya al frente, cmo se corrige esto? Qu comando necesita ser ajustado y qu tipo de ajuste en caso de que haga? 4. Si el BOE Shield-Bot viaja 11 in / s, cuntos milisegundos se necesita para hacer que viajar 36 pulgadas? 5. Por qu una d ebucle que la velocidad rampas servo tiene que r e t r a s a r( 2 0 )en ella? 6. Qu tipo de variables es grande para almacenar varios valores en las listas? 7. Qu tipo de bucles se puede utilizar para recuperar los valores de las listas? 8. Qu declaracin se puede utilizar para seleccionar una variable en particular y evaluar sobre una base de caso por caso y ejecutar un bloque de cdigo diferente para cada caso? 9. En qu condiciones se puede anexar a un b u c l ed o? Ejercicios 1. Escriba una rutina que hace que el BOE Shield-Bot retroceda a toda velocidad durante 2,5 segundos. 2. Digamos que usted prob su servos y descubri que se tarda 1,2 segundos para hacer un giro de 180 con la derecha-rotacin. Con esta
learn.parallax.com/print/book/export/html/216 42/48
16/01/14
learn.parallax.com/print/book/export/html/216
informacin, escribir rutinas para hacer el BOE Shield-Bot realice 30, 45 y 60 grados gira. 3. Escriba una rutina que hace que el BOE Shield-Bot siga recto hacia adelante, luego la rampa de entrada y salida de un giro pivotante y, a continuacin, seguir recto hacia adelante. Proyectos 1. Es el momento de rellenar la columna 3 de la Tabla 2-2 [4] . Para ello, modifique los argumentos nos en el w r i t e M i c r o s e c o n d sllama en los ForwardThreeSeconds dibujar utilizando todos los pares de valores de la columna 1. Registre su comportamiento resultante BOE de Shield-Bot para cada par en la columna 3. Una vez completado, este cuadro servir como una gua de referencia cuando disee su propia aduana BOE maniobras Shield-Bot. 2. El diagrama muestra dos cursos simples. Escribir un boceto que har que su escudo BOE-Bot navegue a lo largo de cada figura. Supongamos distancias en lnea recta (lados del tringulo y el dimetro del crculo) son o bien 1 yarda o 1 metro.
Captulo 4 Soluciones
Soluciones Pregunta 1. La izquierda de la rueda izquierda, a la derecha de la rueda en sentido horario. 2. La rueda derecha est girando en sentido horario (hacia adelante), y la rueda de la izquierda no se mueve. s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ; 3. Reduzca la velocidad al volante derecho de corregir a veer a la izquierda, y frenar la rueda izquierda para corregir a veer a la derecha. Reduzca la velocidad de una rueda al cambiar de su servo w r i t e M i c r o s e c o n d sn o s o t r o sparmetros, utilizando los valores ms cercanos a 1500. Comience en el extremo correspondiente del rango de control de velocidad lineal (1400-1600), mueva gradualmente hacia 1500 en incrementos de 10, y volver atrs en incrementos ms pequeos si llega ms all. 4. Teniendo en cuenta los datos a continuacin, se debe tomar alrededor de 3.727 milisegundos viajar 36 pulgadas: Velocidad BOE Shield-Bot = 11 in / s Distancia BOE Shield-Bot = 36 in / s
learn.parallax.com/print/book/export/html/216 43/48
16/01/14
learn.parallax.com/print/book/export/html/216
tiempo = (BOE Shield-Bot distancia / velocidad Shield BOE-Bot) * (1000 ms / s) = (36/11) * (1000) = 3.727272 ... s * 1,000 ms / s 3.727 ms 5. Sin que 20 ms (1/50 de segundo) de retardo entre cada repeticin del bucle, que sera la rampa de 0 a 100 tan rpido que parece como el BOE Shield-Bot acaba de caminar al instante en toda velocidad. La rampa no sera aparente. 6. Una matriz. 7. p a r abucles y d o w h i l eb u c l e seran ejemplos de este captulo 8. s w i t c h/c a s e. 9. d o{ . . . }w h i l e( c o n d i c i n ) Soluciones Ejercicio 1. Solucin: s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; d e l a y( 2 5 0 0 ) ; 2. Solucin: //3 0 / 1 8 0=1 / 6 ,af i nd eu t i l i z a r1 2 0 0 / 6=2 0 0 s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; d er e t a r d o( 2 0 0 ) ; //E n f o q u ea l t e r n a t i v o s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; d e l a y( 1 2 0 0*3 0 / 1 8 0 ) ; //4 5 / 1 8 0=1 / 4 ,af i nd eu t i l i z a r1 2 0 0 / 4=3 0 0 s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; d e l a y( 3 0 0 ) ; //6 0 / 1 8 0=1 / 3 ,af i nd eu t i l i z a r1 2 0 0 / 3=4 0 0 s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; d e l a y( 4 0 0 ) ;
learn.parallax.com/print/book/export/html/216 44/48
16/01/14
learn.parallax.com/print/book/export/html/216
3. Solucin: //A d e l a n t e1s e g u n d o s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; d e l a y( 1 0 0 0 ) ; //R a m p ae np i v o t e f o r( i n tv e l o c i d a d=0 ,l av e l o c i d a d< =1 0 0 ;V e l o c i d a d+=2 ) { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ; d er e t a r d o( 2 0 ) ; } ; //R a m p ad ep i v o t e f o r( i n tv e l o c i d a d=1 0 0 ;v e l o c i d a d >=0 ;v e l o c i d a d=2 ) { s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 5 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 5 0 0+v e l o c i d a d ) ; d er e t a r d o( 2 0 ) ; } //D en u e v oh a c i ad e l a n t e s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ; d e l a y( 1 0 0 0 ) ; Project Solutions 1. Solucin (aunque la mesa se ve un poco diferente a la que es posible que haya impreso.)
learn.parallax.com/print/book/export/html/216
45/48
16/01/14
learn.parallax.com/print/book/export/html/216
2. El crculo puede ser implementado por girando a la derecha de forma continua. Ensayo y error, y una yarda o metro palo, le ayudar a llegar a la derecha n o sparmetros para w r i t e M i c r o s e c o n d s(n o s o t r o s )y el derecho m sparmetro para r e t a r d o(m s ). A continuacin se muestra una solucin que funcion durante un par particular de servos y un conjunto de bateras. Sus valores pueden variar considerablemente de lo que hay en el croquis Circle. Para el tringulo, primero calcular el tiempo de viaje necesario en ms de 1 metro o 1 yarda lnea recta, como en la pregunta 4, y poner a punto para su BOE Shield-Bot y en particular la superficie. El BOE Shield-Bot debe recorrer 1 metro / yarda hacia adelante, y luego hacer un giro de 120 , que se repite tres veces para los tres lados del tringulo. Es posible que tenga que ajustar la llamada retraso en la vuelta a la izquierda 120 rutina para obtener una precisin de 120 a su vez. Boceto Circle: //R o b t i c ac o ne lE s c u d oB O E-C a p t u l o4 ,P r o y e c t o2-C r c u l o //E s c u d oB O E B o tn a v e g ae nu nc r c u l od eu nd i m e t r od e1y a r d a . #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2
learn.parallax.com/print/book/export/html/216 46/48
16/01/14
learn.parallax.com/print/book/export/html/216
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //N a d ad e b er e p e t i r } Boceto Triangle: //R o b t i c ac o ne lE s c u d oB O E-C a p t u l o4 ,P r o y e c t o2-T r i n g u l o //E s c u d oB O E B o tn a v e g au nt r i n g u l oc o nl a d o sd ep a t i o1y1 2 0 n g u l o s//g r a d o .S i g ar e c t o1y a r d a ,g i r a r1 2 0g r a d o s ,r e p e t i r3v e c e s #I n c l u d e< S e r v o . h >//I n c l u i rs e r v ob i b l i o t e c a S e r v o s//D e c l a r al ai z q u i e r d ayl ad e r e c h a ;S e r v os e r v o L e f t S e r v o R i g h tS e r v o ; v o i ds e t u p( )//b l o q u ed ei n i c i a l i z a c i ni n c o r p o r a d o { t o n o( 4 ,3 0 0 0 ,1 0 0 0 ) ,e lt o n o//R e p r o d u c c i nd u r a n t e1s e g u n d o d e l a y( 1 0 0 0 ) ;//D e l a yp a r at e r m i n a rt o n o s e r v o L e f t . a t t a c h( 1 3 )//C o n e c t el as e a li z q u i e r d aa lp i n1 3 s e r v o R i g h t . a t t a c h( 1 2 )//A d j u n t a rs e a lc o r r e c t aa lp i n1 2 f o r( i n ti n d e x=1 ;i n d e x< =3 ;i n d e x++ ) { //At o d av e l o c i d a dh a c i aa d e l a n t e s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 7 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h am sl e n t o d e l a y( 5 5 0 0 ) ;//. . .d e5 , 5s e g u n d o s //G i r aal ai z q u i e r d a1 2 0g r a d o s s e r v o L e f t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//r u e d ai z q u i e r d ae ns e n t i d oa n t i h o r a r i o s e r v o R i g h t . w r i t e M i c r o s e c o n d s( 1 3 0 0 ) ;//D e r e c h ar u e d ah a c i al ad e r e c h am sl e n t o d e l a y( 7 0 0 ) ;
} s e r v o L e f t . d e t a c h( ) ;//D e t e n e re le n v od es e a l e sd es e r v o
learn.parallax.com/print/book/export/html/216
47/48
16/01/14
learn.parallax.com/print/book/export/html/216
s e r v o R i g h t . d e t a c h( ) ;
v o i dl o o p( )//b u c l ep r i n c i p a ls er e p i t ea u t o m t i c a m e n t e { //N a d ad e b er e p e t i r }
Visitar los foros TIENDA EN LA TIENDA Condiciones de uso Reaccin: learn@parallax.com Copyright Parallax Inc. 2013 (a menos que se indique lo contrario)
URL del envo: http://learn.parallax.com/node/216 Enlaces: [1] http://learn.parallax.com/207 [3] http://learn.parallax.com/node/146 [4] http://learn.parallax.com/187
learn.parallax.com/print/book/export/html/216
48/48