Sie sind auf Seite 1von 33

Introduccin

Este documento tiene la intencin de dar un arranque al usuario, en el diseo y construccin de un robot carro 4x2. Es seguro que usted tendr mejores ideas sobre este diseo, es por ello, que le invitamos realizar cualquier sugerencia o idea al correo tuarduino !otmail.com.

"ualquier persona est en capacidad de armar un robot, entendemos que la programacin es algo engorroso y es por ello que nos tomamos la libertad de explicar gran parte del programa que usted va emplear para dic!o dispositivo.

Es importante destacar que en este prototipo se busco el uso de materiales de menor peso pero que al mismo tiempo cumplieran con un diseo ergonmico de nuestro dispositivo, con la #inalidad de consumir menos potencia y aumentar el tiempo de autonom$a de nuestro dispositivo.

Breve descripcin de los componentes de nuestro robot 1-Placa Arduino %rduino es una plata#orma de !ard&are y so#t&are abierto, creada para micro controladores %'( de %)*E+. Es una placa con entradas y salidas ,E-./ analgicas y digitales que incluye un entorno de desarrollo. % nuestro entender es una placa poderosa pero al mismo tiempo dependiente de sensores y peri#0rico, que al #inal permite determinar la #uncin #inal de dic!o dispositivo.

1ebido a su versatilidad y #acilidad de uso, se est usando en muc!os otros proyectos, incluyendo la robtica. %!ora bien, dependiendo del tipo de conexin, las placas %rduino, pueden ser clasi#icadas de la siguiente manera2

3laca 4.5 3laca 5luetoot! 3laca serial

En nuestro diseo, trabajaremos con la ms conocida y actualizada que es la placa %rduino uno tercera revisin.

