You are on page 1of 20

Velocista seguidor de linea CHANCHIS Documentacin del robot :

Descripcin de la estructura mecnica del robot : Chanchis es un robot diseado para competencias de seguidores de linea, esta hecho en forma de triciclo, una vez que tiene dos ruedas puestas traseras y una bolita adelante que le asegura la estabilidad. Esta armado sobre una placa de madera atornillada a la placa que contiene los sensores, los motores van puestos acoplados con un enganche de hierro atornillado tambin a la madera y la placa que lleva el circuito esta adaptada en un tornillo.

Descripcin de los circuitos electrnicos utilizados: En el robot usamos para el control el microcontrolador AT E!A"", con una tensi#n de $ voltios, usamos una % &"'$ para ba(ar la tensi#n de entrada de la bater)a que tenemos, de &,* voltios a partir de dos bater)as recargables de +,, voltios en serie. Tambin usamos un puente - %*." para el control de los motores. El robot tiene $ sensores infraro(os C/0&' para la detecci#n de la linea, dos bater)as, y la placa que lleva el circuito.

Descripcin del funcionamiento bsico del robot 1reviamente al inicio del seguimiento de la linea, el robot hace una prueba con los sensores tratande de buscar las posiciones que los mismos pueden encontrarse sobre la linea, para tener me(or repuesta de direccionamiento durante el circuito. 2e trata de dar vueltas en c)rculos probando los sensores contra la linea blanca del piso buscando esas posiciones. %uego de dar las vueltas se posiciona el robot en el centro de la linea blanca y el mismo arranca a hacer el circuito. 3unciona con control de los dos motores de tracci#n independiente, aumentando y disminuyendo la velocidad de cada motor para poder hacer curvas y enderezar el robot. Cdigo fuente del soft!are A4E35%E TA6!ET 7 8elocista C9 7 atmega"" 3:C19 7 "''''''9% CC 7 avr;gcc C3%A!2 7 ;< ;g 26C 7 =>shell find . ;name ?@.AcB?C 5/C 7 =>shell find . ;name ?@.AhB?C ifeq >=> C9C, atmega"C TA6!ET:1 7 m" -392E 7 'Dd. %392E 7 'DeE C9:/ 7 ' else ifeq >=> C9C, atmega""C TA6!ET:1 7 m"" -392E 7 'Ddf

%392E 7 'De* C9:/ 7 F else =>error Target no soportadoC endif endif CGE35/E2 7 ;G H 6eglas HHHHHHHH H 6eglas para compilar y generar el binario para subir al target allI heD binI =>26CC =>5/CC =>CCC =>CGE35/E2C ;mmcu7=> avr;size ;d =>TA6!ETC.bin C9C =>C3%A!2C ;o =>TA6!ETC.bin =>26CC C97=> C9:/C ;G3:C197=>3:C19C

