Story Transcript
I.E.S. Joan Miró (S.S. De los Reyes)
Robot Elii
(Robot rastreador con LED,borde derecho y con memoria) Alumnas: Dayana Cuñas y Ruth Zurita Instituto: I.E.S. Joan Miró Localidad: San Sebastián de los Reyes Curso: Enero_2009
Informática 4º ESO
1
I.E.S. Joan Miró (S.S. De los Reyes)
Índice de contenido 1.- Explicación breve del Proyecto.......................................................................................................4 2.- Esquema eléctrico de simulación del Rastreador............................................................................5 3.- Programas Robot Rastreador y Coche Teledirigido. ......................................................................6 3.1.- Programas de test de las diferentes partes del robot................................................................6 3.1.1.- Pruebas de los Led...........................................................................................................6 3.1.1.1.- Diagrama de Flujo Led............................................................................................6 3.1.1.2.- Programa Led...........................................................................................................6 3.1.2.- Pruebas del Motor Derecho.............................................................................................8 3.1.2.1.- Diagrama de Flujo Motor Derecho..........................................................................8 3.1.2.2.- Programa Motor Derecho.........................................................................................8 3.1.3.- Pruebas del Motor Izquierdo.........................................................................................10 3.1.3.1.- Diagrama de Flujo Motor Izquierdo......................................................................10 3.1.3.2.- Programa Motor Izquierdo.....................................................................................10 3.1.4.- Pruebas del Pulsador......................................................................................................12 3.1.4.1.- Diagrama de Flujo Pulsador...................................................................................12 3.1.4.2.- Programa Pulsador.................................................................................................12 3.1.5.- Pruebas de Sensores.......................................................................................................14 3.1.5.1.- Diagrama de Flujo Sensores..................................................................................14 3.1.5.2.- Programa de Sensores............................................................................................14 3.2.- Rastreador 1...........................................................................................................................17 3.2.1.- Diagrama de Flujo Rastreador 1....................................................................................17 3.2.2.- Programa Rastreador 1..................................................................................................18 3.3.- Coche Teledirigido................................................................................................................22 3.3.1.- Esquema Eléctrico de simulación del Coche Teledirigido............................................22 3.3.2.- Programa Coche Teledirigido........................................................................................22 3.3.2.1.- Transmisión_Serie_1.c...........................................................................................22 3.3.2.2.- Recepción_Serie_1.c..............................................................................................24 3.4.- Coche Teledirigido + Rastreador...........................................................................................32 3.4.1.- Coche-Rastreador_1.c....................................................................................................32 4.- Diagrama en Bloques....................................................................................................................43 4.1.- Esquema Eléctrico Robot Rastreador....................................................................................43 4.1.1.- Adaptador de señales PC-uC.........................................................................................44 4.1.2.- Regulador 9v/5v.............................................................................................................44 4.1.3.- Sistema de Control.........................................................................................................45 4.1.4.- Control de Potencia........................................................................................................46 4.1.5.- Sensores de Infrarrojos y acondicionador de señal........................................................48 4.2.- Mando....................................................................................................................................48 5.- Diseño de Placas de Circuitos Impresos. .....................................................................................49 5.1.1.- Cara de Componentes y de pistas Top Copper del Adaptador de señal PC-uC.............49 5.1.2.- Cara de pistas Bottom Copper del Adaptador de señal PC-uC......................................50 5.2.1.- Cara de Componentes y de pistas Top Copper del Regulador 9v/5v.............................50 5.2.2.- Cara de pistas Bottom Copper del Regulador 9v/5v......................................................50 5.3.1.- Cara de Componentes y de pistas Top Copper del Sistema de Control.........................51
Informática 4º ESO
2
I.E.S. Joan Miró (S.S. De los Reyes)
5.3.2.- Cara de pistas Bottom Copper del Sistema de Control..................................................51 5.3.3.- Cara de pistas Top Copper del Sistema de Control........................................................52 5.4.1.- Cara de Componentes y de pistas Top Copper del Control de Potencia........................52 5.4.2.- Cara de pistas Bottom Copper del Control de Potencia................................................53 5.4.3.- Cara de pistas Top Copper del Control de Potencia......................................................53 5.5.1.- Cara de Componentes y de pistas Top Copper de los Sensores de Infrarrojos y acondicionador de señal............................................................................................................54 5.5.2.- Cara de pistas Bottom Copper del Adaptador de los Sensores de Infrarrojos y acondicionador de señal............................................................................................................55 5.5.3.- Cara de pistas Top Copper de los Sensores de Infrarrojos y acondicionador de señal.. 55 5.6.1.- Cara de Componentes y de pistas Top Copper del Mando............................................55 5.6.2.- Cara de pistas Bottom Copper del Adaptador del Mando.............................................55 5.6.3.- Cara de pistas Top Copper del Mando...........................................................................56 6.- Diseño mecánico, (Carrocería). ....................................................................................................56 7.- Lista de Componentes y coste económico. ..................................................................................60 8.- Coste Económico Total. ...............................................................................................................62 9.- Referencias....................................................................................................................................63 10.- Anexos. .......................................................................................................................................63 10.1.- Características Eléctricas del Motor de Corriente Continua COPAL HG16-030-AA-00. . 63 10.2.- Características Eléctricas de los Sensores de Infrarrojos. ..................................................63 10.3.- Características Eléctricas Tarjeta Emisora de Datos 433,92 Mhz. (CEBEK C-0503). ......63 10.4.- Características Eléctricas Tarjeta Receptora de Datos 433,92 MHz. ( CEBEK C-504 ).. . .63 10.5.- Características Eléctricas del Inversor de Giro L298N.......................................................63 10.6.- Características Eléctricas del microcontrolador PIC16F876A............................................63
Informática 4º ESO
3
I.E.S. Joan Miró (S.S. De los Reyes)
1.- Explicación breve del Proyecto. El proyecto consiste en realizar un robot que sea capaz de seguir una linea negra sobre un fondo blanco de forma autónoma. El robot es tipo triciclo. Se controla el sentido de giro de cada una de las ruedas por separado, de esta manera se pueden realizar giros a derecha y a izquierda ( Ver Figura 1)
El robot trabaja con técnicas digitales. El control está realizado con un microcontrolador de Microchip el PIC 16F876a. Se le ha dotado de unos LED para que indique lo que está ocurriendo en su entorno en todo momento. Dispone de sensores de Infrarrojos CNY70 para localizar la línea negra. Además se añade al robot que pueda ser teledirigido. En todo momento el control del robot puede hacerse manualmente. Existe una comunicación entre el robot y un mando en radio frecuencia con los módulos de CEBECK C-0503 y C-0504. Que son un transmisor y receptor de datos en modulación AM que trabajan a una frecuencia portadora 433,92 MHz y tienen un Ancho de Banda de 4 Khz.
Informática 4º ESO
4
I.E.S. Joan Miró (S.S. De los Reyes)
Se diseña el proyecto con una herramienta llamada Proteus, que te permite simular el hardware y el software a la vez, pudiendo ejecutarse paso a paso cada programa. Se puede trabajar con ficheros .ASM y C. Además se ha desarrollado las placas del proyecto y la carrocería del dispositivo. El software se puede grabar en el robot directamente sin necesidad de extraer el microcontrolador, para ello se ha utilizado el grabador PICdownloader.exe. Los microcontroladores tienen que tener cargado previamente un programa de comunicaciones para comunicarnos con un Ordenador Personal. 2.- Esquema eléctrico de simulación del Rastreador. C3
VDD
Sistema de Control U2 R6
R7
R8
R13
220
220
220
220
10k
IZQUIERDA RB1
RB2
RB3
1
A
A
DERECHA
ADELANTE
D7
ATRAS
RC0 RC1 RC2 RC3 RC4 RC5
INCIO 2
K
K
D6
K
D5
K
D4
K
D3
A
A
A
RB0
PARADA
RB4
RB5
RB[0..5]
15pF
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV
RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RC0/T1OSO/T1CKI RA5/AN4/SS RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
11 12 13 14 15 16 17 18
X1
9 10 1
1MHz
C4 RA0 RA1
2 3 4 5 6 7
100 VDD
R2 10k
RESET
RC5
2
K
MOTOR IZQUIERDO
OPTOCOUPLER-NPN VDD
1 15
Q2
VDD V1
+88.8
L298
5 2 4
A
MOTOR DERECHO
D12
Q4
+88.8
+88.8 Volts
OPTOCOUPLER-NPN
Informática 4º ESO
6 5
SENSOR IZQUIERDO NEGRO
2
K
D13
Q3
D14
1
A
6
K V1
GND
Control de Potencia
U11 1
18k
14
OUT4
R15 10K
74HC14
R12
18k
R17 220
U4:D
74HC14
13
OUT3
8
Volts
VDD
U4:C R10
3
OUT2
SENSA SENSB
VDD
2
OUT1
RA1
RA0
D11 A
VS
+88.8 A
VCC
D10
13
4
IN1 IN2 IN3 IN4 ENA ENB
U3
K
5 7 10 12 6 11
Q1
4
A
5 2
9
100nF
2
K
10k
6
K
R14
U10
1
VDD
C5
D9 A
12V
220
1
D8
DCMOTOR 12V 12 1mH 100 50 0.001
D15
SENSOR DERECHO NEGRO
SW1 K
R16
V1
A
1
K
BAT1 2
V1
1
V1
1
SW2 2
BLANCO
1
2
BLANCO
A
RC4
RC3
RC0
RC1
RC2
PIC16F876_JOAN RC[0..5]
VDD
VSS
15pF
R3
12
R5
220
21 22 23 24 25 26 27 28
RA[0..1]
R4
RB0 RB1 RB2 RB3 RB4 RB5
Sensores de Infrarrojos y acondicionador de señal
5
I.E.S. Joan Miró (S.S. De los Reyes)
3.- Programas Robot Rastreador y Coche Teledirigido. 3.1.- Programas de test de las diferentes partes del robot. 3.1.1.- Pruebas de los Led. 3.1.1.1.- Diagrama de Flujo Led.
Pruebas Led
Encender Led
Temporizar 1 segundo
Apagar Led
Temporizar 1 segundo
3.1.1.2.- Programa Led. // Pruebas de los Led. // ********************************** Directivas de Preprocesado************************************* // (Controlan la conversión del programa a código máquina por parte del compilador) #include
// Incluye el fichero 16F876A al programa tiene que estar en la misma carpeta del // programa define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuració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
#BYTE TRISB = 0x86
// TRISB en 86h.
#BYTE portB = 0x06
// PORTB en 06h.
Informática 4º ESO
6
I.E.S. Joan Miró (S.S. De los Reyes) #BIT led_Izquierda = 0x06.1
// RB1 en 0x06 patilla 1.
#BIT led_Adelante = 0x06.2
// RB2 en 0x06 patilla 2.
#BIT led_Derecha = 0x06.3
// RB3 en 0x06 patilla 3.
#BIT led_Atras = 0x06.4
// RB4 en 0x06 patilla 4.
#BIT led_Parada = 0x06.5
// RB5 en 0x06 patilla 5.
// **************************** Función principal o programa principal ******************************* // Se define con un void main, void main() { TRISB = 0B00000001;
// Defines Puerto B como (PB7..PB1)SALIDA de datos. // y PB0 como entrada de datos.
while (1)
// Ejecuta indefinidamente lo que está entre corchetes.
{ led_Izquierda = 0;
// Encendemos el Led de la Izquierda.
led_Adelante = 0;
// Encendemos el Led de la Adelante.
led_Derecha = 0;
// Encendemos el Led de la Derecha.
led_Atras = 0;
// Encendemos el Led de la Atrás.
led_Parada = 0;
// Encendemos el Led de la Parada.
delay_ms(200);
// Retardo de 500 mS.
led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada.
delay_ms(500);
// Retardo de 500 mS.
} }
Informática 4º ESO
7
I.E.S. Joan Miró (S.S. De los Reyes)
3.1.2.- Pruebas del Motor Derecho. 3.1.2.1.- Diagrama de Flujo Motor Derecho.
Pruebas Motor Derecho
Giro del motor hacia la Izquierda
Temporizar 1 segundo
Giro del Motor hacia la derecha
Temporizar 1 segundo
Parar el motor
Temporizar 1 segundo
3.1.2.2.- Programa Motor Derecho. // Pruebas del Motor Derecho. // ********************************** Directivas de Preprocesado************************************* // (Controlan la conversión del programa a código máquina por parte del compilador) #include
// Incluye el fichero 16F876A al programa tiene que estar en la misma carpeta del // programa define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuració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
#BYTE TRISC = 0x87
// TRISC en 87h.
Informática 4º ESO
8
I.E.S. Joan Miró (S.S. De los Reyes) #BYTE portC = 0x07
// PORTC en 07h.
#BIT in4 = 0x07.0
// RC0 en 0x07 patilla 0.
#BIT in3 = 0x07.3
// RC3 en 0x07 patilla 3.
#BIT sensB = 0x07.2
// RC2 en 0x07 patilla 2.
// *************************** Función principal o programa principal ******************************* // Se define con un void main, void main() { TRISC = 0B00000000;
// Defines Puerto C como entrada de datos.
portC = 0B00000000;
// Poner a 0 el Puerto C.
SENSB = 1;
// Ponemos SENSB a masa.
while (1)
// Ejecuta indefinidamente lo que está entre corchetes.
{ in3 = 1;
// Giro del motor hacia la Izquierda.
in4 = 0; delay_ms(250);
// Retardo de 1S.
in3 = 0;
// Giro del motor hacia la Derecha.
in4 = 1; delay_ms(250);
// Retardo de 1S.
in3 = 0;
// Parada del motor.
in4 = 0; delay_ms(250);
// Retardo de 1S.
} }
Informática 4º ESO
9
I.E.S. Joan Miró (S.S. De los Reyes)
3.1.3.- Pruebas del Motor Izquierdo. 3.1.3.1.- Diagrama de Flujo Motor Izquierdo.
Pruebas Motor Izquierdo
Giro del Motor hacia la Izquierda
Temporizar 1 segundo
Giro del motor hacia la Derecha
Temporizar 1 segundo
Parar el motor
Temporizar 1 segundo
3.1.3.2.- Programa Motor Izquierdo. // Pruebas del Motor Izquierdo. // ************************************ Directivas de Preprocesado*********************************** // (Controlan la conversión del programa a código máquina por parte del compilador) #include
// Incluye el fichero 16F876A al programa tiene que estar en la misma carpeta del // programa define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuració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
#BYTE TRISC = 0x87
// TRISC en 87h.
Informática 4º ESO
10
I.E.S. Joan Miró (S.S. De los Reyes) #BYTE portC = 0x07
// PORTC en 07h.
#BIT in2 = 0x07.4
// RC4 en 0x07 patilla 4.
#BIT in1 = 0x07.5
// RC5 en 0x07 patilla 5.
#BIT sensA = 0x07.1
// RC1 en 0x07 patilla 1.
// **************************** Función principal o programa principal ******************************* // Se define con un void main, void main() { TRISC = 0B00000000;
// Defines Puerto C como entrada de datos.
portC = 0B00000000;
// Poner a 0 el Puerto C.
sensA = 1;
// Ponemos SENSA a masa.
while (1)
// Ejecuta indefinidamente lo que está entre corchetes.
{ in1 = 1;
// Giro del motor hacia la Izquierda.
in2 = 0; delay_ms(250);
// Retardo de 1S.
in1 = 0;
// Giro del motor hacia la Derecha.
in2 = 1; delay_ms(250);
// Retardo de 1S.
in1 = 0;
// Parada del motor.
in2 = 0; delay_ms(250);
// Retardo de 1S.
} }
Informática 4º ESO
11
I.E.S. Joan Miró (S.S. De los Reyes)
3.1.4.- Pruebas del Pulsador. 3.1.4.1.- Diagrama de Flujo Pulsador. Pruebas Pulsador
NO ¿Se ha pulsado INICIO?
Encendemos Led adelante Apagamos Led izquierda
SI Encendemos Led izquierda Apagamos Led adelante
3.1.4.2.- Programa Pulsador. // Pruebas del Pulsador. // ********************************* Directivas de Preprocesado************************************** // (Controlan la conversión del programa a código máquina por parte del compilador) #include
// Incluye el fichero 16F876A al programa tiene que estar en la misma carpeta del // programa define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuració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
#BYTE TRISB = 0x86
// TRISB en 86h.
#BYTE portB = 0x06
// PORTB en 06h.
#BIT led_Izquierda = 0x06.1
// RB1 en 0x06 patilla 1.
#BIT led_Adelante = 0x06.2
// RB2 en 0x06 patilla 2.
#BIT led_Derecha = 0x06.3
// RB3 en 0x06 patilla 3.
#BIT led_Atras = 0x06.4
// RB4 en 0x06 patilla 4.
#BIT led_Parada = 0x06.5
// RB5 en 0x06 patilla 5.
Informática 4º ESO
12
I.E.S. Joan Miró (S.S. De los Reyes) #BIT pulsador = 0x06.0
// RB0 en 0x06 patilla 0.
// **************************** Función principal o programa principal ******************************* // Se define con un void main, void main() { TRISB = 0B00000001;
// Defines Puerto B como (PB7..PB1)SALIDA de datos. // y PB0 como entrada de datos.
led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada.
while (1)
// Ejecuta indefinidamente lo que está entre corchetes.
{ if (pulsador == 1)
// Preguntamos si pulsador=1
{
// Si pulsador=1 ejecuta lo que viene a continuación. led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 0;
// Encendemos el Led de la Adelante.
} else
// Si RC0=0 ejecuta lo que viene a continuación.
{ led_Izquierda = 0;
// Encendemos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
} } }
Informática 4º ESO
13
I.E.S. Joan Miró (S.S. De los Reyes)
3.1.5.- Pruebas de Sensores. 3.1.5.1.- Diagrama de Flujo Sensores. Pruebas Sensores
¿Sensor Izquierdo = Negro? ¿Sensor Derecho = Negro?
SI
Apagamos led atrás Apagamos led parada
NO ¿Sensor Izquierdo = Blanco? ¿Sensor Derecho = Negro?
SI
Encendemos led atrás Apagamos led parada
NO ¿Sensor Izquierdo = Negro? ¿Sensor Derecho = Blanco?
SI
Apagamos led atrás Encendemos led parada
NO ¿Sensor Izquierdo = Blanco? ¿Sensor Derecho = Blanco?
SI
Encendemos led atrás Encendemos led parada
NO
3.1.5.2.- Programa de Sensores. // Pruebas de Sensores. // ************************************ Directivas de Preprocesado*********************************** // (Controlan la conversión del programa a código máquina por parte del compilador) #include
// Incluye el fichero 16F876A al programa tiene que estar en la misma carpeta del // programa define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuració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
Informática 4º ESO
14
I.E.S. Joan Miró (S.S. De los Reyes) #BYTE TRISB = 0x86
// TRISB en 86h.
#BYTE portB = 0x06
// PORTB en 06h.
#BYTE TRISA = 0x85
// TRISA en 85h.
#BYTE portA = 0x05
// PORTA en 05h.
#BIT led_Izquierda = 0x06.1
// RB1 en 0x06 patilla 1.
#BIT led_Adelante = 0x06.2
// RB2 en 0x06 patilla 2.
#BIT led_Derecha = 0x06.3
// RB3 en 0x06 patilla 3.
#BIT led_Atras = 0x06.4
// RB4 en 0x06 patilla 4.
#BIT led_Parada = 0x06.5
// RB5 en 0x06 patilla 5.
// ****************************** Función principal o programa principal ***************************** // Se define con un void main, void main() { int8 sensores; TRISB = 0B00000001;
// Defines Puerto B como (PB7..PB1)SALIDA de datos. // y PB0 como entrada de datos.
TRISA = 0B11111111;
// Defines Puerto A como entrada de datos.
led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1; led_Parada = 1; while (1)
// Apagamos el Led de la Atrás. // Apagamos el Led de la Parada. // Ejecuta indefinidamente lo que está entre corchetes.
{ sensores = portA; sensores = sensores & 0B00000011; switch (sensores)
// Preguntamos por el Puerto C si es 0 ejecuta el case 0, si es 1 el case 1, // si es 2 ejecuta el case 2,si es 3 ejecuta el case 3 //si es mayor que 3 ejecuta default.
{
Informática 4º ESO
15
I.E.S. Joan Miró (S.S. De los Reyes) case 0: led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada.
led_Atras = 0;
// Encendemos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 0;
// Encendemos el Led de la Parada.
led_Atras = 0;
// Encendemos el Led de la Atrás.
led_Parada = 0;
// Encendemos el Led de la Parada.
Break; case 1:
break; case 2:
break; case 3:
} } }
Informática 4º ESO
16
I.E.S. Joan Miró (S.S. De los Reyes)
3.2.- Rastreador 1. 3.2.1.- Diagrama de Flujo Rastreador 1. Rastreador 1
¿Esta posicionado el Robot?
NO
Apagamos el Led de Parada
SI Encendemos el Led de Parada
NO
¿Se ha pulsado INICIO? SI Activamos las masas de SENSA y SENSB
¿Sensor Izquierdo = Negro? ¿Sensor Derecho = Negro?
SI
Ir hacia la Izquierda Encender Led Izquierda
SI
Ir hacia Adelante Encender Led Adelante
SI
Ir hacia la Izquierda Encender Led Izquierda
SI
Ir hacia la Derecha Encender Led Derecha
NO ¿Sensor Izquierdo = Blanco? ¿Sensor Derecho = Negro?
NO ¿Sensor Izquierdo = Negro? ¿Sensor Derecho = Blanco?
NO ¿Sensor Izquierdo = Blanco? ¿Sensor Derecho = Blanco?
NO
Informática 4º ESO
17
I.E.S. Joan Miró (S.S. De los Reyes)
3.2.2.- Programa Rastreador 1. // Rastreador 1. // ********************************* Directivas de Preprocesado************************************** // (Controlan la conversión del programa a código máquina por parte del compilador) #include
// Incluye el fichero 16F876A al programa tiene que estar en la misma carpeta del // programa define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del microcontrolador PIC // Trabaja con un reloj tipo XT y no utiliza perro guardián Wathdog
#use delay( clock = 4000000 ) #BYTE TRISC = 0x87 #BYTE portC = 0x07 #BYTE TRISB = 0x86 #BYTE portB = 0x06 #BYTE TRISA = 0x85 #BYTE portA = 0x05
// Define la frecuencia del reloj de 4 MHz // TRISB en 87h. // PORTB en 07h. // TRISB en 86h. // PORTB en 06h. // TRISA en 85h. // PORTA en 05h.
#BIT led_Izquierda = 0x06.1
// RB1 en 0x06 patilla 1.
#BIT led_Adelante = 0x06.2
// RB2 en 0x06 patilla 2.
#BIT led_Derecha = 0x06.3
// RB3 en 0x06 patilla 3.
#BIT led_Atras = 0x06.4 #BIT led_Parada = 0x06.5
// RB4 en 0x06 patilla 4. // RB5 en 0x06 patilla 5.
#BIT in4 = 0x07.0
// RC0 en 0x07 patilla 0.
#BIT in3 = 0x07.3
// RC3 en 0x07 patilla 3.
#BIT sensB = 0x07.2
// RC2 en 0x07 patilla 2.
#BIT in2 = 0x07.4
// RC4 en 0x07 patilla 4.
#BIT in1 = 0x07.5
// RC5 en 0x07 patilla 5.
#BIT sensA = 0x07.1
// RC1 en 0x07 patilla 1.
#BIT pulsador = 0x06.0
// RB0 en 0x06 patilla 0.
Informática 4º ESO
18
I.E.S. Joan Miró (S.S. De los Reyes) // **************************** Función principal o programa principal ******************************* void main() { int8 sensores;
// Variable donde guardamos el contenido de los sensores
//**************** Configuración de los Puertos del PIC y reseteos del Rastreador ********************* TRISC = 0B00000000;
// Defines Puerto C como SALIDA de datos.
TRISB = 0B00000001;
// Defines Puerto B como (PB7..PB1)SALIDA de datos. // y PB0 como entrada de datos.
TRISA = 0B11111111;
// Defines Puerto A como entrada de datos.
led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada.
portC = 0B00000000;
// Poner a 0 el Puerto C.
} //************************ Posicionamiento Inicial del Rastreador ********************************* DO { sensores = portA;
// Leemos el Puerto A y lo almacenamos en la variable sensores.
sensores = sensores & 0B00000011;
// Filtramos los dos bit RA1 y RA0 que representan el // sensor derecho e izquierdo respectivamente.
if (sensores == 0B00000001) {
// Preguntamos si RA1=0 RA0=1 // Si RA1=0 RA0=1 ejecuta lo que viene a continuación.
led_Parada = 0;
// Encendemos el Led de Parada.
} else
// Si RA10 RA01 ejecuta lo que viene a
continuación. { led_Parada = 1;
// Apagamos el Led de la Parada.
} } WHILE (pulsador == 1 );
Informática 4º ESO
19
I.E.S. Joan Miró (S.S. De los Reyes)
//************************ Rastreador en funcionamiento **************************************** sensA = 1; sensB = 1;
// Activamos la masa en SENSA ; // Activamos la masa en SENSB ;
while (1)
// Ejecuta indefinidamente lo que está entre corchetes.
{ sensores = portA;
// Leemos el Puerto A y lo almacenamos en la variable sensores.
sensores = sensores & 0B00000011;
// Filtramos los dos bit RA1 y RA0 que representan el // sensor derecho e izquierdo respectivamente.
switch (sensores)
// Preguntamos por el Puerto C si es 0 ejecuta el case 0, // si es 1 el case 1, si es 2 ejecuta el case 2,si es 3 ejecuta el case 3.
{ case 0:
// Leemos Negro-Negro y giramos hacia la Izquierda. led_Izquierda = 0;
// Encendemos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada
in4 = 1;
// Motor Derecho hacia adelante.
in3 = 0; in2 = 0;
// Motor Izquierdo hacia atrás.
in1 = 1; break; case 1:
// Leemos Blanco-Negro y vamos hacia Adelante. led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 0;
// Encendemos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atras.
led_Parada = 1;
// Apagamos el Led de la Parada.
in4 = 1;
// Motor Derecho hacia adelante.
in3 = 0; in2 = 1;
// Motor Izquierdo hacia adelante.
In1 = 0;
Informática 4º ESO
20
I.E.S. Joan Miró (S.S. De los Reyes) break; case 2:
// Leemos Negro-Blanco y giramos hacia la Izquierda. led_Izquierda = 0;
// Encendemos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atras.
led_Parada = 1;
// Apagamos el Led de la Parada.
in4 = 1;
// Motor Derecho hacia adelante.
in3 = 0; in2 = 0;
// Motor Izquierdo hacia atras.
in1 = 1; break; case 3:
// Leemos Blanco-Blanco y giramos hacia la derecha. led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 0;
// Encendemos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atras.
led_Parada = 1;
// Apagamos el Led de la Parada.
in4 = 0;
// Motor Derecho hacia atras.
in3 = 1; in2 = 1;
// Motor Izquierdo hacia adelante.
in1 = 0; } } }
Informática 4º ESO
21
I.E.S. Joan Miró (S.S. De los Reyes)
3.3.- Coche Teledirigido. 3.3.1.- Esquema Eléctrico de simulación del Coche Teledirigido. Simulación del Robot Laberinto + Coche Teledirigido U1 RB0E RB1E RB2E RB3E RB4E
VDD
220
K
K
1
DERECHA
ATRAS
PARADA
2
3
1
Coche-Rastreador
RB5
Tx
RC0 RC1 RC2 RC3 RC4 RC5
RB[0..5]
RTS
OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV
RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RC0/T1OSO/T1CKI RA5/AN4/SS RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
11 12 13 14 15 16 17 18
X1
9 10 1
1MHz
VDD
VDD
1 15
Q2
V1
2 12V
GND
5 2 4
A
RC1
B
RC2
SENSOR DERECHO
12V
D15
NEGRO
SW1
A
D14
1 K
D13
SENSOR IZQUIERDO NEGRO
2
K
1
Q3 Q4
D12 MO1
A
6
18k
K
K
L298
Control de Potencia
U11 1
74HC14
R12
18k
SW2 2
BLANCO
1
2
BLANCO
A
10K
6
R10
14
OUT4
A
R15
220
U4:D
74HC14
D11
V1
R17
RA1 VDD
U4:C
13
OUT3
8
1
3
OUT2
SENSA SENSB
RESET
RA0 VDD
A
D10 2
OUT1
SW3
100nF
5
4 VS
10k
C5
1
D9
1
K
9 VCC
INCIO
R2
2
PROG_A-B
A
IN1 IN2 IN3 IN4 ENA ENB
VDD
100
10k
RB0
K
K Volts
VDD
MO2 A
+88.8
5 7 10 12 6 11
U3
A
Q1
R3
R18
V1
D8
10k
5
10k VSS
15pF
3
V1
VDD
R14
R13
C4 RA0 RA1
2 3 4 5 6 7
K
RC5
RC4
RC3
RC0
RC2
RC1 220
VDD
15pF
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
1
21 22 23 24 25 26 27 28
2
1 12V
OPTOCOUPLER-NPN
C3
Tx
BAT1 2
V1
4
2
TXD
74HC125
Sistema de Control
R16
2
1
2
PARADA
RB4
VDD
6
VDD 10k
RESET1
100nF
12
ATRAS
RB3
U10
R9
C1
PULSADOR_JOAN
PIC16F876_JOAN
1
15pF
100
RA[0..1]
K
DERECHA
RB2
D7
K
D6
K
D5
K
K RB1
RB1 RB2 RB3 RB4 RB5
A
220
A
R8
220
A
R7
220
A
R6
220
A
R5
220
ADELANTE
C6
R1
CTS
R4
IZQUIERDA
4MHz
U2
RB0
VDD
D4
15pF
X2
2 3 4 5 6 7
RXD
U4:A
D3
9 10 1
PIC16F876_JOAN
SW8 2
SW7 2
SW6 2
2
ADELANTE
2
IZQUIERDA
RB2E
1
SW5
OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV
RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RC0/T1OSO/T1CKI RA5/AN4/SS RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
11 12 13 14 15 16 17 18
D18
RB3E
1
RB4E
1
RB0E
1
RB1E
SW4
D17
K
D16
K
D2
K
D1
C2
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
A
R21
220
A
R20
220
A
R19
220
A
R22
220
A
R11
21 22 23 24 25 26 27 28
13
Mando
+88.8 Volts
OPTOCOUPLER-NPN
Informática 4º ESO
Sensores de Infrarrojos y acondicionador de señal
22
I.E.S. Joan Miró (S.S. De los Reyes)
3.3.2.- Programa Coche Teledirigido. 3.3.2.1.- Transmisión_Serie_1.c //************************************** Mando************************************************** // ****************************** Directivas de Preprocesado***************************************** #include #FUSES XT,NOWDT #use delay(clock=4000000) #use rs232(baud=2400, xmit=pin_c6, rcv=pin_c7)
// Definimos la velocidad de transmisión de // 2400 baudios/segundo // Elegimos RC6 como patilla transmisora de datos. // Elegimos RC7 como patilla receptora de datos.
#BYTE TRISC = 0x87
// TRISC en 87h.
#BYTE portC = 0x07
// PORTC en 07h.
#BYTE TRISB = 0x86
// TRISB en 86h.
#BYTE portB = 0x06
// PORTB en 06h.
#BIT rc3 = 0x07.3
/
/ RC3 en 0x07 patilla 3.
#define Clave_Pulsadores 235 #define Numero_Repeticiones 10 // ***************************** Función principal o programa principal ****************************** void main() { int8 dato = 0;
// Definimos la variable "dato" como tipo bit.
int8 i = 0;
// Definimos la variable "i" como tipo byte.
TRISB = 0B11111111;
// Defines Puerto B como ENTRADA de datos.
TRISC = 0B00000000;
// Defines Puerto C como SALIDA de datos.
rc3 = 1;
// Deshabilitamos la tarjeta de Transmisión de Datos
while(1)
// Bucle infinito.
{ dato = portB & 0B00011111;
// Filtramos los 5 bit más significativos.
dato = dato | 0B11100000;
// Añadimos tres unos a los tres bit más significativos.
Informática 4º ESO
23
I.E.S. Joan Miró (S.S. De los Reyes) dato = ~dato;
// Invertimos la variable dato.
if (dato != 0B00000000)
// Si un pulsador es igual a cero realiza lo que viene a continuación.
{ rc3 = 0;
// Habilitamos la tarjeta de Transmisión //de Datos.
for( i=0; i 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) Rueda Izquierda
setup_ccp1(CCP_PWM);
// CCP1 en modo PWM (Salida por RC2) Rueda Derecha
set_pwm2_duty(0);
// Señal de PWM. Salida por RC1.
set_pwm1_duty(0);
// Señal de PWM. Salida por RC2.
TRISC = 0B10000000;
// Defines Puerto C como SALIDA de datos a excepción de rc7.
portC = 0B00000000;
// Reseteamos el Puerto C
enable_interrupts(INT_RDA);
// Habilitamos la Interrupción serie de datos.
enable_interrupts(GLOBAL);
// Habilitamos la Interrupción General.
Informática 4º ESO
26
I.E.S. Joan Miró (S.S. De los Reyes)
while(1)
// Bucle sin fin.
{ if (valor1==0B00000010)
// Se ha pulsado Izquierda en el Mando.
{ Izquierda();
// Ejecutamos la función Izquierda.
} if (valor1==0B00000001)
// Se ha pulsado Adelante en el Mando.
{ Adelante();
// Ejecutamos la función Adelante.
} if (valor1==0B00010000)
// Se ha pulsado Derecha en el Mando.
{ Derecha();
// Ejecutamos la función Derecha.
} if (valor1==0B00001000)
// Se ha pulsado Atras en el Mando.
{ Atras();
// Ejecutamos la función Atras.
} if (valor1==0B00000100)
// Se ha pulsado Parada en el Mando.
{ Parada();
// Ejecutamos la función Parada.
} } } /* ***********************************Función Izquierda **************************************** */ void Izquierda (Void) { led_Izquierda = 0;
// Enciendo Led de Izquierda.
led_Adelante = 1;
// Apago Led de Adelante.
led_Derecha = 1;
// Apago Led de Derecha.
led_Atras = 1;
// Apago Led de Atrás.
led_Parada = 1;
// Apago Led de Parada.
Informática 4º ESO
27
I.E.S. Joan Miró (S.S. De los Reyes) set_pwm2_duty(vel_R_I_GI);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Ir Izquierda
set_pwm1_duty(vel_R_D_GI);
// Señal de PWM. Salida por RC2. Velocidad Rueda Derecha. Ir Izquierda
in1=0;
// Motor izquierdo adelante
in2=1; in3=0;
// Motor derecho adelante
in4=1; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
} /* ***********************************Función Adelante **************************************** */ void Adelante (void) { led_Izquierda = 1;
// Apago Led de Izquierda.
led_Adelante = 0;
// Enciendo Led de Adelante.
led_Derecha = 1;
// Apago Led de Derecha.
led_Atras = 1;
// Apago Led de Atrás.
led_Parada = 1;
// Apago Led de Parada.
set_pwm2_duty(vel_R_I_AD);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Ir Adelante
set_pwm1_duty(vel_R_D_AD);
// Señal de PWM. Salida por RC2. Velocidad Rueda Derecha.
in1=0;
// Motor izquierdo adelante
Ir Adelante
in2=1; in3=0;
// Motor derecho adelante
in4=1; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
} /* ***********************************Función Derecha **************************************** */ void Derecha (void) { led_Izquierda = 1;
// Apago Led de Izquierda.
led_Adelante = 1;
// Apago Led de Adelante.
Informática 4º ESO
28
I.E.S. Joan Miró (S.S. De los Reyes) led_Derecha = 0;
// Enciendo Led de Derecha.
led_Atras = 1;
// Apago Led de Atrás.
led_Parada = 1;
// Apago Led de Parada.
set_pwm2_duty(vel_R_I_GD);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Ir Derecha
set_pwm1_duty(vel_R_D_GD);
// Señal de PWM. Salida por RC2. Velocidad Rueda Derecha.
in1=0;
// Motor izquierdo adelante
Ir Derecha
in2=1; in3=0;
// Motor derecho adelante
in4=1; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
}
/* *************************************** Función Atrás *************************************** */ void Atras (void) { led_Izquierda = 1;
// Apago Led de Izquierda.
led_Adelante = 1;
// Apago Led de Adelante.
led_Derecha = 1;
// Apago Led de Derecha.
led_Atras = 0;
// Enciendo Led de Atrás.
led_Parada = 1;
// Apago Led de Parada.
set_pwm2_duty(vel_R_I_AT);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Ir Atras
set_pwm1_duty(vel_R_D_AT);
// Señal de PWM. Salida por RC2. Velocidad Rueda Derecha. Ir Atras
in1=1;
// Motor izquierdo atrás
in2=0; in3=1;
// Motor derecho atrás
in4=0; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
}
Informática 4º ESO
29
I.E.S. Joan Miró (S.S. De los Reyes) /* ************************************ Función Parada ***************************************** */ void Parada (void) { led_Izquierda = 1;
// Apago Led de Izquierda.
led_Adelante = 1;
// Apago Led de Adelante.
led_Derecha = 1;
// Apago Led de Derecha.
led_Atras = 1;
// Apago Led de Atrás.
led_Parada = 0;
// Enciendo Led de Parada.
set_pwm2_duty(0);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Parar
set_pwm1_duty(0);
// Señal de PWM. Salida por RC2. Velocidad Rueda Izquierda. Parar
in1=0;
// Motor izquierdo parado
in2=0; in3=0;
// Motor derecho parado
in4=0; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
} /* ******************* Atención a la Interrupción por Recepción Serie de datos ************************ */ #int_RDA /* Validamos el dato serie si cumple las siguiente condiciones. Si dos palabras consecutivas de 2 byte son iguales se valida el dato. clave,dato,clave,dato,......,clave,dato Se lee el 1º dato serie recibido con la función "getc()" y se compara con la "clave" del transmisor que tiene que ser la misma que la del receptor, si son iguales se lee el 2º dato serie recibido con la función "getc()" y se guarda. Se lee el 3º dato serie recibido con la función "getc()" y se compara con la "clave" del transmisor que tiene que ser la misma que la del receptor, si son iguales se lee el 4º dato serie recibido con la función "getc()" y se compara con el 2º dato leido, si son iguales se valida el dato con la variable global "Valor".
Informática 4º ESO
*/
30
I.E.S. Joan Miró (S.S. De los Reyes)
void leer_dato_serie (void) { int8 dato_Recibido; int8 numero_datos1; int8 dato1; dato_Recibido=getc();
// Recibimos el dato serie.
switch (numero_datos1) { case 0: if(dato_Recibido==Clave_1) { numero_datos1=1; } break; case 1: dato1=dato_Recibido; numero_datos1=2; break; case 2: if(dato_Recibido==Clave_1) { numero_datos1=3; } else { numero_datos1=0; } break; case 3: if(dato_Recibido==dato1)
valor1=dato_Recibido;
Informática 4º ESO
31
I.E.S. Joan Miró (S.S. De los Reyes) numero_datos1=0; } }
3.4.- Coche Teledirigido + Rastreador Se utiliza el simulador anterior (Apartado 3.3.1), el programa transmisor es Transmisión_Serie_1.c y el programa receptor Coche-Rastreador_1.c un conmutador PROG_A-B selecciona uno de los dos programas. (La forma de proceder es seleccionar el programa y activar el Coche-Robot) 3.4.1.- Coche-Rastreador_1.c //*************************************** Coche + Rastreador ************************************** // ******************************** Directivas de Preprocesado*************************************** #include #FUSES XT,NOWDT #use delay(clock=4000000)
// La velocidad de reloj es de 1 MHz (Lo va a marcar el cristal de // cuarzo)
#use rs232(baud=9600,xmit=pin_c6, rcv=pin_c7)
// Definimos la velocidad de transmisión de 9600 baudios/segundo // Elegimos RC6 como patilla transmisora de datos. // Elegimos RC7 como patilla receptora de datos.
#BYTE TRISC = 0x87
// TRISB en 87h.
#BYTE portC = 0x07
// PORTB en 07h.
#BYTE TRISB = 0x86
// TRISB en 86h.
Informática 4º ESO
32
I.E.S. Joan Miró (S.S. De los Reyes) #BYTE portB = 0x06
// PORTB en 06h.
#BYTE TRISA = 0x85
// TRISA en 85h.
#BYTE portA = 0x05
// PORTA en 05h.
#BIT ra4 = 0x05.4
// RA4 en 0x05 patilla 4.
#BIT led_Izquierda = 0x06.1
// RB1 en 0x06 patilla 1.
#BIT led_Adelante = 0x06.2
// RB2 en 0x06 patilla 2.
#BIT led_Derecha = 0x06.3
// RB3 en 0x06 patilla 3.
#BIT led_Atras = 0x06.4
// RB4 en 0x06 patilla 4.
#BIT led_Parada = 0x06.5
// RB5 en 0x06 patilla 5.
#BIT in4 = 0x07.0
// RC0 en 0x07 patilla 0.
#BIT in3 = 0x07.3
// RC3 en 0x07 patilla 3.
#BIT in2 = 0x07.4
// RC4 en 0x07 patilla 4.
#BIT in1 = 0x07.5
// RC5 en 0x07 patilla 5.
#BIT sensB = 0x07.2
// RC2 en 0x07 patilla 2.
#BIT sensA = 0x07.1
// RC1 en 0x07 patilla 1.
#BIT pulsador = 0x06.0
// RB0 en 0x06 patilla 0.
#define Clave_1 235
// Clave_1 de acceso vía serie.
int16 vel_R_I_AD = 1000;
// Definimos la variable "vel_R_I_AD" como entero de 16 bit. // Velocidad de la Rueda Izquierda. Ir Adelante.
int16 vel_R_D_AD = 1000;
// Definimos la variable "vel_R_I_AD" como entero de 16 bit. // Velocidad de la Rueda Derecha. Ir Adelante.
int16 vel_R_I_AT = 600;
// Definimos la variable "vel_R_I_AD" como entero de 16 bit. // Velocidad de la Rueda Izquierda. Ir Atrás.
int16 vel_R_D_AT = 600;
// Definimos la variable "vel_R_I_AD" como entero de 16 bit. // Velocidad de la Rueda Izquierda. Ir Atrás.
int16 vel_R_I_GI = 300;
// Definimos la variable "vel_R_I_AD" como entero de 16 bit. // Velocidad de la Rueda Izquierda. Ir Izquierda.
int16 vel_R_D_GI = 800;
// Definimos la variable "vel_R_I_AD" como entero de 16 bit. // Velocidad de la Rueda Izquierda. Ir Izquierda.
int16 vel_R_I_GD = 800;
// Definimos la variable "vel_R_I_AD" como entero de 16 bit.
Informática 4º ESO
33
I.E.S. Joan Miró (S.S. De los Reyes) // Velocidad de la Rueda Izquierda. Ir Derecha. int16 vel_R_D_GD = 300;
// Definimos la variable "vel_R_I_AD" como entero de 16 bit. // Velocidad de la Rueda Izquierda. Ir Derecha.
int16 valor1=0;
// Definimos la variable "valor1" como entero de 16 bit.
/* ******************************* Declaración de funciones ************************************** */ void Coche (void);
// Coche.
void Rastreador (void);
// Rastreador
void Leer_dato_serie (void);
// Leer Dato.
void Izquierda (void);
// Ir a Izquierdas.
void Adelante (void);
// Ir a Adelante.
void Derecha (void);
// Ir a Derechas.
void Atras (void);
// Ir a Atrás.
void Parada (void);
// Ir a Parada.
// ****************************** Función principal o programa principal ***************************** void main() { TRISB = 0B00000001;
// Defines Puerto B como SALIDA de datos a excepción de rb0.
portB = 0B00111110;
// Apagamos los Led
if(ra4==1) Coche(); Rastreador(); } /* ************************************ Función Coche ****************************************** */ void Coche (void) { 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.
Informática 4º ESO
34
I.E.S. Joan Miró (S.S. De los Reyes) // 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 setup_ccp2(CCP_PWM);
// CCP2 en modo PWM (Salida por RC1) Rueda Izquierda
setup_ccp1(CCP_PWM);
// CCP1 en modo PWM (Salida por RC2) Rueda Derecha
set_pwm2_duty(0);
// Señal de PWM. Salida por RC1.
set_pwm1_duty(0);
// Señal de PWM. Salida por RC2.
TRISC = 0B10000000;
// Defines Puerto C como SALIDA de datos a excepción de rc7.
portC = 0B00000000;
// Reseteamos el Puerto C
enable_interrupts(INT_RDA);
// Habilitamos la Interrupción serie de datos.
enable_interrupts(GLOBAL);
// Habilitamos la Interrupción General.
while(1)
// Bucle sin fin.
{ if (valor1==0B00000010)
// Se ha pulsado Izquierda en el Mando.
{ Izquierda();
// Ejecutamos la función Izquierda.
} if (valor1==0B00000001)
// Se ha pulsado Adelante en el Mando.
{ Adelante();
// Ejecutamos la función Adelante.
} if (valor1==0B00010000)
// Se ha pulsado Derecha en el Mando.
{ Derecha();
// Ejecutamos la función Derecha.
} if (valor1==0B00001000)
// Se ha pulsado Atrás en el Mando.
{ Atras();
// Ejecutamos la función Atrás.
} if (valor1==0B00000100)
// Se ha pulsado Parada en el Mando.
Informática 4º ESO
35
I.E.S. Joan Miró (S.S. De los Reyes) { Parada();
// Ejecutamos la función Parada.
} } } /* *********************************** Función Rastreador *************************************** */ void Rastreador (void) { int8 sensores;
// Variable donde guardamos el contenido de los sensores
TRISA = 0B11111111;
// Defines Puerto A como entrada de datos.
TRISC = 0B10000000;
// Defines Puerto C como SALIDA de datos a excepción de rc7.
portC = 0B00000000;
// Reseteamos el Puerto C
//*********************** Posicionamiento Inicial del Rastreador ********************************* DO { sensores = portA;
// Leemos el Puerto A y lo almacenamos en la variable // sensores.
sensores = sensores & 0B00000011;
// Filtramos los dos bit RA1 y RA0 que representan el // sensor derecho e izquierdo respectivamente.
if (sensores == 0B00000001)
// Preguntamos si RA1=0 RA0=1
{
// Si RA1=0 RA0=1 ejecuta lo que viene a continuación. led_Parada = 0;
// Encendemos el Led de Parada.
} else
// Si RA10 RA01 ejecuta lo que viene a // continuación.
{ led_Parada = 1;
// Apagamos el Led de la Parada.
} } WHILE (pulsador == 1 ); //*********************************** Rastreador en funcionamiento *************************** while (1)
// Ejecuta indefinidamente lo que está entre corchetes.
Informática 4º ESO
36
I.E.S. Joan Miró (S.S. De los Reyes) { sensA = 1;
// Activamos la masa en SENSA ;
sensB = 1;
// Activamos la masa en SENSB ;
sensores = portA;
// Leemos el Puerto A y lo almacenamos en la variable // sensores.
sensores = sensores & 0B00000011;
// Filtramos los dos bit RA1 y RA0 que representan el // sensor derecho e izquierdo respectivamente.
switch (sensores)
// Preguntamos por el Puerto C si es 0 ejecuta el case 0, // si es 1 el case 1, si es 2 ejecuta el case 2,si es 3 ejecuta // el case 3.
{ case 0:
// Leemos Negro-Negro y giramos hacia la Izquierda. led_Izquierda = 0;
// Encendemos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada
in4 = 1;
// Motor Derecho hacia adelante.
in3 = 0; in2 = 0;
// Motor Izquierdo hacia atrás.
in1 = 1; break; case 1:
// Leemos Blanco-Negro y vamos hacia Adelante. led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 0;
// Encendemos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada.
in4 = 1;
// Motor Derecho hacia adelante.
in3 = 0; in2 = 1;
// Motor Izquierdo hacia adelante.
Informática 4º ESO
37
I.E.S. Joan Miró (S.S. De los Reyes) in1 = 0; break; case 2:
// Leemos Negro-Blanco y giramos hacia la Izquierda. led_Izquierda = 0;
// Encendemos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 1;
// Apagamos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada.
in4 = 1;
// Motor Derecho hacia adelante.
in3 = 0; in2 = 0;
// Motor Izquierdo hacia atrás.
in1 = 1; break; case 3:
// Leemos Blanco-Blanco y giramos hacia la derecha. led_Izquierda = 1;
// Apagamos el Led de la Izquierda.
led_Adelante = 1;
// Apagamos el Led de la Adelante.
led_Derecha = 0;
// Encendemos el Led de la Derecha.
led_Atras = 1;
// Apagamos el Led de la Atrás.
led_Parada = 1;
// Apagamos el Led de la Parada.
in4 = 0;
// Motor Derecho hacia atrás.
in3 = 1; in2 = 1;
// Motor Izquierdo hacia adelante.
In1 = 0; break; } } } /* ***********************************Función Izquierda **************************************** */ void Izquierda (Void) { led_Izquierda = 0;
// Enciendo Led de Izquierda.
Informática 4º ESO
38
I.E.S. Joan Miró (S.S. De los Reyes) led_Adelante = 1;
// Apago Led de Adelante.
led_Derecha = 1;
// Apago Led de Derecha.
led_Atras = 1;
// Apago Led de Atras.
led_Parada = 1;
// Apago Led de Parada.
set_pwm2_duty(vel_R_I_GI);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. // Ir Izquierda
set_pwm1_duty(vel_R_D_GI);
// Señal de PWM. Salida por RC2. Velocidad Rueda Derecha. // Ir Izquierda
in1=0;
// Motor izquierdo adelante
in2=1; in3=0;
// Motor derecho adelante
in4=1; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
} /* ***********************************Función Adelante ***************************************** */ void Adelante (void) { led_Izquierda = 1;
// Apago Led de Izquierda.
led_Adelante = 0;
// Enciendo Led de Adelante.
led_Derecha = 1;
// Apago Led de Derecha.
led_Atras = 1;
// Apago Led de Atras.
led_Parada = 1;
// Apago Led de Parada.
set_pwm2_duty(vel_R_I_AD);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Ir Adelante
set_pwm1_duty(vel_R_D_AD);
// Señal de PWM. Salida por RC2. Velocidad Rueda Derecha. Ir Adelante
in1=0;
// Motor izquierdo adelante
in2=1; in3=0;
// Motor derecho adelante
in4=1; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
}
Informática 4º ESO
39
I.E.S. Joan Miró (S.S. De los Reyes)
/* **********************************Función Derecha ****************************************** */ void Derecha (void) { led_Izquierda = 1;
// Apago Led de Izquierda.
led_Adelante = 1;
// Apago Led de Adelante.
led_Derecha = 0;
// Enciendo Led de Derecha.
led_Atras = 1;
// Apago Led de Atras.
led_Parada = 1;
// Apago Led de Parada.
set_pwm2_duty(vel_R_I_GD);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Ir Derecha
set_pwm1_duty(vel_R_D_GD);
// Señal de PWM. Salida por RC2. Velocidad Rueda Derecha. Ir Derecha
in1=0;
// Motor izquierdo adelante
in2=1; in3=0;
// Motor derecho adelante
in4=1; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
} /* **************************************Función Atrás ***************************************** */ void Atras (void) { led_Izquierda = 1;
// Apago Led de Izquierda.
led_Adelante = 1;
// Apago Led de Adelante.
led_Derecha = 1;
// Apago Led de Derecha.
led_Atras = 0;
// Enciendo Led de Atras.
led_Parada = 1;
// Apago Led de Parada.
set_pwm2_duty(vel_R_I_AT);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Ir Atrás
set_pwm1_duty(vel_R_D_AT);
// Señal de PWM. Salida por RC2. Velocidad Rueda Derecha. Ir Atrás
in1=1;
// Motor izquierdo atras
in2=0; in3=1;
// Motor derecho atras
in4=0;
Informática 4º ESO
40
I.E.S. Joan Miró (S.S. De los Reyes)
delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
} /**************************************Función Parada ***************************************** */ void Parada (void) { led_Izquierda = 1;
// Apago Led de Izquierda.
led_Adelante = 1;
// Apago Led de Adelante.
led_Derecha = 1;
// Apago Led de Derecha.
led_Atras = 1;
// Apago Led de Atras.
led_Parada = 0;
// Enciendo Led de Parada.
set_pwm2_duty(0);
// Señal de PWM. Salida por RC1. Velocidad Rueda Izquierda. Parar
set_pwm1_duty(0);
// Señal de PWM. Salida por RC2. Velocidad Rueda Izquierda. Parar
in1=0;
// Motor izquierdo parado
in2=0; in3=0;
// Motor derecho parado
in4=0; delay_ms(5);
// Respetar el Periodo de la señal de la PWM (20mS)
} /* ******************* Atención a la Interrupción por Recepción Serie de datos ************************ */ #int_RDA /* Validamos el dato serie si cumple las siguiente condiciones. Si dos palabras consecutivas de 2 byte son iguales se valida el dato. clave,dato,clave,dato,......,clave,dato Se lee el 1º dato serie recibido con la función "getc()" y se compara con la "clave" del transmisor que tiene que ser la misma que la del receptor, si son iguales se lee el 2º dato serie recibido con la función "getc()" y se guarda. Se lee el 3º dato serie recibido con la función "getc()"
Informática 4º ESO
41
I.E.S. Joan Miró (S.S. De los Reyes) y se compara con la "clave" del transmisor que tiene que ser la misma que la del receptor, si son iguales se lee el 4º dato serie recibido con la función "getc()" y se compara con el 2º dato leido, si son iguales se valida el dato con la variable global "Valor".
*/
void Leer_dato_serie (void) { int8 dato_Recibido; int8 numero_datos1; int8 dato1; dato_Recibido=getc();
// Recibimos el dato serie.
switch (numero_datos1) { case 0: if(dato_Recibido==Clave_1) { numero_datos1=1; } break; case 1: dato1=dato_Recibido; numero_datos1=2; break; case 2: if(dato_Recibido==Clave_1) { numero_datos1=3; } else { numero_datos1=0; } break;
Informática 4º ESO
42
I.E.S. Joan Miró (S.S. De los Reyes)
case 3: if(dato_Recibido==dato1)
valor1=dato_Recibido;
numero_datos1=0; } }
4.- Diagrama en Bloques.
MANDO CCT006
RC61 RC71(BL)
ADAPTADOR DE SEÑALES PC-UC
VDD4
RC6 VDD
VDD2
SENSORES DE INFRARROJOS
GND
GND2
y acondicionador de señal
RC7(BL) VDD RA[0..1]
GND4
RA[0..1]
GND CCT004
CCT001
SISTEMA DE CONTROL VDD VDD3
REGULADOR 9V/5V
V1 V12
V11
V1 GND
GND3
VDD1
VDD
CONTROL DE POTENCIA
GND1
GND RC[0..5]
RC[0..5]
CCT003 CCT002
CCT005
4.1.- Esquema Eléctrico Robot Rastreador.
Informática 4º ESO
43
I.E.S. Joan Miró (S.S. De los Reyes)
ON-OFF
RXPC
C9
2 6
VDD4
CONN-D9M
1uF
RC61 RC71(BL) VDD4 GND4
T1IN R1OUT T2IN R2OUT
C8
VDD3
VDD4
V12
VI
VO
3
VDD3
GND
GND3
C2
C12
2200uF
100nF
R1
C1
220
C11
220uF
100nF
D2
GND3 V12
GND3
GND3
GND3
GND3
LED-GREEN_JOAN
GND3
C2+
5
1uF
9V
RC61 RC71(BL)
VS+ VSC2-
4 3 2 1
VCC
T1OUT R1IN T2OUT R2IN
11 12 10 9
K
14 13 7 8
3 2 1
TXPC
7805_JOAN 1
K 1N4007_JOAN
BATERIA
C1+
U1
D1
2 A INTERRUPTOR_JOAN
A
C1-
1
U5
1
1uF
1
3
GND4
2
5 9 4 8 3 7 2 6 1
2
C6
Adaptador de señales PC-uC
J6
4
C7
C10
MAX232 GND=GND VCC=VCC
Regulador 9v/5v
J4A
100nF
BORNIER 3_JOAN
GND3
GND 1uF
J1A
GND4
J4
GND4
Receptor de Datos CEBEK C-0504
BORNIER 3_JOAN
VDD
Vcc
Vs
TEST
14
15
GND3
13
11
GND2 7
4 3 2 1
1
Antena
GND1
VDD
GND
1
VDD
2
Vcc1
BORNIER1_JOAN 3 2 1
BORNIER 4_JOAN
RF1
ANTENA
VDD
J1
3
BORNIER 4_JOAN
CEBEK-C-0504_JOAN
R4
R5
R6
R7
R8
220
220
220
220
220
R13
VDD
V1
10k
RC7(RF) RB0
D3
D4
1
A
A
A
VDD A
RC7(BL)
A
RC6
D5
D6
Sistema de Control
INCIO
D7
C3 15pF
RB1
RB2
ATRAS
RB3
U2
2
K
K
DERECHA
ADELANTE
RB0 RB1 RB2 RB3 RB4 RB5
PARADA
RB4
RB5
VDD
RC0 RC1 RC2 RC3 RC4 RC5
RC[0..5]
V1 GND
1 2 3
1 2 3 4 5 6
RC1 RC2 RC0 RC3 RC4 RC5
RB[0..5]
21 22 23 24 25 26 27 28
RC6
J2
J3
BORNIER 6_JOAN
BORNIER 3_JOAN
11 12 13 14 15 16 17 18
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
CRYSTAL_JOAN 1MHz
C4
RA0 RA1
2 3 4 5 6 7
RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RC0/T1OSO/T1CKI RA5/AN4/SS RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT PIC16F876_JOAN
X1
9 10 1
OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV
VSS 15pF VDD
RA[0..1]
IZQUIERDA
K
K
K
LED-YELLOW_JOAN LED-GREEN_JOAN LED-YELLOW_JOANLED-GREEN_JOAN LED-RED_JOAN
R2 10k
VDD
RESET
R3
2
1 PULSADOR_JOAN
100
R18 10k
JUMPER RC7(BL)
PROG_A-B
RA0 RA1
BORNIER 3_JOAN
1 2 3
CONN_SIL3_JOAN
100nF 1 2 3 4
J3A
BORNIER 6_JOAN
1 2 3
RC7(RF)
V11
J2A
C5
VDD
MOTOR IZQUIERDO
1N4007_JOAN
V11
R14 10k
6
VDD1
5 2
Q1
4
BD139_JOAN
OPTOCOUPLER-NPN
SENSA SENSB
S1 V11
14
OUT4 GND 8
D12 MOTOR DERECHO 1N4007_JOAN
4
R10
220
18k
S2
5
D14
1N4007_JOAN
1
3
VDD2
R11
R12
220
18k
U4:D 6
13
S1
74HC14
1
3
CNY70
C
A SEI
CNY70
12
S2
74HC14 GND=GND VCC=VCC
1
2
+88.8 MD
C SED
C14 SEN-IZ
K
K
Control de Potencia
BD139_JOAN
2
VDD2
GND2
U4:C
A
Q3
5
R9
L298
10k
6
GND
VDD2 VCC
R15
U11 1
y acondicionador de señal
GND1
100nF
GND1
220
VSENSB1
K
GND1
Q4
D13
BD139_JOAN
1N4007_JOAN
A
R17
BORNIER 4_JOAN
13
OUT3
GND1 VDD1
1N4007_JOAN
3
OUT2
BD139_JOAN
V11
C13
Sensores de Infrarrojos
J5A D11
+88.8
1N4007_JOANMI
2
OUT1
Q2
GND1
D10
U3 A
4 VS
K
VSENSA1
1 15
9 VCC
SEN-DER
D15
100nF 1N4007_JOAN
K
A
U10 1
220
IN1 IN2 IN3 IN4 ENA ENB
A
R16
5 7 10 12 6 11
1 2 3 4
VDD1
BORNIER 4_JOAN
A
GND1
K
V11
A
VDD1
J5
2
K
VSENSB1
D9
1N4007_JOAN
1 VSENSA1
A
D8
V11
A
VDD1
K
K
1 2 3
1 2 3 4 5 6
CONN-SIL3
E
K
E
OPTOCOUPLER-NPN 4 GND1
GND1
GND1
2
4
GND1
2
GND2
GND2
4.1.1.- Adaptador de señales PC-uC. C6
Adaptador de señales PC-uC
J6 5 9 4 8 3 7 2 6 1
3
GND4
TXPC
14 13 7 8
RXPC
C9
2 6
VDD4
CONN-D9M
RC61 RC71(BL) VDD4 GND4
1uF
1
C1-
C1+
T1OUT R1IN T2OUT R2IN
T1IN R1OUT T2IN R2OUT
U5
11 12 10 9
RC61 RC71(BL)
VDD4
VS+ VSC2-
C8
4 3 2 1
VCC
1uF
1uF
5
C2+
C7
4
C10
MAX232 GND=GND VCC=VCC
100nF
GND 1uF
J1A BORNIER 4_JOAN
GND4 GND4
Informática 4º ESO
44
I.E.S. Joan Miró (S.S. De los Reyes)
Es un Circuito que comunica el Ordenador Personal (PC) con el microcontrolador PIC16F876A . Consiste en un circuito que intercambia niveles TTL a RS 232 donde un 0 en TTL equivale a 0V en RS232 equivale a una tensión comprendida entre 3 y 15V. un 1 en TTL equivale a 5V en RS232 equivales a una tensión comprendida entre -3 y -15V. El Circuito Integrado MAX 232 se encarga de convertir los niveles de TTL a RS232. 4.1.2.- Regulador 9v/5v.
7805_JOAN 1
K 1N4007_JOAN
9V V12
VO
3
VDD3
GND3
C2
C12
2200uF
100nF
C1 220uF
R1 220
C11 100nF A
VDD3
VI GND
1
BATERIA 2
U1
D1
2 A INTERRUPTOR_JOAN
2
ON-OFF 1
D2 V12
GND3
GND3
GND3
GND3
LED-GREEN_JOAN
GND3 K
3 2 1
GND3
J4A
Regulador 9v/5v
BORNIER 3_JOAN
GND3
La Fuente de Alimentación es un circuito que se encargar de obtener una tensión de 5V continua a partir de una superior de 9V, para ello se ha utilizado el regulador 7805, que nos puede dar una corriente de salida Imax de 1 A. C1, C2,C11 y C12 son condensadores de filtro. El diodo D1 tiene la misión de proteger el circuito en caso de poner la batería BAT1 al revés. El diodo Led D2 nos indica que la fuente esta encendida, estando limitada su corriente a 20 mA por la resistencia R1. También obtenemos una tensión de V12 = 8,4 V para alimentar los motores.
4.1.3.- Sistema de Control.
Informática 4º ESO
45
I.E.S. Joan Miró (S.S. De los Reyes)
CEBEK-C-0504_JOAN
J4
BORNIER 4_JOAN
BORNIER 3_JOAN
Receptor de Datos CEBEK C-0504
ANTENA
RF1
RC7(BL)
VDD
RC6
VDD
VDD
Vs
Vcc 15
TEST 13
14
GND3 11
7
GND2
Antena
GND1
3
Vcc1
2
GND
1
VDD
VDD
1
3 2 1
4 3 2 1
BORNIER1_JOAN
VDD
J1
V1 RC7(RF)
R4
R5
R6
R7
R8
220
220
220
220
220
R13 10k
D3
D4
D5
D6
C3
1
A
A
A
A
A
Sistema de Control INICIO
D7
15pF
RB2
RB3
ATRAS RB4
2
K
K
DERECHA
ADELANTE
PARADA RB5
RB[0..5]
RC1 RC2 RC0 RC3 RC4 RC5
RC[0..5]
21 22 23 24 25 26 27 28
RC0 RC1 RC2 RC3 RC4 RC5
11 12 13 14 15 16 17 18
RC6
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV
RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RC0/T1OSO/T1CKI RA5/AN4/SS RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
X1
9 10 1 2 3 4 5 6 7
CRYSTAL_JOAN 1MHz
C4
RA0 RA1
VSS
RESET 2
GND
J2
J3
BORNIER 6_JOAN
BORNIER 3_JOAN
RC7(BL)
1 2 3
C5
JUMPER R18
100nF
10k CONN_SIL3_JOAN
VDD
PROG_A-B 1 2 3
RA0 RA1
RC7(RF)
1 PULSADOR_JOAN
1 2 3 4
1 2 3
1 2 3 4 5 6
10k
100
VDD
V1
R2 R3
PIC16F876_JOAN VDD
15pF
VDD
RB1
U2 RB0 RB1 RB2 RB3 RB4 RB5
RA[0..1]
IZQUIERDA
K
K
K
LED-YELLOW _JOAN LED-GREEN_JOAN LED-YELLOW_JOAN LED-GREEN_JOAN LED-RED_JOAN
CONN-SIL3
J5 BORNIER 4_JOAN
Un microcontrolador PIC16F876a se encarga de realizar el control del robot (control de velocidad (PWM) y sentido de giro de los motores, lectura de los sensores e indicación de su posición en los Led) y recibir los datos procedentes del receptor de radiofrecuencia. El microcontrolador PIC 16F876a trabaja a una frecuencia de 1 MHz y ejecuta una instrucción en 4uS. Tiene un conector (JUMPER) que nos sirve para cargar el programa procedente del Ordenador Personal en el microcontrolador o recibir los datos del receptor de RF. Un pulsador de Inicio nos servirá para activar el robot en la modalidad de Rastreador. Cuando el robot esté situado correctamente (Estamos situado en el borde derecho de la línea Negra y encendemos el Led de PARAR) pulsaremos INICIO y el Robot empieza a funcionar. Los condensadores C3 y C4 junto con el Cristal de Cuarzo X1 marcan la frecuencia de trabajo al microcontrolador PIC16F876A. Las resistencia R2, R3, el condensador C5 y el pulsador de RESET, sirven para resetear el rastreador y se empieze el proceso de nuevo. La Tarjeta Receptora de Datos CEBEK C-0504 es un circuito híbrido encargado de recibir Informática 4º ESO
46
I.E.S. Joan Miró (S.S. De los Reyes)
vía radiofrecuencia, los datos digitales procedentes del Mando. La señal digital tiene que tener una frecuencia entre 20 Hz < fo < 4 KHz. y una portadora de 433,92 MHz. Este circuito demodula la señal de AM obteniendo los datos transmitidos. Sirve para realizar un coche teledirigido. 4.1.4.- Control de Potencia.
K
D8 A
V11
MOTOR IZQUIERDO
1N4007_JOAN
1N4007_JOAN
GND1
V11
6
220
VDD1
5 2
Q1
4
VSENSA1
1 15
BD139_JOAN
OPTOCOUPLER-NPN
VS
SENSA SENSB
OUT1 OUT2 OUT3 OUT4
GND1
13 V11
14
8
L298
D12 MOTOR DERECHO 1
5 2
+88.8 MD
10k
Q3
4
C14
Control de Potencia
BD139_JOAN
2
K
6
D14
1N4007_JOAN
K
1
220
VSENSB1
1N4007_JOAN
GND1
Q4
D13
BD139_JOAN
1N4007_JOAN
A
R17
GND1
100nF
R15
U11
1N4007_JOAN
3
GND1 VDD1
C13
2
BD139_JOAN
V11
D11
+88.8
1N4007_JOANMI
GND
Q2
GND1
A
VCC
D10
U3
K
1
10k
IN1 IN2 IN3 IN4 ENA ENB
4
A
R16
5 7 10 12 6 11
R14
9
K
VDD1
A
V11
D15
100nF 1N4007_JOAN
A
VDD1
U10
2
K
VSENSB1
K
1 VSENSA1
D9 A
1 2 3
VDD1
A
BORNIER 3_JOAN
K
J3A
BORNIER 6_JOAN
1 2 3 4 5 6
V11
J2A
OPTOCOUPLER-NPN GND1
GND1
GND1
GND1
La misión de este circuito es la de alimentar los motores de forma controlada (velocidad y sentido de giro) A través de IN1 e IN2 del C.I. L298N (Inversor de giro) controlamos el sentido de giro del Motor Izquierdo y con IN3 e IN4 controlamos el sentido de giro del Motor Derecho. (Ver Tabla 1) El Circuito Integrado optoacoplador U10 y los transistores Q1 y Q2 hacen de interruptores controlados a través de la patilla VSENSA1 (RC1) y dejan pasar o no la corriente por el Motor Izquierdo. El Circuito Integrado optoacoplador U11 y los transistores Q3 y Q4 hacen de interruptores controlados a través de la patilla VSENSB1 (RC2) y dejan pasar o no la corriente por el Motor Derecho.
Entradas al Inversor L298N
Salidas del Inversor
Informática 4º ESO
Efecto producido
47
I.E.S. Joan Miró (S.S. De los Reyes)
L298N VSENSB1 RC2
Motor Derecho SENSB
IN3
IN4
OUT3
OUT4
1
0V
0
0
11,5V
11,5V
Parado
1
0V
0
1
1V
11,5V
Adelante
1
0V
1
0
11,5V
1V
Atrás
1
0V
1
1
1V
1V
Parado
0
11,5V
X
X
11,5V
11,5V
Parado
Tabla 1
El optoacoplador tiene la misión de aislar eléctricamente el circuito de Control con el de Potencia. Se obtiene una tensión VCE proporcional a la luz que incide en la base del TRT (En caso de rotura del motor, la barrera de luz protege el sistema de control ya que esta aguanta más de 2000V. Introduciendo una señal PWM por RC1 podemos realizar un control de velocidad del Motor Izquierdo. Introduciendo una señal PWM por RC2 podemos realizar un control de velocidad del Motor Derecho.
4.1.5.- Sensores de Infrarrojos y acondicionador de señal. El Sensor de Infrarrojos CNY70 funciona de la siguiente manera: El diodo emite una luz infrarroja sobre una superficie, si es blanca la luz rebota y si es negra la luz se absorbe Un Optotransistor recibe la luz infrarroja (Distancia del Sensor al papel < 1cm) este se satura y se obtiene un 0 lógico. Si el Optotransistor no recibe la luz infrarroja este se corta y se obtiene un 1 lógico.
Informática 4º ESO
48
I.E.S. Joan Miró (S.S. De los Reyes)
El acondicionador de señal 74HC14 es una puerta inversora con histeresis ( schmith triger) que tiene la función de acondicionar la señal procedente del sensor de infrarrojos, es decir los grises no son ni unos ni ceros y define los grises claros como ceros y los grises oscuros como unos. J5A
4
3
2
1
BORNIER 4_JOAN
GND VCC S1
GND2
VDD2
S2
R9
R10
220
18k
VDD2
VDD2
R11
R12
220
18k
U4:C 5
3 A
C
13
S1
74HC14
1
CNY70
U4:D 6
3 A
SEI
CNY70
C
SEN-IZ K 4
12
S2
74HC14 GND=GND VCC=VCC
1
SED
SEN-DER
E
K
2
4 GND2
E 2 GND2
4.2.- Mando. El mando tiene la misión de transmitir un código asociado a cada pulsador, para poder controlar el robot. El microcontrolador PIC 16F876a lee los pulsadores y transmite los códigos vía serie a la tarjeta transmisora de radiofrecuencia a una velocidad de 1562,5 baudios por segundo. Es una transmisión asíncrona (1bit de comienzo, 8bit de Datos, 1 bit de parada sin bit de paridad ). La Alimentación procede de un regulador 7805 que suministra 5V a todos los circuitos. El TRT “Q1E” tiene la misión de deshabilitar la tarjeta de radiofrecuencia cuando esta no transmite datos. La Tarjeta Emisora SAW para Datos 433,92 MHz. CEBEK C-0503 es un circuito híbrido encargado de transmitir vía radiofrecuencia, los datos digitales procedentes del microprocesador (TX). La señal digital tiene que tener una 20 Hz < fo < 4 KHz. Se modula en AM cuya frecuencia portadora es de 433,92 MHz. El microcontrolador PIC 16F876a trabaja a una frecuencia de 4 MHz y ejecuta una instrucción en 1uS. El Led D7E nos indica que el mando está encendido, está limitada su corriente en 20 mA. El resto de los LED se iluminan cuando activamos el Pulsador correspondiente. El diodo D7E tiene la misión de proteger el circuito en cado de invertir la Batería. Los condensadores C1 y C2 son filtros.
Informática 4º ESO
49
I.E.S. Joan Miró (S.S. De los Reyes)
E_RF1E
Mando
2
220uF
Ve
GND1 1
-
2
3
GND2
Antena
4
R6E 220
C2E
2
C1E
9V
220uF
CON? R7E
A
VSS
BAT1E
11
BD136_JOAN
3
GND3
VO
13
VI
Q1E Vcc
1
GND
1 2 K INTERRUPTOR_JOAN 1N4007_JOAN
Emisor de Datos CEBEK C-0503 VDD
7805_JOAN
1
A
U2E
SW6E
15
D6E
CEBEK-C-0503_JOAN
D7E
1
2.2k
BORNIER1_JOAN
K
LED-RED_JOAN
C3E 15pF
U1E
220
220
220
220
220
A
R5E
A
R4E
A
R3E
A
R2E
A
R1E
RB0E RB1E RB2E RB3E RB4E
LED-RED_JOAN
1
1
11 12 13 14 15 16 17 18
OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV
RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RC0/T1OSO/T1CKI RA5/AN4/SS RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
9 10 1
X1E CRYSTAL_JOAN 4MHz
2 3 4 5 6 7
C4E 15pF
VDD
2
SW5E
2
SW4E
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
PIC16F876_JOAN
2
SW3E
RB4E
2
SW2E
RB2E
2
SW1E
RB0E 1
RB3E 1
1
RB1E
K
D5E
LED-RED_JOAN K
D4E
LED-RED_JOAN
K
D3E
LED-GREEN_JOAN
K
D2E
LED-YELLOW_JOAN K
D1E
21 22 23 24 25 26 27 28
IZQUIERDA
ATRAS
ADELANTE
PARAR
DERECHA
5.- Diseño de Placas de Circuitos Impresos. 5.1.1.- Cara de Componentes y de pistas Top Copper del Adaptador de señal PC-uC.
5.1.2.- Cara de pistas Bottom Copper del Adaptador de señal PC-uC.
Informática 4º ESO
50
I.E.S. Joan Miró (S.S. De los Reyes)
5.2.1.- Cara de Componentes y de pistas Top Copper del Regulador 9v/5v.
5.2.2.- Cara de pistas Bottom Copper del Regulador 9v/5v.
5.3.1.- Cara de Componentes y de pistas Top Copper del Sistema de Control.
Informática 4º ESO
51
I.E.S. Joan Miró (S.S. De los Reyes)
5.3.2.- Cara de pistas Bottom Copper del Sistema de Control.
Informática 4º ESO
52
I.E.S. Joan Miró (S.S. De los Reyes)
5.3.3.- Cara de pistas Top Copper del Sistema de Control.
5.4.1.- Cara de Componentes y de pistas Top Copper del Control de Potencia.
Informática 4º ESO
53
I.E.S. Joan Miró (S.S. De los Reyes)
5.4.2.- Cara de pistas Bottom Copper del Control de Potencia.
5.4.3.- Cara de pistas Top Copper del Control de Potencia.
Informática 4º ESO
54
I.E.S. Joan Miró (S.S. De los Reyes)
5.5.1.- Cara de Componentes y de pistas Top Copper de los Sensores de Infrarrojos y acondicionador de señal.
5.5.2.- Cara de pistas Bottom Copper del Adaptador de los Sensores de Infrarrojos y acondicionador de señal.
5.5.3.- Cara de pistas Top Copper de los Sensores de Infrarrojos y acondicionador de señal.
Informática 4º ESO
55
I.E.S. Joan Miró (S.S. De los Reyes)
5.6.1.- Cara de Componentes y de pistas Top Copper del Mando. 5.6.2.- Cara de pistas Bottom Copper del Adaptador del Mando. 5.6.3.- Cara de pistas Top Copper del Mando.
Informática 4º ESO
56
I.E.S. Joan Miró (S.S. De los Reyes)
6.- Diseño mecánico, (Carrocería).
Informática 4º ESO
57
I.E.S. Joan Miró (S.S. De los Reyes)
7.- Lista de Componentes y coste económico. Lista de materiales de el Robot Rastreador+ Coche Teledirigido.DSN
Título: Rastreador_4ºESO.DSN Autor: Pedro Alonso Sanz C re ado: Miércoles, 24 de septiembre de 2008 Úl tim a modificación: Vie rn e s, 2 de enero de 2009 Núm e ro de compone nte s: 180 25 Re siste ncias C antidad: 16
Re fe re ncia: R1, R4-R9, R11, R16, R17, R1E-R6E
Valor: 220
Pre cio Unitario (€) 0,05
10k y 18k respectivamente
0,05
7
R2, R13-R15,R18 y R10,R12
1
R7E
2.2K
0,05
1
R3
100
0,05
Precio Total (€)
0,8 0,35 0,05 0,05
18 C onde nsador C antidad: 3
Re fe re ncia: C1, C1E, C2E
Valor: 220uF
Pre cio Unitario (€) 0,2
1
C2
2200uF
0,5
4
C3, C4, C3E, C4E
15pF
0,05
6 4
C5, C10-C14 C6-C9
100nF 1uF
0,05 0,1
Precio Total (€)
0,6 0,5 0,2 0,3 0,4
9 C ircuitos Inte grados C antidad: 2
U1, U2E
Re fe re ncia: 7805
Valor:
Pre cio Unitario (€) 1
2
U2, U1E
PIC16F876A
4,5
1
U3
L298
3,5
1
U4
74HC14
0,5
1 2
U5 U10, U11
MAX232 OP T OCOUPLER-NPN
1,5 0,35
Precio Total (€)
2 9 3,5 0,5 1,5 0,7
5 Transistore s C antidad:
1
Re fe re ncia: Q1E
Valor: BD136
Pre cio Unitario (€) 0,35
4
Q1-Q4
BD139
0,35
Precio Total (€)
0,35 1,4
22 Diodos C antidad: 10
Re fe re ncia: D1, D8-D15, D6E
1N4007
Valor:
5 4
D2, D4, D6, D2E, D3E D3, D5, D1E, D5E
LED-GREEN LED-YELLOW
0,15 0,15
3
D7, D4E, D7E
LED-RED
0,15
Informática 4º ESO
Pre cio Unitario (€) 0,2
Precio Total (€)
2 0,75 0,6 0,45
58
I.E.S. Joan Miró (S.S. De los Reyes)
101 C ompone ntes dive rsos C antidad: 1
ANT ENA
Re fe rencia: BORNIER1
Valor:
Pre cio Unitario (€) 0,01
1
BAT ERIA
BORNIER2
0,3
7
INCIO, RESET , SW1E-SW5E
PULSADOR
0,4
4
J1, J1A, J5, J5A
BORNIER 4
0,6
2
J2, J2A
BORNIER 6
0,8
4
J3, J3A, J4, J4A
BORNIER 3
0,45
1
J6
CONN-D9M
2,5
2
JUMPER, PROG_A-B
CONN_SIL3
0,15
1
MOT OR DERECHO
BORNIER2
0,3
1
MOT OR IZQUIERDO
BORNIER2
0,3
2
ON-OFF, SW6E
INT ERRUPT OR
1
RF1
CEBEK-C-0504
1
SEN-DER
CNY70
0,35
1
SEN-IZ
CNY70
0,35
1
X1
CRYST AL 1MHz
0,45
2
RG
Ruedas de goma espuma
2,5
1
RL
Rueda Loca
1,6
24
SMH2
Separadores de 2 cm macho-hembra
0,3
22
T3
T uercas de métrica 3
0,02
1 1
S Bat
Soporte de plást ico de 20cm X 15 cm Batería de 9v/2200 mA
1,2 12 0,3
Precio Total (€)
0,1
0,01 0,3 2,8 2,4 1,6 1,8 2,5 0,3 0,3 0,3 2 7 0,35 0,35 0,45 5 1,6 7,2 0,44 1,2 12 0,3 3 7 1 10 6 0,4
Precio total de todos los componentes (€)
103,6
1 7
1
Portapilas
Portapilas
1
X1E
CRYSTAL 4MHz
3
1
ERF1
CEBEK-C-0503
7
1
SE
Soporte de plást ico de 12cm X 6 cm
1
1
PL1
Placa de CI (2C) 20cm X 15 cm
10
1
PLE
Placa de CI (2C) 12cm X 6 cm
4
Br
Bridas de plástico
6
viernes, 2 de enero de 2009 19:56:59
8.- Coste Económico Total.
Coste del Proyecto Rastreador Tareas Desarrollo Hardware Desarrollo Software Búsqueda de materiales. Montaje del prototipo Pruebas del prototipo. Coste de los Componentes Documentación
Horas
Coste por hora (€)
Total (€)
10 20 5 10 12
20 30 10 10 20
10
15
200 600 50 100 240 103,6 150
Coste Total del Proyecto
Informática 4º ESO
1443,6
59
I.E.S. Joan Miró (S.S. De los Reyes)
9.- 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 PORTEUS para Microcontroladores PIC. Autor: Eduardo García Breijo. Editorial: Marcombo. Manual del Microcontrolador PIC16F876A.
[2] Empresa suministradora de materiales:
●
Diotronic S.A. C/Juan Bravo 58. Pagina Web: www.ditronic.com
●
Ingeniería de Sistemas Programados. Pagina Web: www.microcontroladores.com
●
Motores COPAL Pagina: www.voti.nl/winkel/catalog.html
●
www.electan.com
10.- Anexos. 10.1.- Características Eléctricas del Motor de Corriente Continua COPAL HG16-030-AA-00. 10.2.- Características Eléctricas de los Sensores de Infrarrojos. 10.3.- Características Eléctricas Tarjeta Emisora de Datos 433,92 Mhz. (CEBEK C-0503). 10.4.- Características Eléctricas Tarjeta Receptora de Datos 433,92 MHz. ( CEBEK C-504 ). 10.5.- Características Eléctricas del Inversor de Giro L298N. 10.6.- Características Eléctricas del microcontrolador PIC16F876A.
Informática 4º ESO
60