1.1 Arduino uno Rev 3 +as placas %rduino ,En cualquiera de sus versiones/ son placas que tienen ventajas y desventajas dependiendo del modelo, para nuestro diseo nos apoyaremos en la placa %rduino uno (ev. 6, que es la ms reciente y de uso com7n. En nuestro diseo podemos bautizarla como el corazn de nuestro dispositivo, aunque posee un regulador 89:; ,integrado/ pre#erimos no exigirle un consumo de corriente que ponga en riesgo el calentamiento y posible dao de nuestra placa. Nota: Es por ello que emplearemos a la placa l !" como driver pero al mismo tiempo como nuestra #uente de $v o#icial en el dise%o de nuestro robot.

-&river ' !" ( cumunmente llamada puente ) driver *ontrolador de +otores es un circuito que permite el manejo de corriente de manera ms #luida que lo que podemos lograr con la placa %rduino, est compuesta por un puente < ,corazn del dispositivo/ y se le

puede ubicar de manera #cil por el disipador al cual est conectada,

En el siguiente gr=#ico se muestran los di#erentes componentes que componen dic!a placa2

&ia,rama --. Placa ' !". pin out

+as salidas 1" motor % y 5 sern conectadas a las entradas de los motores 1", estas variarn tanto en voltaje como en polaridad dependiendo de las acciones de control que la placa %rduino le aplique al +2>9, Nota: Es pre#erible que usted veri#ique con una rutina de avance la polaridad de su motor antes de cablear de #orma de#initiva su cone-in. su manejo de corriente obliga al empleo de dic!o disipador y es por ello, que en nuestro diseo est completamente expuesta, tal como se muestra en el siguiente gr#ico.

Nota importante: *otor de 3aso su alimentacin de ;v es tomada de la placa +2>9 y no del %rduino, ver gra#ico xx , por otro lado

'a estructura 3or supuesto, podemos realizar un c!asis a medida ya sea de madera, 3'" o otros materiales ligeros, pero necesitaremos ms tiempo y plani#icacin. %dems, no siempre se sabe con exactitud qu0 componentes se van a utilizar con sus respectivas dimensiones y los posibles inconvenientes que van surgiendo. +uego si optamos por

Existen dos piezas #undamentales de la estructura que componen nuestro robot que son la placa acr$lica o de soporte y la caja de soporte de nuestra placa %rduino, la razn es un tema de a!orro y ergonom$a ya que con este diseo a!orramos en comprar un segundo piso u otra placa acr$lica y por otro lado, la est0tica responde ms a la de un robot. 'a placa acr/lica

Estructura a contruir el c!asis desde cero, necesitaremos !erramientas y 7tiles que muc!as veces no tenemos a mano. En nuestro caso, !emos optado por utilizar un c!asis ya !ec!o que adems es compatible con cualquier placa de %rduino en nuestro

o la nueva Arduino 0N(. ?ste c!asis permite la instalacin de dos motores de corriente cont@nua o de A' con reductora incorporada, ruedas. "on estos motores tenemos la gran parte de mecnica resuelta y nos podemos dedicar a la siguiente #ase del proyecto.

*omo instalar los motores 3ara colocar los motores a la placa, solo basta #ijar dos tierraps entre los mismos. +o primero es tomar el motor y colocarle los tieraps tal como lo indica la siguiente #igura2

4na vez !ec!o esto, pase los tieraps por la placa romando en cuenta que los puntos de cierre, nop deben rozar con los cauc!os una vez instalados.

1ar2eta controladora de motores &* o un motor a pasos

Sensor de ultrasonido HC-sr04 Este dispositivo funciona tiene la finalidad de guiar a nuestro robot midieante la deteccin de obstculos, a partir de

Debemos distinguir entre dos tipos de motores paso a paso, motores bipolares y motores unipolares. Los motores paso a paso, tienen comunes: tres caractersticas

Voltaje. Los motores paso a paso tienen una tensin elctrica de trabajo. Este valor viene impreso en su carcasa o al menos se especifica en su hoja de datos. Resistencia elctrica. La resistencia de los bobinados, determinar la corriente que consumir el motor y su valor afecta la curva de torque del motor y su velocidad mxima de operacin. Grados por paso. Generalmente, este es el factor ms importante al ele ir un motor paso a paso para un uso determinado. Este factor, define los rados que rotar el eje en cada paso. !na secuencia de medio"paso o semi"paso #half step$ del motor duplicar la cantidad de pasos por revolucin al reducir la cantidad de rados por paso.

paso a paso bipolar +otor &e Paso "b32-4" 5tep 6 Placa 0ln 773 Arduino Avr Pic

Placa Base Acr/lica *olor Ne,ro *arro Robot Arduino 8 como la conectamos a la placa Arduino9

La conexin del motor solo puede ser permitida por el conector de una sola forma !ueda como se indica en la siguiente imagen"

5uministro de ener,:a
+a alimentacin se realiza a partir de 2 baterias de >v cada una , ser recomienda emplear pilas recargables / )al como se indica en la #igura las misma son colocadas en paralelo y el encendido o apagado del robot se logra a partir de la interrupcin del

negativo o tierra de todo el circuito.

Bota2 si las bater@as recargables son de 9.4 v tambi0n #uncionan ya que el voltaje suministrado est en el rango de #uncionamiento de nuestra placa %rduino

+as mismas poseen una base pl=stica con belcros para que no estCn sueltas durante el #uncionamiento de nuestro robot.

4sted puede per#ectamente pude elegir donde colocarlas, de !ec!o pueden ser atornilladas en la parte in#erior de la placa, solo debe tomar la previsin de alargar los cables de alieentaciDn en su justa medida. El s&itc! de encendido en concordancia con el diseo plantedo en nuestro manual es colocado sin ning7n tipo de pegamento solo a presin y en la posicin que se indica en la siguiente #igura.

#n$ %&ul#() *erde-

' %rduino + %rduino

#(, %marillo- $0 %rduino #(4 (aran-a- $$ %rduino

#n$ %&ul#() *erde-

' %rduino + %rduino

#(, %marillo- $0 %rduino #(4 (aran-a- $$ %rduino

#n$ %&ul#() *erde-

' %rduino + %rduino

#(, %marillo- $0 %rduino #(4 (aran-a- $$ %rduino

#nstalacin de los motores

%ntes de !ue los mismos sean fi-ados a la placa acr.lica, recomendamos soldar los cables tal como se describe en la siguiente imagen/

Luego tome los tieraps del 0it de ensambla-e e ins1rtelos como se indica en la siguiente diagramacin/

es recomendable aplicar tensin una vez cableados para comprobar el sentido de giro.

+otor &c *on *auc;o Arduino *arro Robot

Como traba-a la placa L)+' con los motores mencionados anteriormente 2

