Home

Guía del usuario 3pi

image

Contents

1. Este producto no est dise ado para jugar y no debe utilizarse en aplicaciones en las que el mal funcionamiento del producto podr a causar lesiones o da os Por favor tome nota de estas precauciones adicionales e No intentes programar el 3pi con las bater as descargadas puedes inutilizarlo de forma permanente Si le compras bater as recargables comprueba que est n cargadas El 3pi puede comprobar su nivel de carga de bater a En los programas de ejemplo hemos previsto esta habilidad y deber as incluirla en tus programas para conocer el momento de realizar la recarga e El robot 3pi robot contiene plomo no lo laves ni le eches l quidos e Est dise ado para trabajar en interiores y peque as superficies deslizantes e Si lo pones en contacto con superficies met licas la PCB puede estar en contacto y producirse cortocircuitos que da ar an el 3pi e Dado que la PCB y sus componentes son electr nicos tome precauciones para protegerlo de ESD descargas electrost ticas que podr an da ar sus partes Cuando toques el 3pi principalmente en ruedas motores bater as o contactos de la PCB puedes haber peque as descargas Si manejas el 3pi con otra persona primero toca tu mano con la suya para igualar las cargas electrost ticas que pod is tener y estas no descarguen al 3pi e Si quitas la LCD aseg rate de que est apagado el 3pi y que la pones en la misma direcci n que estaba encima del extremo de la bater a ya que podr
2. R S 4 straight or B back void turn chat dir switch dir case L Turn left set motors 80 80 delay_ms 200 break case R Turn right set_motors 80 80 delay ms 200 break Case B Turn around set motors 80 80 delay_ms 400 break case S Don t do anything break 1 00 J30U0 FWN E H h h h h h rR FF I 00 30014 GUNROM N NM N LN WN Ho NNN OY U A 27 La primera l nea del fichero est escrita para el 3pi contiene el fichero de cabecera que permite el acceso a las funciones de la librer a Pololu AVR Dentro de turn se usan funciones de librer a como delay_ms y set_motors para mejorar los giros a izquierda giros a derecha y salidas de curvas en U Los giros rectos tambi n son manejados por esta funci n aunque estos no obligan a tomar decisiones La velocidad del motor y los tiempos para los giros son los par metros necesarios que necesitamos para ajustar el 3pi a medida que se trabaja en hacer las soluciones m s r pidas de los laberintos estos ser n algunos de los n meros necesarios para el ajuste Para acceder a las funciones necesitas los ficheros header file extensi6n h como turn n Este fichero de cabecera solo contiene una l nea l voia turn char dir Esta l nea declara la funci n turn sin incluir una copia del c digo Para acceder a la declaraci n cada fichero C necesita llamar a
3. kai E VO A AW ZO Ufa alla op kof Si e A 0 Aid as ASIA AA a a niiiiiiiti PRI MENN green user LED x A foo al sa ee red user LED on pin PD 4 on pin PD1 Almega168 user microcontroller potentiometer running at 20005 20 MHz LCD contrast adjustment blue power LED blue power LED tied to 9 25 V VBoost tied to 5 V VBat light weight plastic ball caster Circuito de seguimiento de linea Circuito de laberinto de linea Di metro gird 6 152 mm MWN ee Doblar p apel es ff Ancho vias 3 8 a 3 4 10 19 mm
4. En este ejemplo sin paridad 8 bits de datos y un stop bit 115200 N 8 1 Los comandos ejecutados est n compuestos de un solo byte de comando seguido por cero o m s bytes de datos Para hacer m s f cil la diferenciaci n entre byte de comando y byte de datos los comandos est n todos en la gama de 0x80 0xFF 1xxxxxxx mientras que los bytes de datos se encuentran en la gama 0x00 0x7F Oxxxxxxx Es decir los comandos tienen el s ptimo bit a 1 y los datos est n a 0 Algunos comandos resultan del envi de datos para el control del 3pi Para los comandos en donde los enteros se env an de vuelta el byte menos significativo es enviado primero little endian Si comandos o bytes de datos se detectan err neos el programa emite un pitido y muestra un mensaje de error en la pantalla de la LCD Esto significa que si est s utilizando el kit de expansi n sin cortes probablemente debas eliminar los comandos relacionados con la pantalla LCD relacionados antes de cargar el programa en tu 3p1 Los siguientes comandos son reconocidos por el programa Comando Byte Bytes Descripci n Comando datos Respuesta Env a el nombre y la versi n Ej 3p11 0 Este comando siempre por los motores a 0 y para el PID seguimiento de l nea si est activo por lo que wo lt a O OxB1 battery millivolts play music 2 reset calibration es til como comando de inicializaci n Lee los cinco sensores IR y manda los valores en secu
5. Sl return 52 53 54 Entre el c digo PID y la detecci n de intersecciones en la actualidad hay alrededor de seis par metros mas que se podr an ajustar Hemos recogido aqu los valores que permiten a 3pi resolver el laberinto con seguridad control de velocidad intento de aumentar la velocidad y que se ejecute con rapidez a los muchos de los problemas que tendr a que manejar con un c digo complicado Poner los ficheros C y los ficheros de cabecera en tu proyecto es f cil en AVR Studio En la columna de la izquierda de la pantalla puedes ver varias opciones para los ficheros de Source Files y Header Files Bot n derecho en cada uno y tienes la opci n de remover o a adir a la lista Cuando compiles el c6digo AVR Studio compila automaticamente todos los ficheros del proyecto 8 c Mano izquierda contra el muro Una estrategia b sica para solucionar laberintos se llama left hand on the wall Imag nate caminando por un laberinto de verdad uno t pico rodeado de muros y pones tu mano izquierda sobre el muro para seguir el camino varias veces Puedes girar a izquierda siempre que sea posible y solo puedes girar a derecha en una intersecci n Algunas veces cuando vas a parar a un callej n sin salida debes girar 180 y retornar por donde has venido Supongamos que a lo largo del trayecto no hay bucles tu mano viajar a a lo largo de cada tramo del muro de la misma manera y al final encontrar as
6. 100 Always wait for the button to be released so that 3pi doesn t start moving until your hand is away from it wait for button release BUTTON B delay ms 1000 Auto calibration turn right and left while calibrating the sensors for counter 0 counter lt 80 counter if counter lt 20 counter gt 60 set_motors 40 40 else set motors 40 40 This function records a set of sensor readings and keeps track of the minimum and maximum values encountered The IR EMITTERS ON argument means that the IR LEDs will be turned on during the reading which is usually what you want calibrate line sensors IR EMITTERS ON Since our counter runs to 80 the total delay will be 80 20 1600 ms delay_ms 20 set_motors 0 0 Display calibrated values as a bar graph while button_is_pressed BUTTON_B Read the sensor values and get the position measurement unsigned int position read_line sensors IR EMITTERS ON Display the position measurement which will go from 0 when the leftmost sensor is over the line to 4000 when the rightmost sensor is over the line on the 3pi along with a bar graph of the sensor readings This allows you to make sure the robot is ready to go clear print Long position lcd_goto_xy 0 1 display_readings sensors delay_ms 100 wait_for_button_release BUTTON_B clear print Go Play music and wait for it to finish before we start driving pla
7. AVR gt Connect para conectar el programador Para el Orangut n Programmer las opciones por defecto STK500 o AVRISP y Auto funcionan bien ahora clic en Connect y la ventana de programaci n AVRISP aparece Puedes usar AVRISP para leer test nex dentro la memoria del 3pi En este caso clic IM en la secci n Flash y selecciona el fichero test hex AVREP in IP mode with ATmegal s E que compilaste antes Ten en cuenta que man Program Fuses LockBts Advanced HW Settings HW info Auto Device primero tienes que ir al directorio del TA se Device proyecto default fichero hex Ahora clic en JV Erase device before flash programming Iv Verify device after ing de la zona Flash y el c digo se gt E grabar dentro del Atmel del3pt a RESE Y Recuerda la tecla Program de la zona Flash Program veiy Read y en la ventana inferior se muestra el resultado EEPROM Programando el 3pi desde AVR Studio G mtx Program Verify Read Si tu 3pi se ha programado debes escuchar una e S a ELF Production File Format corta canci6n y ver el mensaje Hello en la OO enn pantalla LCD y los LEDs parpadeando Si oyes Sor ee la melodia y ves las luces parpadeando pero no i aS eee aparece nada en la pantalla asegurate de que esta correctamente conectada a la 3pi o intenta Programming FLASH OK ajustar el contraste con el micro potenci metro ASH soten is eaualto fle ok a q
8. IR en l nea mientras que el VCC es para el microcontrolador y las se ales digitales Usando el Vboost para los motores y sensores obtenemos tres ventajas sobre los t picos robots que trabajan con bater as directamente e Primero el voltaje alto se reserva para los motores e Segundo mientras el voltaje est regulado los motores trabajan a la misma velocidad aun cuando las bater as oscilen entre 3 5 y 5 5 voltios Esto tiene la ventaja de que al programar el 3pi puedes calibrar los giros de 90 varias veces a pesar de la cantidad de tiempo que esto lleva consigo e Tercero a 9 25 V los cinco led IR conectados en serie consumen una cantidad m s peque a de energ a Puedes alternar la conexi n desconexi n de los IR para ahorrar energ a Una cosa interesante acerca de este sistema de energ a es que en lugar de agotarse progresivamente como la mayor a de los robots el 3pi funcionar a m ximo rendimiento hasta que de repente se para Esto puede sorprender pero al mismo tiempo podr a servir para monitorizar la tensi n de la bater a e indicar la recarga de las bater as Un circuito simple de monitorizaci n de la bater a se encuentra en el 3p1 Tres resistencias como muestra el circuito comportan un divisor de tensi n de 2 3 el voltaje de las bater as Este conectado a una entrada anal gica del microcontrolador y mediante la programaci n produce que por ejemplo a 4 8 V el pin ADC6 tenga un nivel de 3
9. S un atr s B y combinada con la acci n siguiente quedar a L R 6 E L B lL t 6 t B l como LBL que se reduce a un simple S Recorte del tramo sin salida final lo que nos deja el camino m s corto desde el principio hasta el final El ltimo trozo es una secuencia del tipo SBL que podemos reducir a una R Nuestra ltima acci n queda en una R y el trayecto de ha reducido de forma considerable del principio al final La lista de acciones quedar de esta manera L n LS a a LSB LSBL gt LR recortado cn LRB LRBL gt LB recortado LBL gt S recortado SB SBL gt R recortado S B L R SA OO m INS 8 f Mejorar el c digo de soluci n del laberinto Hemos ido por las partes m s importantes del c digo las otras piezas de c digo como la funci n display_path la secuencia de puesta en marcha y calibraci n etc se pueden encontrar con todo lo dem s en la carpeta examples 3pi mazesolver Despu s de tener el c digo trabajando y de entenderlo bien deber as tratar de mejorarlo o adaptarlo a tu robot para ser tan r pido como el viento Hay muchas ideas que se pueden trabajar para descubrir y mejorar el c digo Incrementar la velocidad de seguimiento de la l nea Mejorar las variables PID Incrementar la velocidad de giro Identificar situaciones cuando al robot se pierde para reencontrar la l nea Ajuste de la velocidad en base a lo que se viene por ejemplo cond
10. analogica jumpered to sensors IR LEDs driving low turns off emitters y I O digital ADC input channel 5 ADC5 Entrada dedicadaljumpered to 2 3rds of battery voltage ADC input channel 6 ADC6 analogica ADC6 Entrada dedicada jumpered to user trimmer potentiometer ADC input channel 7 ADC7 analogica ADC7 Boton de RESET internally pulled high active low digital I O disabled by default sensor reflexion 10 Informacion para su expansion 10 a Programa serie para esclavo La librer a Pololu AVR ver secci n 5 a viene con un ejemplo de programa esclavo serie para 3pi en libpololu avrlexamples3pi serial slave y el correspondiente programa maestro de comunicaci n serie en libpololu avr examples 3pi serial master Este ejemplo muestra c mo utilizar un bucle anidado en modo SERIAL CHECK para recibir e interpretar un conjunto simple de comandos Los comandos de control de diversas funciones del 3pi por lo que es posible utilizar el 3p1 como base tonta controlada por otro procesador situado en la placa de ampliaci n Es f cil a adir m s comandos o adaptar la biblioteca a trabajar en una placa diferente La documentaci n completa de las funciones serie usadas se encuentra en Section 9 de la Pololu AVR Library Command Reference Este programa esclavo recibes datos v a serie en el port PDO RX del 3pi y transmite respuestas si es necesario en el port PD1 TX a velocidad de 115 200 baudios nivel de protocolo serie TTL
11. as estropear la LCD o el 3p1 Es posible tener la LCD sin iluminaci n o parada optional user LEDs on pins PD1 and PD7 4 Empezar con tu robot 3pi battery charger connector piezo buzzer s in P Para comenzar con tu 3pi solo debes IA sacarlo de la caja ponerle pilas y e 4 AAA encender El 3pi se inicia con un programa batteries demo que te muestra el funcionamiento de ot included 7 sus caracteristicas Foe Los siguientes apartados de daran O informaci n necesaria para poder hacer optional i power LED que funcione tu 3pi 30 1 Micro Metal Gearmotors Caracter sticas del robot Pololu 3pi ISP programming connector pin 1 4 a Que necesitas removable 8x2 user pushbuttons character LCD on pins PB1 PB4 and PB5 Son necesarios para empezar s gt integrated QTR RC reflectance sensors e 4 pilas AAA Cualquier pila AAA on digital pins PCO PC4 puede hacerlo funcionar pero a recomendamos las de NiMH ANE iio 34 A bed FE es recargables f ciles de comprar en greenuserteo A DASS mais on pin PD7 on pin PD1 Pololu u otro comercio Si usa pilas recargables necesitaras un cargador de bater as Los cargadores dise ados para mierescntralter conectar un pack de bater as externos ingat NE enh 35 pueden usarse con el puerto cargador EE AAA co contras del 3pi r A AA adjustment e AVR Conector ISP programador de 6 pin Las caracter sticas del 3pi y el 2 microcon
12. characters but we won t use them serial j receive blocking char tmp buffer 10 100 reset calibration 99 void slave reset calibration 100 RR H A t A H A H A H A H A H A 101 102 103 104 LOS 106 107 108 LOS 10 11 12 13 14 Io l6 Lrs 18 19 20 121 122 123 124 125 126 127 128 KAN 6 130 131 1324 133 134 Le 136 137 138 Ls 140 141 142 143 144 145 146 1477 143 149 150 151 152 T534 154 LoS 156 Tofa 158 La 160 161 TOZ 1603 164 165 166 167 168 169 170 171 172 serial send blocking NxB5 1 j if talibrace void slave auto calibrate j int Emp butter 1 5 serial send blocking NxBA 1 serial receive blocking char tmp_buffer 1 10000 sets up the pid constants on the 3pi for line following void slave set pid char max speed char p num char p den char d num j char string 6 xBB string 1 max speed string 2 p num string 3 p_den string 4 d_num string 5 d_den serial send _blocking string 6 stops the pid line following void slave stop pid serial send blocking NxBC 1 j f lear the slave L D void slave_clear serial send blocking NxB7 1 j print to the slave LED void slave_print char string j s rial send blocki
13. expansi n se ajuste bien con la base 4 Con los tornillos sujet ndolo todo ahora puedes soldar los conectores hembras a la base y los conectores macho a la PCB de expansi n Una vez que todo est soldado puedes quitar los tornillos y sacar la placa de expansi n fuera de la base ser algo parecido a lo vemos en las im genes Despu s de ensamblar tendr s un conector hembra de 2x1 a la izquierda Puede usar esto para crear tu propio punto de carga de bater a en el puerto de expansi n PCB Recomendamos ensamblar la 3pi y el kit de expan si n antes soldar nada esto asegurar que una vez hechas las soldaduras la placa de expansi n se alinea correctamente con la base Puedes montar tu kit de Importante la placa de expansi n se monta con la serigraf a hacia arriba 3 Pon el separador de nylon entre la base y la O 1 expansi n de PCB de manera que el montaje este en l nea con el agujero en la base Inserta un tornillo desde la parte inferior de la base a trav s del agujero de monta je el espaciador y el agujero en la placa de expansi n Sosteniendo la cabeza del tornillo Str contra la base gira la tuerca al otro lado pero sin apretar del todo Repite este proceso para los tres tornillos restantes y a continuaci n apretarlos Called Leds iii Mi m 1 Hee AA gE ERGERE OA T i D L el A ll w l n it n n 1 n 1 n m n A r n a L L Eo L L Eig al r al it T
14. hace compatible con la plataforma de desarrollo Arduino Las herramientas gratuitas de desarrollo en C y C as como un extenso paquete de librer as que pueden trabajar con el hardware que lleva integrado est n disponibles Tambi n hemos dise ado simples programas que muestran como trabajan los diferentes componentes del 3pi y que puedes mejorar o crear nuevo c digo para el seguimiento de l nea y laberintos Debes tener en cuenta que es necesario un PROGRAMADOR AVR ISP externo como el USB AVR Programmer http www pololu com catalog product 1300 para programar el robot 3pi 2 Contactando con Pololu Puedes visitar la pagina de 3pi http www pololu com catalog product 975 para informaci n adicional fotos videos ejemplos de c digo y otras referencias Nos encantar a saber de tus proyectos y sobre tu experiencia con el 3p1 robot Puedes ponerte en contacto con nosotros directamente http www pololu com contact O en el foro http forum pololu com Cu ntanos lo que hicimos bien lo que se podr a mejorar lo que te gustar a ver en el futuro o compartir tu c digo con otros usuarios 3pi 3 Advertencias de seguridad y precauciones en su manipulaci n El robot 3pi no es para ni os Los m s j venes deben usar este producto bajo supervisi n de adultos Mediante el uso de este producto te compromete a no se alar a Pololu como responsable por cualquier lesi n o da os relacionados con el uso incorrecto del mismo producto
15. settings We never set either motor 43 to a negative value 44 if power difference gt max speed 45 power difference max speed 46 if power difference lt max speed 47 power_difference max_speed 48 if power difference lt 0 49 set motors max speed power difference max speed A A A A A A A A A A H H H H H H H H H H H 50 Fls 52 open 54 Dok 56 Fla JOU Do 60 6l 62 G35 64 65 66 OF 03 69 70 TLs V La 74 AD LO Dl 78 LAN 80 aL 82 Se 84 85 86 sae 88 89 90 9T IZ 93a 94 FI 96 Fa 38 99 00 01 02 03 04 05 06 07 08 09 NO 00 300 0H GQ N K RR n h RRR rR RP onANnanA OF WNE OO else set motors max speed max speed power difference A global ring buffer for data coming in This is used by the read next byte and previous byte functions below char buffer 100 A pointer to where we are reading from unsigned char read_index 0 Waits for the next byte and returns it Runs play check to keep the music playing and serial_check to keep receiving bytes Calls pid_check to keep following the line char read next byte while serial get received bytes read index serial check play check pid check takes some time only run it if we don t have more bytes to process if serial get received bytes read index pra check char ret buffer re
16. the trimpot value 0 1023 void send_trimpot int message 1 message 0 read trimpot serial send blocking char message 2 Sends the batter voltage in millivolts void send battery millivolts int message l message 0 read battery millivolts serial send blocking char message 2 Drives ml forward void ml_forward char byte read next byte if check_data_byte byte EETUEN set mi speed byte 127 255 byte 2 Drives m2 forward void m2_forward char byte read next byte if check_data_byte byte return set_m2_speed byte 127 255 byte 2 Drives mi backward void mi backward char byte read next byte if check data byte byte return set mi speed byte 127 255 byte 2 Drives m2 backward void m2 backward char byte read next byte if check data byte byte 120 121 T2 2 TAS 124 ANE T26 I LADA 129 130 ES 132 133 134 T35 ASON dle arias 138 139 140 141 T42 143 144 145 146 147 143 149 150 151 1 52 T53 154 LO 156 157 158 T59 160 161 162 163 164 EGZ 1 66 FO 168 16 170 EFL E2 ES 174 T73 LOS LITS return set_m2_speed byte 127 255 byte 2 A buffer to store the music that will play in the background char misie buffet LOU Plays a musical sequence void do_pla
17. turn a adiendo la l nea siguiente l include turn h Ten en cuenta los par ntesis usados Esto significa que el compilador C usa este fichero de cabecera en el directorio del proyecto en lugar de ser un sistema de ficheros de cabecera como JO l Recuerda siempre al crear c digo con funciones de poner el fichero de cabecera Si no tienes otra soluci n crea diferente copias separadas de cada fichero de c digo que incluya las cabeceras El fichero follow segment c tambi n contiene una simple funci n follow segment la cual lleva al 3pi recto a lo largo de una l nea de segmento mientas busca una intersecci n o un fin de l nea Esta es casi el mismo c digo que en el seguimiento de l nea analizado en la secci n 6 pero con m s controles para las intersecciones y los extremos de l nea Aqu est la funci n 1 void follow segment 2 3 int last proportional 0 4 long integral 0 Jy while 1 6 7 Normally we will be following a line The code below is 8 similar to the 3pi linefollower pid example but the maximum 9 speed is turned down to 60 for reliability 10 Get the position of the line 11 unsigned int sensors 5 12 unsigned int position read_line sensors IR EMITTERS ON 13 The proportional term should be 0 when we are on the line 14 int proportional int position 2000 15 Compute the derivative change and integral sum of the 16 posi
18. xBx podemos reemplazar los tres giros con un giro que sea el Angulo total 90 180 90 360 eliminando el giro U y acelerando la soluci n El c digo ser 1 Path simplification The strategy is that whenever we encounter a 2 sequence xBx we can simplify it by cutting out the dead end For 3 example LBL gt S because a single S bypasses the dead end 4 represented by LBL 5 void simplify _path 6 Vs only simplify the path if the second to last turn was a B 8 if path length lt 3 path path length 2 B W return 0 int total_angle 0 TL int i 12 for 1 1 1 lt 3 1 E As switch path path_length 1 Los 16 case R 17 total_angle 90 18 break 19 case L 20 total_angle 270 21 break 22 case B 23 total_angle 180 break Get the angle as a number between 0 and 360 degrees total_angle total_angle 360 Replace all of those turns with a single one switch total angle WWNNNN DN DN RO 0 Jor os 32 case 0 coe path path_length 3 S34 34 break JI case 90 36 path path_length 3 R S12 break 38 case 180 39 path path_length 3 B 40 break 41 case 270 42 path path_length 3 L 43 break 44 45 The path is now two steps shorter 46 path_length 2 47 Un punto interesante de este c digo es que hay algunas secuencias que nunca se encontrar n con u
19. 2V Usando una conversi n anal gica de 10 bit un valor de 5V se lee como 1023 y un valor de 3 2 se lee como 655 Para convertir el actual estado de la bater a multiplicamos 5000mVx3 2 y dividimos por 1023 Para ello disponemos de la funci n read battery millivolts funci n que puede promediar diferentes lecturas y devolver el resultado en mV unsigned int read battery millivolts return readAverage 6 10 5000L 3 2 1023 j 5 c Motores y engranajes El motor en una m quina que convierte la energ a en tracci n Hay diferentes tipos de motores pero el m s importante para rob tica es el motor DC de escobillas y que usamos en el 3p1 El t pico motor DC contiene imanes permanentes en el exterior y bobinas electromagn ticas montanas en el eje del motor Las escobillas son piezas deslizantes que suministran corriente desde una parte del bobinado a la otra produciendo una serie de pulsos magn ticos que permiten que el eje gire en la misma direcci n El primer valor usado en los motores es la velocidad representada en rpm revoluciones por minuto y el par de fuerza medido en kg cm o en oz in onzas pulgadas Las unidades de par muestran la dependencia entre fuerza y distancia Multiplicando el par y la velocidad medidos al mismo tiempo encuentras la potencia desarrollada por el motor Cada motor tiene una velocidad m xima sin resistencia aplicada y un par m ximo cuando el motor esta completamente parado Llamamos a
20. 60 60 while get ms 750 calibrate line sensors IR EMITTERS ON set motors 60 60 while get ms 1000 calibrate line sensors IR EMITTERS ON sek Motors 0 0 serial send blocking Yc l Turns on PID according to the supplied PID constants void set_pid unsigned char constants 5 178 T79 180 ESL 182 183 184 LeS 186 187 188 18 Ou 190 IRSA 1 9 2 103 194 195 196 LIT 198 199 200 201 202 203 204 VA SESI 206 207 208 209 210 AS LA ZAN 2E 214 215 216 ZE hs 218 ZL 220 221 222 LS 224 225 226 221 228 229 230 231 232 ZIJ 234 PAS AS 236 237 230 ASI 240 241 242 243 244 ZA 246 247 248 249 250 251 AS AD 204s 255 256 Zod unsigned char i for i 0 i lt 5 i constants i read next byte if check data byte constants i return j make the max speed 2x of the first one so that it can reach 255 max speed constants O 127 255 constants 0 2 set the other parameters directly p num constantsili p_den constants 2 d num constants 3 d_den constants 4 enable pid pid_enabled 1 Turns off PID void stop_pid set motors 0 0 pid enabled 0 FILATELIA AAA TIL EE TREATED OTE int main pololu_3pi_init 2000 play mode PLAY_CHECK clear print Slave star
21. 76 void initialize 77 78 unsigned int counter used as a simple timer 79 unsigned int sensors 5 an array to hold sensor values 80 This must be called at the beginning of 3pi code to set up the 81 sensors We use a value of 2000 for the timeout which 82 corresponds to 2000 0 4 us 0 8 ms on our 20 MHz processor 83 pololu_3pi_init 2000 84 load_custom_characters load the custom characters 85 Play welcome music and display a message 86 print from program space welcome linel 87 L d gro sy 0 1 88 print from program space welcome line2 89 play from program space welcome 90 delay ms 1000 91 clear 92 print from program space demo name linel 03 lcd_goto_xy 0 1 94 print from program space demo name line2 9 5r delay_ms 1000 Sher Display battery voltage and wait for button press 97 while button_is_pressed BUTTON_B 98 99 int bat read battery millivolts 100 clear T23 124 125 126 kak 128 129 130 Teis 132 133 134 Las 136 LS 138 EST 140 141 142 143 144 145 146 147 143 149 150 TSL 152 LO 154 155 T56 kos 158 159 160 161 162 163 164 ToS t66 1 67 168 T69 170 A ART E TA LP Si 174 175 LAG EFE 1784 ETI 180 EP j E print_long bat print mV lcd_goto_xy 0 1 print Press B delay_ms
22. Como trabaja el 3pi 5 a Bater as Introducci n al funcionamiento de las bater as La potencia del sistema del 3pi empieza con las bater as por eso es importante conocer como trabajan las bater as La bater a contiene unos elementos qu micos que reaccionan moviendo electrones desde el positivo al terminal negativo El tipo m s conocido es la pila alcalina compuesta de zinc y manganeso en una soluci n de hidr xido pot sico Cuando se descargan completamente deben ir al reciclado Para el 3pi recomendamos las bater as de n quel manganeso NiMH que pueden recargarse una y otra vez Estas bater as realizan una reacci n diferente a las alcalinas y no es aqu donde vamos a explicarlo lo importante es conocer como podemos saber su estado medici n con unos simples n meros Lo primero a conocer es que la cantidad de electrones que se mueven de un terminal a otro se mide en Voltios V o diferencia de potencial En las bater as de NIMH es de 1 2V Para entender la fuerza de la bater a es necesario conocer cuantos electrones circulan por segundo esto es intensidad que se mide en amperios A Una corriente de 1A equivale a 6x10 electrones saltando por segundo Un amperio es ak la fuerza que un motor de tama o mediano puede necesitar y ser a la corriente que necesitan dar las peque as pilas AAA voltage V Para cualquier bater a en funcionamiento el voltaje suministrado 00 i a se reduce con el tiempo bajando hasta
23. LCD Up to 8 44 characters can be loaded we use them for 7 levels of a bar graph 45 void load custom characters 46 47 lcd load custom character levels 0 0 no offset e g one bar 48 lcd load custom character levels 1 1 two bars 49 lcd_load_custom_character levels 2 2 etc 50 lcd_load_custom_character levels 3 3 Sls lcd_load_custom_character levels 4 4 52a lcd load custom character levels 5 5 BOG lcd load custom character levels 6 6 54 clear the LCD must be cleared for the characters to take effect DOs 56 This function displays the sensor readings using a bar graph S l void display_readings const unsigned int calibrated values 58 597 unsigned char i 60 for i 0 i lt 5 i 61 Initialize the array of characters that we will use for the 62 graph Using the space an extra copy of the one bar 63 character and character 255 a full black box we get 10 64 characters in the array 65 const char display_characters 10 4 0 0 1 2 3 4 5 6 255 66 The variable c will have values from 0 to 9 since 67 calibrated values are in the range of 0 to 1000 and 68 1000 101 is 9 with integer math 69 char c display_characters calibrated_values i 101 70 Display the bar graph character ILa print_charactero TQ 73 74 Initializes the 3pi displays a welcome message calibrates and TBs plays the initial music
24. NON y za ATmega168 microcontroller running at 20 MHz blue power LED tied to 9 25 V VBoost light weight plastic ball caster optional user LEDs on digital pins 1 and 7 battery charger connector 060000 mE pon as y AS 000000 piezo buzzer ah on digital pin 10 4 AAA 30 1 Micro Metal batteries Gearmotors not included seh OVO ooo Wolo loj o A 40650000 ta my pez optional power LED push on push off power button ICSP programming connector pin 1 removable 8x2 character LCD user pushbuttons on digital pins 9 12 and 13 red user LED on digital pin 1 user potentiometer LCD contrast adjustment blue power LED tied to 5 V VBat 9 Tablas de asignaci n de pins 9 a Tabla de asignaci n de PINS por funci n ATmegal68 Pin I O digitales CO AM quita jumper PC5 para liberar el pin 19 digital gna PINSON POU POS Entradas anal gicas quita los jumpers x3 analog inputs 5 7 PC5 ADC6 ADC7 motor 1 izquierdo control A y B digital pins 5 y 6 PD5 y PD6 motor 2 derecho control A y B digital pins 3 y 11 PD3 y PB3 oe sensores de reflexi n izquierda a der digital pins 14 18 PCO PC4 rojo E LED de usuario pin 1 T Ita pin 10 sensor IR LED control drive low to turn IR LEDsjdigital pin 19 through PC5 off jumper ICSP lienas de programacion x3 digital pins 11 12 y 13 PB3 PB4 PB5 9 b Tabla de asignacion de PINS por pin Pin funci
25. Pololu 3pi Robot User s Guide 2001 2009 Pololu Corporation Robot Pololu 3pi Gu a de usuario Nota Los robots 3pi que empiezan con el n mero de serie OJ5840 se suministran con el nuevo microcontrolador ATmega328P en el sitio del ATmega168 El n mero de serie est escrito en la etiqueta del c digo de barras situada en la parte posterior de la PCB del 3pi PCB El ATmega328 tiene esencialmente lo mismo que el ATmega168 pero va provisto del doble de memoria 32 KB flash 2 KB RAM y 1 KB de EEPROM por lo que el c digo escrito para uno puede trabajar con m nimas modificaciones en el nuevo ATmega328 la Pololu AVR Library http www pololu com docs 0J20 lleva soporte especifico para el ATmega328P IA aa ss es AAN TI v a ati v 2 za CON ONE Oe COM OUT w divin artik abi did ke pesar aaa a ABA e A eee ewes 2 3 Advertencias de seguridad y precauciones en su manipulaciG6n Z A Mesa COU PO OIE a a dad a 8 ti ew Oa A ae ARA oe ee Rae Bee 3 Aa Gue Ma Aco inh aa vin e SS er a a ee ee She a ee ee Ser eh a at e m d 3 Atado Enciende el SOs iid ak eee hee va svat ieee bead Je a ba eos Ce Ree ae a ee 4 4 c Funcionamiento del programa demo pre instalad0 o ooooooooooooooo 4 Or CSS LOS anO O esaeran al a AAA A AA AA 5 Oy CON read el SOL rs a ENEE a e a 5 ik JE OO a tie d oi dit tf kk ete tank eee eee eee ee eee fy eee ede At Ge es E Dw GOStLon do la ATOU destas jn wea he ae di fa a ER E AA R 6 DC Motores
26. U zi E w arala i al lalo slolere JENN COCE MOYEN L l Tete MOYEN SLOTS Mi DOC rera i arar i wrar a DOUCE araT L CHE Tote Tete Tate Iar eT ete THOLE arara y DOCK DOU TT i LOU DOCE w Tela w a ote gre 5 4 bal 5 aran arara aks are ara ala ele orm as are DDD T eTela OCR DE ale arara ala arara a aje ale YE ole eye ele aja eTete SLOTS ate Ls A pap ip qa se e O W MOU TOU MOU ale le re ar alec elo era ap Hrana CCE TI ala DC apa afara O CHO OU ala ala a ae apa ape Ta ele ate O OOOO OCK JO CE DU A KO CO L TeTe als alo j a e sh sensor locations circled in blue on digital pins jumper connects 16 IR sensor LEDs to 19 17 digital pin 19 jumper connects 2 3 of battery ae to analog input 6 LETAN a 4 A Aa E an on ace ni jumper connects a potentiometer to analog input 7 Buzzer prototyping space with power raja YA AN user connection Do Yn pads for the 3 f elle Flee m i POOE Gooooor jumpered l Os puonal user S no IDB D Y a L n yi n 5 T yan zO motor 1 AD kd r elles motor 2 ICSP programming user connection pads for the 2 y 4 unused digital OBower Rese connection pads for serial pins optional expansion integrated QTR RC reflectance sensors on digital pins PCO PC4 p
27. a328 tiene 2048 bytes de RAM lo que le da un poco mas de espacio para tus datos Una vez que el 3pi ha aprendido el laberinto el algoritmo de conducci n es esencial Si el robot va recto hasta la siguiente intersecci n aumenta la velocidad no debemos preocuparnos hasta que sepamos que tenemos un cruce que requerira un cambio de opci6n Es decir conducir el segmento actual a velocidad alta hasta que haya transcurrido un tiempo T momento en que reduciremos la misma hasta la velocidad normal y se encuentre con el siguiente cruce El valor T se calcula a partir de una funci n que previamente se ha medido en un segmento largo Para los segmentos cortos T es negativo y el 3pi circula a velocidad normal en estos tramos Para segmentos largos T es positivo y produce que el 3pi aumente su velocidad progresivamente hasta encontrar el cruce Nosotros usamos los valores de la funci n T en papel para estudiar y mejorar las variables Por lo general se podr an utilizar encoders para medir las longitudes de los segmentos Hemos sido capaces de utilizar los temporizadores del 3pi y debido al sistema de alimentaci n que utiliza un voltaje regulado para los motores este sistema a producido resultados aceptables Con un sistema de alimentaci n tradicional se reducir a la velocidad el motor as como la carga de las bater as y podr a producir resultados poco fiables Por ejemplo si utiliz ramos un robot con alimentaci n tradicional la func
28. aci n del 3pi usando la interfaz Arduino IDE en lugar de AVR Studio e AVR Libc Home Page e ATmegal68 documentaci n e Tutorial AVR Programaci n en Mac 3pi kit de expansion Este kit incluye una placa de circuito impreso PCB redondeada con una parrilla de agujeros espaciados de 0 100 1 2 en pcb sin cortes conector macho alargado y otro hembra de 2 x 7 pins 2 conectores macho alargados y 2 hembras de 2 x 1 pins 4 separadores de 7 8 en pl stico 4 tornillos y sus tuercas de 1 1 4 La placa de expansi n coincide con la PCB de la 3 pi en color y di metro y se monta justo por encima de las ruedas utilizando los cuatro tornillos y sus espaciadores Una vez ensamblada la PCB se conecta a la base del 3pi lo que te permite crear tu propia interfaz electr nica con soldaduras independientes entre ambos circuitos Estas conexiones te dan acceso a los pins libres del AT megal68 as como a los tres pins de tensiones VBAT voltaje de la bater a VCC 5 V regulados y VBST 9 25 V regulados para los motores Adem s la expansi n de PCB se conecta a la base del bot n de encendido y al punto de carga de bater a lo que te permite a adir tus propios botones y conectores de carga El kit de ampliaci n del PCB que tiene cortes permite ver la pantalla de cristal l quido y el acceso al bot n de encendido bot n de reinicio y acceso al conector ISP de programaci n Si necesitas m s l neas de conexi n o espacio ext
29. ad_index read index if read index gt 100 read index 0 return ret Backs up by one byte in the ring buffer void previous_byte read index if read index 255 read index 99 Returns true if and only if the byte is a command byte gt 0x80 char is_command char byte if byte lt 0 return 1 return 0 Returns true if and only if the byte is a data byte lt 0x80 char is_data char byte if byte lt 0 return 0 return 1 If it s not a data byte beeps backs up one and returns true char check_data_byte char byte if is data byte return 0 play o3c clear print Bad data lcd_goto_xy 0 1 print_hex_byte byte previous byte return 1 j EEEEEEEECERE SEE ESE EE ERE EE LATALPA AAA ATA AAA AS ATA ATI SA IAA AA COMMAND FUNCTIONS Bach function in this section corresponds to a single serial command The functions are expected to do their own argument handling using read next byte and check data byte Sends the version of the slave code that is running This function also shuts down the motors and disables PID so it is useful as an initial command void send signature serial send blocking 3pil O 6 set_motors 0 0 pid enabled 0 Reads the line sensors and sends their values This function can do either calibrated or uncalibrated readin
30. ada lado que crean un m todo de conducci n denominado conducci n diferencial Tambi n se conoce como conducci n de tanques Para girar mediante este m todo es necesario hacer rodar los motores a diferentes velocidades En el ejemplo de funci n anterior la rueda izquierda se mueve m s deprisa que la derecha con lo que el robot avanza girando a la derecha La diferencia de velocidades determina que el giro sea m s suave o m s brusco e incluso moviendo un motor adelante y el otro atr s se consigue un cambio de direcci n total 180 180 250 120 5 d Entradas digitales y sensores vec El microcontrolador es el coraz n del 3pi un ATmegaxx8 contiene un numero de pins que pueden configurarse como entradas salidas digitales que leer n desde el programa los 1 o 0 dependiendo de si el voltaje es alto hasta 2V o bajos OV Un fa circuito de entrada con un pulsador podria ser el de la figura en donde una j resistencia de entre 20 a 50k agarra el voltaje de 5V y lo lee como 1 Al pulsar el gt R27 bot n el voltaje va a GND y se lee 0 Quitando la resistencia de pull up la entrada quedar a flotando mientras el bot n no se pulsa y el valor podr a quedar alterado por el voltaje residual de la l nea interfiriendo en las se ales que de ah dependan Por eso las resistencias de pull up son importantes y en este caso la hemos representado en el circuito como R Las se ales procedentes de los sensores de reflexi n son alg
31. ale ala DOT ala JA a ke 4 ie OO OOOCOI Tele a gt sole MC Hara IOE a Tale ale o alale vl arar ak aL T T Mele el ae aT ete MO arora EIE arara IOC L MO Ez ta oF i is a Lele ele i MOU sala LOU DOLCE afafa Ielo ODOLE LIEN elele MOU apena DOC MOU ol ele aleja MOU LE DOU JOE ee alara a efe papa A I apena DOU a efe JOE apapa apapa OU 4 2 Tolo JOU JOU a so geja apapa a C I WO O O CN O WO a e DO AC aapea OO ea L OO L DOT jage LW O OO O eToTe e e jeppa apera lolo slelelelelelelelelelelelelelelelelelelelelelelelelele Tolo als sIsIsIsIsTeIJ IsIsIsIsIsIsIsIsIsIsIsIesIsIsIsIsIsIsIsIsIsIsIeTs ele DHOGDDCOVOOOOOPOOCODYDBOOOPOOPCODOOCPnPoOogsnOannb oi AONOOOHOOOOOOCOKOOCOOCOOCOCOCOCOOOO OOO TDC DO O CEO IO i ele llel F arare fa 0 a ei al sTaTe L L apeja el ete sjera L OO i T s OOOOOOOUCDOG DO CHhHOg00G00QGOCHN ate lela arara alal alate elele ay ele arara rara arra oleate alot a elele or Ole Ao al angran eLo n wI ale ryt T a ale ia afa jers al lee Tolo para warara aTaTa Lele A 2 2 I e16 rr 21 ae il a SISIS SIS Csi ES Do E a heal p Te vale JM pai i e s e e sT esIsIsIs sIsIsTe 10000000 lola 5 a SO
32. ambi n tenemos que hacer un seguimiento de la longitud actual del camino para que sepamos que valores poner en la matriz l char path 100 2 unsigned char path_length 0 the length of the path El main loop se encuentra en la funci n maze_solve que es llamada despu s de la calibraci n desde main c Esta funci n incluye dos bucles principales el primero en donde manualmente se resuelve el laberinto y el segundo donde se replica la soluci n para mejorar el tiempo De hecho el segundo bucle es en realidad un bucle dentro de un bucle ya que queremos ser capaces de reproducir la soluci n varias veces He aqu un esbozo del c digo This function is called once from main c void maze solve while 1 FIRST MAIN LOOP BODY when we find the goal we use break to get out of this 0 J 00U0 4 WNE j Now enter an infinite loop we can re run the maze as many times as we want to while 1 12 H Ho Ho kil 14 bos LG 17 le 19 20 21 22 A 24 El primer bucle principal necesita para seguir un segmento del circuito decidir c mo girar y recordar el giro en una variable Para pasar los argumentos correctos a select_turn tenemos que examinar cuidadosamente la intersecci n a medida que la atraviesa Tenga en cuenta que existe una excepci n especial para encontrar el final del laberinto El siguiente c digo funciona Beep to show that we finished th
33. ar OxC6 280 m2_backward 281 break 282 default 283 clear 284 print Bad cmd 285 lcd_goto_xy 0 1 286 print_hex_byte command 287 play o71l16crc 288 continue bad command 289 290 291 10 b Programa serie para maestro El programa maestro serie usado en el programa esclavo est incluido en la librer a Pololu AVR Library ver Section 5 a en libpololu avr examples 3pi serial master Est dise ado para correr con un LV 168 o en el 3pi como una demostraci n de lo que es posible pero probablemente quieras adaptarlo a tu propio controlador Para utilizar el programa debes hacer las siguientes conexiones entre maestro y esclavo GND GND PDO PD1 PD1 PD0 Enciende ambos maestro y esclavo El master mostrara un mensaje Connect seguido de la versi n del c digo esclavo Ej 3pil O El maestro da instrucciones al esclavo para mostrar Connect y tocar una peque a melod a Pulsa el bot n B en el maestro lo que causar que el esclavo entre en la rutina de auto calibraci n despu s puedes manejar el esclavo usando los botones a y C en el maestro mientras ves los datos de los sensores en la LCD Si pulsas B el esclavo entra en seguimiento de l nea PID C digo fuente 1 include lt pololu orangutan h gt 2 include lt string h gt 3e AP 4 3pi serial master An example serial master program for the Pololu 5a 3p1 Robot This can run on any board supported b
34. before set motors 50 50 delay ms 50 set motors 40 40 delay_ms 200 Make a turn according to the instruction stored in A7 wach ils 0 turn path 1 R00 JD WN K 8 e Simplificando la solucion Despu s de cada giro la longitud de lo recordado se incrementa en 1 Si tu laberinto por ejemplo tiene largos zigzags sin salida las consecuencias sera un RLRLRLRL en la LCD No hay atajo que te lleve a trav s de esta secci n por una ruta mas r pida s lo la estrategia de la mano izquierda en la pared Sin embargo cuando nos encontramos con un callej n sin salida podemos simplificar el camino Considera la posibilidad de la secuencia LBL donde B significa volver y las medidas adoptadas cuando encontramos un callej n sin salida Esto es lo que sucede si existe un giro a izquierda en una via recta que conduce de inmediato a un callej n sin salida Despu s de girar 90 a izquierda 180 a derecha y 90 de nuevo a izquierda el nn efecto es que el robot se dirige en la direcci6n original de nuevo La ruta puede ser simplificada con giro de 0 un nico S Otro ejemplo es la intersecci n en T con un Left Back Left Straight callej n sin salida a izquierda LBS El giro sera 90 izquierda 180 y 0 para un total de 90 a derecha La secuencia puede repetirse reemplazandola con un simple R En efecto siempre que tengamos la secuencia del tipo
35. bot 3pi Nota Puedes tambi n programar tu 3pi usando la interfaz Arduino IDE y un programador externo como Orangut n USB programmer Para las instrucciones en este sistema mira la gu a Programming Orangutans y el robot 3pi desde un entorno Arduino El resto es del AVR Studio Para mas informaci n y uso de las librer as de Pololu C C con robots basados en AVR incluyendo instrucciones de instalaci n en LINUX mira Pololu AVR C C Library User s Guide Recuerda No intentes programar el 3pi con las bater as descargadas o bajas Puedes destruir completamente las memorias del microcontrolador y quedar deshabilitado el 3pi 6 a Descargar e instalar la Librer a C C La librer a de Pololu C C AVR hace m s f cil para ti el uso de funciones OE e poou Search avanzadas en tu 3pi la librer a se usa en ple Edt view Tools Help todos los ejemplos de las siguientes P AN secciones Para su comprensi n el ris TEE Date modifial yon ype c6digo fuente de dichos ejemplos y el a J WinAVR 20080430 E 3pi h ali avr y analog h programa demo estan incluidos en la Mi ui Fon P y ad in pa librer a Para empezar con la instalaci n a Bl indude cv E ked de la librer a necesitas bajarte uno de los Ou L leds h f compat motors h siguientes ficheros Mi pololu presta A util orangutan h Pololu AVR Library ee a aaa http www pololu com file download l J bin S Ree e MM An jo UrangutanLlelay h
36. bot Simplified Schematic Diagram J20 reverse protection al 10 uH AVCC C16 0 1 uF VOC Cz 2 2 MF Un VC 2 2 mF L poy Rid 2 2 MF PC2 220 A gt VCC j cad 2 2 mF 2 16 pos RIT 10k A e LA E cas Ur 2 2 nF L po R19 220 rahe clarioe AVRISP programming connection Bx2 character LCD and user pushbultans sensing circuit Puedes bajar una versi6n de 40k pdf del mismo aqui senor array and IR LED control Od TB6612FNG motor driver and meters 24 0 1 UF http www pololu com file download 3p1_schematic pdf file_1d 0J119 6 Programando tu 3pi Para hacer mas de lo que hace la demo necesitas programarlo eso requiere un programador AVR ISP como el Orangutan USB programer El primer paso es ajustar el programador siguiendo las instrucciones de instalaci n Si usas el Orangut n USB programmer mira la gu a de usuario Lo siguiente es tener un software que compile y transfiera el c digo creado al 3pi a trav s del programador Recomendamos estos dos paquetes de software e WinAVR que es libre un entorno de herramientas para los micros de la familia AVR incluido un compilador GNU GCC para C C e AVR Studio paquete de desarrollo integrado de la casa Atmel s con IDE que trabaja en armon a con el compilador WinAVR s AVR Studio incluye el software AVR ISP que permite cargar tus programas creados en el ro
37. cuentra la siguiente intersecci n El programa no solo almacena una serie de intersecciones visitadas sino que tambi n almacena los tiempos de una a la otra produciendo algo as como diy coy cop Re Dye ee d JI Y Oy Op op O Se We oti MI La matriz superior representa la acci n realizada en cada intersecci n visitada L giro a izquierda S recto R vuelta a la derecha y la matriz de abajo indica la cantidad de tiempo transcurrido a lo largo de cada tramo hasta llegar a la siguiente intersecci n Las unidades de la serie han sido elegidas para dar con los n meros que pueden permitir al robot de manera significativa diferenciar entre los segmentos m s largos y m s cortos pero que nunca superar los 255 m ximo byte entero para cualquier segmento del laberinto Esta segundo restricci n significa que los valores pueden ser almacenados en una matriz de caracteres sin signo es decir el tiempo de cada segmento ocupa s lo una byte de memoria que ayuda a mantener el uso de memoria m nima El ATmegal68 lleva 1024 bytes de memoria RAM por lo que es importante almacenar datos de forma eficiente y dejar suficiente espacio para la pila de instrucciones que tambi n se almacenan en la RAM Una buena regla es dejar 300 a 400 bytes de RAM disponibles para la pila y los datos utilizados por la Pololu Library AVR o mas si tiene algunas funciones anidadas o funciones con gran cantidad de variables locales Recuerda que el Atmeg
38. dl speed2 10 c I O disponibles en los 3pi ATmegaxx La mejor manera de expandir las capacidades del 3pi desde la placa base es a trav s del microcontrolador como se describe en la secci n 10 a Se permite conectar un segundo microcontrolador y tan solo requiere hacer unas pocas conexiones a los pins PDO y PDI de la 3pi Estos dos pins solo se utilizan cuando conectamos los ATmegaxx8 a trav s de las UART o m dulos de comunicaciones serie Hay libertad para usar esos dos pins digitales PDO y PDI para otros prop sitos o para comunicarse con un segundo microcontrolador v a serie o a un computador debes tener en cuenta en utilizar un chip RS232 o USB para conectarlo al PC ya que utiliza tensiones de 12V y el 3p1 trabaja con 5V Adem s del PDO y PDI los 3p1 tienen una serie de l neas I O que pueden utilizarse para sensores adicionales o control de leds o servos A estas l neas tienes acceso a trav s del conector central que se encuentra entre los dos motores y se corresponden a PDO PD1 ADC6 ADC y PCS Si usas una placa de expansi n estas l neas se transmiten directamente a dicha placa de expansi n Los pins PC5 ADC6 y ADC7 est n conectados al hardware del 3pi via jumpers removi ndolos puedes usar esos pins a tu conveniencia El pin PC3 puede usarse como I O digital o como entrada anal gica Cuando est puenteada por los jumpers controla los emisores de los sensores IR Si lo removemos los emisores siempre est n en on El p
39. e unsigned char speedl 0 speed2 0 read sensors in a loop while l serial_send x87 1 returns calibrated sensor values read 10 characters if serial receive blocking buffer 10 100 break get the line position serial_send xB6 1 int line position l if serial receive blocking char line position 2 100 break get the battery voltage serial send NxB1 l read 2 bytes int battery millivolts l if serial receive blocking char battery millivolts 2 100 break display readings display levels unsigned int buffer lcd_goto_xy 5 0 line_position 0 4 to get it into the range of 0 1000 if line position 0 1000 line position 0O 999 to keep it to a maximum of 3 characters print long line position 0O pro e Led goto xy 0 1 print long battery millivolts O print my des delay_ms 10 if button A is pressed increase motorl speed if button is pressed BUTTON A amp amp speedl lt 127 speedl else if speedl gt 1 speedl 2 else if speedl gt 0 speedl 0 if button C is pressed control motor2 if button_is_pressed BUTTON_C amp amp speed2 lt 127 speed2 else if speed2 gt 1 speed2 2 else if speed2 gt 0 speed2 0 1f button B is pressed do PID control if button_is_pressed BUTTON_B slave_set_pid 40 1 20 3 2 else slave_stop_pid slave_set_motors spee
40. e maze Wait for the user to press a button int i for i 0 i lt path_length i SECOND MAIN LOOP BODY Follow the last segment up to the finish follow segment Now we should be at the finish Restart the loop bastante bien al menos a velocidad lenta que estamos utilizando 20 0 J00 4 QQ DN ER H h e h h h h KL FF I OO U0OoOUUVGKHON Ko N N NN WN FR Oo NNNNA JO OB 28 29x 30 31 32 JI 34 JI JO OTs 38 39 40 41 42 43 44 45 46 47 Podemos discutir la llamada a simplify path en la secci n siguiente Antes de eso echemos un vistazo al segundo bucle principal que es muy simple Todo lo que hacemos es seguir hasta la nueva intersecci n y girar de acuerdo a nuestros registros Despu s de hacer el ltimo giro el robot estar a un segmento de la meta lo que explica la llamada final a follow_segment en el FIRST MAIN LOOP BODY follow_segment Drive straight a bit This helps us in case we entered the intersection at an angle Note that we are slowing down this prevents the robot from tipping forward too much set motors 50 50 delay_ms 50 These variables record whether the robot has seen a line to the left straight ahead and right whil examining the current intersection unsigned char found_left 0 unsigned char found_straight 0 unsigned char found_right 0 Now read the sensors and check t
41. eae ou KOT Eros rama TON para O Olav Oke ctw avi a al a enan a eee e Aa Aaa A 31 LOs Programa Serie para MES COn A ip ARA A AA 38 10 6 I O disponibles en bos 201 ATMEQARZE e ice wise ia dle fe fi n a a Be 42 dela Enlaces relacionados tipear se Arba pe e va ip ala do E ee 42 JOL AA E qe a o AA 43 EXNSandoLadO ranita aaa aaa a ee a eee 44 1 Introducci n El 3pi de Pololu es un peque o robot aut nomo de alto rendimiento designado para competiciones de seguimiento de l nea y resoluci n de laberintos Alimentado por 4 pilas AAA no incluidas y un nico sistema de tracci n para los motores que trabaja a 9 25V el 3pi es capaz de velocidades por encima de los 100cm s mientras realiza vueltas precisas y cambios de sentido que no var an con el voltaje de las bater as Los resultados son consistentes y est n bien sintonizados con el c digo a n con bater as bajas El robot est totalmente ensamblado con dos micromotores de metal para las ruedas cinco sensores de reflexi n una pantalla LCD de 8x2 caracteres un buzzer tres pulsadores y m s todo ello conectado a un microcontrolador programable El 3pi mide aproximadamente 9 5 cm 3 7 de di metro y pesa alrededor de 83 gr 2 9 oz sin bater as El 3pi contiene un microcontrolador Atmel ATmegal68 o un ATmega328 los nombraremos como ATmegaxx8 a 20 MHz con 16KB de memoria flash y IKB de RAM el doble 32 KB y 2KB en el Atmega328 y IKB de EEPROM El uso del ATmegaxx8 lo
42. edar cada uno en su conector hembra correspondiente Despu s Pulsa el be de ENCENDER a la rzquierda al lado del porta pilas para conectar el 3p1 Ver s que dos leds azules se encienden y el 3p1 empieza a ejecutar el programa de demo dl k Li on pulsar el bot n de nuevo se apagara el 3pi o pulsa el bot n de RESET situado justo mas abajo para resetear el robot mientras est funcionando 4 c Funcionamiento del programa demo pre instalado Tu 3pi viene con un programa pre instalado de demostraci n y testeo de sensores motores leds y buzzer para ver su correcto funcionamiento Cuando se enciende por primera vez oiras un pitido y veras en pantalla Pololu 3pi Robot y luego aparece Demo Program indicando que est en funcionamiento el mismo Si oyes el beep per no aparece nada en la LCD puedes ajustar el contraste deda_ LCD con el mini potenci metro que est debajo de la placa Seguir el programa pulsando el bot n B para proceder con el men principal Pulsa A o C para avanzar o retroceder a trav s del men y de nuevo B para salir Hay siete demos accesibles desde el men Bater a Muestra el voltaje de las pilas en milivoltios as si marca 5000 5 0 V o m s es porque las bater as estan a tope Removiendo el jumper marcado como ADC6 separa la bater a del pin anal gico de medida produciendo que se muestre un valor muy bajo LEDs Parpadeo de led verde y rojo que hay bajo la placa o los de us
43. el sensor 2 y as sucesivamente El valor devuelto por read_line se divide en tres casos posibles 1 0 1000 el robot est lejos del lado derecho de la l nea En este caso gira rapido a 1zquierda ajustando el motor derecho a 100 y el izquierdo a 0 La m xima velocidad de los motores es de 255 luego estamos rodando el motor derecho al 40 de su velocidad 2 1000 3000 el robot est bastante centrado en la l nea En este caso ajusta los motores a velocidad 100 para correr recto 3 3000 4000 el robot est lejos del lado izquierdo de la l nea En este caso gira rapido a derecha ajustando los motores derecho a 0 e izquierdo a 100 Dependiendo de que motores est n activados se encienden los leds correspondientes para mejorar el aspecto Esto puede ayudar en la depuraci n del c digo Dependiendo de que motores se activa los leds correspondientes se encienden lo que ayuda a su depuraci n y control Para abrir el programa en el AVR Studio debes ir a examples 3pi linefollower y un doble clic en test aps Compila el programa m telo en tu 3pi y adelante Tienes que saber que tu robot es capaz de seguir las curvas de la l nea en curso sin perderla Sin embargo los motores se mueven a velocidades de alrededor de 100 de su m ximo posible de 255 y el algoritmo debe producir una gran cantidad de c lculos para las curvas En este punto puedes intentar mejorar el algoritmo antes de pasar a la siguiente secci n Algunas ideas para ello p
44. els 2 2 etc lacd load custom character levels 4 3 lcd load custom character levels 5 4 gt Jf no offset e g one bar dI two bars gt Jf akip level 3 l lacd load custom character levels 6 5 clear j the LCD must be cleared for the characters to take effect 10 levels of bar graph characters const char bat graph chatact rs 10 7 0 0 1 2 3 3 4 5 255 void display_levels unsigned int sensors clear int 15 l for i 0 i lt 5 i 4 Initialize the array of characters that we will use for the graph Using the space an extra copy of the one bar character and character 255 a full black box we get 10 characters in the array The variable c will have values from 0 to 9 since values are in the range of O to 1000 and 1000 101 is 9 with integer math char c bar graph chataot rs sensors i 101 i Display the bar graph characters print_charactero j set the motor speeds void slave set motors int speedl int speed2 char message 4 0xC1 speedl OxC5 speed2 if speedl lt 0 mes mes j if speed2 lt 0 mes mes j serial j sage 0 0xC2 mi backward sage l speedl sage 2 0xC6 m2 backward sage 3 speed2 send blocking message 4 if do calibration void slave serial _ calibrate send xB4 1 int tmp_buffer 5 read 10
45. encias de 2 bytes enteros en el rango de 0 2000 Lee los cinco sensores IR y env a los valores calibrados en el rango de 0 1000 Env a la salida de voltaje del trimpot en dos bytes en el rango de 0 1023 Env a el voltaje de la bater a en mV en dos bytes Toca una melod a especificada en una cadena de comandos musicales El primer byte es la longitud de la cadena m x 100 para que el programa sepa cuantos bytes debe leer Ver comando play en Section 4 de la Pololu AVR Library Command Reference Para saber su funcionamiento 10 10 2 2 101 Realiza una calibraci n de los sensores Deber a realizarse varias veces ya que el robot se mueve en el rango del blanco y el negro Resetear la calibraci n Esto deber a utilizarse cuando hay conectado un esclavo en caso de reinicio del maestro sin restablecer el esclavo por ejemplo un fallo de energ a Lee los cinco sensores IR usando valores calibrados y estima la posici n de la l nea negra debajo del robot El valor a enviar ser O cuando la l nea est debajo del sensor PCO o m s a la izquierda 1000 cuando la l nea est bajo el sensor de PC1 hasta 4000 cuando est en el sensor PC4 o m s a la derecha Ver Section 12 de Pololu AVR Library Command Reference para la formula usada para posicionarse Limpia la pantalla LCD del 3pi Imprime 1 8 caracteres a la LCD El primer byte es la longitud de la cadena de caracteres Mueve el cursor de LCD a x y ca
46. esto funcionamiento a velocidad libre y al 300 stall current J 4 5 par de parada Naturalmente el motor usa el minimo de free running speed corriente cuando no se aplica una fuerza y si la w KE corriente que viene de la bater a aumenta es por fuerzas E de ramiento o engranajes de modo que son par metros m importantes del motor Seg n se muestra en el siguiente 100 3 ao gr fico free running current n 00 La velocidad libre de rodamiento de un peque o motor 9 m n a l DC es de varios miles de revoluciones por minuto rpm f joue fas ki muy alta para el desplazamiento del robot por lo que un dispositivo de engranajes permite reducir estas revoluciones y aumentar el par la fuerza de rodamiento El ratio de engranaje es de 30 1 en el 3pi es decir 30 vueltas de motor una vuelta E de rueda Estos par metros est n representados en la tabla kit Engranage Las dos ruedas del 3pi Velocidad libre 700 rpm i l Consumo min 60 mA tenen una radio de Par m ximo 6 oz in 0 67 inch con lo que la Consumo max 540 mA m xima fuerza que pueden producir los dos motores en funcionamiento ser de 2x6 0 67 18 oz El 3pi pesa 7 oz con las pilas insertadas y estos motores son lo suficientemente fuertes como para moverlo en una pendiente de 2g 2 veces la gravedad El rendimiento est limitado por la fricci n de las gomas podemos deducir que puede trabajar con pendientes de entre 30 a 40 Mover u
47. gs When doing calibrated readings it only performs a new reading if we are not in PID mode Otherwise it sends T9 20 Zili 22 23 24 25 26 AT w 28 AB 30 3L SAN 33 34 30 SO ai FT sa 38 NE W 40 41 42 43 44 45 46 47 48 49 50 51 DL 394 54 594 SI Dabs Shem SI 60 61 62 63 64 65 66 67 68 Ga 70 PL 12 de 74 FA 163 Lili OA FIN e 80 SL o2 Go 84 8 0 86 Sil 88 SI 90 91 92 Hs 94 SIS 96 ITa the most recent result immediately void send_sensor_values char calibrated if calibrated if pid enabled read line sensors calibrated sensors IR EMITTERS ON else read line sensors sensors IR EMITTERS ON serial send blocking char sensors 10 Sends the raw uncalibrated sensor values void send raw sensor values send sensor values 0 Sends the calibated sensor values void send calibrated sensor values send_sensor_values 1 Computes the position of a black line using the read line function and sends the value Returns the last value computed if PID is running void send line position int message l unsigned int tmp_sensors 5 int line_position if pid_enabled line_position last_proportional 2000 else line position read line tmp sensors IR EMITTERS ON message 0 line position serial send blocking char message 2 Sends
48. he intersection type unsigned int sensors 5 read_line sensors IR EMITTERS ON Check for left and right exits if sensors O gt 100 found left 1 1f sensors 4 gt 100 found right 1 Drive straight a bit more this is enough to line up our wheels with the intersection Set motors 40 40 delay ms 200 Check for a straight exit read line sensors IR EMITTERS ON if sensors 1 gt 200 sensors 2 gt 200 sensors 3 gt 200 round straight 1 Check for the ending spot If all three middle sensors are on dark black we have solved the maze if sensors 1l gt 600 amp amp sensors 2 gt 600 amp amp sensors 3 gt 600 break Intersection identification is complete If the maze has been solved we can follow the existing path Otherwise we need to learn the solution unsigned char dir select_turn found_left found straight found right Make the turn indicated by the path turn dir Store the intersection in the path variable path path_length dir path_length You should check to make sure that the path length does not exceed the bounds of the array We ll ignore that in this example Simplify the learned path simplify_path Display the path on the LCD display path maze solve anterior SECOND MAIN LOOP BODY follow segment Drive straight while slowing down as
49. i n T trabajar a bien al estar las bater as cargadas pero no si estas empezan a agotarse ya que los tiempos fallar an al rodar m s lentos los motores Consejo Una vez que empieces a aumentar significativamente la variable de velocidad de tus laberintos el rendimiento depender de la tracci n de los neum ticos Lamentablemente la tracci n disminuye con el tiempo los neum ticos recogen polvo y suciedad durante el rodaje Limpia los neum ticos de vez en cuando ya que pueden resbalar y perder tracci n o colear en las curvas Puedes verlo en la segunda parte del video Saca las gomas de las ruedas y limpialas con agua y jab n si usas alcohol que sea poco y no directamente podr an perder elasticidad y con unas pinzas puedes retirar la pelusilla que se pueda adherir a los ejes de los motores Caracteristicas del Pololu 3pi robot sensor locations circled in blue on digital pins jumper connects 16 IR sensor LEDs to 15 ai digital pin 19 jumper connects 2 3 of battery voltage to analog input 6 ton PENI o F Sut nad ve EE 20000 ai jumper connects potentiometer to prototyping analog input 7 space with power rails user connection pads for the 3 jumpered I Os SA ay ch motor 1 motor 2 user connection pads for the 2 connection pads for integrated QTR RC reflectance unused digital I Os optional expansion sensors on digital pins 14 18 serial pins 100006000006 a NOONSSNS
50. ibpololu avr 090605 zip file 1d 0J200 i ES OrangutanLCD h 721k zip released 2009 06 05 Mi more __ OrangutantEDs h p E H OrangutanMotors h mn H OrangutanPushbuttons h Librer a de ficheros de cabecera de dep L Pololu3pi h Je sample H PololuQTRSensors h Pololu AVR instalados correctamente TB store ES pushbuttons h de source L qtrh Abre el fichero zip y clic Extract all oe para extraer los ficheros de la libreria Pololu AVR Se crear el directorio Iibpololu avr La instalaci n autom tica instala todos los ficheros en la localizaci n de avr gcc Se puede realizar corriendo install bat o con make install En Windows Vista click derecho en install bat y selecciona Run as administrador En Windows el subdirectorio estar en c winavr 20080610 avr En Linux estar n posiblemente localizados en el directorio usr avr S1 tienes una versi n antigua de la librer a de Pololu AVR el primer paso ser borrarla por entero incluyendo el fichero libpololu a Instalados anteriormente Luego copia todo 1ibpololu_atmegaxx8 a dentro del subdirectorio 1i del directorio avr tal como C WinAVR 20080610 avr lib Finalmente copia el subdirectorio entero de pololu dentro del subdirectorio include tal como C WinAVR 20080610 avr include pololu Ahora estas preparado para usar Pololu AVR library con tu 3pi 6 b Compilando un Programa simple Un sencillo programa demostraci n est disponible para tu 3pi en e
51. ientras muestra unas notas Es para mostrar la habilidad de 3pi como musico Timer Un simple reloj contador Pulsa C para iniciar o parar el reloj y A para reset El reloj puede seguir contando mientras exploras otras demos El c digo fuente del programa demo est incluido en las librer as de Pololu AVR C C descritas en la secci n 5 Despu s de descargar y desempaquetar las librer as el programa se encuentra en el directorio examples 3pi demo program 4 d Accesorios inclu dos Los robots 3pi se env an con dos LEDs rojos y dos verdes 3 G Tienes tres puntos de conexi6n para leds opcionales uno al amp Ki z lado del bot n de POWER para indicar cuando el 3pi est a a GP ES encendido y dos puntos m s controlables por el usuario en el amp frontal A 5 El uso de leds es opcional y el 3pi funciona igual sin ellos Puedes personalizar tu 3pi con una combinaci n de verdes y rojos y usarlos para opciones luminosas A adir LEDs es f cil pero ten en cuenta que si tienes que desoldarlos despu s los componentes que se encuentran cerca de donde hagas las soldaduras Los LEDs tienen polaridad f jate el trozo m s largo corresponde al Antes de soldar aseg rate de la funci n que van a realizar y sujeta bien el led y Recorta el exceso de patas sobrante El 3pi tambi n viene con cuatro juegos de tres jumpers en colores azul rojo amarillo y negro Son para personalizarlos si tienes m s de un 3pi con diferentes colores 5
52. imadamente al 67 de su velocidad total Dado que el voltaje suministrado al motor es una serie de pulsos de anchura variable a este m todo de control de velocidad se le llama modulaci n del ancho de pulso PWM Un ejemplo de PWM se muestra en el gr fico el ancho de los pulsos decrece desde el 100 del ciclo de trabajo hasta el 0 por 10 PWM signal lo que el motor rodara desde el maximo de velocidad 8 ON hasta pararse 100 F En el 3pi el control de velocidad se consigue usando gt 6 o las salidas de PWM del microcontrolador que a 3 generan los temporizadores Timer0 y Timer2 Esto a E significa que puedes establecer el ciclo de trabajo gt PWM para los dos motores de una vez e IN 0 independiente del resto de c digo por lo que seguir QO produciendo se ales en segundo plano pudiendo 0 10 19 20 prestar atenci6n a otras necesidades time ms La funci n set motors de la librer a AVR Pololu ver secci n 6 a crea el ciclo de trabajo usando una precisi n de 8 bits por lo que un valor de 255 corresponder al 100 Por ejemplo para una velocidad del 67 en el MI y otra del 33 en el M2 llamaremos a la funci n de la siguiente forma set motors 171 84 Para obtener un descenso lento de la secuencia del PWM fijate en el grafico deberas escribir un bucle que gradualmente haga decrecer la velocidad del motor en el tiempo Girando con una conducci n diferencial El 3p1 tiene motores independientes a c
53. in ADC6 es una entrada anal gica que se conecta al divisor de voltaje para la monitorizaci n del estado de la bater a al tenerlo puenteado y el pin ADC es otra entrada anal gica que se conecta al potenci metro inferior Si quitas la LCD y usas un kit de expansi n sin cortes puedes acceder a m s l neas I O Removiendo la LCD quedan libres tres controles PBO PD2 y PD4 y cuatro l neas m s que corresponden a las lineas de datos en los pins PBI PB4 PB3 y PD Si vas a usar las l neas de datos de la LCD procura que no entren en conflicto con algunas funciones especificas de estas l neas Es importante recordar que los pins PB4 y PB5 se usan como l neas de programaci n y lo que puedas conectar en las mismas vigila no interfieran al reprogramar el dispositivo En resumen pins PDO y PDI son l neas digitales I O libres o para comunicaci n serie Pins PCS ADC6 y ADCT se liberan al quitar el bloque puente PC3 puede usarse como anal gico o digital y ADC6 y ADC7 son anal gicos PB9 PD2 y PD4 son libres si quitas la LCD y PB1 PB4 PB5 y PD7 son digitales que se pueden usar siempre que no entren en conflicto con funciones dedicadas a esos pins 11 Enlaces relacionados Para leer m s acerca del tu robot Pololu 3p1 mira los siguientes enlaces e WinAVR e AVR Studio e Pololu AVR Library Command Reference informaci n detallada de cada funci n de la librer a e Programar el 3pi Robot desde un entorno Arduino una gu a de program
54. ir la liberaci n via serie del programa base de la 3pi y que se convertir a en una plataforma controlada que puede ser impulsada con rdenes desde otro microcontrolador Ensamblado Los conectores de pins suministrados te permiten establecer todas las conexio nes el ctricas ne cesarias entre la expansi n y base del 3p1 expansi n en el siguiente orden 1 Coloca el conector hembra de 2x7 y uno de los conectores hembras de 2x1 dentro de sus agujeros apropiados de la base del 3pi como vemos en la imagen f jate en los rect ngulos amarillos 2 Inserta los pins del 2x7 y uno de los machos extendidos de 2x1 en los conectores hembras Adicional mente coloca el conector extendido macho de de 2x1 en el conector de carga de la bater a Coloca la placa de expansi n encima de los pins machos y marca unos rect ngulos como los de la imagen elo rore gt O G GO OCOC O CEO CG Jeje Q ele HT se FF ra ki is SONS OOOO O e e e DOS Ol Iere erer C C CD i O GO Iere OG DOU ORO I Le pot po GE pot pa w ee pou pa LAN No pot pa SS OA pa pa 6 _e pa pot p LAB joi p LAN pot p CO O OOO Io Io el a4 DOC se amp A2 L im se GOO io ejeje Ie OQ 10 FIeTe GO O FFs 2 Ie lt O o DCPDOCLOQC DOG O CO O E O Z w todos a fin de que A II NU AA A OOOO VO A Se QA la
55. l directorio examp les s imp le test 3 p WA n con comandos f AVR Studio C Users paul Desktop libpololu avr examples simple test 3pi test c gt saa A File Project Build Edit View Tools Debug Window Help fX b sicos de la Pololu AVR Library IFA oOLaASIO DW AAA E Trace Disabled 5 3 ak Tin Ed EP ES x a a i AVR GCC vx include lt pololu 3pi h gt Este es su c digo pp ie A Source Files ra eee e test c print Hello gt includ lolu 3vi h lila play L16 ceg gt c 1 Hinc u e lt po O u pi gt H 4 External Dependencies y 1 3 Other Files pene 2 IMf main red led 0 3 green ledi lj 4 print Hello eae Je play L16 ceg gt c TE A 6 while 1 delay_m 100 Ta l 8 red_led 0 return 0 is green_led 1 om TAD delay_ms 100 7 C Users paul Desktop libpololu avr examples simple test 3 4 gt 11 red led l Build vx Las green_led 0 I3 delay_ms 100 14 Eon return 0 16 E Build Message 5d Find in Files Breakpoints and Tracepoints AVR Studio con el programa simple test 3pi Build Navega por el directorio simple Build started 15 7 2008 at 10 10 02 test 3pi doble clic en test aps y avr gcc exe mmcu atmegal68 Wall gdwarf 2 std gnu99 0s funsigne el proyecto ap arecera en la avr gcc exe mmocu atmegal6f Wl1 gc sections Wl Map test map test o ai f d AVR S di avr objcopy 0 ihex R eeprom test elf test he
56. la salida Si hay una habitaci n en alg n lugar del laberinto con un monstruo o alg n tesoro encontrar s el camino ya que recorres cada pasillo exactamente dos veces Usamos esta sencilla y fiable estrategia en nuestro 3pi como soluci n al ejemplo l maze solving It uses the variables found left found straight and 2 This function decides which way to turn during the learning phase of 3 found right which indicate whether there is an exit in each of the 4 three directions applying the left hand on the wall strategy 5 char select turn unsigned char found left unsigned char found straight unsigned char fo und tight 6 1 7 Make a decision about how to turn The following code 8 implements a left hand on the wall strategy where we always 9 turn as far to the left as possible 10 if found left Lis return L 12 else if found_straight 13 return a LZ else if found_right 15 return R 16 else 17 return B 18 Los valore devueltos por select_turn corresponden a los valores usador por turn siempre que estas funciones trabajen correctamente en el bucle principal 8 d Bucle s principal La estrategia del programa se encuentra en el fichero maze solve c Muy importante si queremos hacer un seguimiento de la ruta recorrida hay que crear una matriz de almacenamiento de hasta 100 datos que ser n los mismos caracteres utilizados en la funci n turn T
57. lineal perder n dos tercios de su energ a Esta p rdida se transforma en calor y como consecuencia es necesario utilizar disipadores que lo general no funcionan bien si los utilizamos con aplicaciones de alta potencia e Switching Este tipo de reguladores alternan la tensi n on off a una frecuencia generalmente alta y filtrando el valor de la salida esto produce una gran estabilidad en el voltaje que hemos deseado Es evidente que este tipo de reguladores son m s eficientes que los lineales y por ello se utilizan especialmente para aplicaciones con corrientes altas en donde la precisi n es importante y hay varios cambios de voltaje Tambi n pueden convertir y regular voltajes bajos y convertirlos en altos La clave del regulador de switching esta en el inductor que es el que almacena la energ a y la va soltando suavemente en el 3p1 el inductor es el chip que se encuentra cerca de la bola marcado como 100 En los PC se usan esos inductores que son como unos donuts negros con espiras de cable de cobre El sistema de potencia del 3pi corresponde al siguiente diagrama VBAT Dia E BLUE VOC El voltaje de 4x AAA pilas puede variar entre 3 5 a 5 5 voltios y hasta 6v si se usan alcalinas Esto no podr a ir bien si no fuera por la regulaci n del voltaje a 5V Usamos un regulador switching para elevar el voltaje a 9 25 V Vboost y reguladores lineales para obtener 5V VCC Vboost sirve para los motores y los leds sensores
58. me 0 last time TCNT2 while time lt maxValue VOC VBOOST poo fi Keep track of the total time This implicity casts the difference to unsigned char so we don t add negative values unsigned char delta time TCNT2 last time time delta time last time delta time continue immediately if there is no change if PINC last_c continue save the last observed values last_c PINC figure out which pins changed for i 0 i lt _numSensors i if sensor values i 0 amp amp _register i amp _bitmask i sensor_values i time Este c digo se encuentra en el fichero PololuQTRSensors cpp El c digo hace uso del temporizador TCNT2 en un registro especial del AVR configurado para contar continuamente cada 0 4 uS Cuenta los cambios de valor del sensor durante el tiempo almacenado en la variable time es importante usar variables separadas para contar el tiempo transcurrido ya que el TCNT2 peri dicamente se rebosa y empieza de 0 Una vez detectada la transici n entre 1 y O en uno de lo sensores midiendo el cambio en la entrada del PINC el c digo determina que sensor a cambiado y almacena el tiempo en la matriz sensor values i Despu s de leer el tiempo limite _max Value ajustado a 2000 por defecto en el 3pi que corresponden a 800uS el bucle termina y devuelve el valor de los tiempos 5 e 3pi Esquema del circuito simplificado Pololu 3pi Ro
59. n giro a izquierda del robot como RBR ya que son reemplazadas por S seg n lo acordado En muchos programas avanzados es posible que desee realizar un seguimiento de las incoherencias de este tipo ya que indican que alguna vez este tipo de problema podr a causar que el robot pierda el control Ahora vamos a mostrar como a trav s de un laberinto un poco m s complicado c mo podemos simplificar el camino a medida que lo exploramos de la siguiente manera Explorar el laberinto con la estrategia de la mano izquierda en la pared Esta lista de acciones es la suma de pasos que hacemos al explorar el laberinto hasta el final marcado con un c rculo negro Nuestro reto ahora es reducir esta lista para optimizar el trayecto Una soluci n es realizar este recorte al finalizar el laberinto pero el mejor enfoque es trabajar antes de que crezca la lista y nos quedemos sin memoria TLLLLI L S B L B LF L 8 1L Recorte de un callej n sin salida al identificarlo Cuando nos encontramos con el primer cruce despu s de nuestra primera retrocesi n sabemos que hemos llegado a un callej n sin s p4 r B l L B L salida que puede ser recortado de nuestra lista de acciones En este caso las acciones de la secuencia SBL quedar an simplificadas con una sola vuelta a la derecha R nana Recorte del resto de esta rama sin salida como marcha atr s En la siguiente secuencia RBL puede quedar reducida a B
60. n motor con control de velocidad y direcci n Una cosa que tienen los motores DC es que para cambiar de direcci n de rotaci n debe alternar la polaridad del voltaje aplicado Como es l gico no cambiaremos la conexi n de pilas ni la de los motores para tener un control de direcci n Para eso se usan los llamados puentes H como muestra el diagrama i LINN AT KZOE EET wan l Na Los cuatro puntos de corte de corriente permiten el cambio de sentido Observando las figuras se deduce su funcionamiento Los puentes en H se construyen mediante transistores que realizan la funciones de los interruptores Se usan puentes para ambos motores en el 3pi mediante el chip TB6612FNG conectando las salidas de los puertos del micro controlador corres pondientes a los pins PD5 y PD6 para el motor M1 y para el motor M2 se utilizan los pins de control en PD3 y PB3 Podemos ver su funcionamiento en la tabla siguiente DGI le eje ala lanas ote lot e foe IO ga orfas an at fao Z je ela iat ine m 8 fe ote a fo a aw erake y fi ott Jot Jon Jon ot rate La velocidad se consigue alternando pulsos altos y bajos Supongamos que PD6 esta alto a 5 V la l gica ser 1 y alternativamente el PD5 est en bajo 0 V es decir 0 y alto El motor funcionar entre adelante y paro causando un descenso de velocidad en el motor Ml Por ejemplo si PD6 est en alto 2 3 del tiempo 67 del ciclo de trabajo el motor rodar aprox
61. ng xB8 1 char length strlen string serial send _blocking 8length 1 send the string length serial send blocking string length go to coordinates x y on the slave LCD void slave lcd goto xy char x char y j serial send blocking NxB9 1 serial send blocking ax l serial send blocking 6 y l int main char buffer 20 load the bar graph load custom characters configure serial clock for 115 2 kbaud serial_set_baud_rate 115200 wait for the device to show up while 1 clear print Master delay_ms 100 serial send Nx81 l if serial receive blocking buffer 6 50 continue clear print Connect lcd_goto_xy 0 1 buffer 6 0 print buffer waits for a l byte response to indicate completion char d den T73 174 LTS 176 177 LTS 179 LSO 181 182 133s 184 185 186 187 188 1399 190 191 192 clear the slave s LCD and display Connect and OK on two lines Put OK in the center to test x y positioning slave clear slave print Connect slave 1cd goto xy 3 1 slave print OK play a tune char tune NxB3 11606gab gt c tune 1 sizeof tune 3 serial send blocking tune sizeof tune 1 wait wait for button ALL BUTTONS reset calibration slave reset calibration time reset slave auto calibrat
62. o m s complicadas Aqu vemos un circuito del censor de reflexi n conectado al PCO El elemento de reflexi n del sensor es un fototransistor en U4 que se conecta en serie con el condensador C21 Una conexi n separada por luz del emisor y que va por R12 al pin PCO Este circuito tiene la ventaja de aprovechar las se ales digitales del AVR pudiendo reconfigurarse sobre la marcha Las salidas digitales alternan el voltaje de 5V o OV y se traducen en O y 1 seg n el programa El condensador se carga temporalmente si la entrada lee 1 mientras el voltaje almacenado fluye a trav s del transistor Aqu vemos la se al en un osciloscopio del voltaje del condensador amarillo pasando al transistor y el resultado digital de la entrada de valor al pin PCO azul La cantidad de corriente que fluye a trav s del fototransistor depende del nivel de luz reflejada de modo que cuando el robot est en una superficie blanca brillante el valor O se devuelve con mucha m s rapidez que cuando est sobre una superficie de color negro La marca mostrada arriba est tomada en el momento en que el sensor llegaba al punto de separaci n entre la superficie de color negro y la superficie blanca El tiempo en que la se al digital est a 1 es m s corto sobre la blanca y m s larga cuando est sobre la negra La funci n read line sensors de la librer a Pololu AVR devuelve el tiempo de cada uno de los cinco sensores Esta es una versi n simple del c digo ti
63. on PDO ffreedigital O USART input pin RXD n si n LED roj i i ot EE ON e a USART reloj externo input output XCK ee Ore TimerO contador externo TO PD5 Mi linea de control TimerO PWM output B OCOB PD6 M1 l nea de control TimerO PWM output A OCOA PD7 LCDdatos DB7 Conectado al LED ver de usuario high turns LED on Timer1 input capture ICP1 AS divided system clock output CLKO Boton de usuario pulsando pulls pin low LCD datos DB4 Timeri PWM salida A OC1A Timeri PWM salida B OC1B PB3 M2 linea de control Me PW adan OG2A ISP linea de programacion Boton de usuario pulsando pulls pin low mt kt Cuidado tambi n como linea de programaci n ISP Bot n de usuario pulsando pulls pin low ee po PROS Pre Cuidado tambi n como linea de programaci n ISP QTR RC esta alto durante 10 us espera entrada de linea para pasar a bajo Sensor etiquetado como PCO sensor mas a izquierda PCO esta alto durante 10 us espera entrada de linea para pasar a me al eats ajo sensor etiquetado como PC1 esta alto durante 10 us espera entrada de linea para pasar a Bue nei ao sensor etiquetado como PC2 sensor central PC3 sensor reflexi n QTR RC esta alto durante 10 us espera entrada de linea para pasar a bajo sensor etiquetado como PC3 QTR RC esta alto durante 10 us espera entrada de linea para pasar a PC4 sensor reflexion pale sensor etiquetado como PC4 sensor mas a derecha POS Entrada
64. onar la fuerza se para Este es un grafico entre voltaje y tiempo gt 8 l La cantidad de energ a de las bater as est marcada en la misma gt o5 como miliamperios hora mAH Si est s usando en el circuito que consume 200mA 0 2 A durante 3 horas una bater a de M a E TE 650 mAH necesitar una recarga transcurrido este tiempo Si el time h circuito consume 600 mA en una hora quedar descargada NO descargues del todo la bater a podr a quedar inutilizada 5 b Gesti n de la energ a El voltaje de la bater a se reduce con el uso pero los componentes el ctricos usados precisan de una voltaje controlado Un componente llamado regulador de voltaje ayuda a que este voltaje se mantenga constante Por mucho tiempo los 5V regulados han sido para los dispositivos electr nicos digitales llamados de nivel TTL El microcontrolador y muchas partes del circuito operan a 5V y su regulaci n es esencial Hay dos tipos de reguladores de voltaje e Lineales Los reguladores lineales utilizan un circuito de retroalimentaci n simple para variar la cantidad de energ a que pasa a trav s de c mo y cu nto se descarga El regulador de tensi n lineal produce una disminuci n del valor de entrada a un valor determinado de salida y el resto de potencial se pierde Este despilfarro es mayor cuando hay gran diferencia de voltaje entre la entrada y la salida Por ejemplo unas bater as de 15 V reguladas para obtener un valor de 5 V con un regulador
65. ondr an ser e Incrementar la velocidad al m ximo posible e A adir causas intermedias son velocidad intermedias de ajuste para hacerlo m s divertido e Usar la memoria del robot tiene su m xima aceleraci n despu s de haber circulado por un tramo de l nea con unos pocos ciclos de c digo Tambi n puedes 1 Medir la velocidad del bucle usando las funciones de cron metro de la secci n2 para calcular el tiempo necesario de ciclos o de parpadeos del led por cada 1000 ciclos 2 Mostrar las lecturas de los sensores en la LCD Hay que tener en cuenta que la escritura de la LCD conlleva bastante tiempo y sobre todo si son varias veces por segundo 3 Incorpora el buzzer en programa Puedes hacer que tu 3p1 toque m sica mientras corre o tener informaci n adicional con los beeps seg n lo que est haciendo Ver secci n 4 para m s informaci n del uso del buzzer para m sica tendr as que usar PLAY CHECK pero desconecta la lectura de los sensores El c digo entero del programa de seguimiento de l nea es este ka 3pi linefollower demo code for the Pololu 3pi Robot 2 This code will follow a black line on a white background using a a very simple algorithm It demonstrates auto calibration and use of aa the 3pi IR sensores motor control bar graphs using custom Da characters and music playback making it a good starting point for 6 developing your own more competitive line follower 7 The 3pi include file mu
66. or unpredictable behavior 198 will result as random code starts getting executed If you 199 really want to stop all actions at some point set your motors 200 to 0 0 and run the following command to loop forever 201 7 202 while 1 203 7 c Seguimiento de l nea avanzado con 3pi PID Control Un programa avanzado de seguimiento de l nea para el 3pi est en el directorio examples 3pi linefollower pid Nota Hay una versi n compatible con el Arduino compatible de este programa que puede bajarse como parte de Pololu Arduino Libraries ver Secci n 5 g La t cnica usada en este ejemplo es conocida como PID control dirigida a alguno de los problemas que hemos mencionado en el programa anterior y que permiten incrementar de forma notoria la velocidad de seguimiento de la l nea Muy importante el control PID usa continuamente funciones para calcular la velocidad de los motores la simpleza del ejemplo anterior puede reemplazarse por una respuesta m s suave PID responde a Proporcional Integral Derivaci n estas son las tres entradas usadas en la f rmula para computar la velocidad del robot al girar a izquierda y derecha e El valor proportional es aproximadamente proporcional a la posici n del robot Esto es Si est centrado en la l nea lo expresamos con un valor exacto de 0 Si esta a la izquierda de la l nea el valor ser un n mero positivo y si est a la derecha de la l nea ser negativo Esto se compu
67. ores entrados proviene de diferentes fuentes de informaci6n El paso siguiente es una simple formula que combina todos los valores en una variable y que se usa para determinar las velocidades de los motores Compute the difference between the two motor power settings mi m2 If this is a positive number the robot will turn to the right If it is a negative number the robot will turn to the left and the magnitude of the number determines the sharpness of the turn int power difference proportional 20 integral 10000 derivative 3 2 Compute the actual motor settings We never set either motor to a negative value 9 const int max 60 10 if power difference gt max power difference max 11 if power difference lt max power difference max 12 if power difference 0 set motors max power difference max 13 else set motors max maxrpower difference Los valores 1 20 1 10000 y 3 2 son par metros ajustables que determinan la direcci n del 3pi sobre la l nea En general incrementando estos par metros PID podemos hacer power difference largas causando reacciones m s fuertes o cuando decrecemos podemos tener reacciones d biles Debes reflexionar sobre los distintos valores y experimentar con tu robot para determinar qu efecto tiene cada uno de los par metros Este ejemplo da a los motores una velocidad m xima de 100 que es un valor inicial seguro inicial Una vez ajustado los par metro
68. perder toda la energia current A procurar no llegar a ello puede producir cortocircuito y quedar inutilizada para siempre El gr fico siguiente muestra un modelo de c mo la tensi n al aumentar la potencia requerida La potencia de una bater a se mide multiplicando los voltios por los amperios dando una medida en vatios W VxA Por ejemplo en el punto marcado en el gr fico tenemos una tensi n de 0 9 V y una corriente de 0 6 A esto significa que la potencia de salida es de 0 54 W Si desea m s es necesario agregar m s bater as y hay dos maneras de hacerlo juntarlas en paralelo o en serie En paralelo se juntan todos los terminales positivos por un lado y todos los negativos por otro la potencia se suma Al1 A2 pero la tensi n es la misma Cuando las conectamos en serie terminal positivo de una con terminal negativo de la otra se suma la tensi n VI V2 De cualquier manera la m xima potencia de salida se multiplicar con el n mero de bater as En la pr ctica s lo se conectan las bater as en serie Esto se debe a que aun siendo del mismo tipo las bater as no todas tienen la misma carga y conectandolas en serie la corriente se compensa entre ellas Si queremos que duren m s podemos usar pilas m s grandes que el AAA como por ejemplo las AA C y bater as tipo D con el mismo voltaje pero con m s fuerza El total de energ a de la bater a est limitado por la reacci n k quimica cuando deja de reacci
69. que volver sobre sus pasos Luego la soluci n a este tipo de laberinto es mucho m s f cil que resolver un laberinto con bucles ya que una simple estrategia te permite explorar todo el laberinto Vamos a hablar de esa estrategia en la pr xima secci n Podemos construir nuestros laberintos utilizando s lo unas l neas rectas trazadas sobre una rejilla regular pero esto se hace principalmente para que el curso sea f cil de reproducir la estrategia de soluci n del laberinto que se describe en este tutorial no requiere de estas caracter sticas Para mas informaci6n mira el tutorial Building Line Following and Line Maze Courses y tienes adem s una informaci n adicional escrita por el profesor de rob tica R Vannoy en el documento http www pololu com file download line maze algorithm pdf file_ id 0J195 505k pdf con importantes conceptos 8 b Trabajar con multiples ficheros C en AVR Studio El c digo fuente C para resolver del laberinto de l neas est en examples 3pi mazesolver Nota Hay una versi n compatible para Arduino en Pololu Arduino Libraries ver Secci n 5 2 Este programa es mucho m s complicado que el ejemplo anterior y esta partido en m ltiples ficheros Se usan varios ficheros para facilitar la creaci n de c digo Por ejemplo el fichero turn c Contiene solo una funci n usada para hacer giros en las intersecciones include pololu 3pi h Turns according to the parameter dir which should be L
70. r cter l nea 2 bytes Gira el robot a derecha e izquierda para calibrar Se usa para posicionarlo sobre la l nea Devuelve el car cter c calibrado line position xB7 clear LCD n LCD goto xy autocalibrate l start PID Ajusta los parametros PID y comienza el seguimiento de linea El primer byte de datos es la velocidad maxima de los motores Los cuatro A L N NO o STO S o o A A A A A A A A a gt O oO A A rN siguientes a b c d representan los parametros la diferencia en la velocidad de los motores viene dada por la expresi n L 2000 xa b Dxc d en donde L es la posici6n de la linea y D la derivada de sta L La integral term no esta en este programa Ver Section 6 c para mas informaci6n acerca del seguimiento de linea PID OxBC stop PID 0 0 Para el seguimiento de l nea PID motores a 0 OxCl M1 forward l Motor M1 gira adelante a una velocidad de 0 paro hasta 127 m ximo avance OxC2 M1 backward l Motor M1 gira atr s con una velocidad entre O paro hasta 127 m ximo retroceso OxC5 M2 forward l Motor M2 gira adelante a una velocidad de 0 paro hasta 127 maximo avance OxC6 M2 backward l Motor M2 gira atr s con una velocidad entre O paro hasta 127 m ximo retroceso C digo fuente T include lt pololu 3pi h gt 2 di 3 3pi serial slave An example serial slave program for the Pololu 4 3pi Robot 5 va 6 PID constants 7
71. ra y no vas a usar la pantalla LCD est la versi n del kit de expansi n sin cortes que aprovecha las l neas de la pantalla LCD man La placa de expansi6n esta disenada para crear un mont6n de prototipos con espacio suficiente para componentes Tiene un espacio para 0 6 para componentes de hasta 40 pin DIP Dual in line de paquetes como el ATmega32 de la imagen o para numerosos componentes peque os DIP En el espacio del prototipo se extienden sus pistas hasta el borde de la PCB permitiendo que puedas montar una variedad de sensores tales como bumpers de distancia La serigraf a muestra c mo las pistas est n conectadas las conexiones el ctricas se encuentran en la parte inferior y puedes cortar el cobre de las pistas con un cuchillo afilado o una peque a herramienta de corte rotativo si algunas de ellas interfieren en tu dise o ATT ame Las dos l neas sin uso de E S del microcontrolador del AS 3pi son las l neas de transmisi n y recepci n serie Esto B E OECEREEEE TET ERE LED E B El J pbeaceposeseeseesenanseen yi S permite a adir un segundo microcontrolador u otras placas microcontroladas como Baby Orangutan Basic EE e E Stamp o Arduino Nano a la placa de expansi n Este oo PERE BEBE SBRBEREGSSSRERRRESS segundo microcontrolador se ocuparia de todos los ee ERE EE RALE BEBE on sensores y del hardware adicional en la expansi n y ey tambi n del control de la base v a comandos serie Es ooo dec
72. s informaci n ver secci n 11 Presentaci n del valor de calibrado de los sensores en barras gr ficas Sirve para mostrar el uso de la funci n lcd load custom character siempre con print character para hacer m s f cil la visualizaci n del funcionamiento correcto de los sensores de l nea antes de que corra el robot Para m s informaci n sobre los comandos de la LCD ver Secci n 5 Espera a que el usuario pulse el bot n Es muy importante que tu robot empiece a rodar cuando t quieras o podr a salir inesperadamente del cuadro o fuera de sus manos cuando estas tratando iniciar el programa Usaremos la funci n button_is_pressed para esperar la pulsaci n del bot n B cuando haya mostrado el estado de la vert a y de los sensores Para m s informaci n ver secci n 8 En la segunda fase del programa tu 3p1 realizar la lectura del sensor y ajustar la velocidad de los motores a ella La idea general es que si el robot est fuera de l nea pueda volver pero si est en la l nea debe tratar de seguirla Los siguientes pasos ocurren dentro del bucle while que se repetir n una y otra vez hasta que lo pares o pulses el bot n reset Llamada a la funci6n read line Obliga al sensor a leer y devuelve una lectura estimada entre el robot y la l nea un valor entre O y 4000 El valor O indica que la l nea esta a la izquierda del sensor 0 valor de 1000 indica que la l nea esta debajo del sensor 1 2000 indica que esta debajo d
73. s para que funcione bien a una velocidad de 100 intenta aumentarla Probablemente necesitaras ajustar estos par metros en funci n del recorrido para que el robot vaya lo m s r pido posible Puedes ajustar gradualmente la velocidad m xima para que el 301 vaya lo m s r pido posible hasta el m ximo posible de 255 en carreras con radios de curvas de 6 y fijando los par metros del PID 00 JO oF WN E E Bis 8 Ejemplo Project 2 Resoluci n de laberintos 8 a Resoluci n de laberinto de l nea El siguiente paso desde el seguimiento de l nea es ense ar a tu 3pi a navegar entre caminos con giros recortados callejones sin salida e intersecciones Crea una red complicada de l neas entrecruzadas en negro a ade un c rculo que represente el final y ya tienes un laberinto de l neas debe ser un entorno dif cil para explorar por tu 3pi En un laberinto de l neas los robots corren tranquilamente sobre las l neas desde un inicio a un final asignado cruzando las intersecciones y saliendo de las l neas cortadas que hay durante el circuito Los robots tienen varias posibilidades para ejecutar el laberinto de modo que puedan seguir el camino m s r pido posible despu s de aprender los cruces y sobre todo los callejones sin salida Los laberintos que pretendemos resolver en este tutorial tienen una particularidad importante no contienen bucles Es decir este c digo no est hecho para salir de un bucle en el laberinto sin tener
74. st be at the beginning of any program that 8 uses the Pololu AVR library and 3pi op include lt pololu 3pi h gt TO This include file allows data to be stored in program space The Ei ATmegal68 has 16k of program space compared to 1k of RAM so large 12 pieces of static data should be stored in program space 13 include lt avr pgmspace h gt 14 Introductory messages The PROGMEM identifier causes the data to 15 go into program space 16 const char welcome linel PROGMEM Y Pololu 17 const char welcome_line2 PROGMEM 3 xf7 Robot 18 const char demo name linel PROGMEM Line 19 const char demo_name_line2 PROGMEM follower 20 A couple of simple tunes stored in program space 21 const char welcome PROGMEM g32 c32 22a const char go PROGMEM L16 cdegreg4 23 Data for generating the characters used in load_custom_characters 24 and display_readings By reading levels starting at various Zid offsets we can generate all of the 7 extra characters needed for a 26 bargraph This is also stored in program space 2e Nas const char levels PROGMEM 28 0b00000 29 0b00000 30 0000000 2l 0b00000 32 0b00000 33 0b00000 34 0b00000 33 OIT 36 OBAMA TT e 0b1111T 38 0011111 SOU 0b11111 40 0b11111 41 0 b11111 42 je 43 This function loads custom characters into the
75. t receiving data at 115 2 kbaud serial_set_baud_rate 115200 serial set mode SERIAL_CHECK serial receive ring buffer 100 while l wait for a command char command read next byte The list of commands is below add your own simply by choosing a command byte and introducing another case statement switch command case char 0x00 slient error probable master resetting break case char 0x81 send signature break case char 0x66 send raw sensor values break case char 0x87 send calibrated sensor values l break case char OxBO send trimpot break case char OxB1 send battery millivolts break case char OxB3 do play break case char oOxB4 calibrate line sensors IR EMITTERS ON send calibrated sensor values l break case char OxB5 line sensors reset calibration break case char OxB6 send line position break case char OxB 7 do clear break case char 0OxB8 do_print break 259a case char 0xB9 are be do lcd goto xyi 260 break 261 case char 0xBA 262 auto calibrate 263 break 264 case char OxBB 265 set_pid 266 break 267 case char OxBC 268 stop_pid 269 break 270 case char 0xCi1 2711 ml Torwardi 272 break 273 case char 0xC2 274 mi backward 2193 break 276 case char OxC5 2771 m2_forward 278 break 279 case ch
76. ta por el resultado que devuelve read_line simply rest ndole 2000 e El valor integral es un hist rico del funcionamiento del robot es la suma de todos los valores del t rmino proporcional que recuerda desde que el robot empieza a funcionar e El derivative es el indice de cambios de los valores proporcional Computamos en este ejemplo la diferencia entre los ltimos dos valores Este el trozo de c digo para la entrada de los valores PID Get the position of the line Note that we must provide the sensors argument to read_line here even though we are not interested in the individual sensor readings unsigned int position read line sensors IR EMITTERS ON The proportional term should be O when we are on the line int proportional int position 2000 Compute the derivative change and integral sum of the 7 position 9 int derivative proportional last proportional 10 integral proportional 11 Remember the last position 12 last proportional proportional Hay que tener en cuenta que la variable position es del tipo int en la f rmula para un proporcional Un unsigned int solo puede almacenar valores positivos luego la expresi n position 2000 pone fuera de prueba y puede llevar a un negative overflow En este caso o J3 00Uq4s GQ NE particular no afecta a los resultados pero seria una buena idea usar ajustar la f6rmula para afinar en el resultado Cada uno de los val
77. talla LCD monitor de carga de la bater a y buzzer EL programa consta de dos fases La primera fase consiste en la inicializaci n y calibraci n y est programada como la funci n intitialize Esta funci n es llamada una vez al principio de la funci n maino antes de que suceda algo y siguiendo estos pasos l Llamada a pololu_3pi_init 2000 para ajustar el 3pi con el timeout del sensor a 2000x0 4 us 800 us Este ajuste permite al sensor variar entre valores desde O completamente blanco a 2000 completamente negro en donde el valor de 2000 indica que el condensador tarda aproximadamente 800 us en descargarse Muestra el voltaje de la bater a que nos da la funci n read_battery_millivolts Es importante monitorizar la carga de la bater a para que el robot no de sorpresas en su carrera y las pilas est n bien cargadas durante la competici n Para m s informaci n ver secci n 3 Calibrado de los sensores Esto se logra mediante la activaci n del 3pi a derecha y a izquierda de la l nea al tiempo que llamamos a la funci n calibrate line sensors El m nimo y el m ximo de valores le dos durante este tiempo se almacenan en la RAM Esto permite a la funci n read_line_sensors_calibrated que devuelva valores ajustados en el rango de O a 1000 para cada sensor aunque alguno de los sensores responda de diferente manera que los otros La funci n read_line usada despu s en el c digo depende de los valores calibrados Para m
78. tion 17 int derivative proportional last_proportional 18 integral proportional 19 Remember the last position 20 last_proportional proportional 21 Compute the difference between the two motor power settings 22 mi m2 If this is a positive number the robot will turn 23 to the left If it is a negative number the robot will 24 turn to the right and the magnitude of the number determines 25 the sharpness of the turn 26 int power difference proportional 20 integral 10000 derivative 3 2 27 Compute the actual motor settings We never set either motor 28 to a negative value 29 const int max 60 the maximum speed 30 if power difference gt max led power difference max 32 if power difference lt max 33 power difference max 34 if power difference lt 0 35 set_motors max power difference max 36 else 2 4 set motors max max power difference 38 We use the inner three sensors 1 2 and 3 for 39 determining whether there is a line straight ahead and the 40 sensors 0 and 4 for detecting lines going to the left and Al traes 42 if sensors 1I lt 100 66 sensors 2 lt 100 amp amp sensors 3 lt 100 43 44 There is no line visible ahead and we didn t see any 45 intersection Must be a dead end 46 return 47 48 else if sensors 0 gt 200 sensors 4 gt 200 49 50 Found an intersection
79. trolador A Tmegal68 requieren ted to 9 25 V VBoost de un programador externo como el programador Pololu Orangutan USB o ma ped Sri la serie AVRISP de Atmel El 3pi tiene un conector est ndar de 6 pins que permite la programaci n directa del micro mediante un cable ISP que se conecta al dispositivo programador Tambi n necesitas un cable USB que conecte el programador con el PC No est incluido Si que lo tienes en el paquete combinado de 3pi programmer e Ordenador de mesa o port til Necesitas un PC para desarrollar c digo y grabarlo en el 3p1 Se puede programar en Windows Mac y Linux pero el soporte para Mac es limitado Adem s materiales para crear superficies por donde corra el 3pi e Hojas de papel largo y gruesas blancas o una pizarra blanca borrable usadas por los constructores de casas e Cinta colores brillantes para rejuntar m ltiples hojas a la vez e Cinta adhesiva de 34 negra para crear l neas a seguir por el robot user potentiometer blue power LED tied to 5 V VBat 4 b Enciende el 3pi La primera vez que uses el 3pi debes insertar 2 2 pilas AAA en cada sitio Para ello debes quitar las LCD Presta atenci n a la orientaci n para insertarla despu s Con la LCD quitada mira las figuras marcadas a la derecha af ten l FI 3 li En cuanto est n puestas las pilas inserta la LCD en ss ee su posici n encima del paquete de bater as y f botones Fijate bien en los pins que deben qu
80. uario si los has puesto Trimmer Muestra la posici n del mini potenci metro trimmer localizado en la parte inferior de la placa marcando un numero entre O y 1023 Al mostrar el valor parpadean los LEDS y toca una nota musical cuya frecuencia est en funci n a la lectura Puedes hacer girar los micro potenci metros con peque o destornillador de 2mm Sensores Muestra las lecturas actuales de los sensores IR mediante un gr fico de barras Barras grandes indican poca reflexi n negro Coloca un objeto reflectivo como un dedo sobre uno de los sensores y veras la lectura gr fica correspondiente Esta demo tambi n muestra al pulsar C que todos los sensores est n activos En iluminaci n interior cerca de bombillas de incandescencia o hal genas los sensores pueden emitir lecturas err neas debido a la emisi n de infrarrojos Remueve el Jumper PC5 para desactivar el control de los emisores IR lo que servir para que siempre est n activos Motores Pulsando A o C har que funcionen cada uno de los motores en su direcci n Si pulsas ambos botones ambos motores funcionan simult neamente Los motores aumentan gradualmente la velocidad si realizas nuevos programas estudia detenidamente el funcionamiento de aceleraci n Pulsa A o C para invertir la direcci n del motor correspondiente la letra del bot n se vuelve min scula si el motor funciona en sentido contrario Musica Toca una melodia de J S Bach s Fuga en D Menor en el buzzer m
81. ucci n recta a trav s de una S aumentar la velocidad El video muestra un prototipo de 3pi con un solo led azul de encendido pero funciona igual al de la versi n final y que ha sido programado completamente con LVBots Challenge 4 0 El c digo utilizado es muy avanzado y complicado mientras que el del ejemplo est resumido y por lo tanto est en tus manos desarrollarlo La mejoras al programa de ejemplo podr an incluir la velocidad y las variables de seguimiento de l nea PID para producir r pidos y cortos giros axiales asi como el aumento de velocidad en los tramos rectos Cuando est bamos tratando de mejorar el rendimiento del 3pi en el laberinto nuestro primer paso fue mejorar la l nea de seguimiento mejorando las variables PID con lo que se aumenta lentamente la velocidad m xima del robot y el segundo paso fue mejorar los giros para que fuesen m s r pidos y suaves Pronto nos dimos cuenta de que la mejora de la velocidad est limitada por las intersecciones Si el robot se mueve demasiado r pido cuando se las encuentra una intersecci n puede salirse de pista y perder la referencia de l nea Si va lento en las intersecciones en las rectas deben recuperar la velocidad perdida Podemos pensar en que la soluci n est entonces en el tiempo que tarda en recorrer la longitud de cada segmento durante la fase de aprendizaje El c digo puede restablecer el temporizador en una intersecci n y luego se detenerse cuando el 3pi en
82. ue hay en la parte inferior de la placa 7 Ejemplo Project 1 Siguiendo la l nea 7 a Acerca del seguimiento de l nea Ahora que has aprendido como compilar un program es tiempo de ense ar a tu robot 3pi algunas cosas m s complicadas En este ejemplo mostraremos como hacer que tu 3pi siga el camino que marca una l nea negra sobre fondo blanco coordinando los sensores y sus motores El seguimiento de l nea es una buena introducci n en la programaci n de robots para participar en un concurso no es dif cil construir una plataforma de l nea de seguimiento f cil de entender su funcionamiento y la programaci n de 3pi no es complicada Optimizar el programa para hacer que el robot 3pi se deslice sobre la l nea a la velocidad m s r pida posible ser un reto que puede llevarte a algunos conceptos avanzados de programaci n Pololu 3pi robot sobre una l nea negra de 34 Una l nea de seguimiento puede construirse en poco tiempo y por poco dinero consulta el tutorial de Construcci n de L neas de seguimiento y Laberintos de l nea 7 6 Algoritmo para 3pi de seguimiento de l nea El programa de seguimiento de l nea se encuentra en el directorio examples 3pi linefollower Nota Una versi n compatible para Arduino de este programa puedes bajarla como parte de las librer as Pololu Arduino ver Secci n 5 2 El c digo fuente demuestra la variedad de dispositivos de la 3pi como sensores de l nea motores pan
83. unsigned int pid enabled 0 8 unsigned char max_speed 255 9 unsigned char p num 0 TOn unsigned char p den 0 kika unsigned char d num 0 12 unsigned char d den 0 Loz unsigned int last_proportional 0 14 unsigned int sensors 5 15 This routine will be called repeatedly to keep the PID algorithm running 16 void pad check 17 18 if pid enabled Lo return 20 Do nothing if the denominator of any constant is zero AL if p_den 0 d_den 0 22a 23 set motors 0 0 24 return 25 26 Read the line position with serial interrupts running in the background 27 serial set mode SERIAL AUTOMATIC 28 unsigned int position read line sensors IR EMITTERS ON 29 serial set mode SERIAL_CHECK 30 The proportional term should be 0 when we are on the line 3L int proportional int position 2000 32 Compute the derivative change of the position a la int derivative proportional last proportional 34 Remember the last position cro last_proportional proportional 36 Compute the difference between the two motor power settings ls mi m2 If this is a positive number the robot will turn 385 to the right If it is a negative number the robot will 39 turn to the left and the magnitude of the number determines 40 the sharpness of the turn 41 int power difference proportional p_num p_den derivative p num p den 42 Compute the actual motor
84. x interfaz e tu 10 avr objcopy j eeprom set section flags eeprom alloc load cha mo strando el fichero en c di E O avr objdump h 5 test elf gt test las C HEN Para compilar selecciona Build Device atmegal68 gt Build o pulsa F7 Observa los avisos y errores indicados con puntos amarillos y rojos en la salida mostrada mas abajo Si el programa se compila correctamente el mensaje Build se realizo con 0 avisos aparecer al final de la salida y m el fichero test hex se crear en el El build DO message A Find in Files _ Breakpoints and Tracepoints directorio examples simple test Program 3190 bytes 19 5 Full text data bootloader Data 40 bytes 3 93 Full data baa noinit Build succeeded with 0 Warnings 3pi default AVR Studio ventana de compilaci n compilando el proyecto del ejemplo Conecta el programador a tu PC y este al ISP port de tu 3pi y enciende el 3pi pulsando el bot n POWER Si est s usando el Pololu Orangut n Programmer El LED verde de estado se enciende al meter el conector USB mientras los otros dos leds se encienden 5 segundos indicando que el programador se est iniciando El programador debe estar instalado correctamente antes de usarlo Si usas Orangut n USB programmer mira las instrucciones de instalaci n Pololu 3pi robot con el Orangut n USB programmer conectados por el ISP port Selecciona Tools gt Program
85. y unsigned char tune length read next byte if check data byte tune length return unsigned char 1 for i 0 i lt tune_length 1 if i gt sizeof music buffer avoid overflow return music buffer i read next byte if check data byte music buffer i return add the end of string character 0 music_buffer i 0 play music_buffer Clears the LCD void do clear clear Displays data to the screen void do_print unsigned char string_length read next byte if check data byte string length return unsigned char i for i 0 i lt string_length i unsigned char character character read next byte if check data byte character etur Before printing to the LCD we need to go to AUTOMATIC mode Otherwise we might miss characters during the lengthy LCD routines serial set mode SERIAL AUTOMATIC print character character serial set mode SERIAL CHECK Goes to the x y coordinates on the lcd specified by the two data bytes void do_lcd_goto_xy unsigned char x read next byte if check data byte x return unsigned char y read next byte if check data byte y return lcd_goto_xy x y Runs through an automatic calibration sequence void auto calibrate time reset set motors 60 60 while get ms 250 calibrate line sensors IR EMITTERS ON set motors
86. y from program space go while is playing This is the main function where the code starts All C programs must have a main function defined somewhere int main f unsigned int sensors 5 an array to hold sensor values set up the 3pi initialize This is the main loop it will run forever while 1 Get the position of the line Note that we must provide the sensors argument to read line here even though we are not interested in the individual sensor readings unsigned int position read line sensors IR_EMITTERS_ON if position lt 1000 We are far to the right of the line turn left Set the right motor to 100 and the left motor to zero to do a sharp turn to the left Note that the maximum value of either motor speed is 255 so we are driving it at just about 40 of the max set_motors 0 100 Just for fun indicate the direction we are turning on the LEDs left_led 1 right_led 0 else if position lt 3000 181 182 We are somewhat close to being centered on the line 183 drive straight 184 set_motors 100 100 185 left_led 1 186 right_led 1 187 188 else 189 190 We are far to the left of the line turn right 191 set_motors 100 0 192 left led 0 193 right_led 1 194 195 196 This part of the code is never reached A robot should LIT never reach the end of its program
87. y eng rane T f ae ve si d p tini l v ak ae f k ai ti eee ed do AA BS SS ORS ERS 7 WO BALE daS ddira les Y A OTO wine aid aid eee we A A ay a ee ee A 10 Sse pois AOU MA Gel Caroureo Simp lira a kwes MON a Mil iii A Bas A L1 Ow ELOO E AN a 1 OO ere aaa cee eh eee tk eee ee ee ee ae ee ee LA G a Descargar e instalar la Librer a C CAtt oooooooooooooooooooooooo 12 655 Comprla do UA Programs SUMPLS sie pad able ORO ERODE ROE aia da OR da 159 dw BJEMPLO Project Li Suquuiendo La LION ad ss ones dias da a te aa 14 Jaa EL GRO Cel Seguimiento de LIS fs ceros dea e Shae ee ee 14 T40 Algoritmo pata Spi de seguimiento de 1in gac lt sea de an visa 19 7 c Seguimiento de l nea avanzado con 3pi PID Control 1 9 So Ejemplo Project 23 Resolucion de Laberintos ia a 20 See RESoLucion de Laberinto de LLC ci ena ae Hd aa a o 20 ovo Trabasar Con m ltiples ficheros C en AVR SrLUdLIO s psc iras 21 Ose Mano izg isrda Contra SL MUTO 45 tek ak dd aia ee a AR ZO Sat Buclets Prineltcaless bot toe ea rn di a A pp Oe JR e 23 Se o e OO La SOLO dd os Se e l e di Zo S L Mejorar el c digo d solucion del Laberinto siese wo abso eee as wees 2T Oe Tebas de TE a Ge Die 4 ae ee Cb ee AEF AEE eee are ee ee eo 30 Sa Tabla de asignaci n ce PINS seg n TUNCTON kol avi kaa aye dda we ad ow we ewe des 30 JD Tabla 106 asignacion ds PINS POr Din peores den ee ee Shade Soe cer eee 30 tO Ln oracion pera Su exert facade a ee Ree BS ee oe
88. y the library 6 it is intended as an example of how to use the master slave Tes routines 8 http www pololu com docs 0J21 http www pololu com docs 0J20 11 http www poolu com 12 RE 13 Data for generating the characters used in load_custom_characters 14 and display_readings By reading levels starting at various 15 offsets we can generate all of the 7 extra characters needed for a 16 bargraph This is also stored in program space 17 const char levels PROGMEM 18 0b00000 19 20 Ale 22 23 24 ala 26 AT ou 28 A de 30 3l JA ES W 34 Jin SO OT 38 39 40 41 42 43 44 45 46 47 48 49 50 Sla Deed oe 54 Si SO Ila 58 SA 60 61 62 63 64 Dos 66 Ola 68 69 70 71 12 73 74 T3 Tes Pa 78 Tox 08 81 82 OS 84 Bos 86 Si 88 89 90 II 92 AS w 94 95 96 Sa 98 0b00000 Ob00000 Ob00000 Ob00000 Ob00000 Ob00000 0b11111 0b11111 0b11111 0b11111 0b11111 0b11111 0b11111 FF l L L L L l This function loads custom characters into the LCD Up to 8 characters can be loaded we use them for 6 levels of a bar graph plus a back arrow and a musical note character void load custom characters lcd_load_custom_character levels 0O 0 lcd_load_custom_character levels 1 1 lcd load custom character lev

Download Pdf Manuals

image

Related Search

Related Contents

ELITE Value 400E/600E/800E/1000E Manuel d`utilisation  DT.FIAT-P  Plastificatrice A4 - Backloader  Mode d`emploi  PRIMERA COVOCATORIA Seleccionar una empresa que  取扱説明書 - Panasonic  Violetta  Avaya BCM Voice Messaging User's Manual  43-883型 取扱説明書 ガスファンヒーター  2711-2.3, Installing a User EEPROM in a Series D or E PanelView  

Copyright © All rights reserved.
Failed to retrieve file