You are on page 1of 48

16/01/14

learn.parallax.com/print/book/export/html/216

Publicado el learn.parallax.com ( http://learn.parallax.com )


Inicio > Robtica con el Consejo de Educacin Shield para Arduino > Captulo 4. BOE Shield-Bot navegacin

Captulo 4. BOE Shield-Bot navegacin


Este captulo presenta las diferentes estrategias de programacin para hacer el movimiento BOE Shield-Bot. Una vez que entendamos cmo funciona la navegacin bsicos, vamos a hacer las funciones de cada maniobra. En captulos posteriores, vamos a escribir bocetos que llaman a estas funciones en respuesta a la entrada de sensor, lo que permitir el BOE Shield-Bot para navegar por su cuenta.

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

Siga los enlaces de abajo para empezar!

Actividad 1: Maniobras bsicas BOE Shield-Bot


El primer paso es conseguir orientado! La siguiente imagen muestra hacia adelante, hacia atrs, girar a la izquierda y girar a la derecha desde el punto de vista de la BOE Shield-Bot.

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

Cmo ForwardThreeSeconds Obras


En primer lugar, la biblioteca Servo tiene que ser incluido para que su dibujo puede acceder a sus funciones: #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 A continuacin, una instancia de servo se debe declarar y nicamente el nombre de cada rueda: S e r v o s//D e c l a r a ri z q u i e r d oyd e r e c h o ;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 ;

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?

Mover hacia atrs, Rotacin y pivotante


Todo lo que necesita para obtener otros movimientos fuera de su escudo BOE-Bot son diferentes combinaciones de n o s o t r o sparmetros en su s e r v o L e f ty s e r v o R i g h tw r i t e M i c r o s e c o n d sllama. Por ejemplo, estas dos llamadas harn que su escudo BOE-Bot ir hacia atrs: //At o d av e l o c i d a dh a c i aa t r s
learn.parallax.com/print/book/export/html/216 5/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 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 .

Actividad 2: Afinacin de las Maniobras Bsicas


Imagina escribir un boceto que instruye el BOE Shield-Bot para viajar a toda velocidad hacia adelante durante quince segundos. Qu pasa si sus curvas robot ligeramente hacia la izquierda o hacia la derecha durante su viaje, cuando se supone que debe estar viajando en lnea recta? No hay necesidad de tomar el BOE Shield-Bot espalda aparte y volver a ajustar los servos con un destornillador para arreglar esto. Usted puede simplemente ajustar el boceto ligeramente para obtener las dos ruedas que viaja a la misma velocidad. Si bien el enfoque destornillador podra considerarse un ajuste de hardware , el enfoque de la programacin sera un ajuste de software .

Enderezar Ruta del Escudo-Bot


Por lo tanto, sera de tu viaje BOE Shield-Bot en un arco en lugar de en lnea recta? La velocidad mxima vara de un servo a la siguiente, as que una rueda es probable que gire un poco ms rpido que el otro, haciendo que el BOE Shield-Bot para hacer un giro gradual. Para corregir esto, el primer paso es examinar con inters su viaje BOE de Shield-Bot por un perodo de tiempo para ver si se curva ms larga, y de qu manera, y cunto. Ejemplo de croquis: ForwardTenSeconds ForwardThreeSeconds abiertos y re-guardar como ForwardTenSeconds. Cambio de r e t a r d o( 3 0 0 0 )para r e t r a s a r( 1 0 . 0 0 0 ), y actualizar el ttulo y los comentarios tambin. Ajuste el interruptor de alimentacin para 1, cargue el boceto, luego desconecte el cable USB.
learn.parallax.com/print/book/export/html/216 8/48

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

Extremos de la zona de velocidad lineal

Velocidad mxima hacia la izquierda


9/48

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.

Ajuste las vueltas


La cantidad de tiempo que el BOE Shield-Bot gasta girando en su lugar determina hasta qu punto resulta. As que, para afinar una vez, todo lo que necesita hacer es ajustar el r e t a r d ode la funcin m sparmetro para hacerla girar por una cantidad de tiempo diferente. Digamos que el BOE Shield-Bot gira un poco ms de 90 (1/4 de crculo completo). Trate d er e t a r d o( 5 8 0 ), o tal vez incluso r e t r a s a r( 5 6 0 ). Si no gira lo suficiente, hacer que se ejecute ms tiempo, aumentando el r e t r a s ode la funcin m sparmetro 20 ms a la vez.
learn.parallax.com/print/book/export/html/216 10/48

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.

Actividad 3: Clculo de distancias


En muchos concursos de robtica, navegacin de robots ms precisos significa mejores puntuaciones. Uno muy popular concurso de robtica de nivel de entrada se llama a estima . La meta entera de este concurso es para que su robot vaya a una o ms ubicaciones y luego volver a exactamente donde comenz. Puede que recuerde preguntar a sus padres a esta pregunta, una y otra vez, mientras que en su camino a un destino de vacaciones o casa de los familiares: "Ya llegamos?" Tal vez cuando usted consigui un poco mayor, y aprendi la divisin en la escuela, empec a ver las seales de la carretera para ver lo lejos que estaba de la ciudad de destino. A continuacin, usted marc velocmetro del coche. Al dividir la velocidad en la distancia, tienes una buena estimacin del tiempo que se tardara en llegar. Puede que no hayas estado pensando en estos trminos exactos, pero aqu es la ecuacin que estaba utilizando:

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

Ambos ejemplos anteriores resolucin de la misma respuesta:

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.

Actividad 4: Ramping Maniobras


learn.parallax.com/print/book/export/html/216 15/48

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

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

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.

Actividad 5: Simplificar la navegacin con funciones


Una manera conveniente de ejecutar maniobras pre-programadas es con funciones. En el siguiente captulo, el BOE Shield-Bot tendr que realizar maniobras para evitar obstculos, y un ingrediente clave para evitar obstculos est ejecutando maniobras preprogramadas. Las c o n f i g u r a c i nd efunciones y bucles estn incorporadas en el lenguaje Arduino, pero se pueden aadir ms funciones que realizan tareas especficas para su boceto. Esta actividad presenta cmo agregar ms funciones a su dibujo, as como algunos enfoques diferentes para la creacin de maniobras reutilizables con esas funciones.

Minimal Funcin de llamada


El siguiente diagrama muestra parte de un boceto que contenga una funcin nombrada e j e m p l oaade al final, por debajo de l afuncin de bucle. Comienza y se nombra con la definicin de la funcin v o i de j e m p l o( ). El parntesis vaco significa que no es necesario ningn parmetro para hacer su trabajo, y el v a c oindica que no devuelve un valor (vamos a ver las funciones que devuelven valores en un captulo posterior). Las llaves { }que siguen esta definicin contienen el e j e m p l ode bloques de funcin de cdigo.
learn.parallax.com/print/book/export/html/216 18/48

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 ) ;

