1
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Faunos Laberinto (Robot laberinto) RAÚL ANTONA FRESNO
2
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Índice: Página
1 INTRODUCCIÓN DEL PROYECTO. 2
2 DIAGRAMA EN BLOQUES. 6
2.1 EXPLICACIÓN DEL DIAGRAMA EN BLOQUES. 7
3 ESQUEMA ELECTRICO GENERAL. 8
3.1 EXPLICACIÓN DEL ESQUEMA ELECTRICO
GENERAL. 9
4 FUENTE DE ALIMENTACION REGULADA A 9V/5V. 10
4.1 SISTEMA DE PROTECCIÓN. 10
4.2 SISTEMA DE ELIMINACIÓN DE RUIDOS. 11
4.3 REGULADOR DE TENSIÓN. 11
5 ADAPTADOR DE SEÑALES PC-μC. 11
6 SENSORES. 13
6.1ESTUDIO DE LA RECTA DEL GP2D12. 14
6.2 PROGRAMA Y DIAGRAMA DEL DRIVER GP2D12. 16
6.3 PROGRAMA Y DIAGRAMA DE LA REPRESENTA
CIÓN DE DISTACIAS EN EL DISPLAY . 18
7 CONTROL DE POTENCIA. 20
7.1 CONTROL DE GIRO Y VELOCIDAD. 20
7.2 TABLAS DE FUNCIONAMIENTO. 21
7.2.1MOTOR DERECHO. 21
7.2.2MOTOR IZQUIERDO. 21
7.3 PROGRAMAS Y DIAGRAMAS DE CONTROL
DE VELOCIDAD. 22
7.3.1 VELOCIDAD MOTOR IZQUIERDO. 22
7.3.2 VELOCIDAD MOTOR DERECHO. 25
7.3.3 CONTROL DE GIRO DEL MOTOR DERECHO. 28
7.3.4 CONTROL DE GIRO DEL MOTOR IZQUIERDO. 30
8 SISTEMA DE CONTROL: 32
8.1LA PANTALLA LCD HDD44700 32
8.1.1PATILLAJE DEL LDC . 33
8.1.2DIAGRAMA Y PROGRAMA DE PRUEBA DEL LCD. 33
8.2RECEPTOR DE DATOS CEBEK C-0504. 34
8.3 PIC. 34
8.4 OTROS. 34
9 BREVE EXPLICACIÓN DEL PROGRAMA PRINCIPAL. 35
9.1ESQUEMA ELECTRICO DE SIMULACIÓN. 38
9.2DIAGRAMA Y PROGRAMA PRINCIPAL. 39
3
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
10 FABRICACIÓN DE PLACAS. 59
10.1 FABRICACIÓN PLACAS CARA BOTTOM. 60
10.2 FABRICACIÓN CARA TOP. 61
10.3 FABRICACIÓN CARA COMPONENTES. 62
11 DISEÑO MECÁNICO. 63
12 Lista de Componentes. 64
12.1 Desarrollo del Proyecto. 67
13 REFERENCIAS. 68
14 ANEXOS. 68
4
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
1 INTRODUCCIÓN DEL PROYECTO:
El proyecto que he realizado a lo largo del segundo curso del módulo de
desarrollos de productos eléctricos, es un robot laberinto.
Este robot tiene la siguiente función: una vez introducido en un laberinto por una
de las cuatro entradas, tiene que ser capaz de salir por la entrada contraria
autónomamente, en el menor tiempo posible. El laberinto tiene unas proporciones de 3,6
x 3,6 y el interior del laberinto está compuesto por calles verticales y horizontales, con
una separación entre paredes de 40 cm. aproximadamente y un espesor de 1,5 cm. Cada
calle tiene una altura de 25 cm. y está dispuesta en ángulo de 90º. El color del material
es blanco.
Ejemplo:
Las medidas están ajustadas entre las máximas determinadas por el consejo
regulador de Madridbot:
“Los robots han de poseer unas dimensiones máximas, durante todo el transcurso de la
prueba,
de 20 cm. de ancho, 30 cm. de largo y 25 cm. de alto, siendo libre el peso que puedan
tener.”
5
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
El proyecto desde el comienzo ha estado separado en varios bloques, tanto el
robot en si, como la forma de trabajo. Todo el trabajo se ha dividido en tres asignaturas,
las cuales han sido orientadas conjuntamente a la realización del robot.
En la asignatura de “Fabricación y diseño de placas”: en ámbito de diseño,
hemos aprendido ha realizar las placas con unas medidas determinadas y a
distribuir los componentes de forma que estén alineados para que ocupen el
menor espacio sacando el mayor rendimiento posible. En fabricación se han
puesto practica conocimientos teóricos, comprobando en las placas del robot los
distintos métodos; desde los más caseros hasta métodos casi profesionales.
En “Mantenimiento de equipos eléctricos”: hemos realizado gran diversidad de
prácticas, las cuales nos han permitido aprender el funcionamiento de los
equipos de trabajo, comprobando mediante ensayos el funcionamiento de las
partes del robot; desde las situaciones más favorables hasta las condiciones más
desfavorables. Es importante tener en cuenta, que sin los contenidos de las
asignaturas de electrónica digital y analógica del pasado curso (en las que se
impartieron los componentes utilizados en el robot) no habría sido posible
comprender el funcionamiento de dicho proyecto.
“Desarrollo de proyectos”: esta asignatura se ha enfocado al conocimiento de la
programación en pic, para lograr que el robot realice de forma autónoma el
laberinto sirviéndose de un programa adecuado.
Es importante señalar la unión que existe entre ésta asignatura y la asignatura de
“Técnicas de programación”, ya que dicha asignatura trató la programación en
lenguaje C; conocimiento necesario para realizar muchas de las funciones
específicas del pic.
6
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
2 DIAGRAMA EN BLOQUES
7
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
2.1 EXPLICACIÓN DEL DIAGRAMA EN BLOQUES:
Con el diagrama en bloques se mantiene una vista ordenada y esquematizada de
las partes que forman el robot. Cada bloque de éste puede ser abierto.
Dentro de cada uno encontramos los esquemas eléctricos de cada parte:
En el bloque de adaptador de señales PC-μC y regulador 9V/5V, se encuentran
los esquemas eléctricos de la alimentación de los circuitos y los componentes
necesarios para realizar la transmisión de datos desde el ordenador al robot.
Dentro del bloque de sensores, encontramos los sensores con los que el robot
detecta las paredes del laberinto y se orientara en cada parte del circuito.
En el bloque de potencia están situados los circuitos con los que manejamos el
control de los motores.
El bloque de sistema de control se encarga de enviar, recibir y administrar las
señales al resto de bloques. Esta compuesto por el microprocesador, encargado
de administrar las señales, y el receptor de señales cebek, por el cual podemos
recibir señales AM desde un emisor externo.
Haciendo una burda comparación con el cuerpo humano, para ver de los avances
tecnológicos y lo que significan estos; podríamos decir que el bloque regulador 9V/5V
correspondería a nuestro corazón que envía la alimentación necesaria al resto de
bloques. El bloque de sensores podrían ser los ojos que envían información al cerebro.
En nuestro caso el bloque de sistema de control, quien administra dicha información y
la envía a las extremidades, el bloque de control de potencia.
8
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
3 ESQUEMA ELECTRICO GENERAL:
9
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
3.1 EXPLICACIÓN DEL ESQUEMA ELECTRICO GENERAL:
El esquema eléctrico, representa abiertas cada una de las partes de los bloques con todos
sus componentes. Esta división ha servido para la fabricación de, ya que los componentes
se han dividido en distintas placas, para poder tener algunas placas comunes con otros
compañeros y el robot quede con un tamaño más reducido. Las uniones entre las distintas
partes del robot, por las que alimentaremos los componentes y enviaremos las señales se
han realizado con fajas de diez, excepto la alimentación de los motores que al estar
alimentados con distintas tensiones, se han hecho con cables flexibles.
10
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
4 FUENTE DE ALIMENTACION REGULADA A 9V/5V:
La fuente de alimentación regulada es necesaria para alimentar las distintas partes
del circuito. Con una batería de 9 voltios y este diseño, he conseguido los 5 voltios
necesarios para alimentar los componentes del robot y obtener aproximadamente 9 voltios
para alimentar los motores.
El LM350, es un regulador ajustable con capsulado TO3 capaz de suministrar 3 A;
este componente debido a la corriente que suministra es recomendable ponerlo con un
disipador o dejar en la placa una superficie de cobre libre, que pueda disipar el calor.
4.1 SISTEMA DE PROTECCIÓN:
D1 es un diodo de protección, que sirve para proteger los componentes, en caso de
conectar erróneamente la batería; este diodo permite el paso de corriente si se polariza en
directa, para ello el positivo de la pila tiene que estar conectado al ánodo del diodo.
D2, se conecta en polarización inversa y sirve para proteger el LM350K en caso de que
haya una diferencia de potencial; esto puede ocurrir en el apagado, que haya una tensión
más positiva en la salida que en la entrada, en este caso el diodo se polariza en directa
evitando que la corriente vaya por el LM350K.
D4 es un diodo que se pone para proteger el LM350K cuando queramos trabajar con
tensiones superiores a 25V o por si tenemos tensiones inversas.
D3 es un diodo tipo led que sirve para informar que la fuente esta encendida, para evitar
fundir el diodo hemos limitado la corriente con el resistencia de 220Ω
11
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
4.2 SISTEMA DE ELIMINACIÓN DE RUIDOS Y FILTROS.
Los condensadores C2 y C4 son condensadores que sirven para la eliminación de
ruidos, estos condensadores no sirven de filtros de tensión debido a que tienen un valor
muy pequeño, son solamente filtros de ruido. C3 y C1 son condensadores de filtro, que lo
que hacen es que tengamos una tensión continua más pura.
4.3 REGULADOR DE TENSIÓN: La regulación con el LM350K se hace con R38, RV1, y C15; R38 es una resistencia
que sirve para aumentar el suministro de corriente al potenciómetro, con RV1 se consigue
variar la tensión de salida (VDD3) y con C15 con seguimos estabilizar la tensión de salida,
para que no se produzcan saltos.
V12_B es el la conexión donde se obtiene aproximadamente los 9V.
VDD3_B es la conexión de salida
5 ADAPTADOR DE SEÑALES PC-μC.
Para la transmisión de datos del ordenador hasta el μC se utiliza el puerto serie del
ordenador, para ello se han tenido que adaptar las señales que nos envía el ordenador; este
tipo de conversiones son del tipo RS232, se trata de adaptar las señales RS a TTL.
12
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Para convertir las señales de RS a TTL he utilizado el integrado MAX232, este
integrado necesita cuatro condensadores y una fuente de alimentación de 5V (VDD3_B),
C3 y C2 “adaptan” el nivel de voltaje tomado de la alimentación de +5V a +10V, C1 y C4
invierten los niveles de voltaje para que se puedan obtener -10V, estos niveles de voltaje
son utilizados para realizar la adaptación de los voltajes RS232 y se encuentran dentro de
los rangos permitidos por la norma RS232.
La conversión RS232 trabaja con lógica negativa esto quiere decir: que las conversiones
son como se muestran en la siguiente tabla:
N.L. TTL Tensión N.L. RS Tensión
1 5V 1 -10V
0 0V 0 +10V
Nota:
Las placas de transmisión de datos y la fuente de alimentación se han fabricado las dos
sobre la misma superficie.
13
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
6 SENSORES:
El sensor que se ha utilizado para detectar las paredes ha sido UN sensor SHARP modelo
GP2D12. El sensor GP2D12 es un sensor de infrarrojos, que trabaja de forma analógica,
esto significa que nos da una tensión con respecto a la distancia a la que se encuentre de la
pared.
14
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
6.1ESTUDIO DE LA RECTA DEL GP2D12:
15
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Para poder trabajar correctamente con el sensor GP2D12; se ha tenido que hacer un
estudio previo del voltaje, que nos daba el sensor en función de la distancia a la que se
encontraba de la pared, como no era proporcional se ha tenido que linealizar la curva del
sensor para saber cual es la distancia en un determinado punto; eso se ha realizado
utilizando la ecuación de la recta.
1212
121 YY
YY
XXXL
El sensor GP2D12 tiene un problema, en distancias inferiores a 8CM el rango de tensiones
se repiten para varias distancias, por eso ha resultado imposible linealizar esa parte de la
curva y los rangos comprendido entre 0CM y menores de 8CM han sido capados,
igualándolos a 8CM. En la parte contraria donde el sensor se encuentra a en unas distancias
superiores a 55CM se han capado las distancias superiores, porque en valores superiores a
55CM el sensor es inestable.
Hay que tener en cuenta que todos los valores comprendidos entre 8CM y 55CM, pueden
tener un margen de error, ya que el sensor no tiene la misma eficacia cuando reflecta sobre
un material negro o sobre un material blanco.
Se ha introducido un condensador de 10 μF, el cual lo recomienda el fabricante para
eliminar posibles ruidos.
Después de aprender el funcionamiento del sensor GP2D12, tuve que crear una huella en
PROTEUS, para poder trabajar en ISIS, ARES y crear un DRIVER con la ecuación de la
recta para obtener la distancia a la que se encontraba el robot. Las huellas son las mostradas
en la figura 5 y figura 6.
La huella del ISIS no puede producir tensiones; a si que se ha creado un circuito que
proporciona una tensión, con esta tensión se hace una conversión analógica que es
introducida al micro por el “PUERTO A”, esta tensión
sirve para obtener la distancia en la que se encuentra el
robot, con el DRIVER apropiado.
Con este circuito lo que se ha conseguido es una tensión
variable entre 0,5V y 2,6V.
16
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
6.2 PROGRAMA Y DIAGRAMA DEL DRIVER GP2D12:
//*****************************DRIVER DE CONTROL DEL SENSOR DE DISTANCIA Gp2d12,
para una recta entre 10 cm. y 55 cm.
//HACE LA CONVERISON DE TENSION PROCEDENTE DEL SENSOR Gp2d12 A UNA //DISTANCIA
(SE OBTIENE UNA DISTANCIA EN FUNCION DE LA TENSIÓN).
//SE INTRODUCE UN VALOR DE TENSIÓN (v) TIPO FLOAT Y DEVUELVE UNA DISTANCIA
//(d)FLOAT.
//****************************** DECLARACIÓN DEFUNCIONES**********************
float Gp2d12_v_d(float);
//******************************FUNCIÓNGp2d12_v_d********************************
float Gp2d12_v_d(float v)
float l; //declaración de la variable l.
l=0;
if(v>2.6) // preguntamos por el valor de v.
l = 8;
if(v<2.6&&v>=1.9) // preguntamos por el valor de v.
l = 13.5 + ((8-13.5)* (v - 1.9) /(2.6-1.9)); //función de la recta.
if(v<1.9&&v>=1.65) // preguntamos por el valor de v.
17
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
l = 16 + ((13.5-16)* (v- 1.65) / (1.9-1.65)); //función de la recta.
if(v<1.65&&v>=1.38) // preguntamos por el valor de v.
l = 20 + ((16-20)* (v- 1.38) / (1.65-1.38)); //función de la recta.
if(v<1.38&&v>=1.15) // preguntamos por el valor de v.
l = 25 + ((20-25)* (v- 1.15) / (1.38-1.15)); //función de la recta.
if(v<1.15&&v>=0.95) // preguntamos por el valor de v.
l = 30 + ((25-30)* (v- 0.95) / (1.15-0.95)); //función de la recta.
if(v<0.95&&v>=0.75) // preguntamos por el valor de v.
l = 40 + ((30-40)* (v- 0.75) / (0.95-0.75)); //función de la recta.
if(v<0.75&&v>=0.68) // preguntamos por el valor de v.
l = 45 + ((40-45)* (v- 0.68) / (0.75-0.68)); //función de la recta.
if(v<0.68&&v>=0.58) // preguntamos por el valor de v.
l = 55 + ((45-55)* (v- 0.58) / (0.68-0.58)); //función de la recta.
if(v<0.58) // preguntamos por el valor de v.
l=55;
return(l); //devolvemos l.
18
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
6.3 PROGRAMA Y DIAGRAMA DE LA REPRESENTACIÓN DE DISTACIAS EN
EL DISPLAY .
Una de las pruebas más importantes que se han realizado con el GP2D12 y su DRIVER,
esta es la representación de las distancias y la tensión en la pantalla del LCD.
//*************************Conversión Analógica Digital de la Patilla AN0 *******************
#include <16F876A.h>
#device adc=10 //Conversor Analógico Digital de 10 bit el PIC 16F876A puede trabajar con 8 o 10 bit //de
resolución.
#FUSES XT,NOWDT
#use delay(clock=4000000)
#include <LCD1.c> // Incluimos el driver LCD1.c que contiene las funciones de control del LCD.
#include <driver_gp2d12.c>
//*******************************PROGRAMA PRINCIPAL*****************************
19
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
void main()
int16 q;
float d,
v;
setup_adc_ports(0); // Seleccionamos el Puerto A como entradas Analógicas. Mirar
//ADCON1.
setup_adc(ADC_CLOCK_INTERNAL); // Fuente de reloj RC interno
lcd_init(); // Inicializamos el LCD.
while(1) // Bucle infinito.
set_adc_channel(0); // HabilitaciOn canal 0 "AN0"
delay_us(20); // Retardo de 20uS necesaria para respetar el tiempo //de
//Adquisición Tad.
q = read_adc(); // Lectura canal 0 "AN0"
v = (5.0 * q) / 1024.0; // Conversion a tensión del código digital "q".
d=Gp2d12_v_d(v); // Cargamos el driver GP2D12 en la variable.
lcd_gotoxy(1,1); // Posicionamos el Cursor en la posición 1, línea 1.
printf(lcd_putc, "voltios = %01.3fV", v); // Saltamos de línea y escribimos en el LCD
//"VOLTAJE =" y 4 dígitos de "P"
// en formato truncado de 4 dígitos con 3 decimales y //el
//carácter "V".
lcd_gotoxy(1,2);
printf(lcd_putc, "d = %01.4fcm",d ); // Saltamos de línea y escribimos en el LCD //"distancia
//=" y 4 dígitos de "P" // en formato //truncado de 4
//dígitos con 3 decimales y el carácter //"V".
20
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
7 CONTROL DE POTENCIA:
7.1 CONTROL DE GIRO Y VELOCIDAD:
Para el control de giro de los motores se ha utilizado el inversor de giro L298, que
poniendo unas tensiones en las patillas de entradas IN1, IN2, IN3, IN4; se puede controlar
el paro de los motores, el giro de los motores en sentido horario o en contra horario. Los
optoaclopadores se utilizan para independizar el circuito de control con el de potencia.
Ejemplo:
RA4_A= 1(N.L), no hay diferencia de potencial en U3, el fototransistor al corte,
1(N.L.) en In1.
RA4_A=0(N.L), hay diferencia de potencial en U3, el fototransistor saturado,
0(N.L.) en In1.
El circuito compuesto por los optoacopladores U7, U8 y los transistores Q1, Q2,
Q3, Q4, sirven para habilitar las patillas Vsens A y B.
Se ha puesto un condensador para eliminar las señales que puedan producir ruido.
Los diodos son de protección.
21
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
7.2 TABLAS DE FUNCIONAMIENTO:
7.2.1MOTOR DERECHO:
* Horario: sigue el sentido de las agujas del reloj.
* Contra horario: contra del sentido de las agujas del reloj.
7.2.2MOTOR IZQUIERDO:
* Horario: sigue el sentido de las agujas del reloj.
* Contra horario: contra del sentido de las agujas del reloj.
Entradas Salidas
Giro del motor VsensA ENA In1 In2
OUT1
(N.L.)
OUT2
(N.L.)
0
1
1
1
1
1
X
0
1
1
1
1
X
X
0
0
1
1
X
X
0
1
0
1
0
0
0
0
1
1
0
0
0
1
0
1
Parado
Parado
Parado
*Contra horario
*horario
Parado
Entradas Salidas
Giro del motor VsensA ENA In1 In2
OUT1
(N.L.)
OUT2
(N.L.)
0
1
1
1
1
1
X
0
1
1
1
1
X
X
0
0
1
1
X
X
0
1
0
1
0
0
0
0
1
1
0
0
0
1
0
1
Parado
Parado
Parado
*horario
*Contra horario
Parado
22
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Para controlar la velocidad de giro de los motores, se ha utilizado PWM (Pulse Width
Modulation), esto quiere decir modulación de la anchura del pulso. La PWM es
generada por el pic e introducida al L298 por las Vsens.
El funcionamiento de la PWM es similar a; como si metiéramos pulsos con un
interruptor, cuanta mas duración tenga el pulso, más velocidad alcanzará en motor.
La PWM ha servido para controlar el robot en las distintas partes del circuito, cuando el
robot se encontraba en una recta dentro de unos rangos determinados, se ha aplicado la
PWM máxima a los dos motores; en caso de que el robot se desplace hacia la izquierda,
se corrige el movimiento disminuyendo la PWM en el motor derecho; si el robot se
desplaza al lado contrario se disminuye la PWM del motor izquierdo. En caso de que el
robot se encuentre en una curva la PWM es mucho menor o incluso se puede invertir el
giro del motor, para que el giro sea mucho más brusco.
7.3 PROGRAMAS Y DIAGRAMAS DE CONTROL DE VELOCIDAD.
7.3.1 VELOCIDAD MOTOR IZQUIERDO.
//*****************************************Laberinto1 *******************************
//*****************************************Directivas de preprocesado*******************
#include <16F876A.h>
#device adc=10 // Conversor Analógico Digital de 10 bit el PIC 16F876A puede trabajar con 8
//o 10 bit de resolución.
23
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
#FUSES XT,NOWDT
#use delay(clock=4000000)
#include <LCD1.c> // Incluimos el driver LCD1.c que contiene las funciones de control del LCD.
#BYTE TRISB = 0x86 // TRISB en 86h.
#BYTE portB = 0x06 // PORTB en 06h.
#BYTE TRISC = 0x87 // TRISC en 87h.
#BYTE portC = 0x07 // PORTC EN 07h.
#BYTE TRISA = 0x85 // TRISA en 85h.
#BYTE portA = 0x05 // PORTA en 05h.
#BIT RB3 = 0x06.3 // DEFINO LA PATILLA 3 DEL PORTB COMO RB3.
#BIT RC0 = 0x07.0 // DEFINO LA PATILLA 0 DEL PORTC COMO RC0.
#BIT RC1 = 0x07.1 // DEFINO LA PATILLA 1 DEL PORTC COMO RC1.
#BIT RC2 = 0x07.2 // DEFINO LA PATILLA 2 DEL PORTC COMO RC2.
#BIT RC3 = 0x07.3 // DEFINO LA PATILLA 3 DEL PORTC COMO RC3.
#BIT RC4 = 0x07.4 // DEFINO LA PATILLA 4 DEL PORTC COMO RC4.
#BIT RC5 = 0x07.5 // DEFINO LA PATILLA 5 DEL PORTC COMO RC5.
#BIT RC6 = 0x07.6 // DEFINO LA PATILLA 6 DEL PORTC COMO RC6.
#BIT RC7 = 0x07.7 // DEFINO LA PATILLA 7 DEL PORTC COMO RC7.
#BIT RA2 = 0x05.2 // DEFINO LA PATILLA 2 DEL PORTA COMO RA2.
#BIT RA4 = 0x05.4 // DEFINO LA PATILLA 4 DEL PORTA COMO RA4.
#BIT RA5 = 0x05.5 // DEFINO LA PATILLA 5 DEL PORTA COMO RA5.
//**************************************Declaración funciones***************************
int16 TH =65535;
//*******************************PROGRAMA PRINCIPAL******************************
void main()
TRISB = 0B00000000; // Defines Puerto B como SALIDA de datos.
TRISC = 0B00000000; // Defines Puerto C como SALIDA de datos.
TRISA = 0B00001111; // Defines Puerto A como ENTRADA de datos.
//portB = 0B00000000; // Reseteamos el Puerto B
RA2 = 0;
RA4 = 0;
RB3 = 0;
RC0 = 0;
RC5 = 0;
RC6 = 0;
RC7 = 0;
setup_timer_2(T2_DIV_BY_16,249,1); // setup_timer(Prescaler,PR2,Postscaler)
// Configuración timer2. Si el Periodo = 16mS ----> T =
//16000uS
24
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
// T = [PR2+1] x Tcm x Postscaler x Prescaler
// PR2 puede valer de 0 a 255.
// Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000
//hz = 4uS.
// Prescaler puede valer 1,4,16
// Postscaler puede valer 1.
// 16000uS = [PR2+1] x 4 x 16 x 1
// PR2 =[T/(Tcm x Preescaler x Postscaler)]-1
// PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249 (en C 249)
setup_ccp2(CCP_PWM); // CCP2 en modo PWM (Salida por RC1) motor izquierdo.
setup_ccp1(CCP_PWM); // CCP1 en modo PWM (Salida por RC2) motor derecho.
TH=0;
set_pwm1_duty(TH);
set_pwm2_duty(TH);
TRISC = 0B00000000; // Defines Puerto C como SALIDA de datos.
while(true)
RC5=0; //MOTOR DERECHO HACIA ATRAS
RC0=1;
TH = 1000;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 900;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 800;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 700;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 600;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 500;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 400;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 300;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 200;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 100;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 0;
set_pwm2_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
25
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
7.3.2 VELOCIDAD MOTOR DERECHO
//*****************************************Laberinto1 *******************************
//*****************************************Directivas de preprocesado*******************
#include <16F876A.h>
#device adc=10 // Conversor Analógico Digital de 10 bit el PIC 16F876A puede trabajar con 8
//o 10 bit de resolución.
#FUSES XT,NOWDT
#use delay(clock=4000000)
#include <LCD1.c> // Incluimos el driver LCD1.c que contiene las funciones de control del LCD.
#BYTE TRISB = 0x86 // TRISB en 86h.
#BYTE portB = 0x06 // PORTB en 06h.
#BYTE TRISC = 0x87 // TRISC en 87h.
#BYTE portC = 0x07 // PORTC EN 07h.
#BYTE TRISA = 0x85 // TRISA en 85h.
#BYTE portA = 0x05 // PORTA en 05h.
#BIT RB3 = 0x06.3 // DEFINO LA PATILLA 3 DEL PORTB COMO RB3.
#BIT RC0 = 0x07.0 // DEFINO LA PATILLA 0 DEL PORTC COMO RC0.
#BIT RC1 = 0x07.1 // DEFINO LA PATILLA 1 DEL PORTC COMO RC1.
#BIT RC2 = 0x07.2 // DEFINO LA PATILLA 2 DEL PORTC COMO RC2.
26
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
#BIT RC3 = 0x07.3 // DEFINO LA PATILLA 3 DEL PORTC COMO RC3.
#BIT RC4 = 0x07.4 // DEFINO LA PATILLA 4 DEL PORTC COMO RC4.
#BIT RC5 = 0x07.5 // DEFINO LA PATILLA 5 DEL PORTC COMO RC5.
#BIT RC6 = 0x07.6 // DEFINO LA PATILLA 6 DEL PORTC COMO RC6.
#BIT RC7 = 0x07.7 // DEFINO LA PATILLA 7 DEL PORTC COMO RC7.
#BIT RA2 = 0x05.2 // DEFINO LA PATILLA 2 DEL PORTA COMO RA2.
#BIT RA4 = 0x05.4 // DEFINO LA PATILLA 4 DEL PORTA COMO RA4.
#BIT RA5 = 0x05.5 // DEFINO LA PATILLA 5 DEL PORTA COMO RA5.
//**************************************Declaración funciones***************************
int16 TH =65535;
//*******************************PROGRAMA PRINCIPAL******************************
void main()
TRISB = 0B00000000; // Defines Puerto B como SALIDA de datos.
TRISC = 0B00000000; // Defines Puerto C como SALIDA de datos.
TRISA = 0B00001111; // Defines Puerto A como ENTRADA de datos.
//portB = 0B00000000; // Reseteamos el Puerto B
RA2 = 0;
RA4 = 0;
RB3 = 0;
RC0 = 0;
RC5 = 0;
RC6 = 0;
RC7 = 0;
setup_timer_2(T2_DIV_BY_16,249,1); // setup_timer(Prescaler,PR2,Postscaler)
// Configuración timer2. Si el Periodo = 16mS ----> T =
//16000uS
// T = [PR2+1] x Tcm x Postscaler x Prescaler
// PR2 puede valer de 0 a 255.
// Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000
//hz = 4uS.
// Prescaler puede valer 1,4,16
// Postscaler puede valer 1.
// 16000uS = [PR2+1] x 4 x 16 x 1
// PR2 =[T/(Tcm x Preescaler x Postscaler)]-1
// PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249 (en C 249)
setup_ccp2(CCP_PWM); // CCP2 en modo PWM (Salida por RC1) motor izquierdo.
setup_ccp1(CCP_PWM); // CCP1 en modo PWM (Salida por RC2) motor derecho.
TH=0;
set_pwm1_duty(TH);
set_pwm2_duty(TH);
TRISC = 0B00000000; // Defines Puerto C como SALIDA de datos.
27
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
while(true)
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 1000;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 900;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 800;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 700;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 600;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 500;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 400;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 300;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 200;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 100;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
TH = 0;
set_pwm1_duty(TH); // ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR IZQ
delay_ms(500);
28
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
7.3.3 CONTROL DE GIRO DEL MOTOR DERECHO:
#include <16F876A.h> // Incluye el fichero 16F876 al programa tiene que estar en la misma
//carpeta del programa define funciones, patillas y registros.
#fuses XT,NOWDT // Define la palabra de configuarción del microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro guardián Wathdog
#use delay( clock = 4000000 ) // Define la frecuencia del reloj de 4 MHz
#include <LCD1.c> // Incluimos el driver kbd1.c que contiene las funciones de control del
//display.
#BYTE TRISB = 0x86 // TRISB en 86h.
#BYTE portB = 0x06 // PORTB en 06h.
#BYTE TRISC = 0x87 // TRISC en 87h.
#BYTE portC = 0x07 // PORTC EN 07h.
#BYTE TRISA = 0x85 // TRISA en 85h.
#BYTE portA = 0x05 // PORTA en 05h.
#BIT RB3 = 0x06.3 // DEFINO LA PATILLA 3 DEL PORTB COMO RB3.
#BIT RC0 = 0x07.0 // DEFINO LA PATILLA 0 DEL PORTC COMO RB3.
#BIT RC1 = 0x07.1 // DEFINO LA PATILLA 1 DEL PORTC COMO RB3.
#BIT RC2 = 0x07.2 // DEFINO LA PATILLA 2 DEL PORTC COMO RB3.
#BIT RC3 = 0x07.3 // DEFINO LA PATILLA 3 DEL PORTC COMO RB3.
#BIT RC4 = 0x07.4 // DEFINO LA PATILLA 4 DEL PORTC COMO RB3.
#BIT RC5 = 0x07.5 // DEFINO LA PATILLA 5 DEL PORTC COMO RB3.
#BIT RC6 = 0x07.6 // DEFINO LA PATILLA 6 DEL PORTC COMO RB3.
#BIT RC7 = 0x07.7 // DEFINO LA PATILLA 7 DEL PORTC COMO RB3.
#BIT RA4 = 0x05.4 // DEFINO LA PATILLA 4 DEL PORTA COMO RB3.
29
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
void main() // programa principal
TRISB = 0B00000000; // Defines Puerto B como SALIDA de datos.
TRISC = 0B00000000; // Defines Puerto C como SALIDA de datos.
TRISA = 0B00001111; // Defines Puerto A como ENTRADA de datos.
portB = 0B00000000; // Reseteamos el Puerto B
RA4 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RB3 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC0 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC1 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC2 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC5 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC6 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC7 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
while(1)
RA4=0; //MOTOR PARADO
RB3=0;
delay_ms(100);
RA4=0; //MOTOR HACIA DELANTE
RB3=1;
delay_ms(100);
RA4=1; //MOTOR HACIA ATRAS
RB3=0;
delay_ms(100);
RA4=1; //MOTOR PARADO
RB3=1;
delay_ms(100);
30
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
7.3.4 CONTROL DE GIRO DEL MOTOR IZQUIERDO:
#include <16F876A.h> // Incluye el fichero 16F876 al programa tiene que estar en la misma
//carpeta del programa define funciones, patillas y registros.
#fuses XT,NOWDT // Define la palabra de configuarción del microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro guardián Wathdog
#use delay( clock = 4000000 ) // Define la frecuencia del reloj de 4 MHz
#include <LCD1.c> // Incluimos el driver kbd1.c que contiene las funciones de control del
//display.
#BYTE TRISB = 0x86 // TRISB en 86h.
#BYTE portB = 0x06 // PORTB en 06h.
#BYTE TRISC = 0x87 // TRISC en 87h.
#BYTE portC = 0x07 // PORTC EN 07h.
#BYTE TRISA = 0x85 // TRISA en 85h.
#BYTE portA = 0x05 // PORTA en 05h.
#BIT RB3 = 0x06.3 // DEFINO LA PATILLA 3 DEL PORTB COMO RB3.
#BIT RC0 = 0x07.0 // DEFINO LA PATILLA 0 DEL PORTC COMO RC0.
#BIT RC1 = 0x07.1 // DEFINO LA PATILLA 1 DEL PORTC COMO RC1.
#BIT RC2 = 0x07.2 // DEFINO LA PATILLA 2 DEL PORTC COMO RB3.
#BIT RC3 = 0x07.3 // DEFINO LA PATILLA 3 DEL PORTC COMO RC3.
#BIT RC4 = 0x07.4 // DEFINO LA PATILLA 4 DEL PORTC COMO RC4.
#BIT RC5 = 0x07.5 // DEFINO LA PATILLA 5 DEL PORTC COMO RC5.
#BIT RC6 = 0x07.6 // DEFINO LA PATILLA 6 DEL PORTC COMO RC6.
#BIT RC7 = 0x07.7 // DEFINO LA PATILLA 7 DEL PORTC COMO RC7.
#BIT RA4 = 0x05.4 // DEFINO LA PATILLA 4 DEL PORTA COMO RA4.
31
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
void main() // programa principal
TRISB = 0B00000000; // Defines Puerto B como SALIDA de datos.
TRISC = 0B00000000; // Defines Puerto C como SALIDA de datos.
TRISA = 0B00001111; // Defines Puerto A como ENTRADA de datos.
portB = 0B00000000; // Reseteamos el Puerto B
RA4 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RB3 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC0 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC1 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC2 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC5 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC6 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
RC7 = 0; //RESETEO DE PATILLAS DE FORMA INDIVDUAL
while(1)
RC5=0; //MOTOR PARADO
RC0=0;
delay_ms(100);
RC5=0; //MOTOR HACIA DELANTE
RC0=1;
delay_ms(100);
RC5=1; //MOTOR HACIA ATRAS
RC0=0;
delay_ms(100);
RC5=1; //MOTOR PARADO
RC0=1;
delay_ms(100);
32
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
8 SISTEMA DE CONTROL:
El sistema de control es el cerebro del robot esta parte del robot se encarga de:
1. Guardar el programa.
2. Activar las distintas partes de robot.
3. Recibir la información del sistema sensorial y del exterior
4. Analizar y administrar dicha información, para que el robot funcione con
respecto al programa.
Las partes que forman el sistema de control son:
8.1LA PANTALLA LCD HDD44700, tiene dos líneas de 16 caracteres cada
una, la pantalla LCD nos ha servido para representar la distancia a la que se encuentra el
robot.
La conexión se ha realizado por el puerto B, porque se ha utilizado una librería
genérica que tenia esta configuración.
33
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
8.1.1PATILLAJE DEL LDC
8.1.2DIAGRAMA Y PROGRAMA DE PRUEBA DEL LCD.
#include <16F876A.h> // Incluye el fichero 16F876 al programa tiene que estar en la misma
//carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT // Define la palabra de configuarción del microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro guardián Wathdog
#use delay( clock = 1000000 ) // Define la frecuencia del reloj de 4 MHz
#include <LCD1.c> // Incluimos el driver kbd1.c que contiene las funciones de control del
//display.
#BYTE TRISB = 0x86 // TRISB en 86h.
#BYTE portB = 0x06 // PORTB en 06h.
34
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
#BYTE TRISC = 0x87 // TRISC en 87h.
#BYTE portC = 0x07 // PORTC EN 07h.
#BYTE TRISA = 0x85 // TRISA en 85h.
#BYTE portA = 0x05 // PORTA en 05h.
void main()
TRISB = 0B00000000; // Defines Puerto B como SALIDA de datos.
portB = 0B00000000; // Reseteamos el Puerto B
lcd_init(); // Inicializamos el LCD.
while(1)
lcd_gotoxy(1,1); // Posicionamos el Cursor en la posición 1, línea 1.
printf(lcd_putc, "hello word"); // representación en display.
8.2RECEPTOR DE DATOS CEBEK C-0504.
El receptor de datos es un circuito encargado de recibir datos desde el exterior, este
circuito demodula una señal AM obteniendo los datos digitales comprendidos entre 20 Hz < y < 4 KHz, en un futuro servirá para realizar un coche teledirigido.
8.3 PIC.
Es un microcontrolador PIC16F876A, se encarga de almacenar el programa que
controla el robo, recibir y analizar la información de los sensores y con respecto a ellas
enviar señales que controlen la velocidad y el giro de los motores, representar dicha
información en el display y recibir información desde la tarjeta de radio frecuencia.
El trabaja a una frecuencia de 1 MHz y ejecuta una instrucción en 4uS.
8.4 OTROS.
J6M….J11M.
Son conexiones I2C, estas conexiones se realizan a través de dos puertos RC3 y
RC4, y son conexiones series de datos.
INICIO.
El pulsador inicio sirve para dar la orden al μC de que puede comenzar el programa.
RESET.
Este pulsador, sirve para volver a iniciar el programa, en caso de que el robot se quede
bloqueado en alguna pared, y queremos reiniciar el programa activamos el pulsador.
X1M.
X1m es el cristal de cuarzo, y junto con los condensadores sirve para dar la señal de
reloj de 1MHz al μC .
35
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
J1M, J3M, J5M.
Son los jumper donde se conectan las fajas por las que se envían y reciben las señales de
las otras partes de robot.
J12M.
J12M, sirve para seleccionar un programa, en caso de que tengamos mas de uno.
J13M.
J13M, sirve para poner el robot en modo teledirigido o para poner el robot dirigido por
el programa.
9 BREVE EXPLICACIÓN DEL PROGRAMA PRINCIPAL.
El programa principal consiste en analizar la información, que recibe de los sensores. Si
el robot se encuentra entre 15,5cm y 17cm la PWM de los motores es la misma
(TH=1000).
36
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Si el robot se aleja 2cm más de la pared, la PWM del motor derecho disminuye muy
poco, pero en cambio si desplaza más de 2cm la PWM de dicho motor se reduce
bastante.
El caso contrario, si el robot está 2cm por debajo del rango inicial, la PWM del motor
izquierdo se reduce muy poco, pero si es superior a dos 2cm la PWM disminuye más
bruscamente.
37
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
En caso de que el robot de con una curva a derechas, la PWM del motor derecho casi es
nula (TH=150), por el contrario en caso de un giro a la izquierda el motor izquierdo se
invierte con una PWM muy baja (TH=100).
38
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
9.1ESQUEMA ELECTRICO DE SIMULACIÓN:
39
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
9.2DIAGRAMA Y PROGRAMA PRINCIPAL.
40
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
41
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
42
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
43
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
//*******************************Laberinto1 ***************************
//************************Directivas de preprocesado**********************
#include <16F876A.h>
#device adc=10 // Conversor Analógico Digital de 10 bit el PIC 16F876A //puede
trabajar con 8 o 10 bit de resolución.
#FUSES XT,NOWDT
#use delay(clock=4000000)
#include <LCD1.c> // Incluimos el driver LCD1.c que contiene las funciones //de control
del LCD.
#include <driver_gp2d12.c>
#BYTE TRISB = 0x86 // TRISB en 86h.
#BYTE portB = 0x06 // PORTB en 06h.
#BYTE TRISC = 0x87 // TRISC en 87h.
#BYTE portC = 0x07 // PORTC EN 07h.
#BYTE TRISA = 0x85 // TRISA en 85h.
#BYTE portA = 0x05 // PORTA en 05h.
#BIT RB3 = 0x06.3 // DEFINO LA PATILLA 3 DEL PORTB COMO RB3: //MOTOR.
#BIT RC0 = 0x07.0 // DEFINO LA PATILLA 0 DEL PORTC COMO RC0: //MOTOR.
#BIT RC1 = 0x07.1 // DEFINO LA PATILLA 1 DEL PORTC COMO RC1: //VSENS_A.
#BIT RC2 = 0x07.2 // DEFINO LA PATILLA 2 DEL PORTC COMO RC2: //VSENS_B.
#BIT RC3 = 0x07.3 // DEFINO LA PATILLA 3 DEL PORTC COMO RC3: //I2C.
#BIT RC4 = 0x07.4 // DEFINO LA PATILLA 4 DEL PORTC COMO RC4: //I2C.
#BIT RC5 = 0x07.5 // DEFINO LA PATILLA 5 DEL PORTC COMO RC5: //MOTOR.
#BIT RC6 = 0x07.6 // DEFINO LA PATILLA 6 DEL PORTC COMO RC6: //BL.
#BIT RC7 = 0x07.7 // DEFINO LA PATILLA 7 DEL PORTC COMO RC7: //CONTROL
MANDO PROGRAMA.
#BIT RA2 = 0x05.2 // DEFINO LA PATILLA 2 DEL PORTA COMO RA2: //INICIO.
#BIT RA4 = 0x05.4 // DEFINO LA PATILLA 4 DEL PORTA COMO RA4: //MOTOR.
#BIT RA5 = 0x05.5 // DEFINO LA PATILLA 5 DEL PORTA COMO RA5: //CONTROL
DE PROGRAMAS.
#define DisFron 12 // CREO UNA CONSTANTE LLAMADA DISFRON //PARA
HACER LA COMPARATIVA.
#define DisDech 12 // CREO UNA CONSTANTE LLAMADA DISDECH //PARA
HACER LA COMPARATIVA.
#define DisIzqu 12 // CREO UNA CONSTANTE LLAMADA DISIZQU //PARA
HACER LA COMPARATIVA.
//******************************Declaración de funciones*************
float Sensor_Derecho(void);
float Sensor_Izquierdo(void);
float Sensor_Frontal(void);
void Motor_Derecho(void);
void Motor_Derecho1(void);
void Motor_Derecho2(void);
44
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
void Motor_Derecho3(void);
void Motor_Derecho4(void);
void Motor_Derecho5(void);
void Motor_Derecho6(void);
void Motor_Derecho7(void);
void Motor_Derecho8(void);
void Motor_Derecho9(void);
void Motor_Derecho10(void);
void Motor_Derecho11(void);
void Motor_Derecho12(void);
void Motor_Derecho13(void);
void Motor_Derecho14(void);
void Motor_Derecho15(void);
void Motor_Derecho16(void);
void Motor_Derecho17(void);
void Motor_Derecho18(void);
void Motor_Derecho19(void);
void Motor_Derecho_Parado(void);
void Motor_Izquierdo(void);
void Motor_Izquierdo1(void);
void Motor_Izquierdo2(void);
void Motor_Izquierdo3(void);
void Motor_Izquierdo4(void);
void Motor_Izquierdo5(void);
void Motor_Izquierdo6(void);
void Motor_Izquierdo7(void);
void Motor_Izquierdo8(void);
void Motor_Izquierdo9(void);
void Motor_Izquierdo10(void);
void Motor_Izquierdo11(void);
void Motor_Izquierdo12(void);
void Motor_Izquierdo13(void);
void Motor_Izquierdo14(void);
void Motor_Izquierdo15(void);
void Motor_Izquierdo16(void);
void Motor_Izquierdo17(void);
void Motor_Izquierdo18(void);
void Motor_Izquierdo19(void);
void Motor_Izquierdo_Atras(void);
int16 TH =65535;
//*********************PROGRAMA PRINCIPAL*********************
void main()
int giro= 0;
float sf=0;
float sd=0;
setup_adc(ADC_CLOCK_INTERNAL); // Fuente de reloj RC interno.
setup_adc_ports(0); // Seleccionamos el Puerto A como
//entradas Analógicas. Mirar //ADCON1.
TRISB = 0B00000000; // Defines Puerto B como SALIDA //de
datos.
45
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
TRISC = 0B00000000; // Defines Puerto C como SALIDA //de
//datos.
TRISA = 0B00001111; // Defines Puerto A como //ENTRADA de
//datos.
portB = 0B00000000; // Reseteamos el Puerto B
RA2 = 0; //Reseteo de patillas individuales
RA4 = 0; //Reseteo de patillas individuales
RB3 = 0; //Reseteo de patillas individuales
RC0 = 0; //Reseteo de patillas individuales
RC5 = 0; //Reseteo de patillas individuales
RC6 = 0; //Reseteo de patillas individuales
RC7 = 0; //Reseteo de patillas individuales
lcd_init(); // Inicializamos el LCD.
setup_timer_2(T2_DIV_BY_16,249,1); // setup_timer(Prescaler,PR2,Postscaler)
// Configuración timer2. Si el Periodo = 16mS ---->
//T = 16000uS
// T = [PR2+1] x Tcm x Postscaler x Prescaler
// PR2 puede valer de 0 a 255.
// Tcm es el tiempo de Ciclo Maquina. Tcm =
//4/Fosc = 4/1.000.000 hz = 4uS.
// Prescaler puede valer 1,4,16
// Postscaler puede valer 1.
// 16000uS = [PR2+1] x 4 x 16 x 1
// PR2 =[T/(Tcm x Preescaler x Postscaler)]-1
// PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249 (en C
//249)
setup_ccp2(CCP_PWM); // CCP2 en modo PWM (Salida por RC1) motor
//izquierdo.
setup_ccp1(CCP_PWM); // CCP1 en modo PWM (Salida por RC2) motor
//derecho.
set_pwm1_duty(TH);
set_pwm2_duty(TH);
TRISC = 0B00000000; // Defines Puerto C como SALIDA de datos.
do
sf=Sensor_Frontal();
sd=Sensor_Derecho();
lcd_gotoxy(1,2);
printf(lcd_putc, "Sd= %01.1f cm",sd); // Saltamos de línea y escribimos en el LCD
//"VOLTAJE =" y 4 dígitos de "P"
// en formato truncado de 4 dígitos con 3
//decimales y el carácter "V".
lcd_gotoxy(1,1); //colocamos en el primer carácter de la primera línea
printf(lcd_putc, "Sf= %01.1f cm",sf); //representamos por pantalla
while(RA2==1);
while (1) // Bucle infinito.
46
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
sf=Sensor_Frontal();
sd=Sensor_Derecho();
lcd_gotoxy(1,2);
printf(lcd_putc, "Sd= %01.1f cm",sd); // Saltamos de línea y escribimos en el LCD
//"VOLTAJE =" y 4 dígitos de "P"
// en formato truncado de 4 dígitos con 3 decimales y
//el carácter "V".
lcd_gotoxy(1,1); //colocamos en el primer carácter de la primera línea
printf(lcd_putc, "Sf= %01.1f cm",sf); // Saltamos de línea y escribimos en el LCD
//"VOLTAJE =" y 4 dígitos de "P"
// en formato truncado de 4 dígitos con 3 decimales y
// carácter "V".
if(giro==1||sf<20) //programa de giros a la izquierda.
giro=1;
Motor_Izquierdo_Atras();
Motor_Derecho();
if(sf>=8)
giro=0;
else
if(sd>15.5&&sd<=17)
Motor_Derecho();
Motor_Izquierdo();
//***************************control motor derecho*************************************
if(sd>17&&sd<=17.3) //controles en recta
Motor_Derecho1();
Motor_Izquierdo();
if(sd>17.3&&sd<=17.6)
Motor_Derecho2();
Motor_Izquierdo();
if(sd>17.6&&sd<=17.9)
Motor_Derecho3();
Motor_Izquierdo();
if(sd>17.9&&sd<=18.2)
Motor_Derecho4();
Motor_Izquierdo();
if(sd>18.2&&sd<=18.5) //controles en recta
Motor_Derecho5();
Motor_Izquierdo();
if(sd>18.5&&sd<=18.8)
Motor_Derecho6();
47
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Motor_Izquierdo();
if(sd>18.8&&sd<=19.1)
Motor_Derecho7();
Motor_Izquierdo();
if(sd>19.1&&sd<=19.4)
Motor_Derecho8();
Motor_Izquierdo();
if(sd>19.4&&sd<=19.7)
Motor_Derecho9();
Motor_Izquierdo();
if(sd>19.7&&sd<=20)
Motor_Derecho10();
Motor_Izquierdo();
if(sd>20&&sd<=20.3)
Motor_Derecho11();
Motor_Izquierdo();
if(sd>20.3&&sd<=20.6)
Motor_Derecho12();
Motor_Izquierdo();
if(sd>20.6&&sd<=20.9)
Motor_Derecho13();
Motor_Izquierdo();
/* if(sd>20.9&&sd<=21.2)
Motor_Derecho14();
Motor_Izquierdo();
if(sd>21.2&&sd<=21.5)
Motor_Derecho15();
Motor_Izquierdo();
if(sd>21.5&&sd<=22.5)
Motor_Derecho16();
Motor_Izquierdo();
if(sd>22.5&&sd<=23)
Motor_Derecho17();
Motor_Izquierdo();
if(sd>23&&sd<=24.5)
Motor_Derecho18();
Motor_Izquierdo();
if(sd>24.5&&sd<=25)
Motor_Derecho19();
Motor_Izquierdo();
*/
if(sd>25) //cuando se queda sin pared, giros a la derecha
Motor_Derecho_Parado();
Motor_Izquierdo();
48
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
//***************************control motor izq************************************
if(sd<15.5&&sd>=15.2) //controles en recta
Motor_Izquierdo1();
Motor_Derecho();
if(sd<15.2&&sd>=14.9)
Motor_Izquierdo2();
Motor_Derecho();
if(sd<14.9&&sd>=14.6)
Motor_Izquierdo3();
Motor_Derecho();
if(sd<14.6&&sd>=14)
Motor_Izquierdo4();
Motor_Derecho();
if(sd<14&&sd>=13.7)
Motor_Izquierdo5();
Motor_Derecho();
if(sd<13.7&&sd>=13.4)
Motor_Izquierdo6();
Motor_Derecho();
if(sd<13.4&&sd>=13.1)
Motor_Izquierdo7();
Motor_Derecho();
if(sd<13.1&&sd>=12.8)
Motor_Izquierdo8();
Motor_Derecho();
if(sd<12.8&&sd>=12.5)
Motor_Izquierdo9();
Motor_Derecho();
if(sd<12.5&&sd>=12.2)
Motor_Izquierdo10();
Motor_Derecho();
if(sd<12.2&&sd>=11.9)
Motor_Izquierdo11();
Motor_Derecho();
if(sd<11.9&&sd>=11.6)
Motor_Izquierdo12();
Motor_Derecho();
if(sd<11.6&&sd>=11)
Motor_Izquierdo13();
Motor_Derecho();
if(sd<11&&sd>=10.7)
49
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Motor_Izquierdo14();
Motor_Derecho();
if(sd<10.7&&sd>=10.4)
Motor_Izquierdo15();
Motor_Derecho();
if(sd<10.4&&sd>=9.6)
Motor_Izquierdo16();
Motor_Derecho();
if(sd<9.6&&sd>=9)
Motor_Izquierdo17();
Motor_Derecho();
if(sd<9&&sd>=8.5)
Motor_Izquierdo18();
Motor_Derecho();
if(sd<8.5&&sd>=8)
Motor_Izquierdo19();
Motor_Derecho();
//******************************* Función Sensor_Derecho *******************************
float Sensor_Derecho()
int16 q; // variable de lectura de puerto
float dech, //variable de resultado de la conversión de tensión a centímetros
v; // variable donde guardamos la tensión recogida de la conversión
//analógica
set_adc_channel(3); // Habilitación canal 3 "AN3" sensor derecho
delay_us(20); // Retardo de 20uS necesaria para respetar el tiempo de Adquisición
//Tad.
q = read_adc(); // Lectura canal 0 "AN3"
v = (5.0 * q) / 1024.0; // conversión a tensión del código digital "q".
dech=Gp2d12_v_d(v); //driver del Gp2d12 para conversión de voltios a cemtimetos,
//guardado en variable dech.
return(dech); // el resultado que devuelvo llamada.
//******************************* Función Sensor_Izquierdo ******************************
float Sensor_Izquierdo()
int16 q; // variable de lectura de puerto
float izqu, // variable de resultado de la conversión de tensión a centímetros
v; // variable donde guardamos la tensión recogida de la conversión
//analógica
set_adc_channel(0); // Habilitación canal 0 "AN0" sensor izquierdo
delay_us(20); // Retardo de 20uS necesaria para respetar el tiempo de Adquisición
//Tad.
q = read_adc(); // Lectura canal 0 "AN0"
50
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
v = (5.0 * q) / 1024.0; // conversión a tensión del código digital "q".
izqu=Gp2d12_v_d(v); //driver del Gp2d12 para conversión de voltios a cemtimetos,
//guardado en variable izqu.
return(izqu); // el resultado que devuelvo llamada.
//******************************* Función Sensor_Frontal***************************
float Sensor_Frontal()
int16 q; // variable de lectura de puerto
float fron, // variable de resultado de la conversión de tensión a centímetros
v; // variable donde guardamos la tensión recogida de la conversión
//analógica
set_adc_channel(1); // Habilitación canal 1 "AN1" sensor derecho
delay_us(20); // Retardo de 20uS necesaria para respetar el tiempo de Adquisición
//Tad.
q = read_adc(); // Lectura canal 0 "AN1"
v = (5.0 * q) / 1024.0; // conversión a tensión del código digital "q".
fron=Gp2d12_v_d(v); //driver del Gp2d12 para conversión de voltios a cemtimetos,
//guardado en variable fron.
return(fron); // el resultado que devuelvo llamada.
//*********************************************************************************
//*********************************CONTROL DEMOTORES***************************
//***********************************************************************************
//*********************************Controles del Motor Derecho**************************
//***********************************Función Motor_Derecho****************************
void Motor_Derecho()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 1000;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_ Derecho 1**************************
void Motor_Derecho1()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 990;
51
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL
//MOTOR DERECHO(ojo tengo que cambiar los cables de la
//placa)
//***********************************Función Motor_ Derecho 2*************************
void Motor_Derecho2()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 970;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho 3**************************
void Motor_Derecho3()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 950;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_ Derecho 4*************************
void Motor_Derecho4()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 930;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho5*************************
void Motor_Derecho5()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 910;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho6***********************
void Motor_Derecho6()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 890;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
52
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
//***********************************Función Motor_ Derecho 7********************
void Motor_Derecho7()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 800;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor8*******************************
void Motor_Derecho8()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 770;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO(ojo tengo que cambiar los cables de la placa)
//***********************************Función Motor9*******************************
void Motor_Derecho9()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 740;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho10************************
void Motor_Derecho10()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 710;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho11**************************
void Motor_Derecho11()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 680;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
53
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
//***********************************Función Motor_Derecho12***************************
void Motor_Derecho12()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 650;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho13***************************
void Motor_Derecho13()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 620;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho14***************************
void Motor_Derecho14()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 590;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho15***************************
void Motor_Derecho15()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 500;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho16**************************
void Motor_Derecho16()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 450;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
54
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
//***********************************Función Motor_Derecho17***************************
void Motor_Derecho17()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 400;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho18*************************
void Motor_Derecho18()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 350;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//***********************************Función Motor_Derecho19*************************
void Motor_Derecho19()
RA4=0; //MOTOR DERECHO HACIA ATRAS
RB3=1;
TH = 300;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO
//
//***********************************FuncionMotor_Derecho_Parado***********************
void Motor_Derecho_Parado()
RA4=0; //MOTOR DERECHO HACIA DELANTE
RB3=1;
TH = 150;
set_pwm2_duty(TH); //ATACA A LA PATILLA RC1, Y CONTROLAMOS EL MOTOR
//DERECHO(ojo tengo que cambiar los cables de la placa)
//*********************************Controles del Motor
Izquierdo***************************
//*********************************Función Motor_Izquierdo*****************************
void Motor_Izquierdo()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 1000;
55
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo_Parado*********************
void Motor_Izquierdo1()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 990;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo2***********************
void Motor_Izquierdo2()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 970;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo3***************************
void Motor_Izquierdo3()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 950;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo4 **********************
void Motor_Izquierdo4()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 930;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo3************************
void Motor_Izquierdo5()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 910;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
56
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
//*********************************Función Motor_Izquierdo6**********************
void Motor_Izquierdo6()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 890;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo7**************************
void Motor_Izquierdo7()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 800;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo8***************************
void Motor_Izquierdo8()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 770;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo9***************************
void Motor_Izquierdo9()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 740;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo10*********************
void Motor_Izquierdo10()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 710;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo11************************
void Motor_Izquierdo11()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
57
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
TH = 680;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo12*******************
void Motor_Izquierdo12()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 650;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo13*********************
void Motor_Izquierdo13()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 620;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo14************************
void Motor_Izquierdo14()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 590;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo15*********************
void Motor_Izquierdo15()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 500;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo16**************************
void Motor_Izquierdo16()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 450;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
58
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
//*********************************Función Motor_Izquierdo17************************
void Motor_Izquierdo17()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 400;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo18***********************
void Motor_Izquierdo18()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 350;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo19**************************
void Motor_Izquierdo19()
RC5=1; //MOTOR HACIA DELANTE
RC0=0;
TH = 300;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
//*********************************Función Motor_Izquierdo_Atras********************
void Motor_Izquierdo_Atras()
RC5=0; //MOTOR HACIA ATRAS
RC0=1;
TH = 200;
set_pwm1_duty(TH); //ATACA A LA PATILLA RC2, Y CONTROLAMOS EL MOTOR
//IZQUIERDO
59
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
10 FABRICACIÓN DE PLACAS.
El proceso que se ha seguido a la hora de fabricar las placas ha sido el siguiente:
1. Estudio del esquema eléctrico.
2. Reconocimiento de los componentes.
3. Alineación de los componentes en el PCB.
4. Tirar pistas entre los componentes, en función del esquema eléctrico.
5. Engordar pistas y pacs.
6. Obtención de las coordenadas, necesarias para el CNC.
7. Taladrado de los agujeros en el CNC.
8. Aplicar positive en las placas.
9. Meter las placas en el horno.
10. Impresión de la cara de pistas, en papel cebolla.
11. Grabado de pistas en las placas, (mediante la insolación).
12. Revelado con sosa.
13. Comprobar las uniones de las pistas y corregir con un rotulador indeleble.
14. Eliminación del cobre con acido.
15. Volver a comprobar las uniones entres pistas.
16. Colocar y soldar los componentes.
60
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
10.1 FABRICACIÓN PLACAS CARA BOTTOM.
61
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
10.2 FABRICACIÓN CARA TOP.
62
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
10.3 FABRICACIÓN CARA COMPONENTES.
63
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
11 DISEÑO MECÁNICO.
El diseño mecánico es el resultado de varias pruebas, al principio el robot se colocó
sobre una superficie redonda, quedando las ruedas fuera de la superficie. Los sensores
se atornillaron con unos mástiles a la misma superficie, pero al quedar dentro de esta el
robot chocaba contra las paredes y no podía girar en curvas cerradas, por lo que se
tuvieron que hacer unas ampliaciones a la superficie para poder trabajar con el. Todo
esto provocaba que el robot tuviera demasiados salientes; sensores, ruedas, LCD, por lo
que el robot podría chocarse contra cualquier obstáculo y quedar bloqueado.
Para el diseño final, se tuvieron en cuenta los problemas anteriores por lo que se decidió
hacer una superficie redonda, que con unas ventanas fresadas para poder introducir las
ruedas. Como el lugar de posicionamiento no podía ser fijo, se fabrico la superficie con
una media luna con tiras verticales, a modo de carril, por la cual se puedan desplazar
los sensores.
64
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
12 LISTA DE COMPONENTES.
Factura de materiales de potencia y control
Titulo : potencia y control
Autor : Raúl Antona Fresno
Revisión :
Diseño Creado : martes, 11 de noviembre de 2008
Design Last Modified : lunes, 16 de marzo de 2009
Total componentes : 68
18 Resistors
Cantidad Referencias Valor Precio Coste
9 R1M, R2, R4-R6, R6M, R8, R10, R12 10k 0.05 0.45
1 R2M 100 0.05 0.05
6 R3, R5, R7, R9, R11, R13 220 0.05 0.3
2 R3M, R4M 4.7k 0.05 0.1
5 Capacitors
Cantidad Referencias Valor Precio Coste
2 C1M, C2M 15pF 0.05 0.1
3 C3M, C10, C11 100nF 0.05 0.15
8 Integrated Circuits
Cantidad Referencias Valor Precio Coste
6 U3-U8 OPTOCOUPLER-NPN 0.35 2.1
1 U9 L298 3.5 3.5
1 U10M PIC16F876_JOAN 4.5 4.5
4 Transistors
Cantidad Referencias Valor Precio Coste
4 Q1-Q4 BD139_JOAN 0.35 1.4
8 Diodes
Cantidad Referencias Valor Precio Coste
8 D5-D9, D11, D12, D18 1N4007_JOAN 0.2 1.6
25 Miscellaneous
65
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Cantidad Referencias Valor Precio Coste
1 ANTENA
2 INICIO, RESET PULSADOR_JOAN 0.4 0.8
3 J1M, J3, J3M CONN-SIL10 0.30 0.9
1 J5M CONN-SIL10_JOAN 0.30 0.3
6 J6M-J11M CONN-SIL4 0.15 0.9
3 J12M, JUMPER1, JUMPER2 CONN_SIL3 0.15 0.45
1 J13M CONN-SIL3 0.15 0.15
1 JP21 BORNIER 2 0.3 0.3
1 LCD1M LCD-16 X 2_JOAN 12 12
2 MASA4, MASA_M BORNIER 1 0.15 0.30
2 MOTOR DECH, MOTOR IZQ 12V 10 20
1 RF1M CEBEK-C-0504_JOAN 7 7
1 X1M CRYSTAL 0.45 0.45
2 Placa de fibra de vidrio Potencia, control 6 12
6 Separadores metálicos Macho-Hembra Métrica 3 0.5 3
6 Tuercas Métrica 3 0.1 0.6
6 Tornillos Métrica 3 0.4 2.4
1 Rl Rueda loca 1.6 1.6
2 Rg Ruedas gomas espuma 2.5 5
1 Soporte de plástico 15x15 1.2 1.2
Total placa de potencia y control 83.6
66
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
Bill Of Materials For Fabricacion memoria.DSN
Design Title : Fuente de alimentación+trasmisión de datos+sensores
Author : Raúl Antona Fresno
Revision :
Design Created : martes, 11 de noviembre de 2008
Design Last Modified : lunes, 16 de marzo de 2009
Total Parts In Design : 36
2 Resistors
Cantidad Referencias Valor Precio Coste
1 R1 220 0.05 0.05
1 R38 240 0.05 0.05
13 Capacitors
Cantidad Referencias Valor Precio Coste
1 C1 2200uF 0.5 0.5
3 C2, C4, C9 100nF 0.05 0.15
1 C3 220uF 0.2 0.2
4 C5-C8 1uF 0.1 0.4
3
C12, C14,
C15
10uF 0.15 0.45
1 C13 10ufF 0.15 0.15
2 Integrated Circuits
Cantidad Referencias Valor Precio Coste
1 U1 LM350K_JOAN 1 1
1 U2 MAX232 1.5 1.5
4 Diodes
Cantidad Referencias Valor Precio Coste
3 D1, D2, D4 1N4007_JOAN 0.2 0.6
1 D3 LED-RED_JOAN 0.3 0.3
15 Miscellaneous
Cantidad Referencias Valor Precio Coste
1 BAT1 9V 12 12
3
INFR1-
INFR3
GP2D12_JOAN 16 48
1 J1A CONN-SIL10 0.5 0.5
67
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
1 J5C CONN-SIL10_JOAN 0.5 0.5
1 J11 CONN-D9M 2.5 2.5
1 JP1 BORNIER 2_JOAN 0.2 0.2
1 MASA3 BORNIER 1 0.2 0.2
2
MASA_C,
ON-OFF
0.1 0.1
1 RV1 1k 0.2 0.2
3
ULTR1-
ULTR3
SRF08_JOAN 35 105
2 Placas 70x75 6 12
Total 186.45
TOTAL MATERIAL DE
COMPONENTES 270.05€
lunes, 16 de marzo de 2009 1:06:19
12.1 DESARROLLO DEL PROYECTO.
Coste 20 € / Hora.
10 Horas de desarrollo Hardware.
.................................................................. 200 €
30 Horas de desarrollo Software.
................................................................... 600 €
10 Horas de montaje del Prototipo.
................................................................ 200 €
10 Horas de realización de la Memoria.
........................................................ 200 €
5 Horas de búsqueda de materiales.
.............................................................. 100 €
10 Horas de Pruebas.
...................................................................................... 200 €
______
1500 €
TOTAL PROYECTO 1770.05€
68
Robot laberinto Raúl Antona Fresno PE21
Ciclo Superior de Desarrollo de Productos Electrónicos
I.E.S. Joan miro
Promoción 2007-2009
13 REFERENCIAS.
[1] Libros: Título: Microcontroladores PIC16F84. Desarrollo de proyectos (2ª
Edición)
Autores: Enrique Palacios, Fernando Remiro, Lucas J. López.
Editorial: Ra_Ma
Título: Compilador C CCS y simulador proteus para
MICROCONTROLADOES PIC.
AUTOR: Eduardo García Breijo.
Editorial: Marcombo
Título: Tecnología de circuitos impresos
Autor: Claudio Fernández González.
Editorial: UAH
[2] Empresa suministradora de materiales:
Diotronic S.A. C/Juan Bravo 58. Pagina Web: www.ditronic.com
14 ANEXOS.
CaracterísticasdelL298: http://www.datasheetcatalog.org/datasheet/SGSThomsonMicroelectronics/mXrqqxz.pdf
LM350K: http://www.datasheetcatalog.org/datasheets/480/49869_DS.pdf
Sensores GP2D12: http://pdf1.alldatasheet.com/datasheet-pdf/view/84019/SHARP/GP2D12.html
Pic 16f876A: http://www.datasheetcatalog.org/datasheets2/44/4474925_1.pdf
Max 232: http://www.datasheetcatalog.org/datasheet/texasinstruments/max232.pdf
Top Related