heDI bin avr;ob(copy ;( .teDt ;< iheD =>TA6!ETC.bin =>TA6!ETC.heD H 6eglas que tienen sentido si se ba(a el maJefile y se usa localmente. programI heD avrdude ;c usbtiny ;p =>TA6!ET:1C ;9 fIKI=>TA6!ETC.heD ;3 program:dKI bin avarice ;K ;( usb ;;erase ;;program ;;file =>TA6!ETC fuseI avrdude ;c usbtiny ;p =>TA6!ET:1C ;9 lfuseIKI=>%392ECIm ;9 hfuseIKI=>-392ECIm asmI =>26CC =>5/CC =>CCC =>CGE35/E2C ;mmcu7=> cleanI rm ;rf =>TA6!ETC.heD =>TA6!ETC =>TA6!ETC.s """""""""""""""""""""""""""""""""""""""""" C</T6<% GE <T<6E2 Hinclude Mmotores.hM void motores1render>voidC N 1<6TC O7 :P8>1CFCQ RR 1S ' 1<6TC O7 :P8>1C'CQ RR 1S * T void motoresApagar>voidC C9C =>C3%A!2C ;2 ;o =>TA6!ETC.s =L

N 1<6TC U7V :P8>1CFCQ RR 1S ' 1<6TC U7V :P8>1C'CQ RR 1S * T void cambiar8elocidad otor5zq>uint":t velocidad, bool haciaAdelanteC N if >haciaAdelanteC N <C6'A 7 velocidadQ <C6'P 7 'Q T else N <C6'A 7 'Q <C6'P 7 velocidadQ T T void cambiar8elocidad otorGer>uint":t velocidad, bool haciaAdelanteC N if >haciaAdelanteC N <C6*A 7 velocidadQ <C6*P 7 'Q T else N <C6*A 7 'Q <C6*P 7 velocidadQ T T void motores8elocidad>intF,:t izq, intF,:t derC N RR %e ba(o la velocidad al motor izquierdo porque el derecho anda mas lento intF,:t vel5zq3inal 7 >izq @ "+C R F''Q if >izq L 'C cambiar8elocidad otor5zq> >uint":tC>;vel5zq3inalC, falseCQ else cambiar8elocidad otor5zq> >uint":tC>vel5zq3inalC, trueCQ if >der L 'C cambiar8elocidad otorGer> >uint":tC>;derC, falseCQ else cambiar8elocidad otorGer> >uint":tC>derC, trueCQ T

<T<6E2.Hifndef: <T<6E2:Hdefine : <T<6E2:Hinclude Mstartup.hM Hinclude Mstdbool.hM void motores1render>voidCQ

void motoresApagar>voidCQ void motores8elocidad>intF,:t izq, intF,:t derCQ Hendif RR: <T<6E2:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ C</T6<% GE %<2 2E/2<6E2 Hinclude Msensores.hM uintF,:t sensores 8alor1rohibidoTQ uintF,:t sensores 8alor1rohibidoTQ uintF,:t sensores 8alor1rohibidoTQ uintF,:t sensores 8alor1rohibidoTQ aD<nA$B 7 N8alor1rohibido, 8alor1rohibido, 8alor1rohibido, 8alor1rohibido, in<nA$B 7 N8alor1rohibido, 8alor1rohibido, 8alor1rohibido, 8alor1rohibido, aD<ffA$B 7 N8alor1rohibido, 8alor1rohibido, 8alor1rohibido, 8alor1rohibido, in<ffA$B 7 N8alor1rohibido, 8alor1rohibido, 8alor1rohibido, 8alor1rohibido,

uint":t mascaraC 7 'D''Q uint":t mascaraG 7 'D''Q void emisor1render>voidC N 1<6TC O7 :P8>1CECQ T void emisorApagar>voidC N 1<6TC U7V :P8>1CECQ T void sensores<utput-igh>voidC N GG6C O7 mascaraCQ GG6G O7 mascaraGQ 1<6TC O7 mascaraCQ 1<6TG O7 mascaraGQ T void sensores5nput>voidC N GG6C U7V mascaraCQ GG6G U7V mascaraGQ 1<6TC U7V mascaraCQ 1<6TG U7V mascaraGQ

T uint":t sensores!etEstadoActual15/C>voidC N return >15/C U mascaraCCQ T uint":t sensores!etEstadoActual15/G>voidC N return >15/G U mascaraGCQ T void sensores%eer>uintF,:t @sensores8alorC N uint":t iQ uint":t start:timeQ uint":t delta:timeQ uintF,:t time 7 FQ RR 1ara saber si le asigne o no un valor mas adelante bool cambio2ensorA$B 7 Nfalse, false, false, false, falseTQ for>i 7 'Q i L $Q iWWC sensores8alorAiB 7 'Q sensores<utput-igh>CQ :delay:us>F'CQ sensores5nput>CQ uint":t ultimo15/C 7 mascaraCQ uint":t ultimo15/G 7 mascaraGQ uint":t prevTCC6*A 7 TCC6*AQ uint":t prevTCC6*P 7 TCC6*PQ start:time 7 TC/T*Q Khile >time L Time<ut2ensoresC N delta:time 7 TC/T* ; start:timeQ time W7 delta:timeQ start:time W7 delta:timeQ if >sensores!etEstadoActual15/C>C 77 ultimo15/C UU sensores!etEstadoActual15/G>C 77 ultimo15/GC continueQ RR !uardo los ultimos valores observados ultimo15/C 7 sensores!etEstadoActual15/C>CQ ultimo15/G 7 sensores!etEstadoActual15/G>CQ RR e fi(o cual estado cambio if > >>ultimo15/C U :P8>1C$CC 77 'C UU >cambio2ensorA'B 77 falseC C

N sensores8alorA'B 7 timeQ cambio2ensorA'B 7 trueQ T else if > >>ultimo15/G U :P8>1G'CC 77 'C UU >cambio2ensorAFB 77 falseC C N sensores8alorAFB 7 timeQ cambio2ensorAFB 7 trueQ T else if > >>ultimo15/G U :P8>1GFCC 77 'C UU >cambio2ensorA*B 77 falseC C N sensores8alorA*B 7 timeQ cambio2ensorA*B 7 trueQ T else if > >>ultimo15/G U :P8>1G*CC 77 'C UU >cambio2ensorA+B 77 falseC C N sensores8alorA+B 7 timeQ cambio2ensorA+B 7 trueQ T else if > >>ultimo15/C U :P8>1C+CC 77 'C UU >cambio2ensorAEB 77 falseC C N sensores8alorAEB 7 timeQ cambio2ensorAEB 7 trueQ T T for>i 7 'Q i L $Q iWWC if >sensores8alorAiB 77 'C sensores8alorAiB 7 Time<ut2ensoresQ T void sensores%eerConCorrecion>uintF,:t @sensores8alorC R@ -ago una medicion con los leds de los sensores prendidos y luego otra @ con los sensores apagados, luego descuento la medicion con los leds @ apagados a la medicion con los leds encendidos. @R N uintF,:t sensoresApagadoA$BQ uint":t iQ emisorApagar>CQ sensores%eer>sensoresApagadoCQ emisor1render>CQ sensores%eer>sensores8alorCQ for >i 7 'Q i L $Q iWWC N sensores8alorAiB W7 Time<ut2ensores ; sensoresApagadoAiBQ T T void sensores%eerCalibrado>uintF,:t @sensores8alorC RR Convierte a los valores al rango ';F''' N uint":t iQ

sensores%eerConCorrecion>sensores8alorCQ for >i 7 'Q i L $Q iWWC N uintF,:t calmin,calmaDQ uintF,:t denominadorQ if>sensores in<ffAiB L sensores in<nAiBC RR senial no significativa calmin 7 Time<ut2ensoresQ else calmin 7 sensores in<nAiB W Time<ut2ensores ; sensores in<ffAiBQ if>sensores aD<ffAiB L sensores aD<nAiBC RR senial no significativa calmaD 7 Time<ut2ensoresQ else calmaD 7 sensores aD<nAiB W Time<ut2ensores ; sensores aD<ffAiBQ denominador 7 calmaD ; calminQ intF,:t D 7 'Q if>denominador X7 'C D 7 >>>int+*:tCsensores8alorAiBC ; calminC @ F''' R denominadorQ if>D L 'C D 7 'Q else if>D Y F'''C D 7 F'''Q RR ' para negro, F''' para blanco. sensores8alorAiB 7 F''' ; DQ T T uintF,:t leer%inea>voidC N uint":t i, sobre%inea 7 'Q uint+*:t promedio 7 'Q uintF,:t sum 7 'Q static uintF,:t ultimo8alor 7 'Q RR 2e asume inicialmente que la linea esta a la izquierda uintF,:t sensores8alorA$BQ sensores%eerCalibrado>sensores8alorCQ for >i 7 'Q i L $Q iWWC N intF,:t valor 7 sensores8alorAiBQ if>valor Y argen%ineaPlancaC N sobre%inea 7 FQ T

RR 2olo se usan los valores que estan sobre un margen de ruido if>valor Y argen6uidoC N promedio W7 >int+*:tC>valorC @ >i @ F'''CQ sum W7 valorQ T T if>Xsobre%ineaC N RR 2i la ultima lectura fue del medio a la izquierda if>ultimo8alor L >$;FC@F'''R*C return 'Q else return >$;FC@F'''Q T ultimo8alor 7 promedioRsumQ return ultimo8alorQ T void obtener8aloresCalibracion>uintF,:t @sensores in, uintF,:t @sensores aDC N uint":t i, (Q uintF,:t sensoresTempA$BQ RR 1ara la primer medicion se le asigna el mismo valor a ambas variables for >( 7 'Q ( L F'Q (WWC N sensores%eer>sensoresTempCQ for >i 7 'Q i L $Q iWWC N if >sensoresTempAiB L sensores inAiB OO sensores inAiB 77 8alor1rohibidoC sensores inAiB 7 sensoresTempAiBQ if >sensoresTempAiB Y sensores aDAiB OO sensores aDAiB 77 8alor1rohibidoC sensores aDAiB 7 sensoresTempAiBQ T T T uint":t sensores%eerGigital>uintF,:t lineaPlanca%imiteC N uint":t iQ uint":t sensoresGigital 7 'D''Q uintF,:t sensores8alorA$BQ sensores%eerConCorrecion>sensores8alorCQ

if >sensores8alorA'B L lineaPlanca%imiteC sensoresGigital O7 :P8>2E/2'CQ if >sensores8alorAFB L lineaPlanca%imiteC sensoresGigital O7 :P8>2E/2FCQ if >sensores8alorA*B L lineaPlanca%imiteC sensoresGigital O7 :P8>2E/2*CQ if >sensores8alorA+B L lineaPlanca%imiteC sensoresGigital O7 :P8>2E/2+CQ if >sensores8alorAEB L lineaPlanca%imiteC sensoresGigital O7 :P8>2E/2ECQ return sensoresGigitalQ T uint":t sensores%eerGigitalConCalibracion>voidC N uint":t iQ uint":t sensoresGigital 7 'D''Q uintF,:t sensores8alorA$BQ sensores%eerCalibrado>sensores8alorCQ if >sensores8alorA'B Y if >sensores8alorAFB Y if >sensores8alorA*B Y if >sensores8alorA+B Y if >sensores8alorAEB Y return sensoresGigitalQ T void actualizar8aloresCalibracion>voidC N emisor1render>CQ obtener8aloresCalibracion>sensores in<n, sensores aD<nCQ emisorApagar>CQ obtener8aloresCalibracion>sensores in<ff, sensores aD<ffCQ T void sensores2tartup>voidC N mascaraC O7 :P8>1C+CQ mascaraC O7 :P8>1C$CQ mascaraG O7 :P8>1G'CQ mascaraG O7 :P8>1GFCQ mascaraG O7 :P8>1G*CQ T @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2E/2<6E2.Hifndef:2E/2<6E2:Hdefine :2E/2<6E2:Hinclude LavrRio.hY Hinclude LutilRdelay.hY argen%ineaPlancaC sensoresGigital O7 :P8>2E/2'CQ argen%ineaPlancaC sensoresGigital O7 :P8>2E/2FCQ argen%ineaPlancaC sensoresGigital O7 :P8>2E/2*CQ argen%ineaPlancaC sensoresGigital O7 :P8>2E/2+CQ argen%ineaPlancaC sensoresGigital O7 :P8>2E/2ECQ

Hinclude Lstdbool.hY Hdefine 8alor1rohibido Hdefine 2E/2' ' Hdefine 2E/2F F Hdefine 2E/2* * Hdefine 2E/2+ + Hdefine 2E/2E E Hdefine Time<ut2ensores Hdefine Hdefine RR RR RR RR RR F''''

$''' RR Ciclos que va a contar hasta considerar RR al sensor esta sobre negro.

argen6uido$' argen%ineaPlanca *''

1C$ 2ensor LL 1G' 2ensor L 1GF 2ensor OO 1G* 2ensor Y 1C+ 2ensor YY

RR 2e debe e(ecutar antes de llamar a los metodos de esta biblioteca. void sensores2tartup>voidCQ RR Gevuelve un uint":t donde estan mapeados los sensores, en el bit 2E/2Z RR esta la lectura del sensor Z. uint":t sensores%eerGigital>uintF,:t lineaPlanca%imiteCQ RR Gevuelve un uint":t donde estan mapeados los sensores, en el bit 2E/2Z RR esta la lectura del sensor Z. RR 16EI 2e deben calibrar los sensores antes de usar esta funcion uint":t sensores%eerGigitalConCalibracion>voidCQ RR Gevuelve un valor en el rango ';E''' que indica que corrimiento RR tiene sobre la linea. uintF,:t leer%inea>voidCQ RR <btiene los valores con los que va a calcular las mediciones calibradas RR 2e debe e(ecutar antes de obtener alguna medicion. void actualizar8aloresCalibracion>voidCQ Hendif RR :2E/2<6E2:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2TA6T91 Hinclude Mstartup.hM void configurarEntradas>voidC N RR GG6P U7V :P8>1P'CQ

RR Poton para empezar

RR T

1<6TP O7 :P8>1P'CQ

void configurar1ines otor>voidC N RR Tengo un 1S por cada motor RR1S ' GG6G O7 :P8>1G$CQ RR P GG6G O7 :P8>1G,CQ RR A 1<6TG U7V :P8>1G$CQ 1<6TG U7V :P8>1G,CQ RR1S * GG6G O7 :P8>1G+CQ RR P GG6P O7 :P8>1P+CQ RR A 1<6TG U7V :P8>1G+CQ 1<6TP U7V :P8>1P+CQ GG6C O7 :P8>1CFCQ RR Enable 1S GG6C O7 :P8>1C'CQ RR Enable 1S 1<6TC U7V :P8>1CFCQ 1<6TC U7V :P8>1C'CQ T void configurar2alidas%eds>voidC N RR Ge izquierda a derecha GG6G O7 :P8>1GECQ GG6G O7 :P8>1G&CQ GG6P O7 :P8>1P'CQ GG6P O7 :P8>1PFCQ GG6P O7 :P8>1P*CQ 1<6TG U7V :P8>1GECQ 1<6TG U7V :P8>1G&CQ 1<6TP U7V :P8>1P'CQ 1<6TP U7V :P8>1PFCQ 1<6TP U7V :P8>1P*CQ T void configurar2alidas>voidC N GG6C O7 :P8>1CECQ RR %eds de sensores configurar2alidas%eds>CQ configurar1ines otor>CQ T void cambiar3recuencia icro>voidC N ' *

C%416 7 >FLLC%41CECQ RR /ecesario para poder cambiar el prescaler del micro C%416 7 'Q RR 1rescaler F, " hz :delay:ms>$'CQ T void 1S otor2tartup>voidC N RR 1S ' RR 3ast 1S ode, inverting mode TCC6'A U7V :P8>C< 'A'CQ TCC6'A O7 :P8>C< 'AFCQ TCC6'A U7V :P8>C< 'P'CQ TCC6'A O7 :P8>C< 'PFCQ RR 3ast 1S , S! ode + TCC6'A O7 :P8>S! ''CQ TCC6'A O7 :P8>S! 'FCQ TCC6'P U7V :P8>S! '*CQ RR /o prescaling TCC6'P O7 :P8>C2''CQ TCC6'P U7V :P8>C2'FCQ TCC6'P U7V :P8>C2'*CQ RR 2et output to ' <C6'A 7 <C6'P 7 'Q RR 1S *

RR 3ast 1S ode, inverting mode TCC6*A U7V :P8>C< *A'CQ TCC6*A O7 :P8>C< *AFCQ TCC6*A U7V :P8>C< *P'CQ TCC6*A O7 :P8>C< *PFCQ RR 3ast 1S , S! ode + TCC6*A O7 :P8>S! ''CQ TCC6*A O7 :P8>S! 'FCQ TCC6*P U7V :P8>S! '*CQ RR /o prescaling TCC6*P O7 :P8>C2*'CQ TCC6*P U7V :P8>C2*FCQ TCC6*P U7V :P8>C2**CQ RR 2et output to ' <C6*A 7 <C6*P 7 'Q T void startup>voidC N configurarEntradas>CQ configurar2alidas>CQ cambiar3recuencia icro>CQ

1S T

otor2tartup>CQ

RR %os sensores se configuran mas adelante en el programa. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2TA6T91.Hifndef:2TA6T91:Hdefine :2TA6T91:Hdefine 3:C19 "''''''9% Hinclude LavrRio.hY Hinclude LutilRdelay.hY void startup>voidCQ uint":t get ascara2ensores>voidCQ Hendif RR:2TA6T91:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 8E%<C52TA.C Hinclude Lstdbool.hY Hinclude Mstartup.hM Hinclude Mmotores.hM Hinclude Msensores.hM Hdefine %EGF</ Hdefine %EG*</ Hdefine %EG+</ Hdefine %EGE</ Hdefine %EG$</ Hdefine %EGF<33 Hdefine %EG*<33 Hdefine %EG+<33 Hdefine %EGE<33 Hdefine %EG$<33 Hdefine 4p Hdefine 4d Hdefine 4i R+ " RF''' *$$ 1<6TG O7 :P8>1GEC 1<6TG O7 :P8>1G&C 1<6TP O7 :P8>1P'C 1<6TP O7 :P8>1PFC 1<6TP O7 :P8>1P*C 1<6TG U7V :P8>1GEC 1<6TG U7V :P8>1G&C 1<6TP U7V :P8>1P'C 1<6TP U7V :P8>1PFC 1<6TP U7V :P8>1P*C

Hdefine 8elocidad aDima void apagar%eds>voidC N %EGF<33Q %EG*<33Q %EG+<33Q

%EGE<33Q %EG$<33Q T void mostrar2ensoresGesdeGatos>uint":t sensoresGigitalC N apagar%eds>CQ if > >sensoresGigital U :P8>2E/2'CC X7 'C %EGF</Q if > >sensoresGigital U :P8>2E/2FCC X7 'C %EG*</Q if > >sensoresGigital U :P8>2E/2*CC X7 'C %EG+</Q if > >sensoresGigital U :P8>2E/2+CC X7 'C %EGE</Q if > >sensoresGigital U :P8>2E/2ECC X7 'C %EG$</Q T void mostrar2ensores>C N uint":t sensoresGigitalQ Khile>FC mostrar2ensoresGesdeGatos> sensores%eerGigital>&''C CQ T void mostrar2ensoresCalibrados>C N uint":t sensoresGigitalQ Khile>FC mostrar2ensoresGesdeGatos> sensores%eerGigitalConCalibracion>C CQ T void inicializar2in over>voidC N uint":t iQ for >i 7 'Q i L F$'Q iWWC N 1<6TP O7 :P8>1P'CQ actualizar8aloresCalibracion>CQ :delay:ms>F'CQ 1<6TP U7V :P8>1P'CQ :delay:ms>FCQ T T void pulsadorArranque>C N bool comenzar 7 falseQ

Khile>FC N mostrar2ensores>CQ if >V15/P U >FLL1P'CC N comenzar 7 trueQ continueQ T if >comenzarC breaJQ T T void ledsTest>voidC N const uint":t vel 7 &$Q Khile>FC N 1<6TP U7V :P8>1P*CQ 1<6TG O7 :P8>1GECQ :delay:ms>velCQ 1<6TG U7V :P8>1GECQ 1<6TG O7 :P8>1G&CQ :delay:ms>velCQ 1<6TG U7V :P8>1G&CQ 1<6TP O7 :P8>1P'CQ :delay:ms>velCQ 1<6TP U7V :P8>1P'CQ 1<6TP O7 :P8>1PFCQ :delay:ms>velCQ 1<6TP U7V :P8>1PFCQ 1<6TP O7 :P8>1P*CQ :delay:ms>velCQ T T void mostrar%eds5nicializar>uintF,:t i, uintF,:t maDimoC N uintF,:t paso 7 maDimoR.Q apagar%eds>CQ if >i Y '@paso UU i L $@pasoC %EGF</Q if >i Y F@paso UU i L ,@pasoC %EG*</Q if >i Y *@paso UU i L &@pasoC %EG+</Q if >i Y +@paso UU i L "@pasoC %EGE</Q if >i Y E@paso UU i L .@pasoC %EG$</Q T void inicializar>voidC N

const uintF,:t velocidad 7 F''Q const uintF,:t tiempo5nicializacion 7 F$'Q uintF,:t iQ motores1render>CQ for >i 7 'Q i L tiempo5nicializacionQ iWWC N mostrar%eds5nicializar>i, tiempo5nicializacionCQ motores8elocidad>velocidad, ;velocidadCQ actualizar8aloresCalibracion>CQ :delay:ms>F'CQ T motores8elocidad>', 'CQ motoresApagar>CQ apagar%eds>CQ T void arranqueGespacio>voidC N uintF,:t velQ uint":t iQ const uint":t cantidad5ncrementos 7 "'Q for >i 7 *'Q i L cantidad5ncrementosQ iWWC N vel 7 >i@8elocidad aDimaCRcantidad5ncrementosQ motores8elocidad> >uint":tC vel, >uint":tC velCQ :delay:ms>$CQ T T int main>voidC N uintF,:t posicionQ intF,:t proporcionalAnterior 7 'Q intF,:t proporcionalQ intF,:t derivativoQ int+*:t integral 7 'Q RR !uarda la diferencia entre las velocidades de los motores. intF,:t diferencia8elocidadesQ startup>CQ

sensores2tartup>CQ RRpulsadorArranque>CQ :delay:ms>*$''CQ inicializar>CQ :delay:ms>E$''CQ motores1render>CQ arranqueGespacio>CQ Khile>FC N posicion 7 leer%inea>CQ proporcional 7 >intF,:tC posicion ; *'''Q RR 0a que *''' es el centro derivativo 7 proporcional ; proporcionalAnteriorQ integral W7 proporcionalQ proporcionalAnterior 7 proporcionalQ diferencia8elocidades 7 proporcional 4p W derivativo@4d W integral 4iQ if >diferencia8elocidades Y 8elocidad aDimaC diferencia8elocidades 7 8elocidad aDimaQ else if >diferencia8elocidades L ;8elocidad aDimaC diferencia8elocidades 7 ;8elocidad aDimaQ if >diferencia8elocidades L 'C motores8elocidad>8elocidad aDima W diferencia8elocidades, 8elocidad aDimaCQ else motores8elocidad>8elocidad aDima, 8elocidad aDima ; diferencia8elocidadesCQ T return 'Q T

#ista de componentes $ costo de construccin del robot C%&'%N(N)(: VA#%* A'*%+: * otores 1ololu;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; =F$.,$'@ F 1laca de circuito impreso de cobre;;;;;;;;;;;;;;; =F','' F Atmega "";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=+','' F %*.";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=+*,". $ sensores C/0&';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=F$',''

* 6uedas 1olol;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=&.,$'@ F % &"'$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=*$,'' %eds varios;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=$,'' 6esistencias 8arias;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=*,'' [#calos 8arios;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=$,'' Capacitores 8arios;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=$,'' * 1ilas recargables;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=E','' Cables varios;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=$,'' Polita 1ololu ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=F.,.$@ )%)A#: ,-./0/1"" @valores sacados del sitio httpIRRKKK.pololu.com en d#lares, cambio de F 9= 7 $ pesos argentinos. @@8alor en pesos argentinos.

You might also like