%ntes !ue nada, debemos aclarar !ue los motores 3C generan una velocidad de giro en funcin del volta-e !ue se le pali!ue a los mismos, seg4n la tabla xx, al aplicar un volta-e 3C de ,*, se obtienen +5 vueltas x minuto 6sin carga7 as. sucesivamente en consecuencia si empleamos una placa %rduino para controlar los motores mediante la placa L)+', podemos indicarle a los motores el nivel de volta-e !ue deben entregar a partir de informacin 8inaria"

La informacin binaria expresada en ceros 9nos, en un rango de ' bits, alcan&a su mximo valor :exadecimal en )55 en consecuencia su min en 0, a partir de este argumento la tabla xx definiremos las subrutinas !ue creamos pertinentes para las diferentes acciones !ue impli!uen el traslado de nuestro ;obot de un punto a otro"

<or e-emplo, !ueremos !ue nuestro ;obot se avance a su mxima velocidad, defiimos la siguiente riutina/ void avance67 { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);//setting motorA's directon digitalWrite(IN ,HIGH); digitalWrite(IN!,LOW);//setting motor"'s directon analogWrite(E(%,)55);//start dri#ing motorA analogWrite(E(8,)55);//start dri#ing motor" dela$(2%&); ret'rn; ( %:ora, si !ueremos !ue nuestro ;obot se avance a una velocidad menor, podr.amos pensar !ue la mitad de )55 es aproximadamente $)5, como se indica en la siguiente rutina/ void avance=prom67 { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);//setting motorA's directon digitalWrite(IN ,HIGH); digitalWrite(IN!,LOW);//setting motor"'s directon analogWrite(E(%,$)5);//start dri#ing motorA analogWrite(E(8,$)5);//start dri#ing motor" dela$(2%&);

ret'rn; ( % partir de lo antes expuesto podemos definir rutinas de retroceso promedio o de toda potencia o por !u1 no, rutinas lentas" <ara ello debemos entender !ue debe aplicarse una polaridad contraria a cada motor si !ueremos !ue nuestro robot retroceda" La placa !ue controla estos motores,en este caso L)+', debe estar en capacidad de invertir la polaridad de alimentacin de los mismos, esto se logra a partir de un puente H presente en la placa, en consecuencia, deben existir controles !ue permitan a la placa reali&ar el cambio de polaridad, por e-emplo una accin de retroceso de nuestro robot" Esta accin se logra a partir de los pines #($, #(), #(, e #(4 de la placa L)+' !ue a su ve& son accionados por nuestra placa controladora, en esta caso la placa %rduino $ ;ev ," <or e-emplo, podemos girar a la i&!uierda apagando el motor i&!uierdo activando :acia adelante el motor derec:o, a nuestro gusto es preferible invertir el i&!uierdo en lugar de apagarlo, tal como se muestra en el siguiente e-emplo" void i&!uierda67 { digitalWrite(#($,L>?); digitalWrite(#(),H#@H);//setting motorA's directon digitalWrite(#(,,L>?7A digitalWrite(#(4,H#@H);//setting motor"'s directon analogWrite()NA,2%%);//start dri#ing motorA analogWrite()N",2%%);//start dri#ing motor" dela$( &&); ret'rn; ( 3el mismo modo si !ueremos !ue gire :acia la derec:a, invertimos el derec:o adelantamos con el i&!uierdo, en consecuencia/ void derec:a67 { digitalWrite(#($,H#@H);

digitalWrite(#(),L>?);//setting motorA's directon digitalWrite(#(,,H#@H); digitalWrite(#(4,L>?);//setting motor"'s directon analogWrite()NA,2%%);//start dri#ing motorA analogWrite()N",2%%);//start dri#ing motor" dela$( &&); ret'rn; (

Binalmente para detener el robot empleamos una la siguiente rutina/

void stop67 { analogWrite(E(%,0);//start dri#ing motorA analogWrite(E(8,0);//start dri#ing motor" dela$(2%&); ret'rn; ( *anto E(% E(8 son colocados en cero +ara in,a-ilitar +or com+leto la acti#idad de los motores .

(ota/ Estos motores no son de operacin lineal, es decir, para un volta-e dado, el duplicar este no implica !ue la velocidad del robot aumenta el doble"

5ensor 0ltrasnico )c-sr74 Arduino

El cdigo fuente Cdeclare variables for t:e motor pins CC:ttp/CCDDD"4tronix"co"u0CarduinoCStepper-Eotors"p:p int E(%F5ACCconnected to %rduinoGs port 56output pDm7 int #($F)ACCconnected to %rduinoGs port ) int #()F,ACCconnected to %rduinoGs port , int E(8FHACCconnected to %rduinoGs port H6output pDm7 int #(,F4ACCconnected to %rduinoGs port 4 int #(4FIACCconnected to %rduinoGs port I CC boolean dir F trueACC

int motor<in$ F 'A int motor<in) F +A int motor<in, F $0A int motor<in4 F $$A CC ;ed

CC 8lue CC <in0

- )'8JK4' pin $ - )'8JK4' pin )

CC JelloD - )'8JK4' pin , CC >range - )'8JK4' pin 4 - )'8JK4' pin 5 6*CC7

int pos$,pos),pos,A