v o i dl o o p( ){ } v o i de j e m p l o( )//E s t ae sl af u n c i n { S e r i a l . p r i n t l n( " D u r a n t ee j e m p l ol l a m a d aal af u n c i n . " ) ; 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

Funcin de llamada con parmetros


Recuerde que una funcin puede tener uno o ms parmetros de los datos que la funcin recibe y utiliza cuando se le llama. El siguiente diagrama muestra el p a s od ela funcin del siguiente croquis. Se declara con t o n ov o i d( i n tH z ). Recuerde del captulo 1, Actividad # 3 [3] que las tiendas de Arduino valores de las variables en los diferentes tipos de datos, con i n tespecifica un valor entero en el rango de -32.768 a 32.767. Aqu, el trmino i n tH zentre parntesis define un parmetro para el p a s od ela funcin, en este caso, se declara una variable local H zde tipo de datos i n t. Las variables locales, recuerde, se declaran dentro de una funcin, y slo pueden ser vistos y utilizados dentro de esa funcin. Si se crea una variable local como un parmetro en la declaracin de la funcin, como sin efecto de tono (int Hz) est aqu, inicializa al pasar un valor a la misma cada vez que se invoca la funcin. Por ejemplo, la llamada d ep a s o( 3 5 0 0 )pasa el valor entero de 3500 a la a f i n a c i nde la funcin H zi n tparmetro. As, cuando la primera llamada a la funcin d et o n ose hace con e lt o n o( 3 5 0 0 ), el valor entero 3500 se pasa a H z. Esto inicializa H zcon el valor 3500, para ser utilizados durante el viaje a travs del p a s od ebloque de cdigo de la funcin. La segunda llamada, e lt o n o( 2 0 0 0 ), inicializa H za 2000, durante el segundo viaje de boceto a travs del p a s od ebloque de cdigo de la funcin.

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

