PROYECTO: Velocista y coche teledirigido
Transcripción
PROYECTO: Velocista y coche teledirigido
PROYECTO: Velocista y coche teledirigido Departamento de Electricidad y Electrónica Ciclo Formativo de Grado Superior: Desarrollo de Productos Electrónicos Alumno: Daniel García Bravo Profesores: Pedro Alonso Sanz Juan Dongil García Alfonso García Gallego Instituto: I.E.S. Joan Miró Localidad: San Sebastián de los Reyes Curso: 2008 / 2009 Ciclo Superior de Desarrollo de Productos Electrónicos Índice de contenido: 1.- Introducción 5 2.- Diagrama en bloques del robot 7 3.- Esquema eléctrico del robot 8 4.- Análisis de los Bloques 9 4.1.- Placa de alimentación-adaptador de señales PC-UC 7 4.1.1.- Fuente de alimentación 4.1.1.1.- Esquema eléctrico de la fuente de alimentación 4.1.2.- Adaptador de señales PC-UC 4.1.2.1.- Esquema eléctrico del adaptador de señales PC-UC 9 9 10 10 11 4.2.- Placa de control 4.2.1.- Esquema eléctrico de la placa de control 12 13 4.3.- Placa de potencia 4.3.1.- Esquema eléctrico de la placa de potencia 14 17 4.4.- Placa de sensores 4.4.1.- Esquema eléctrico de la placa de sensores 18 19 4.5.- Mando 4.5.1.- Esquema eléctrico del mando 20 21 5.- Esquema eléctrico de simulación con Proteus 22 5.1.- Simulación del robot velocista 5.2.- Simulación del robot teledirigido 6.- Programas 6.1.- Programas de prueba 6.1.2.- Programas de prueba de los leds 6.1.2.1.- Diagrama de flujo 6.1.2.2.- Programa 6.1.3.- Programas de prueba de los sensores 6.1.3.1.- Programas de prueba de los sensores OP1 Y OP2 6.1.3.1.1.- Diagrama de flujo 6.1.3.1.2.- Programa 6.1.3.2.- Programas de prueba de los sensores Op3 y Op4 6.1.3.2.1.- Diagrama de flujo 6.1.3.2.2.- Programa 6.1.3.3.- Programas de prueba de los sensores Op5 y Op6 6.1.3.3.1.- Diagrama de flujo 6.1.3.3.2.- Programa Daniel García Bravo I.E.S. Joan Miró 22 23 24 24 24 24 25 26 26 26 27 29 29 29 31 31 31 2 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.3.4.- Programas de prueba de los sensores OP7 Y OP8 6.1.3.4.1.- Diagrama de flujo 6.1.3.4.2.- Programa 33 33 33 6.1.4.- Programas de pruebas de control de giro de los motores 6.1.4.1.- Programa de prueba del motor derecho 6.1.4.1.1.- Diagrama de flujo 6.1.4.1.2.- Programa 6.1.4.2.- Programa de prueba del motor izquierdo 6.1.4.2.1.- Diagrama de flujo 6.1.4.2.2.- Programa 35 35 36 36 37 38 38 6.1.5.- Programas de pruebas de control de velocidad de los motores 6.1.5.1.- Programa de control de velocidad del motor derecho 6.1.5.1.1.- Diagrama de flujo 6.1.5.1.2.- Programa 6.1.5.2.- Programa de control de velocidad del motor izquierdo 6.1.5.2.1.- Diagrama de flujo 6.1.5.2.2.- Programa 39 39 40 40 43 43 43 6.2.- Programas de funcionamiento del robot 6.2.1.- Programa del robot velocista 6.2.1.1.- Diagramas de flujo 6.2.1.2.- Programa 6.2.2.- Programa del coche teledirigido 6.2.2.1.- Diagrama de flujo 6.2.2.2.- Programa 7.- Fabricación de placas 46 46 46 50 61 61 61 62 7.1.- Fabricación de la fuente de alimentación-adaptador de señales PC-UC 7.1.1.- Esquema eléctrico 7.1.2.- Cara de componentes 7.1.3.- Cara de pistas bottom copper 63 63 64 65 7.2.- Fabricación de la placa de control 7.2.1.- Esquema eléctrico 7.2.2.- Componentes 7.2.3.- Cara de componentes y de pistas top copper 7.2.4.- Cara de pistas bottom copper 66 66 67 68 69 7.3.- Fabricación de la placa de potencia 7.3.1.- Esquema eléctrico 7.3.2.- Componentes 7.3.3.- Cara de componentes y de pistas top copper 7.3.4.- Cara de pistas bottom copper 70 70 71 72 73 7.4.- Fabricación de la placa de sensores 7.4.1.- Esquema eléctrico 7.4.2.- Medidas 74 74 75 Daniel García Bravo I.E.S. Joan Miró 3 Ciclo Superior de Desarrollo de Productos Electrónicos 7.4.3.- Componentes 7.4.4.- Cara de componentes y de pistas top copper 7.4.5.- Cara de pistas bottom copper 75 75 76 7. 5.- Fabricación del mando a distancia 7.5.1.- Esquema eléctrico 7.5.2.- Medidas 7.5.3.- Componentes 7.5.4.- Cara de componentes y de pistas top copper 7.5.5.- Cara de pistas bottom copper 77 77 77 78 78 79 8.- Carrocería 80 9.- Lista de Componentes y coste económico 81 10.- Coste económico total 85 11.- Referencias 86 12.- Anexos técnicos 87 Daniel García Bravo I.E.S. Joan Miró 4 Ciclo Superior de Desarrollo de Productos Electrónicos 1.- Introducción El proyecto consiste en diseñar y fabricar un robot velocista, de tal forma que sea capaz de seguir una línea negra lo más rápidamente sin salirse de ella, y además que tenga la posibilidad de ser controlado con un mando a distancia, por medio de vía radiofrecuencia. El robot consta de una placa con la fuente de alimentación y el adaptador de señales PC-UP, de la placa de control, la placa que controla los motores y la placa de sensores. Todas las placas, a excepción de esta última, tienen las mismas medidas: 75 x 70. Se busca que tanto la fuente de alimentación y el adaptador de señales PC-UP y la placa de potencia, sean comunes para todos los proyectos, haciendo que, en caso de que una placa se averíe, sea posible sustiturila por otra de otro robot, sin tener que hacer una nueva. Las placas de control, donde se sitúa el PIC, y la placa de sensores, son diferentes en cada proyecto. El robot se controla por un PIC16F876A, en el cual se ubica el programa que hace que el robot funcione como un velocista. Por medio del cambio de un jumper, el robot pasa a funcionar como coche teledirigido. El robot consta de dos motores que son controlados por la placa de potencia, que a su vez son dependientes de la placa de control, dónde está situado el PIC. Mediante una señal de PWM hacemos que a nuestro robot le sea posible ir más rápido o más lento, según las circunstancias que deseemos. Esto lo hacemos según la velocidad que imprimamos a los dos motores. Si la velocidad es igual en ambos motores, el robot irá recto, si un motor gira más rápido que otro, hará que nuestro robot gire. También conseguiremos determinar la dirección del coche, hacia delante o hacia atrás. Para poder hacer que nuestro robot sea velocista le instalaremos 8 sensores CNY70, para localizar la línea o evitarla, según deseemos con nuestro programa. También corregiremos la posición, por medio de la variación de velocidad en los motores. Daniel García Bravo I.E.S. Joan Miró 5 Ciclo Superior de Desarrollo de Productos Electrónicos Para hacer que nuestro robot sea teledirigido, tenemos que crear una comunicación entre el PIC y el mando, con el que controlamos nuestro robot. Dado que lo hacemos vía radiofrecuencia, le “instalamos” un receptor y un mando a distancia que será el emisor. Esto lo conseguimos por medio de dos módulos: un emisor CEBEK C-0503 y un receptor CEBEC C-0504. Ambos trabajan en modulación AM con una frecuencia portadora de 433,92 MHz que poseen un ancho de banda de 4 KHz. El lenguaje de programación para los programas del robot se realiza mediante el lenguaje C. El software, utilizado para el desarrollo y fabricación de nuestro robot, ha sido el programa Proteus, que nos permite simular el software y el hardware al mismo tiempo. A su vez nos es posible trabajar con C y desarrollar las placas de nuestro robot, con la posibilidad de realizar también la carrocería. Para cargar los programas desde el ordenador al PIC, se ha utilizado el grabador PICdownloader En todas las placas que se realizan, y a modo de facilitar la toma de medidas, se pone un conector de masa, este nos ayuda en la toma de medidas, colocando la punta de masa de nuestro, por ejemplo, polímetro; y la otra punta, para tomar medidas, y así poder trabajar solo con una mano. Daniel García Bravo I.E.S. Joan Miró 6 Ciclo Superior de Desarrollo de Productos Electrónicos 2.- Diagrama en bloques del robot Daniel García Bravo I.E.S. Joan Miró 7 Ciclo Superior de Desarrollo de Productos Electrónicos 3.- Esquema eléctrico del robot Daniel García Bravo I.E.S. Joan Miró 8 Ciclo Superior de Desarrollo de Productos Electrónicos 4.- Análisis de los bloques 4.1.- Placa de alimentación-adaptador de señales PC-UC En esta placa se sitúa la parte que distribuye la tensión necesaria para el funcionamiento de todos los integrados, sensores y para los motores. También esta en esta placa la parte que sirve para cargar programas a nuestro PIC, por medio del integrado MAX 232. 4.1.1.- Fuente de alimentación La fuente de alimentación es un circuito que se encarga de obtener una tensión de 5V continua a partir de una tensión de entrada de aproximadamente 9V. Para realizar esto nos serviremos del regulador de tensión LM350K. Este integrado es capaz de regular la tensión de salida de 3 a 35 voltios. También obtenemos una tensión de 9 voltios aproximadamente, para alimentar a los motores, pero estos no los obtenemos a partir del LM350K. Como se puede observar en el esquema eléctrico de la fuente, C1 y C3, son condensadores de filtrado de la señal, que se encargan de eliminar la parte alterna de la tensión, para hacerla lo más continua posible. Los condensadores C2 y C4, por su parte, se encargan de filtrar las posibles señales que el circuito absorba, ya que las pistas de la placa actúan como una antena y estos condensadores filtran esas señales, llevándolas a masa. El diodo D1 tiene la misión de proteger el circuito en caso de invertir la polaridad de la batería. El diodo D2 sirve para proteger el LM350K, para hacer que las tensiones que entran por la salida pasen por el diodo hasta la entrada del LM350K, evitando así que se introduzcan por la salida del integrado. El diodo D4 se utiliza para proteger el LM350K, en caso de que hayamos conectado la batería a la salida de 5 voltios, el polo positivo a la masa y el polo negativo a la salida de 5 voltios. Y el D3, es un diodo led y nos indica que nuestra tiene tensión a la salida, va acompañado con su resistencia correspondiente, R1; para limitar la corriente que pase por el diodo y evitar que se averíe. La resistencia R38, el potenciómetro RV1 y el condensador C15, son los que nos permiten hacer una fuente regulable de tensión. La R38 nos fija una corriente para el potenciómetro. Con el potenciómetro variamos la tensión de salida y con el condensador hacemos que, al variar la tensión de referencia, no vaya dando saltos, sino que varíe lentamente. Entre la salida del LM350K y la masa tiene que existir la tensión de salida que hayamos regulado. Entre la patilla 3 y 1 del regulador de tensión hay una diferencia de potencial de 5 voltios y una caída de tensión en RV1 es la diferencia entre la salida regulada y la tensión entre la patilla 3 y 1 Pondremos dos conectores: J1A que es el conector encargado de llevar los 5 voltios, y su masa, necesarios para el funcionamiento de los integrados, el PIC y los sensores, también lleva las conexiones necesarias para comunicar el PC y el PIC y así poder cargar los programas, RC71 y RC61. El conector JP1 es el encargado de llevar los 9 voltios a los motores y al L298 directamente y con una masa, directa de la batería. Daniel García Bravo I.E.S. Joan Miró 9 Ciclo Superior de Desarrollo de Productos Electrónicos A la hora de fabricar la placa, hay que tener en cuenta que es necesario colocar un disipador al LM350K. La solución adoptada es que el disipador sea el propio cobre de la placa que utilizamos, lo cual significa ahorrar en espacio y en materiales sin desperdiciar el cobre de la placa. Antes de conectar cualquier otra placa, debemos comprobar que a la salida haya 5 voltios aproximadamente, si no tenemos dicha tensión, podemos regularla por medio del potenciómetro. 4.1.1.1.- Esquema eléctrico de la fuente de alimentación VP => salida de 9 voltios. VDD3 => salida de 5 voltios. 4.1.2.- Adaptador de señales PC-UC Este circuito nos servirá para cargar programas en el PIC a través del integrado MAX232. Este integrado intercambia niveles de TTL a RS-232 y de RS-232 a TTL. Un 0 lógico es un 0 en RS-232 y un 1 lógico es un 1 en RS-232. Un 0 lógico en TTL es igual a 0v, en RS-232 es una tensión comprendida entre +3v y +12v. Un 1 lógico en TTL es igual a +5v y en RS-232 es una tensión comprendida entre -3v y -12v Daniel García Bravo I.E.S. Joan Miró TTL 1 = +5v RS-232 1 = -3v hasta -15v 0 = 0v 0 = +3v hasta +15 10 Ciclo Superior de Desarrollo de Productos Electrónicos 4.1.2.1.- Esquema eléctrico del adaptador de señales PC-UC VP: 9 voltios VDD3: 5 voltios VCC: alimentación del integrado MAX232 RC61: comunicación PIC – PI RC71: comunicación PC - PIC Daniel García Bravo I.E.S. Joan Miró 11 Ciclo Superior de Desarrollo de Productos Electrónicos 4.2.- Placa de control En esta placa está situado el microcontrolador PIC16F876A, que es el encargado del control del robot por medio de los programas que realicemos y que le carguemos. En nuestra placa de control el componente principal es el PIC. Este nos sirve para leer los datos que lleguen de los sensores por el conector J2 y, dependiendo de nuestro programa, actuar sobre los motores en el sentido de giro y su control de velocidad. Nuestro PIC trabaja a 1Mhz, esto se consigue mediante el cristal de cuarzo X1, que genera la frecuencia de trabajo actuando conjuntamente con los condensadores C12 y C13, variando la capacidad de estos últimos consigue modificar la frecuencia de trabajo del PIC. Las resistencias R18 y R19, el condensador C14 y el pulsador de RESET, hacen que el PIC se resetee y empiece con el programa desde el principio. El JUMPER3 nos sirve para cargar el programa en el PIC a través de un PC. Si se le cambia de posición nos hace recibir los datos del receptor de radio frecuencia. En la posición del jumper en RC7(BL) nos permite cargar programas y en la posición de RC7(RF) hace que el PIC obedezca a las instrucciones que lleguen de la tarjeta de radiofrecuencia. El JUMPER4 nos ayuda a elegir el modo de funcionamiento, de acuerdo con la elección: si queremos que nuestro robot se comporte como un velocista o como un coche teledirigido. Este jumper posee un diodo led, RA; con su correspondiente resistencia limitadora de corriente, R17; que nos indica el modo de funcionamiento de nuestro robot. De tal modo que si el diodo se enciende en nuestro robot, es un coche teledirigido y si el led está apagado quiere decir que nuestro robot funciona como un velocista. En esta placa hay dos diodos leds: D13 y D15, que sirven para indicar la dirección del coche en modo „coche teledirigido‟, aunque dependiendo de lo que queremos hacer podremos poner otras utilidades a los leds, como señalizar cuando lea líneas negras en modo velocista. Estos dos diodos van acompañados por sus respectivas resistencias limitadoras de corriente: R14 y R15. También disponemos de un botón de inicio. Su función se basa en que, una vez situado el robot en modo velocista correctamente sobre la pista, pulsemos dicho botón y el robot empiece a funcionar. Pero también puede tener otras funciones, dependiendo del programa cargado en el PIC. Disponemos también de varios conectores BUS I2C: J4, J5, J6 y J7. Las patillas del PIC: RC3 y RC4, son las que utiliza para controlarlo. A la salida de estas dos patillas del PIC hay dos resistencias de 4.7K necesarias para el funcionamiento del BUS I2C. El receptor de datos AM, CEBEK-C-0504, es un circuito híbrido necesario para poder controlar el robot a través de un mando a distancia. Es el encargado de recibir, vía radiofrecuencia, los datos que llegan del mando a distancia. Daniel García Bravo I.E.S. Joan Miró 12 Ciclo Superior de Desarrollo de Productos Electrónicos El conector J1 es el que trae de la placa, de la fuente de alimentación, los 5 voltios, la masa y las dos conexiones necesarias para poder comunicar el PIC con un PC. El conector J2 es el encargado de comunicar los sensores con el PIC y también lleva la alimentación de 5 voltios y su masa. Y el conector J3 es el que comunica el PIC con la placa de potencia, que hace que el PIC controle el giro y la velocidad de los motores, este conector lleva su masa y sus 5 voltios. 4.2.1.- Esquema eléctrico de la placa de control VDD: 5 voltios RA0: conexión sensor - PIC RA1: conexión sensor - PIC RA2: conexión sensor - PIC RA3: conexión sensor - PIC RA4: conexión sensor - PIC RA5: conexión sensor - PIC RB0: jumper modo de funcionamiento RB1: inicio RB2: conexión PIC - diodo led D15 RB3: conexión PIC - diodo led D13 RB4: conexión PIC - optoacoplador U3 RB5: conexión PIC - optoacoplador U4 Daniel García Bravo I.E.S. Joan Miró RB6: conexión PIC - optoacoplador U5 RB7: conexión PIC - optoacoplador U6 RC0: conexión sensor - PIC RC1: conexión PIC - optoacoplador U8 RC2: conexión PIC - optoacoplador U7 RC3: conexión BUS I2C RC5: conexión sensor - PIC RC4: conexión BUS I2C RC61: comunicación PIC - PI RC7 (BL): comunicación PC - PIC RC7 (RF): comunicación PIC - Cebek Antena: receptor de los datos emitidos por el mando. 13 Ciclo Superior de Desarrollo de Productos Electrónicos 4.3.- Placa de potencia Esta placa se encarga de hacer posible el control de velocidad de los motores y de su correspondiente sentido de giro. Con el integrado L298 controlamos el sentido de giro y la velocidad de los motores. Las patillas 5 y 7, IN1 e IN2, se ocupan del sentido de giro del motor izquierdo. Los pines de entrada 10 y 12, IN3 e IN4, se encargan de controlar el giro del motor derecho. Los terminales 1 y 15, SENSA y SENSB, son las masas de la patilla 9. Las patillas 6 y 11, ENA y ENB, son activaciones para las salidas 2, 3, 13 y 14, OUT1, OUT2, OUT3 y OUT4; la patilla 9 VCC, es la alimentación del integrado; la patilla 4, VS, es la alimentación de los motores, y la patilla 8, es la masa. Los optoacopladores U3, U4, U5, U6, U7 y U8, sirven para separar la parte de potencia de la parte de control. Lo que separa la potencia de las señales es un haz de luz del diodo interno de los optoacopladores. Haciendo que en caso de avería en la parte de potencia no afecte a las partes encargadas de las señales. Por medio de los optoacopladores U3, U4, U5 e U6, controlamos el sentido de giro de los motores, U3 y U4 para el motor izquierdo; U5 y U6 para el control del motor derecho. Para el control de velocidad utilizamos los transistores Q1, Q2, Q3 y Q4, y los optoacopladores U7 y U8. Los transistores solo funcionan en corte y saturación. U7, Q1 y Q4 controlan el motor izquierdo y U8, Q2 y Q3 controlan el motor derecho. Los motores son de corriente continua. Cada motor se protege por medio de cuatro diodos. Cuando los motores se paren, dichos diodos alivian la fuerza contraelectromotriz que puedan generar. Los condensadores C10 y C11, que están situados en cada extremo de los motores, sirven para filtrar posibles ruidos que los motores produzcan. Son filtros paso bajo para rechazar el ruido. El filtro atenúa los ruidos generados por el motor a frecuencias superiores a 50 Hz. Para atacar a los transistores Q1, Q2, Q3 y Q4, dado que no sabemos con seguridad cual es la tensión necesaria para hacer que estos trabajen en corte o saturación, con los JUMPER1 y JUMPER2, llevaremos ó 5 ó 9 voltios. Tras realizar las pruebas de funcionamiento, los jumpers tienen que estar a 5 voltios para que el par Darlington funcione correctamente. Los motores giran siempre y cuando se haya activado las entradas y salidas del L298, y que exista una diferencia de potencial en los extremos de estos, suficiente para que giren. En caso de que las tensiones en los extremos del motor sean iguales este no gira. Se recomienda poner los chasis de los motores a masa para filtrar los ruidos que generan los motores en el espectro de radiofrecuencia, creando una Jaula de Faraday. Así evitaremos que se produzcan ruidos en los cables o en las pistas próximas de nuestros circuitos. Daniel García Bravo I.E.S. Joan Miró 14 Ciclo Superior de Desarrollo de Productos Electrónicos Para controlar la velocidad de los motores lo hacemos con la PWM. La PWM consiste en hacer que el ciclo de trabajo de una señal cuadrada sea mas o menos ancho, podemos hacer que el ciclo de trabajo sea de un 90% para ir a mucha velocidad o de un 5% para ir lentos. Para explicar el control de giro de los motores, nos ayudaremos del esquema inferior. Estamos controlando el sentido de giro del motor izquierdo por medio de los optoacopladores U3 y U4. A GIRO1 le llevamos un 1 lógico por medio del PIC, así hacemos que el diodo del optoacoplador no luzca, el fototransistor trabaja en corte. Como el fototransistor está en corte, la tensión que proviene de R2 no pasa del colector al emisor para ir a masa, y por lo tanto va hacia el terminal de entrada del L298, que se introduce un 1 lógico, lo que supone que por la patilla OUT1 salgan 9 voltios. Por GIRO2, introducimos un 0 lógico, el diodo emisor de infrarrojos luce y ataca la base del fototransistor de U4, este empieza a trabajar en saturación y lleva la tensión VDD, la que procede de R4, en vez de a la patilla 7 del L298, la lleva a masa por medio del transistor interno del integrado U4. Hemos llevado un 0 lógico a la patilla 7 del L298. Ya tenemos un 1 en la patilla 5 y un 0 en la 7 del L298, esto hace que en la patilla de salida 2 haya 9 voltios y en la patilla de salida 3 haya 0. Lo cual significa que, en los extremos del motor, haya una diferencia de potencial y el motor gira a un lado. El control de giro del motor derecho tiene la misma filosofía que el control de giro del motor izquierdo, hacemos que los transistores de los integrados U5 y U6 trabajen en corte y saturación para llevar un 0 ó 1 lógico a las patillas correspondientes del L298. Demostración del giro del motor. Daniel García Bravo I.E.S. Joan Miró 15 Ciclo Superior de Desarrollo de Productos Electrónicos Para controlar la velocidad de los motores, actuaremos sobre las patillas 1 y 15 del integrado L298. En el esquema inferior se explica el control de velocidad. La entrada Velocidad es la conexión que lleva la PWM generada por el PIC. Cuando por Velocidad hay un nivel bajo de la señal de PWM; el diodo emisor del optoacoplador U8; lucirá, atacando la base del fototransistor, este se satura y hace que la tensión de base de Q2 vaya a masa. Q2 se pone en corte y Q4 también y la patilla 1 del L298, no se pone a masa. Por lo tanto el motor no puede girar, al no existir circulación de corriente. Si la patilla 1 y 15 del L298 no esta a masa, el motor no puede realizar ningún giro. Si por el contrario por la entrada Velocidad llega un nivel alto de la señal de PWM; el diodo de U8 no luce, el fototransistor interno de U8 trabaja en corte y por lo tanto la tensión de base del transistor Q2 no va a masa por el optoacoplador, sino que ataca la base de Q2, trabajando en saturación, inmediatamente después se ataca la base del transistor Q4 haciendo que también trabaje en saturación, por lo tanto la patilla 1 y 15 del L298 esta a masa, haciendo posible el giro del motor. En la siguiente tabla se hace un resumen del control de giro y del control de velocidad. Entradas al Inversor L298N GIRO1 GIRO2 X X 0 0 Salidas del Inversor L298N OUT1 OUT2 1v 1v Velocidad 0 1 SENSA alta impedancia 0v 1 0v 0 1 1v 9v 1 0v 1 0 9v 1v 1 0v 1 1 1v 1v Motor Parado Parado Sentido antihorario Sentido horario Parado Demostración del control de velocidad de un motor. Explicación de la PWM en la pagina 109. Daniel García Bravo I.E.S. Joan Miró 16 Ciclo Superior de Desarrollo de Productos Electrónicos 4.3.1.- Esquema eléctrico de la placa de potencia VDD: 5 voltios VP: 9 voltios U3: patilla RB4 del PIC U4: patilla RB5 del PIC Daniel García Bravo I.E.S. Joan Miró U5: patilla RB6 del PIC U6: patilla RB7 del PIC U8: patilla RC1 del PIC U7: patilla RC2 del PIC 17 Ciclo Superior de Desarrollo de Productos Electrónicos 4.4.- Placa de sensores En esta placa están situados lo sensores del robot velocista. Los sensores utilizados son los CNY70. Las señales que salen de los sensores, llegan a nuestro PIC, para poder controlar el robot mediante el programa que nosotros previamente hayamos cargado en el PIC. Otros componentes que se encuentran en esta placa son los integrados 74HC14, inversores de señales; si a la entrada tenemos un 0 lógico, a la salida tendremos un 1 lógico. También son conocidos como Trigger Smith, ya que a su vez es un circuito comparador, ya que nos vale para asegurarnos de que una superficie gris clara pase a blanca y una superficie gris oscura sea negra. Podemos decir que los utilizamos para acondicionar la señal del sensor. Las resistencias R23, R25, R27, R29, R31, R33, R35, R37; se encargan de dar tolerancia al sensor. Variando el valor de estas resistencias se puede separar más o menos los sensores de la superficie. El valor de las resistencias puede variar desde 10k hasta 47k. En los esquemas eléctricos se ha puesto el valor de estas resistencias de 10k, pero hay que ir probando que valor es el definitivo. Los sensores CNY70 tienen en su interior un diodo emisor de infrarrojos y un fototransistor. Cuando el diodo emita más luz hacia la base del fototransistor este, a su vez, conducirá más. El funcionamiento de este sensor es parecido al funcionamiento de los optoacopladores. Se basa en atacar la base de un fototransistor por medio de un emisor de luz, al hacer que el fototransistor trabaje en corte o saturación. El emisor emite un haz de luz, si esta luz se refleja, rebota sobre una superficie, se ataca a la base del fototransistor y hace que el transistor trabaje en saturación. A medida que la superficie refleje mas la luz, se producirá una mayor corriente en la base del fototransistor, y así se obtiene una mayor tensión a la salida. Esto nos es muy útil para digitalizar las señales que obtengamos de los sensores, para diferenciar la superficie oscura de una clara. Daniel García Bravo I.E.S. Joan Miró 18 Ciclo Superior de Desarrollo de Productos Electrónicos Cuando la superficie es blanca, el haz de luz se refleja y ataca a la base del fototransistor, este se satura, llevando la tensión del colector a masa, e introduciendo un 0 lógico a la entrada del 74HC14, y a la salida tenemos un 1 lógico, que es lo que le llega al PIC. Cuando la superficie es negra, la luz es absorbida por la superficie, y hace que el transistor trabaje en corte. Esto nos hará tener 1 a la entrada del 74HC14, o sea, que a la salida hay un 0 lógico. Superficie Negra Blanca Estado lógico antes de la Trigger Smith 1 0 Estado lógico después de la Trigger Smith 0 1 4.4.1.- Esquema eléctrico de la placa de sensores VDD: 5 voltios OP1: conexión sensor - PIC OP2: conexión sensor - PIC OP3: conexión sensor - PIC Daniel García Bravo I.E.S. Joan Miró OP4: conexión sensor - PIC OP5: conexión sensor - PIC OP6: conexión sensor - PIC OP7: conexión sensor - PIC OP8: conexión sensor - PIC 19 Ciclo Superior de Desarrollo de Productos Electrónicos 4.5.- Mando El mando no forma parte del proyecto por falta de tiempo, aunque se deja abierta la esta posibilidad para que en cualquier momento se pueda adjuntar. El mando se fabrica aparte de las placas de nuestro robot, ya que este es un complemento del proyecto. El mando tiene la misión de transmitir un código asociado a cada pulsador, para poder controlar el robot. El microcontrolador PIC16F876A 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: 1 bit de comienzo, 8 bit de datos, 1 bit de parada sin bit de paridad. El microcontrolador PIC16F876A trabaja a una frecuencia de 4 MHz y ejecuta una instrucción en 1uS. La alimentación procede de un regulador 7805 que suministra 5 voltios continuos a todos los circuitos. El transistor Q1E tiene la misión de deshabilitar la tarjeta de radiofrecuencia cuando esta no transmite datos. La tarjeta emisora CEBEK C-0503 es un circuito híbrido encargado de transmitir vía radiofrecuencia, los datos digitales procedentes del microprocesador. Se modula en AM cuya frecuencia portadora es de 433,92 MHz. Estas señales salen por la patilla 11 del emisor de datos CEBEK C-0503. El diodo led D7E nos indica que el mando está encendido, tiene su correspondiente resistencia limitadora de corriente. El resto de los leds se iluminan cuando activamos su pulsador correspondiente. El diodo D6E tiene la misión de proteger el circuito en cado de invertir la batería. Los condensadores C1 y C2 son filtros. Daniel García Bravo I.E.S. Joan Miró 20 Ciclo Superior de Desarrollo de Productos Electrónicos 4.5.1.- Esquema eléctrico del mando CON1E: salida de los datos emitidos VDD: 5 voltios Daniel García Bravo I.E.S. Joan Miró 21 Ciclo Superior de Desarrollo de Productos Electrónicos 5.- Esquema eléctrico de simulación con Proteus 5.1.- Simulación del robot velocista Daniel García Bravo I.E.S. Joan Miró 22 Ciclo Superior de Desarrollo de Productos Electrónicos 5.2.- Simulación del robot teledirigido Daniel García Bravo I.E.S. Joan Miró 23 Ciclo Superior de Desarrollo de Productos Electrónicos 6.- Programas La programación tiene una parte importante en nuestro robot, ya que, por muy bien diseñado que esté, sin programas no haremos nada. Los programas primero se simulan en el ISIS y tienen el primer objetivo de ver que, las diferentes partes del robot, funcionan adecuadamente. Una vez que se haya visto que funciona correctamente, se podrá pasar a programar ya el funcionamiento del robot. 6.1.- Programas de prueba Por medio de estos programas se puede averiguar si hay fallos en los componentes que monta nuestro robot o en las conexiones electrónicas. 6.1.2.- Programas de prueba de los leds Este programa tiene como función probar el correcto funcionamiento de los dos diodos leds que hay en la placa de control. Para encender los diodos leds necesitaremos sacar, por la patilla del PIC que esté conectado, al diodo led un 0 lógico. Para apagar el diodo led necesitaremos un 1 lógico. 6.1.2.1.- Diagrama de flujo Daniel García Bravo I.E.S. Joan Miró 24 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.2.2.- Programa // Pruebas de los leds // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 = 1000000 ) // Define la frecuencia del reloj de 1 MHz #BYTE TRISB = 0x86 #BYTE portB = 0x06 // TRISB en 86h. // PORTB en 06h. #BIT rb2 = 0x06.2 #BIT rb3 = 0x06.3 // RB2 en 0x06 patilla 2. // RB3 en 0x06 patilla 3. // ****************** Función principal o programa principal ****************** void main() { TRISB = 0B00000000; while(1){ } Daniel García Bravo I.E.S. Joan Miró // Defines Puerto B como salida // de datos. // Bucle infinito rb2 = 0 ; // Enciendo el led D14 rb3 =0; // Enciendo el led D13 delay_ms(500); // Retardo de 500 ms rb2 = 1 ; // Apago el led D14 rb3 =1; // Apago el led D13 delay_ms(500); // Retardo de 500 ms } // Cierro el While // Cierro el programa 25 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.3.- Programas de prueba de los sensores Estos programas tienen la función de comprobar el correcto funcionamiento de todos los sensores de nuestro robot. También comprobaremos que la comunicación entre el PIC y los sensores son las correctas y que no hay fallos de comunicación. Comprobaremos los sensores de dos en dos y nos ayudaremos de los diodos led que hay en la placa de control, para controlar si los sensores y sus respectivas comunicaciones son correctas. Cuando el sensor lea una superficie blanca llegará un 0 lógico al PIC, después del integrado Trigger Smith. Cuando el sensor lea una superficie negra llegará un 1 lógico al PIC. Superficie Negra Blanca Estado lógico que llega al PIC 0 1 6.1.3.1.- Programas de prueba de los sensores OP1 Y OP2 Este programa tiene la función de comprobar el correcto comportamiento de los sensores OP1 y OP2. 6.1.3.1.1.- Diagrama de flujo Daniel García Bravo I.E.S. Joan Miró 26 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.3.1.2.- Programa // Pruebas de los sensores OP1 y OP2 // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 = 1000000 ) // Define la frecuencia del reloj de 1 MHz #BYTE TRISA = 0x85 #BYTE portA = 0x05 // TRISA en 85h. // PORTB en 05h. #BIT ra0 = 0x05.0 // RA0 en 0x05 patilla 0 #BYTE TRISB = 0x86 #BYTE portB = 0x06 // TRISB en 86h. // PORTB en 06h. #BIT rb2 = 0x06.2 #BIT rb3 = 0x06.3 // RB2 en 0x06 patilla 2. // RB3 en 0x06 patilla 3. #BYTE TRISC = 0x87 #BYTE portC = 0x07 // TRISC en 87h. // PORTC en 07h. #BIT rc0 = 0x07.0 // RC0 en 0x07 patilla 0 // ****************** Función principal o programa principal ****************** void main() { TRISA = 0B11111111; // Defines Puerto A como entrada de datos TRISB = 0B00000000; // Defines Puerto B como salida // de datos. TRISC = 0B10110001; // Defines rc6, rc2 y rc1 como salidas y rc7, // rc5 y rc0 como entradas; rc4 y rc3 no // tocar Daniel García Bravo I.E.S. Joan Miró 27 Ciclo Superior de Desarrollo de Productos Electrónicos while(1){ // Bucle infinito if (rc0 == 1) rb2 = 0; else { // Cierro el else if (ra0 == 1) // Si el sensor lee blanco ejecuta la // siguiente instrucción else { } // Enciende el led D13 // Si el sensor lee negro, ejecuta la siguiente // instrucción rb3 = 1; Daniel García Bravo I.E.S. Joan Miró // Apaga el led D14 } rb3 = 0; } // Enciende el led D14 // Si el sensor lee negro, ejecuta la siguiente // instrucción rb2 = 1; } // Si el sensor lee blanco ejecuta la // siguiente instrucción // Apaga el led D13 // Cierro el else // Cierro el while // Cierro el programa 28 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.3.2- Programas de prueba de los sensores OP3 y OP4 Este programa tiene la función de comprobar el correcto comportamiento de los sensores OP3 y OP4. 6.1.3.2.1.- Diagrama de flujo 6.1.3.2.2.- Programa // Pruebas de los sensores OP3 y OP4 // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 = 1000000 ) // Define la frecuencia del reloj de 1 MHz Daniel García Bravo I.E.S. Joan Miró 29 Ciclo Superior de Desarrollo de Productos Electrónicos #BYTE TRISA = 0x85 #BYTE portA = 0x05 // TRISA en 85h. // PORTB en 05h. #BIT ra1 = 0x05.1 #BIT ra2 = 0x05.2 // RA1 en 0x05 patilla 1 // RA2 en 0x05 patilla 2 #BYTE TRISB = 0x86 #BYTE portB = 0x06 // TRISB en 86h. // PORTB en 06h. #BIT rb2 = 0x06.2 #BIT rb3 = 0x06.3 // RB2 en 0x06 patilla 2. // RB3 en 0x06 patilla 3. // ****************** Función principal o programa principal ****************** void main() { TRISA = 0B11111111; // Defines Puerto A como entrada de datos TRISB = 0B00000000; // Defines Puerto B como salida de datos while(1){ // Bucle infinito if (ra1 == 1) rb2 = 0; else { // Si el sensor lee negro, ejecuta la siguiente // instrucción rb2 = 1; } // Si el sensor lee blanco ejecuta la // siguiente instrucción rb3 = 0; else { } Daniel García Bravo I.E.S. Joan Miró // Enciende el led D13 // Si el sensor lee negro, ejecuta la siguiente // instrucción rb3 = 1; } // Apaga el led D14 // Cierro el else if (ra2 == 1) } // Si el sensor lee blanco ejecuta la // siguiente instrucción // Enciende el led D14 // Apaga el led D13 // Cierro el else // Cierro el while // Cierro el programa 30 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.3.3.- Programas de prueba de los sensores OP5 y OP6 Este programa tiene la función de comprobar el correcto comportamiento de los sensores OP5 y OP6. 6.1.3.3.1.- Diagrama de flujo 6.1.3.3.2.- Programa // Pruebas de los sensores OP5 y OP6 // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 = 1000000 ) #BYTE TRISA = 0x85 // Define la frecuencia del reloj de 1 MHz // TRISA en 85h. Daniel García Bravo I.E.S. Joan Miró 31 Ciclo Superior de Desarrollo de Productos Electrónicos #BYTE portA = 0x05 // PORTB en 05h. #BIT ra3 = 0x05.3 #BIT ra4 = 0x05.4 // RA3 en 0x05 patilla 3 // RA4 en 0x05 patilla 4 #BYTE TRISB = 0x86 #BYTE portB = 0x06 // TRISB en 86h. // PORTB en 06h. #BIT rb2 = 0x06.2 #BIT rb3 = 0x06.3 // RB2 en 0x06 patilla 2. // RB3 en 0x06 patilla 3. // ****************** Función principal o programa principal ****************** void main() { TRISA = 0B11111111; // Defines Puerto A como entrada de datos TRISB = 0B00000000; // Defines Puerto B como salida de datos while(1){ // Bucle infinito if (ra3 == 1) // Si el sensor lee blanco ejecuta la // siguiente instrucción rb2 = 0; else { // Si el sensor no lee blanco, ejecuta la // siguiente instrucción rb2 = 1; } // Si el sensor lee blanco ejecuta la // siguiente instrucción rb3 = 0; else { } Daniel García Bravo I.E.S. Joan Miró // Enciende el led D13 // Si el sensor no lee blanco, ejecuta la // siguiente instrucción rb3 = 1; } // Apaga el led D14 // Cierro el else if (ra4 == 1) } // Enciende el led D14 // Apaga el led D13 // Cierro el else // Cierro el while // Cierro el programa 32 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.3.4.- Programas de prueba de los sensores OP7 Y OP8 Este programa tiene la función de comprobar el correcto comportamiento de los sensores OP7 y OP8. 6.1.3.4.1.- Diagrama de flujo 6.1.3.4.2.- Programa // Pruebas de los sensores OP7 y OP8 // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 Daniel García Bravo I.E.S. Joan Miró 33 Ciclo Superior de Desarrollo de Productos Electrónicos #use delay( clock = 1000000 ) // Define la frecuencia del reloj de 1 MHz #BYTE TRISA = 0x85 #BYTE portA = 0x05 // TRISA en 85h. // PORTB en 05h. #BIT ra5 = 0x05.5 // RA5 en 0x05 patilla 5 #BYTE TRISB = 0x86 #BYTE portB = 0x06 // TRISB en 86h. // PORTB en 06h. #BIT rb2 = 0x06.2 #BIT rb3 = 0x06.3 // RB2 en 0x06 patilla 2. // RB3 en 0x06 patilla 3. #BYTE TRISC = 0x87 #BYTE portC = 0x07 // TRISC en 87h. // PORTC en 07h. #BIT rc5 = 0x07.5 // RC5 en 0x07 patilla 5 // ****************** Función principal o programa principal ****************** void main() { TRISA = 0B11111111; // Defines Puerto A como entrada de datos TRISB = 0B00000000; // Defines Puerto B como salida // de datos. TRISC = 0B10110001; // Defines rc6, rc2 y rc1 como salidas y rc7, // rc5 y rc0 como entradas; rc4 y rc3 no // tocar while(1){ // Bucle infinito if (ra5 == 1) rb2 = 0; else { // Enciende el led D14 // Si el sensor lee negro, ejecuta la siguiente // instrucción rb2 = 1; // Apaga el led D14 } // Cierro el else if (rc5 == 1) // Si el sensor lee blanco ejecuta la // siguiente instrucción rb3 = 0; Daniel García Bravo I.E.S. Joan Miró // Si el sensor lee blanco ejecuta la // siguiente instrucción // Enciende el led D13 34 Ciclo Superior de Desarrollo de Productos Electrónicos else { // Si el sensor lee negro, ejecuta la siguiente // instrucción rb3 = 1; } // Apaga el led D13 // Cierro el else } // Cierro el while } // Cierro el programa 6.1.4.- Programas de pruebas de control de giro de los motores Con estos programas comprobaremos que los motores están en perfecto estado y las conexiones que controlan los motores también lo están. 6.1.4.1- Programa de prueba del motor derecho Con este programa controlaremos que el motor derecho gira en ambos sentidos, controlando las patillas rb6 y rb7 del PIC. El sentido de giro dependerá del estado lógico de las patillas rb6 y rb7 y de cómo conectemos el motor derecho a la placa de potencia. RB6 0 0 1 1 Daniel García Bravo I.E.S. Joan Miró RB7 0 1 0 1 Sentido de giro Motor parado En movimiento En movimiento Motor parado 35 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.4.1.1.- Diagrama de flujo 6.1.4.1.2.- Programa // Pruebas de control de giro del motor derecho // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 = 1000000 ) // Define la frecuencia del reloj de 1 MHz #BYTE TRISB = 0x86 #BYTE portB = 0x06 // TRISB en 86h. // PORTB en 06h. Daniel García Bravo I.E.S. Joan Miró 36 Ciclo Superior de Desarrollo de Productos Electrónicos #BIT rb6 = 0x06.6 #BIT rb7 = 0x06.7 // RB1 en 0x06 patilla 1. // RB2 en 0x06 patilla 2. // ****************** Función principal o programa principal **************** void main() { TRISB = 0B00000000; // Defines Puerto B como SALIDA de datos portB = 0B00000000; // Reseteas el puerto B while(1){ // Bucle infinito rb6 = 0; rb7 = 0; // Las patillas RB6 y RB7 desactivadas, // motor parado delay_ms(500); // Retardo de 500 ms rb6 = 1; // Activamos la patilla RB6, motor gira delay_ms(500); // Retardo de 500 ms rb6 = 0; rb7 = 0; // Las patillas RB6 y RB7 desactivadas, // motor parado delay_ms(500); // Retardo de 500 ms rb7 = 1; // Activamos la patilla RB7, el motor gira delay_ms(500); // Retardo de 500 ms } // Cierro el While } // Cierro el programa principal 6.1.4.2.- Programa de prueba del motor izquierdo Con este programa controlaremos que el motor izquierdo gira en ambos sentidos, controlando las patillas rb4 y rb5 del PIC. El sentido de giro dependerá del estado lógico de las patillas rb4 y rb5 y de cómo conectemos el motor derecho a la placa de potencia. RB4 0 0 1 1 Daniel García Bravo I.E.S. Joan Miró RB5 0 1 0 1 Sentido de giro Motor parado En movimiento En movimiento Motor parado 37 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.4.2.1.- Diagrama de flujo 6.1.4.2.2.- Programa // Pruebas de control de giro del motor izquierdo // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 = 1000000 ) // Define la frecuencia del reloj de 1 MHz Daniel García Bravo I.E.S. Joan Miró 38 Ciclo Superior de Desarrollo de Productos Electrónicos #BYTE TRISB = 0x86 #BYTE portB = 0x06 // TRISB en 86h. // PORTB en 06h. #BIT rb4 = 0x06.4 #BIT rb5 = 0x06.5 // RB4 en 0x06 patilla 4. // RB5 en 0x06 patilla 5. // ****************** Función principal o programa principal **************** void main() { TRISB = 0B00000000; portB = 0B00000000; while(1){ } } // Defines Puerto B como SALIDA de datos. // Reseteas el puerto B // Bucle infinito rb4 = 0; rb5 = 0; // Las patillas RB4 y RB5 desactivadas, // motor parado delay_ms(500); // Retardo de 500 ms rb4 = 1; // Activamos la patilla RB4, motor gira delay_ms(500); // Retardo de 500 ms rb4 = 0; rb5 = 0; // Las patillas RB4 y RB5 desactivadas, // motor parado delay_ms(500); // Retardo de 500 ms rb5 = 1; // Activamos la patilla RB5, el motor gira delay_ms(500); // Retardo de 500 ms // Cierro el While // Cierro el programa principal 6.1.5.- Programas de pruebas de control de velocidad de los motores Con estos programas probaremos que el PIC genera la PWM. También que esta llega a nuestros motores y que estos modifican su velocidad de acuerdo con la PWM que llegue del PIC. 6.1.5.1- Programa de control de velocidad del motor derecho Probamos la velocidad del motor derecho. Daniel García Bravo I.E.S. Joan Miró 39 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.5.1.1.- Diagrama de flujo 6.1.5.1.2.- Programa // Prueba de control de velocidad motor derecho // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 = 1000000 ) // Define la frecuencia del reloj de 1 MHz #BYTE TRISB = 0x86 // TRISB en 86h. #BYTE portB = 0x06 // PORTB en 06h. Daniel García Bravo I.E.S. Joan Miró 40 Ciclo Superior de Desarrollo de Productos Electrónicos #BIT rb6 = 0x06.6 #BIT rb7 = 0x06.7 // RB6 en 0x06 patilla 6. // RB7 en 0x06 patilla 7. int16 TH = 65535; // Variable para la PWM // ************* Función principal o programa principal ***************** void main() { TRISB = 0B00000010; // Defines Puerto B como salidas de datos. portB = 0B00001100; // Reseteas el puerto B, los dos LEDS a 1 setup_timer_2(T2_DIV_BY_16,249,1); // setup_timer(Prescaler,PR2,Postscaler) // Configuracion timer2. Si el Periodo = 16mS ----> T = 16000uS // T = [PR2+1] x Tcm x Postscaler x Prescaler // PR2 puede valer de 0 a 255. // Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000 hz = 4uS. // Prescaler puede valer 1,4,16 // Postscaler puede valer 1. // 16000uS = [PR2+1] x 4 x 16 x 1 // PR2 =[T/(Tcm x Preescaler x Postscaler)]-1 // PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249 (en C 249) setup_ccp2(CCP_PWM); while(1){ Daniel García Bravo I.E.S. Joan Miró // CCP2 en modo PWM (Salida por // RC1) // Bucle infinito rb7 = 0; rb6 = 1; // Desactivamos la patilla RB7 // Activamos la patilla RB6 // El motor empezara a moverse en un // sentido TH = 0; // No meto PWM, motor parado delay_ms(2000); // Tiempo que el motor estará girando TH = 64; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando TH = 500; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando TH = 1000; // Cambiamos el valor de la PWM 41 Ciclo Superior de Desarrollo de Productos Electrónicos } } Daniel García Bravo I.E.S. Joan Miró delay_ms(2000); // Tiempo que el motor estará girando rb7 = 0; rb6 = 1; // Desactivamos la patilla RB7 // Activamos la patilla RB6 // El motor empezara a moverse en // sentido contrario TH = 0; // No meto PWM, motor parado delay_ms(2000); // Tiempo que el motor estará girando TH = 64; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando TH = 500; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando TH = 1000; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando // Cierro el While // Cierro el programa principal 42 Ciclo Superior de Desarrollo de Productos Electrónicos 6.1.5.2.- Programa de control de velocidad del motor izquierdo Probamos la velocidad del motor izquierdo. 6.1.5.2.1.- Diagrama de flujo 6.1.5.2.2.- Programa // Prueba de control de velocidad izquierdo // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 Daniel García Bravo I.E.S. Joan Miró 43 Ciclo Superior de Desarrollo de Productos Electrónicos #use delay( clock = 1000000 ) // Define la frecuencia del reloj de 1 MHz #BYTE TRISB = 0x86 #BYTE portB = 0x06 // TRISB en 86h. // PORTB en 06h. #BIT rb4 = 0x06.4 #BIT rb5 = 0x06.5 // RB4 en 0x06 patilla 4. // RB5 en 0x06 patilla 5. int16 TH = 65535; // Variable para la PWM // ******************* Función principal o programa principal ***************** void main() { TRISB = 0B00000010; // Defines Puerto B como salidas de datos. portB = 0B00001100; // Reseteas el puerto B, los dos LEDS a 1 setup_timer_2(T2_DIV_BY_16,249,1); // setup_timer(Prescaler,PR2,Postscaler) // Configuracion timer2. Si el Periodo = 16mS ----> T = 16000uS // T = [PR2+1] x Tcm x Postscaler x Prescaler // PR2 puede valer de 0 a 255. // Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000 hz = 4uS. // Prescaler puede valer 1,4,16 // Postscaler puede valer 1. // 16000uS = [PR2+1] x 4 x 16 x 1 // PR2 =[T/(Tcm x Preescaler x Postscaler)]-1 // PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249 (en C 249) setup_ccp1(CCP_PWM); // CCP1 en modo PWM (Salida por RC2) while(1){ // Bucle infinito Daniel García Bravo I.E.S. Joan Miró rb4 = 0; rb5 = 1; // Desactivamos la patilla RB4 // Activamos la patilla RB5 // El motor empezara a moverse en un // sentido TH = 0; // No meto PWM, motor parado delay_ms(2000); // Tiempo que el motor estará girando TH = 64; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando 44 Ciclo Superior de Desarrollo de Productos Electrónicos } } Daniel García Bravo I.E.S. Joan Miró TH = 500; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando TH = 1000; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando rb5 = 0; rb4 = 1; // Desactivamos la patilla RB5 // Activamos la patilla RB4 // El motor empezara a moverse en // sentido contrario TH = 0; // No meto PWM, motor parado delay_ms(2000); // Tiempo que el motor estará girando TH = 64; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando TH = 500; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando TH = 1000; // Cambiamos el valor de la PWM delay_ms(2000); // Tiempo que el motor estará girando // Cierro el While // Cierro el programa principal 45 Ciclo Superior de Desarrollo de Productos Electrónicos 6.2.- Programas de funcionamiento del robot 6.2.1.- Programa del robot velocista Con este programa controlamos el robot en modo velocista. Dado que por falta de tiempo no se puede adjuntar el programa del coche teledirigido, este es el programa con el cual nuestro robot funciona. 6.2.1.1.- Diagramas de flujo Daniel García Bravo I.E.S. Joan Miró 46 Ciclo Superior de Desarrollo de Productos Electrónicos Daniel García Bravo I.E.S. Joan Miró 47 Ciclo Superior de Desarrollo de Productos Electrónicos Daniel García Bravo I.E.S. Joan Miró 48 Ciclo Superior de Desarrollo de Productos Electrónicos Daniel García Bravo I.E.S. Joan Miró 49 Ciclo Superior de Desarrollo de Productos Electrónicos 6.2.1.2.- Programa // Velocista // ************************ Directivas de procesado ************************ // (Controlan la conversión del programa a código máquina por parte del compilador) #include <16F876A.h> // Incluye el fichero 16F876A.h 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 = 1000000 ) // Define la frecuencia del reloj de 1 MHz #BYTE TRISA = 0x85 #BYTE portA = 0x05 // TRISA en 85h. // PORTB en 05h. #BIT ra0 = 0x05.0 #BIT ra1 = 0x05.1 #BIT ra2 = 0x05.2 #BIT ra3 = 0x05.3 #BIT ra4 = 0x05.4 // RA0 en 0x05 patilla 0. // RA1 en 0x06 patilla 1. // RA2 en 0x06 patilla 2. // RA3 en 0x06 patilla 3. // RA4 en 0x06 patilla 4. Daniel García Bravo I.E.S. Joan Miró 50 Ciclo Superior de Desarrollo de Productos Electrónicos #BIT ra5 = 0x05.5 #BIT ra6 = 0x05.6 #BYTE TRISB = 0x86 #BYTE portB = 0x06 // RA5 en 0x06 patilla 5. // RA6 en 0x06 patilla 6. // TRISB en 86h. // PORTB en 06h. #BIT rb0 = 0x06.0 #BIT rb1 = 0x06.1 #BIT rb2 = 0x06.2 #BIT rb3 = 0x06.3 #BIT rb4 = 0x06.4 #BIT rb5 = 0x06.5 #BIT rb6 = 0x06.6 #BIT rb7 = 0x06.7 // RB0 en 0x06 patilla 0. // RB1 en 0x06 patilla 1. // RB2 en 0x06 patilla 2. // RB3 en 0x06 patilla 3. // RB4 en 0x06 patilla 4. // RB5 en 0x06 patilla 5. // RB6 en 0x06 patilla 6. // RB7 en 0x06 patilla 7. #BYTE TRISC = 0x87 #BYTE portC = 0x07 // TRISC en 87h. // PORTC en 07h. #BIT rc0 = 0x07.0 #BIT rc1 = 0x07.1 #BIT rc2 = 0x07.2 #BIT rc3 = 0x07.3 #BIT rc4 = 0x07.4 #BIT rc5 = 0x07.5 #BIT rc6 = 0x07.6 #BIT rc7 = 0x07.7 // RC0 en 0x06 patilla 0. // RC1 en 0x06 patilla 1. // RC2 en 0x06 patilla 2. // RC3 en 0x06 patilla 3. // RC4 en 0x06 patilla 4. // RC5 en 0x06 patilla 5. // RC6 en 0x06 patilla 6. // RC7 en 0x06 patilla 7. int16 TH = 65535; // Variable para la PWM // ******************** Declaración de funciones *************************** void velocista(); // Subprograma del velocista void Rec0 (); void Rec1 (); void Rec2 (); void Rec3 (); void Rec4 (); void Rec5 (); void Rec6 (); void Rec7 (); void Rec8 (); void Rec9 (); void Rec10 (); void Rec11 (); void Rec12 (); void Rec13 (); void Rec14 (); // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación // Subprograma de rectificación Daniel García Bravo I.E.S. Joan Miró 51 Ciclo Superior de Desarrollo de Productos Electrónicos // ******************* Función principal o programa principal ***************** void main() { // ************ Configuración de todas las entradas y salidas y resetearlas ********* TRISA = 0B11111111; // Defines Puerto A como entrada de datos. TRISB = 0B00000011; // Defines rb0 y rb1 como entradas y el resto // del Puerto B como salidas TRISC = 0B10110001; // Defines rc6, rc2 y rc1 como salidas y rc7, // rc5 y rc0 como entradas; rc4 y rc3 no tocar rb4 = 0; rb5 = 0; rb6 = 0; rb7 = 0; rc3 = 0; rc6 = 0; // Reseteo todas estas salidas setup_timer_2(T2_DIV_BY_16,249,1); // setup_timer(Prescaler,PR2,Postscaler) // Configuracion timer2. Si el Periodo = 16mS ----> T = 16000uS // T = [PR2+1] x Tcm x Postscaler x Prescaler // PR2 puede valer de 0 a 255. // Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000 hz = 4uS. // Prescaler puede valer 1,4,16 // Postscaler puede valer 1. // 16000uS = [PR2+1] x 4 x 16 x 1 // PR2 =[T/(Tcm x Preescaler x Postscaler)]-1 // PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249 (en C 249) setup_ccp1(CCP_PWM); // CCP1 en modo PWM (Salida por RC2) setup_ccp2(CCP_PWM); // CCP2 en modo PWM (Salida por RC1) TH = 0; set_pwm1_duty(TH); // Pongo la PWM a 0 // por la patilla RC2 TH = 0; set_pwm2_duty(TH); // Pongo la PWM a 0 // por la patilla RC1 velocista(); // Ejecutamos el subprograma de velocista Daniel García Bravo I.E.S. Joan Miró 52 Ciclo Superior de Desarrollo de Productos Electrónicos // ******************* Subprograma del Velocista ************************* void velocista(void) { while (rb1 == 1 ){ // Mientras el botón de inicio no se pulse // ejecuta lo siguiente if (rc0 == 1 && ra0 == 1 && ra1 == 1 && ra2 == 1 && ra3 == 1 && ra4 == 1 && ra5 == 1 && rc5 == 1){ // Si todos los sensores leen blanco, ejecuta lo siguiente: rb2 = 1; rb3 = 0; // Apago led D14 // Enciendo led D13 } // Cierro el if else { // Si el if no es cierto, ejecuta lo siguiente rb2 = 0; rb3 = 0; // Enciendo led D14 // Enciendo led D13 } // Cierro el else } while (1){ rb2 = 1; rb3 = 1; // Cierro el While // Bucle infinito del velocista // Apago leds if (rc0 == 1 && ra0 == 1 && ra1 == 1 && ra2 == 1 && ra3 == 1 && ra4 == 1 && ra5 == 1 && rc5 == 1) Rec0(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra3 == 0) Rec1(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra3 && ra4 == 0) Rec2(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra4 == 0) Rec3(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra4 && ra5== 0) Rec4(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra5 == 0) Rec5(); // Si la condición es verdadera ejecuta el // siguiente subprograma Daniel García Bravo I.E.S. Joan Miró 53 Ciclo Superior de Desarrollo de Productos Electrónicos if (ra5 && rc5 == 0) Rec6(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (rc5 == 0) Rec7(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra2 == 0) Rec8(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra2 && ra1 == 0) Rec9(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra1 == 0) Rec10(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra1 && ra0 == 0) Rec11(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra0 == 0) Rec12(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (ra0 && rc0 == 0) Rec13(); // Si la condición es verdadera ejecuta el // siguiente subprograma if (rc0 == 0) Rec14(); // Si la condición es verdadera ejecuta el // siguiente subprograma } } // Cierro el while(1) // Cierro el programa velocista // ********************************* Rec0 ***************************** void Rec0(void) { // Subprograma de rectificado 0 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 1000; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 1000; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho Daniel García Bravo I.E.S. Joan Miró 54 Ciclo Superior de Desarrollo de Productos Electrónicos delay_ms(20); } // Refresco de la PWM // Cierro el subprogama // ********************************* Rec1 ***************************** void Rec1(void) // Subprograma de rectificado 1 { rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 1000; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 500; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // *************************** Rec2 ******************************* void Rec2(void) { // Subprograma de rectificado 2 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 1000; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 400; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } Daniel García Bravo I.E.S. Joan Miró // Cierro el subprogama 55 Ciclo Superior de Desarrollo de Productos Electrónicos // **************************** Rec3 *********************************** void Rec3(void) { // Subprograma de rectificado 3 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 1000; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 300; set_pwm2_duty(TH); delay_ms(20); // Valor de la PWM para el motor derecho // Refresco de la PWM } // Cierro el subprogama // **************************** Rec4 ********************************** void Rec4(void) { // Subprograma de rectificado 4 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 1000; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 200; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // **************************** Rec5 ******************************** void Rec5(void) { rb4 = 1; rb5 = 0; Daniel García Bravo I.E.S. Joan Miró // Subprograma de rectificado 5 // Activamos la patilla RB4 // Activo el motor izquierdo 56 Ciclo Superior de Desarrollo de Productos Electrónicos rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 1000; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 150; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // ******************************* Rec6 ******************************** void Rec6(void) { // Subprograma de rectificado 6 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 1000; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 100; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // **************************** Rec7 *********************************** void Rec7(void) { // Subprograma de rectificado 7 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 1000; set_pwm1_duty(TH); Daniel García Bravo I.E.S. Joan Miró // Valor de la PWM para el motor izquierdo 57 Ciclo Superior de Desarrollo de Productos Electrónicos TH = 50; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // *************************** Rec8 ************************************ void Rec8(void) { // Subprograma de rectificado 8 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 500; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 1000; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // ****************************** Rec9 ********************************** void Rec9(void) { // Subprograma de rectificado 9 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 400; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 1000; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } Daniel García Bravo I.E.S. Joan Miró // Cierro el subprogama 58 Ciclo Superior de Desarrollo de Productos Electrónicos // **************************** Rec10 ********************************** void Rec10(void) { // Subprograma de rectificado 10 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 300; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 1000; set_pwm2_duty(TH); delay_ms(20); // Valor de la PWM para el motor derecho // Refresco de la PWM } // Cierro el subprogama // ***************************** Rec11 ********************************** void Rec11(void) { // Subprograma de rectificado 11 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 200; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 1000; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // ************************** Rec12 ********************************* void Rec12(void) { rb4 = 1; rb5 = 0; Daniel García Bravo I.E.S. Joan Miró // Subprograma de rectificado 12 // Activamos la patilla RB4 // Activo el motor izquierdo 59 Ciclo Superior de Desarrollo de Productos Electrónicos rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 150; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 1000; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // ******************************* Rec13 ******************************* void Rec13(void) { // Subprograma de rectificado 13 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 100; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo TH = 1000; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama // ******************************** Rec14 ***************************** void Rec14(void) { // Subprograma de rectificado 14 rb4 = 1; rb5 = 0; // Activamos la patilla RB4 // Activo el motor izquierdo rb6 = 1; rb7 = 0; // Activamos la patilla RB6 // Activo motor derecho TH = 50; set_pwm1_duty(TH); // Valor de la PWM para el motor izquierdo Daniel García Bravo I.E.S. Joan Miró 60 Ciclo Superior de Desarrollo de Productos Electrónicos TH = 1000; set_pwm2_duty(TH); // Valor de la PWM para el motor derecho delay_ms(20); // Refresco de la PWM } // Cierro el subprogama 6.2.2.- Programa del coche teledirigido Con este programa se lograra controlar el robot a través de un mando. Dado que no ha dado tiempo, el proyecto se deja abierto para futuras modificaciones. 6.2.2.1.- Diagrama de flujo 6.2.2.2.- Programa Daniel García Bravo I.E.S. Joan Miró 61 Ciclo Superior de Desarrollo de Productos Electrónicos 7.- Fabricación de placas Para fabricar las placas se ha empleado el mismo sistema: 1º Cortar la placa a medida. 2º Hacer los agujeros de la placa. 3º Positivarla. 4º Dejarla en el horno a 70ºC, durante 15 minutos. 5º Centrar los fotolitos en la placa e insolarla durante, aproximadamente, unos 230 segundos. 6º Revelarla en sosa. 7º Grabado de la placa. Las placas que se muestran aquí no son el tamaño real. Todas las placas, menos la placa de sensores, tienen el mismo tamaño, 75x70. A continuación se muestra el esquema eléctrico que se ha utilizado para la fabricación y su placa correspondiente. Las placas se han puesto por la cara de componentes, top copper y por la cara de pistas, botton copper. Se muestra el siguiente dibujo con las dimensiones de las placas de la fuente de alimentación-adaptador de señales PC-UC, placa de control y placa de potencia, con las distancias de los agujeros de sujeción. Daniel García Bravo I.E.S. Joan Miró 62 Ciclo Superior de Desarrollo de Productos Electrónicos 7. 1.- Fabricación de la fuente de alimentación-adaptador de señales PC-UC 7.1.1.- Esquema eléctrico Daniel García Bravo I.E.S. Joan Miró 63 Ciclo Superior de Desarrollo de Productos Electrónicos 7.1.2.- Cara de componentes En esta placa no está colocada la disipación de cobre del LM350K, para que se pueda distinguir bien la distribución de los componentes. Dicha disipación debe ocupar todo el ancho del LM350K. Daniel García Bravo I.E.S. Joan Miró 64 Ciclo Superior de Desarrollo de Productos Electrónicos 7.1.3.- Cara de pistas bottom copper Daniel García Bravo I.E.S. Joan Miró 65 Ciclo Superior de Desarrollo de Productos Electrónicos 7. 2.- Fabricación de la placa de control 7.2.1.- Esquema eléctrico Daniel García Bravo I.E.S. Joan Miró 66 Ciclo Superior de Desarrollo de Productos Electrónicos 7.2.2.- Componentes Daniel García Bravo I.E.S. Joan Miró 67 Ciclo Superior de Desarrollo de Productos Electrónicos 7.2.3.- Cara de componentes y de pistas top copper Daniel García Bravo I.E.S. Joan Miró 68 Ciclo Superior de Desarrollo de Productos Electrónicos 7.2.4.- Cara de pistas bottom copper Daniel García Bravo I.E.S. Joan Miró 69 Ciclo Superior de Desarrollo de Productos Electrónicos 7. 3.- Fabricación de la placa de potencia 7.3.1.- Esquema eléctrico Daniel García Bravo I.E.S. Joan Miró 70 Ciclo Superior de Desarrollo de Productos Electrónicos 7.3.2.- Componentes Daniel García Bravo I.E.S. Joan Miró 71 Ciclo Superior de Desarrollo de Productos Electrónicos 7.3.3.- Cara de componentes y de pistas top copper Daniel García Bravo I.E.S. Joan Miró 72 Ciclo Superior de Desarrollo de Productos Electrónicos 7.3.4.- Cara de pistas bottom copper Daniel García Bravo I.E.S. Joan Miró 73 Ciclo Superior de Desarrollo de Productos Electrónicos 7. 4.- Fabricación de la placa de sensores Esta placa siempre está en constante cambio, hasta que se da con la placa que mejor nos convenga. Después de muchos prototipos, aquí se expone la que mejor hemos visto que funciona. El ancho de las placas se intenta que tenga la misma medida, 48mm, para que nuestro robot no sobrepase de las medidas, y también los taladros, que es por donde sujetamos la placa a la carrocería del robot. Lo que sí que varía es el largo de la placa, debido, en gran parte, a cómo se hayan distribuido los componentes por dicha placa. El esquema eléctrico es para todas las placas el mismo, y como anteriormente se ha comentado, el valor de las resistencias puede variar, siendo, el que aparece en los esquemas eléctricos, el valor montado o no montado. 7.4.1.- Esquema eléctrico Daniel García Bravo I.E.S. Joan Miró 74 Ciclo Superior de Desarrollo de Productos Electrónicos 7.4.2.- Medidas 7.4.3.- Componentes 7.4.4.- Cara de componentes y de pistas top copper Daniel García Bravo I.E.S. Joan Miró 75 Ciclo Superior de Desarrollo de Productos Electrónicos 7.4.5.- Cara de pistas bottom copper Daniel García Bravo I.E.S. Joan Miró 76 Ciclo Superior de Desarrollo de Productos Electrónicos 7. 5.- Fabricación del mando a distancia 7.5.1.- Esquema eléctrico 7.5.2.- Medidas Daniel García Bravo I.E.S. Joan Miró 77 Ciclo Superior de Desarrollo de Productos Electrónicos 7.5.3.- Componentes 7.5.4.- Cara de componentes y de pistas top copper Daniel García Bravo I.E.S. Joan Miró 78 Ciclo Superior de Desarrollo de Productos Electrónicos 7.5.5.- Cara de pistas bottom copper Daniel García Bravo I.E.S. Joan Miró 79 Ciclo Superior de Desarrollo de Productos Electrónicos 8.- Carrocería Daniel García Bravo I.E.S. Joan Miró 80 Ciclo Superior de Desarrollo de Productos Electrónicos 9.- Lista de componentes y coste económico LISTA DE COMPONENTES DEL VELOCISTA Titulo: Velocista Autor: Daniel García Bravo Numero de componentes: 169 Cantidad Referencia: Valor: Precio Precio Unitario Total 38 Resistencias 18 16 1 2 1 R1, R3, R5, R7, R9, R11, R13-R15, R17, R22, R24, R26, R28, R30, R32, R34, R36 R2, R4, R6, R8, R10, R12, R16, R18, R23, R25, R27, R29, R31, R33, R35, R37 R19 R20, R21 R38 220 0,05 0,9 10k 0,05 0,8 100 4.7k 240 0,05 0,05 0,05 0,05 0,1 0,05 2200uF 100nF 220uF 1uF 15pF 10uF 0,5 0,05 0,2 0,1 0,05 0,05 0,5 0,3 0,2 0,4 0,1 0,05 15 Condensadores 1 6 1 4 2 1 C1 C2, C4, C9-C11, C14 C3 C5-C8 C12, C13 C15 12 Circuitos integrados 1 1 6 1 2 1 U1 U2 U3-U8 U9 U11, U12 U13 LM350K MAX232 Optoacopladores L298 74HC14 PIC16F876 Cantidad Referencia: Valor: 4 4 1,5 1,5 0,35 2,1 3,5 3,5 0,5 1 4,5 4,5 Precio Precio Unitario Total 4 Transistores 4 Q1-Q4 BD139 0,35 1,4 1N4007 Led Verde Led Amarillo 0,2 0,15 0,15 2,2 0,3 0,3 0,01 0,01 15 Diodos 11 2 2 D1, D2, D4-D12 D3, LED RASTREADOR D13, D15 Otros Componentes 1 Daniel García Bravo I.E.S. Joan Miró ANTENA Bornier1 81 Ciclo Superior de Desarrollo de Productos Electrónicos 1 2 6 4 1 3 4 4 2 1 8 1 1 1 4 10 1 3 1 2 4 18 2 BATERIA INICIO, RESET J1, J1A, J2, J2A, J3, J3A J4-J7 J11 JP, JP1, JP21 JUMPER1-JUMPER4 MASA1-MASA4 MDE, MIZ ON-OFF OP1-OP8 RF1 RV1 X1 Br T3 SP Placas Placas Ruedas Fajas Separadores Motores Daniel García Bravo I.E.S. Joan Miró Bornier2 Pulsador Conn-H10 Conn-Sil4 Conn-D9m Bornier de 2 Conn-Sil3 Bornier de 1 Bornier de 2 Interruptor CNY70 Cebek-C-0504 5k Cristal Bridas de Plástico Tuercas de métrica 3 Soporte de plástico Placas de C.I. de 70x75 Placa de C.I. de 148x48 Ruedas de espuma Fajas Separadores de plástico Motores de C.C. 0,3 0,4 0,5 0,1 2,5 0,3 0,15 0,01 0,3 0,4 0,35 7 1 3 0,1 0,02 1 6 2 2,5 0,5 0,05 9 0,3 0,8 3 0,4 2,5 0,9 0,6 0,04 0,6 0,4 2,8 7 1 3 0,4 0,2 1 18 2 5 2 0,9 18 Total 95,1 82 Ciclo Superior de Desarrollo de Productos Electrónicos LISTA DE COMPONENTES DEL MANDO Titulo: Velocista Autor: Daniel García Bravo Numero de componentes: 46 Cantidad Referencia: Valor: Precio Precio Unitario Total 7 Resistencias 6 1 R1E-R6E R7E 220 2.2k 0,05 0,05 0,3 0,05 0,2 0,05 0,4 0,1 4,5 1 4,5 1 BD136 0,35 0,35 Led Amarillo Led Verde Led Rojo 1N4007 0,15 0,15 0,15 0,2 0,3 0,3 0,3 0,2 4 Condensadores 2 2 C1E, C2E C3E, C4E 220uF 15pF 2 Circuitos integrados 1 1 U1E U2E PIC16F876 7805 1 Transistor 1 Q1E 7 Diodos 2 2 2 1 Daniel García Bravo I.E.S. Joan Miró D1E, D5E D2E, D3E D4E, D7E D6E 83 Ciclo Superior de Desarrollo de Productos Electrónicos Cantidad Referencia: Valor: Precio Precio Unitario Total Otros Componentes 1 1 1 5 1 1 1 4 4 4 1 1 ANTENA Bornier1 BATERIA 9 VOLTIOS Bateria RF1 Cebek-C-0503 SW1E-SW5E Pulsadores SW6E Interruptor X1 Cristal Placas Placa de C.I. de 110x50 Separadores Separadores metalicos Tuercas Tuercas M3 Tornillos Tornillos M3 x 10 mm Porta baterias Porta baterias SP Soporte de plástico 110x50 Daniel García Bravo I.E.S. Joan Miró 0,01 1 7 0,2 1 3 2 0,5 0,1 0,1 0,5 1 0,01 1 7 1 1 3 2 2 0,4 0,4 0,5 1 Total 27,11 84 Ciclo Superior de Desarrollo de Productos Electrónicos 10.- Coste económico total Coste del Proyecto Rastreador Tareas Horas Coste por hora (€) Desarrollo Hardware 30 30 Desarrollo Software 25 30 Búsqueda de materiales 4 30 Montaje del prototipo 30 30 Pruebas del prototipo. 50 30 Componentes del velocista Componentes del mando Documentación 20 30 TOTAL 159 - Daniel García Bravo I.E.S. Joan Miró Total (€) 900 750 120 900 1500 95,1 27,11 600 4892,21 85 Ciclo Superior de Desarrollo de Productos Electrónicos 11.- Referencias Título: Compilador C CCS y simulador PORTEUS para Microcontroladores PIC. Autor: Eduardo García Breijo. Editorial: Marcombo. Título: Tecnología de circuitos impresos. Autores: Claudio Fernández González, José Luis Lázaro Galilea, Ignacio Fernández Lorenzo, Jesús Ureña Ureña, Felipe Espinosa Zapata. Editorial: Departamento de electrónica, Universidad de Alcalá Título: Electrónica general. Autores: A. Carretero, J. Ferrero, J.A. Sánchez-Infantes, P. Sánchez-Infantes. Editorial: Editex. Título: Lógica digital y microprogramable. Autores: Fernando Remiro Domínguez, Antonio J.Gil Padilla, Luis M. Cuesta García. Editorial: Mc Graw Hill. Daniel García Bravo I.E.S. Joan Miró 86 Ciclo Superior de Desarrollo de Productos Electrónicos 12.- Anexos técnicos Características del microcontrolador PIC16F876A. Características del LM350K. Características eléctricas del inversor de giro L298. Características de los sensores infrarrojos CNY70. Características del MAX232. Características eléctricas tarjeta emisora de datos CEBEK C-0503. Características eléctricas tarjeta receptora de datos CEBEK C-504. Curso de Robótica y otras aplicaciones en el aula de tecnología. Daniel García Bravo I.E.S. Joan Miró 87