int motorSpeed F $000A CCvariable to set stepper speed int c F 0A CC count of steps made

int & F+0A CC number of steps per full revolution permite definir la apertura de escaneo"""

int loo0upL'M F N80$000, 8000$$, 80000$, 80$00$OA Pdefine trig<in $) Pdefine ec:o<in $, int umbralF)0A

80$$00,

800$00,

800$$0,

8000$0,

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC void setup67 N CCdeclare t:e motor pins as outputs pinEode6motor<in$, >9Q<9Q7A pinEode6motor<in), >9Q<9Q7A pinEode6motor<in,, >9Q<9Q7A pinEode6motor<in4, >9Q<9Q7A pinEode6trig<in, >9Q<9Q7A pinEode6ec:o<in, #(<9Q7A CCpinEode6led, >9Q<9Q7A

Serial"begin6+H007A pinEode6E(%,>9Q<9Q7ACCoutput pinEode6E(8,>9Q<9Q7A pinEode6#($,>9Q<9Q7A pinEode6#(),>9Q<9Q7A pinEode6#(,,>9Q<9Q7A pinEode6#(4,>9Q<9Q7A digital?rite6E(%,L>?7A digital?rite6E(8,L>?7ACCstop driving O CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

void loop67 N stop67A escaneo67A if 6pos$FF$ RR pos)FF$ retroceso=prom67A escaneo67A if 6pos$FF$ RR pos,FF0 7 i&!uierda67A if 6pos$FF0 RR pos,FF$ 7 derec:a67A stop67A if 6 pos)FF07 N avance67A dela 6$007A O RR pos,FF$7

CCavance=prom67A

CC avance=prom67A CCdela 6)0007A CCavance=lento67A CC dela 6)0007A CCretroceso67A CCdela 6)0007A CCretroceso=prom67A CCdela 6)0007A CCretroceso=lento67A CCdela 6)0007A CCi&!uierda67A

CCderec:a67A

CC stop67A CCdela 6)0007A O

void escaneo67 N int 0F0A D:ile 60S)T&7 N if 6cFF&C)7 N pos$Fdetec67A

O CC 6punto de !uiebre7capturar posicin $ else if6c S & 7 cloc0Dise67A else if 6c FF &7 N pos)Fdetec67A O CC 6punto de !uiebre7capturar posicin $detec67A CC 6punto de !uiebre7capturar posicin ) else if 6c FF &T)7 N c F 0A

pos,Fdetec67A CC 6punto de !uiebre7capturar posicin , O else if 6c U &C)-$)7 anticloc0Dise67A cVVA

0VVAO O void anticloc0Dise67 N for6int i F 0A i S 'A iVV7 N set>utput6i7A dela Eicroseconds6motorSpeed7A O O

void cloc0Dise67 N

for6int i F IA i UF 0A i--7 N set>utput6i7A dela Eicroseconds6motorSpeed7A O

O void set>utput6int out7 N digital?rite6motor<in$, bit;ead6loo0upLoutM, 077A digital?rite6motor<in), bit;ead6loo0upLoutM, $77A digital?rite6motor<in,, bit;ead6loo0upLoutM, )77A digital?rite6motor<in4, bit;ead6loo0upLoutM, ,77A O

boolean detec67 N int duration, distanceA digital?rite6trig<in, H#@H7A dela Eicroseconds6$0007A digital?rite6trig<in, L>?7A duration F pulse#n6ec:o<in, H#@H7A distance F 6durationC5'")7A if 6distance SFumbral7 return $A else return 0A dela 6$4007A O void avance67

N digital?rite6#($,L>?7A digital?rite6#(),H#@H7ACCsetting motor%Gs directon digital?rite6#(,,H#@H7A digital?rite6#(4,L>?7ACCsetting motor8Gs directon analog?rite6E(%,)557ACCstart driving motor% analog?rite6E(8,)557ACCstart driving motor8 dela 6)507A returnA O void avance=prom67 N digital?rite6#($,L>?7A digital?rite6#(),H#@H7ACCsetting motor%Gs directon digital?rite6#(,,H#@H7A digital?rite6#(4,L>?7ACCsetting motor8Gs directon analog?rite6E(%,$)57ACCstart driving motor% analog?rite6E(8,$)57ACCstart driving motor8 dela 6)507A returnA O void avance=lento67 N digital?rite6#($,L>?7A digital?rite6#(),H#@H7ACCsetting motor%Gs directon digital?rite6#(,,H#@H7A digital?rite6#(4,L>?7ACCsetting motor8Gs directon analog?rite6E(%,+07ACCstart driving motor%

analog?rite6E(8,+07ACCstart driving motor8 dela 6)507A returnA O void retroceso67 N digital?rite6#($,H#@H7A digital?rite6#(),L>?7ACCsetting motor%Gs directon digital?rite6#(,,L>?7A digital?rite6#(4,H#@H7ACCsetting motor8Gs directon analog?rite6E(%,)557ACCstart driving motor% analog?rite6E(8,)557ACCstart driving motor8 dela 6)507A returnA O void retroceso=prom67 N digital?rite6#($,H#@H7A digital?rite6#(),L>?7ACCsetting motor%Gs directon digital?rite6#(,,L>?7A digital?rite6#(4,H#@H7ACCsetting motor8Gs directon analog?rite6E(%,$)57ACCstart driving motor% analog?rite6E(8,$)57ACCstart driving motor8 dela 6)507A returnA O void retroceso=lento67 N

digital?rite6#($,H#@H7A digital?rite6#(),L>?7ACCsetting motor%Gs directon digital?rite6#(,,L>?7A digital?rite6#(4,H#@H7ACCsetting motor8Gs directon analog?rite6E(%,+07ACCstart driving motor% analog?rite6E(8,+07ACCstart driving motor8 dela 6)507A returnA O void i&!uierda67 N digital?rite6#($,L>?7A digital?rite6#(),H#@H7ACCsetting motor%Gs directon digital?rite6#(,,L>?7A digital?rite6#(4,H#@H7ACCsetting motor8Gs directon analog?rite6E(%,)557ACCstart driving motor% analog?rite6E(8,)557ACCstart driving motor8 dela 6,007A returnA O void derec:a67 N digital?rite6#($,H#@H7A digital?rite6#(),L>?7ACCsetting motor%Gs directon digital?rite6#(,,H#@H7A digital?rite6#(4,L>?7ACCsetting motor8Gs directon analog?rite6E(%,)557ACCstart driving motor% analog?rite6E(8,)557ACCstart driving motor8

dela 6,007A returnA O void stop67 N

analog?rite6E(%,07ACCstart driving motor% analog?rite6E(8,07ACCstart driving motor8 dela 6)507A returnA

Das könnte Ihnen auch gefallen