S e r i a l . p r i n t l n( " J u g a rt o n od et o n om sa l t o. . . " ) ; t e r r e n od ej u e g o( 3 5 0 0 ) ,f u n c i nd el l a m a d a//p i t c hp a s aa lp a r m e t r o3 5 0 0H z d e l a y( 1 0 0 0 ) ; S e r i a l . p r i n t l n( " J u g a rt o n od et o n om sb a j o. . . " ) ; t e r r e n od ej u e g o( 2 0 0 0 ) ,f u n c i nd el l a m a d a//p i t c hp a s aa lp a r m e t r o2 0 0 0H z } d e l a y( 1 0 0 0 ) ;

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.

Ponga Maniobras en las funciones


Vamos a tratar de poner el a v a n c e, t u r n L e f t, t u r n R i g h ty a t r a s a d a srutinas de navegacin dentro de funciones. He aqu un ejemplo: Ejemplo Sketch - MovementsWithSimpleFunctions Introduce, guarda, y subir MovementsWithSimpleFunctions. //R o b t i c ac o ne lE s c u d oB O E-M o v e m e n t s W i t h S i m p l e F u n c t i o n 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 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 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 } 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
24/48

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.

Actividad 6: Funcin de Maniobras personalizada


El ltimo dibujo, MovementsWithSimpleFunctions, era una especie de largo y torpe. Y, las cuatro funciones que utiliza para conducir el robot son casi la misma. El boceto TestManeuverFunction aprovecha las similitudes de los de funcin y agiliza el cdigo. TestManeuverFunction tiene una sola funcin para el movimiento llamado m a n i o b r aque acepta tres parmetros: s p e e d L e f t, s p e e d R i g h ty m s T i m e: 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 )
learn.parallax.com/print/book/export/html/216 26/48

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

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 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

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.

Actividad 7: Secuencias de maniobra con matrices


Algunas aplicaciones de robtica requieren secuencias de maniobras. Usted realmente va a ver algunos ejemplos de secuencias simples en el prximo captulo, cuando el BOE Shield-Bot detecta que se ha topado con un obstculo. En ese punto, se ha de realizar copias de seguridad y, a continuacin, encienda antes de tratar de seguir adelante de nuevo. Esa es una simple secuencia con dos maniobras. Otro ejemplo es la navegacin pasillo. El BOE Shield-Bot podra tener que encontrar un corredor y luego ir a travs de una secuencia de maniobras para entrar en ella, antes de buscar las paredes del pasillo. Otras secuencias pueden ser ms elaborado. Un ejemplo de una larga y compleja maniobra sera para un concurso de baile robtico. (Concursos de baile Robot han ido ganando popularidad en los ltimos aos.) Para bailar una cancin completa, el robot puede ser que necesite una muy larga lista de maniobras y los tiempos de maniobra. Si su boceto necesita almacenar listas de maniobras, la matriz de variables es la mejor herramienta para el almacenamiento de estas listas. Esta actividad presenta las matrices con algunas aplicaciones musicales sencillos utilizando la bocina piezoelctrica. A continuacin, se examinan dos enfoques diferentes para el uso de matrices para almacenar secuencias de maniobras para la reproduccin, mientras que el boceto se est ejecutando.

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 ...

