Robótica Inteligente Programación PPRK Marco Antonio López Trinidad Luis Enrique Sucar Succar Departamento de Computación Tec de Monterrey Programación PPRK 5 Problema: Agregar y obtener lecturas de un compás, para el PPRK 5 El sensor utilizado, es el compás 1490 de Dinsmore Instrument Co. Programación PPRK 5 Interfaz 5 El compás proporciona ocho posibles orientaciones (N, NE, E, SE, S, SW, W y NW) 5 Las ochos posibles orientaciones se pueden codificar como (N, E, S y W), que se alimentarán a la tarjeta PONTECH SV230, como señales digitales por medio de un arreglo de resistores pull−up Programación PPRK 5 Problemas 5 La tarjeta PONTECH SV230, no tiene entradas digitales; sin embargo; cuenta con cinco entradas analógicas 5 Tres de las entradas analógicas están ocupadas por los sensores IR 5 Sin embargo, es posible codificar las cuatro señales digitales del compás 1490, en una sola señal analógica, que será alimentada a una de las entradas analógicas de la tarjeta PONTECH SV230 Programación PPRK 5 Comunicación entre circuitos digitales y analógicos 00110001... Eo Programación PPRK 5 Salida analógica de un convertidor unipolar de n bits −1 −2 −3 −n Eo = VR(a12 + a22 +a32 +...+an2 ) Programación PPRK 5 Circuito convertidor de voltaje digital/analógico de cuatro bits Programación PPRK 5 Determinación de la orientación 5 La orientación se puede leer mediante los comandos correspondientes a cualquiera de los puertos AD4 o AD5, dependiendo si se conecto Vout, a las terminales 4 o 5 del puerto analógico A de la tarjeta 5 El rango de valores que se pueden obtener, depende de la exactitud de los resistores, por los procesos de manufactura o bien por ruido Programación PPRK Orientación Norte Noreste Este Sureste Sur Suroeste Oeste Noroeste Bajo 149 37 97 78 197 163 181 115 Alto 151 42 100 82 202 164 184 117 Programación PPRK 5 Código para tomar las lecturas del compas 1490 void SimpleFunction(void) { EventPtr e; double horientation; //captura el valor de la horientacion char incoming[] = "999" //captura el valor del sensor board.Tx("AD", 4); //indica que se debe leer el puerto analogico 4 board.Rx(incoming); //indica que se debe leer la lectura del sensor y se //deposita el resultado en incoming // buffer correction −− replace all ASCII non−numbers with spaces for (int l=0; l<=2; l++) if ( incoming[l] == 10 ) incoming[l]=’ ’; incoming[3] = ’\0’; Programación PPRK if (incoming[0] != ’2’) // three digit number cut−off incoming[2] = ’\0’; horientation = StrAToF(incoming); //se despliega que el robot apunta hacia el norte if((horientation == 149) ||(horientation == 151) robot.Disp("Norte", 50, 70); //se despliega que el robot apunta hacia el noreste if((horientation == 37) ||(horientation == 42) robot.Disp("Noreste", 50, 70); //se despliega que el robot apunta hacia el este if((horientation == 97) ||(horientation == 100) robot.Disp("Este", 50, 70); //se despliega que el robot apunta hacia el sureste if((horientation == 78) ||(horientation == 82) robot.Disp("Sureste", 50, 70); //se despliega que el robot apunta hacia el sur if((horientation == 187) ||(horientation == 202) robot.Disp("Sur", 50, 70); //se despliega que el robot apunta hacia el suroeste if((horientation == 163) ||(horientation == 164) robot.Disp("Suroeste", 50, 70); Programación PPRK //se despliega que el robot apunta hacia el oeste if((horientation == 181) ||(horientation == 184) robot.Disp("Oeste", 50, 70); //se despliega que el robot apunta hacia el noroeste if((horientation == 115) ||(horientation == 117) robot.Disp("Noroeste", 50, 70); }//fin de SimpleFunction Bibliografia 1. http://www−2.cs.cmu.edu/~reshko/PILOT/ 2. http://www.lynxmotion.com/ 3. http://www.pontech.com