I.E.S. Joan Miró (S.S. De los Reyes) Robot Elii. (Robot rastreador con LED,borde derecho y con memoria)

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

2 downloads 52 Views 780KB Size

Recommend Stories


Robot Zwembadreiniger
2 8 14 20 26 32 38 BK 0012500 / REV PC Bedieningsinstructies Robot Zwembadreiniger ENGLISH Dear Customer, Thank you for choosing our product to c

I robot; Issac Asimov
Science fiction. Robots. Robotics. Susan Calvin

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

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.