El uso de elementos de matriz


El uso de elementos de matriz
Un elemento de la matriz no necesariamente tienen que ser copiados a otra variable de usar su valor. Por ejemplo, su esbozo apenas pudo imprimir el valor de la n o t a[ 3 ]al Monitor de serie como esto: S e r i a l . p r i n t( n o t a[ 3 ] ) ; Dado que los valores de la matriz son las notas musicales, puede ser que tambin jugamos esta nota en piezobocina el BOE de Shield-Bot! He aqu cmo: t o n o( 4 ,n o t a[ 3 ] ,5 0 0 ) ; Ejemplo Sketch - PlayOneNote He aqu un ejemplo que muestra el valor de un elemento de la matriz individual en el Serial Monitor, y tambin utiliza ese valor para hacer bocina piezoelctrica el BOE de Shield-Bot de una nota musical. Introduce, guarda, y subir PlayOneNote a la Arduino. Abra el Monitor de serie, tan pronto como el dibujo se realiza la carga. Compruebe que el monitor de serie muestra "nota = 1397". Compruebe que el altavoz emite un tono. Modifique el boceto para escuchar e imprimir el valor de 1568 mediante n o t a[ 4 ]. Pon a prueba tu dibujo modificado. //R o b t i c ac o ne lE s c u d oB O E-P l a y O n e N o t e //M u e s t r ayr e p r o d u c eu ne 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 ) ;
learn.parallax.com/print/book/export/html/216 31/48

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

Navegacin con matrices


Recuerde que la funcin de maniobra de la ltima actividad? Aqu hay tres conjuntos de valores, uno para cada parmetro de la m a n i o b r ad ela funcin. Juntos, representan la misma secuencia hacia adelante-izquierda-derecha-hacia atrs-stop que hemos estado haciendo a travs del captulo. //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 } ; Un bosquejo puede utilizar este cdigo en una de sus funciones para ejecutar todas las maniobras: //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 35/48

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

Las matrices de caracteres y switch de los casos


El ltimo ejemplo de esta actividad un boceto para realizar maniobras utilizando una lista de caracteres en una matriz. Cada personaje representa una determinada maniobra, con 200 ms de tiempo de ejecucin. Dado que el tiempo de ejecucin se fija, no es tan flexible como el ltimo enfoque, pero seguro que hace que sea fcil de construir una secuencia rpida de maniobras. f= hacia adelante b= hacia atrs l= left r= derecha s= parada

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

} d e l a y( 2 0 0 ) ;//E j e c u t a rd u r a n t e0 , 2s Tu Turno - Aadir elementos de matrices y Casos

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?

Resumen del captulo 4


Este captulo fue todo sobre la navegacin de robots, experimentando con muchos enfoques de programacin diferentes y empleando algunas robtica y habilidades de ingeniera: Programacin La simplificacin de la navegacin mediante la creacin de funciones personalizadas para el cdigo de maniobra de uso frecuente, y la forma de llamar a esas funciones Cmo utilizar contado para bucles con incrementos de los pasos en el cdigo de maniobra Qu parmetros son, y cmo escribir funciones y llamadas a funciones que los utilizan Cmo una variable local se puede crear como un parmetro en una declaracin de la funcin Cmo declarar, inicializar y utilizar el lenguaje Arduino i n ty c a r a carrays, tomando ventaja de la biblioteca de Arduino s i z e o ffuncin Cmo administrar el control de flujo del programa, utilizando d o w h i l ey s w i t c h/c a s e Cmo utilizar el operador de incremento posterior ( + +) en los bucles condicionales Cmo utilizar el operador de comparacin no igual ( ! =) como condicin en un bucle Escribir bocetos para jugar una serie de notas sobre la bocina piezoelctrica
learn.parallax.com/print/book/export/html/216 41/48

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

//A r c oh a c i al 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 6 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 4 3 8 ) ;//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( 2 5 5 0 0 ) ;//. . .p o r2 5 , 5s 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 { //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

You might also like