objetivo - UTN FRBA
Transcripción
objetivo - UTN FRBA
UNIVERSIDAD TECNOLOGICA NACIONAL Proyecto de Informática II “Ascensor” OBJETIVO El objetivo de nuestro proyecto consiste en comandar un modelo a escala de un ascensor de tres pisos (Planta baja, primer piso y segundo piso) por medio de la PC y de un hardware diseñado para tal fin y que se comunica con la esta mediante una conexión paralela. COMPONENTES UTILIZADOS 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Placas de madera Eje de acero Engranajes de acero Soportes de metal Motor Paso a Paso Carretel Cordón Cables Cable-canal Tres LEDs de 5 mm indicadores de piso Un LED de 5 mm iluminación del ascensor Conectores tipo DB25 macho y genérico de seis patas para motor PAP Hadware, Compuesto por: Plaqueta fibra de vidrio 20 Resistencias varias 1 Integrado SAA 1027 3 Transistores npn bc548 8 LEDs de 3mm 1 Ficha hembra DB25 1 Capacitor 0.1 microfaradio ARMADO y FUCIONAMIENTO Parte Estructural, mecánica y Motora: El armado de la base y estructura principal del ascensor; como el ascensor mismo se realizó en madera de distintos espesores según las partes del mismo, para brindarle una mayor robustez al esqueleto del proyecto y por su fácil utilización. Autores: Morales Juan Jose Vengut Mariano Alberto 1 UNIVERSIDAD TECNOLOGICA NACIONAL Proyecto de Informática II “Ascensor” Esquema de la VISTA FRONTAL Engranaje Cojinetes Motor PAP Cable de alimentación para la luz Cable canal Leds indicadores de piso Luz interior Botonera de comandos P.C. Autores: Morales Juan Jose Vengut Mariano Alberto 2 UNIVERSIDAD TECNOLOGICA NACIONAL Proyecto de Informática II “Ascensor” La parte mecánica está a cargo de un motor paso a paso de 6 conectores. El cual trasmite su potencia electromotriz a través de un sistema simple de dos engranajes. Estos transfieren el movimiento rotativo a un eje donde se encuentra fijado un carretel de madera donde a la ves se enrolla un cordón cuyo extremo está unido al ascensor. Según la señal que se le envíe al motor este girará en uno u otro sentido y se detendrá para parar el ascensor en alguno de los pisos. El ascensor cuenta en su interior de un LED transparente a modo de lámpara de iluminación, el cual se conecta para ser comandado por la PC (previo pasaje por el hardware) mediante un cable tipo resorte sujeto entre el ascensor y la parte superior de la estructura. En el ala izquierda de la torre (o hueco del ascensor) se encuentra un cable-canal que sirve de sujeción para los LEDs indicadores de piso y para pasar los cables que comandan el motor PAP y la luz del elevador con la plaqueta electrónica que se encuentra amurada a la base de la misma. Parte del Hardware: Integrado 7805 que provee alimentación TTL Salida de alimentación para el LED de iluminación del ascensor Conector para alimentación de la plaqueta a 12v Interruptor principal Salidas para los LEDs indicadores de piso Conector Genérico de 6 patas para motor PAP Botón de parada de emergencia Botones de Piso Integrado SAA1027 Transistores Conector DB25 Hembra Resistencias de 300 ohms para protección de las entradas-salidas desde y hacia la PC La parte de hardware encargada de llevar a cabo la comunicación entre la PC y la parte motora, esta montada sobre una plaqueta de fibra de vidrio genérica, Autores: Morales Juan Jose Vengut Mariano Alberto 3 UNIVERSIDAD TECNOLOGICA NACIONAL Proyecto de Informática II “Ascensor” alimentada con corriente continua de 12 v y posee un interruptor principal para el corte general de la energía. Esta compuesta por 4 botones con sus respectivos LEDs que indican cuando estos son presionados. Estos Botones son: Tres “Botones de Piso” que sirven para llevar el ascensor a planta baja, primero y segundo piso respectivamente. Un cuarto botón que sirve de parada de emergencia. Al presionar alguno de los botones de piso se le envía una señal mediante el puerto paralelo a la PC. La cual lo detecta como una interrupción de dicho hardware, y consecuentemente procede a enviar una señal que es interpretada por el integrado SAA1027 encargado de hacer girar el motor y mover el elevador hasta el piso seleccionado. Luego que la PC culmine de enviar esta señal, enviará otra que hará encender el LED indicador del piso correspondiente. En caso de que sea presionado la parada de emergencia el ascensor se detendrá en la posición donde se encuentre y retornara su marcha cuando se vuelva a presionar algunos de los botones de piso. Consta de salidas donde irán conectados los LEDs indicadores de piso y el de iluminación interna del ascensor. Desde la PC se podrá comandar el encendido o apagado de la luz del ascensor. Programa: #include <dos.h> #include <conio.h> #include <stdio.h> #define BASE #define IRQ0 #define IRQ7 #define BDT #define VELOCIDAD 0x378 8 15 1 3 //Posicion del Timer Tick en el vector de Int. //Posicion del LPT1 en el vector de Int. //base de tiempo de int del timer void MIPRINTF(char*, int ,int ,char ); void interrupt far MILPT(void); void interrupt far Handler (void); void INICIALIZO (void); void FINALIZO (void); void RESTAURO (unsigned int); void PISO0 (unsigned int); void PISO1 (unsigned int); void PISO2 (unsigned int); //impresion en pantalla //rutina de int del lpt //puntero a rutina del timer //iniciliza todo el hw //finaliza el hw //decide a que piso ir //para ir a planta baja //para ir al primer piso //para ir al segundo piso void (interrupt far *OldHandler)(void); unsigned char color=3; unsigned char tick=BDT; unsigned char ENTRADAS; unsigned char PARADA=0; unsigned char ENPROGRESO=0; unsigned int PLANTABAJA=0; //pointer para rutina del timer //color de los mensajes //auxiliares para la cuenta del timer //auxiliar para estado de las entradas //flag de parada de emergencia //flag para movimiento en pregreso //posicion de la planta baja Autores: Morales Juan Jose Vengut Mariano Alberto 4 UNIVERSIDAD TECNOLOGICA NACIONAL Proyecto de Informática II “Ascensor” unsigned int PRIMERPISO=848; //posicion del 1 piso unsigned int SEGUNDOPISO=1688; //posicion del 2 piso unsigned int POSICION=0; //contador para la posicion void main(void) { clrscr(); INICIALIZO(); while(!kbhit()) { if(PARADA) { PARADA=0; clrscr(); MIPRINTF("PARADA DE EMERGENCIA",12,20,color+2); // aviso de la parada de emergencia! delay(1000); } while((ENTRADAS==0x07) && (!kbhit())) { clrscr(); MIPRINTF("ELIJA EL PISO AL CUAL IR O CUALQUIER TECLA PARA SALIR",12,20,color); delay(100); } if (ENTRADAS!=0x07) { ENPROGRESO=1; RESTAURO(POSICION); } } FINALIZO(); // restauro todo } ///////////INICIALIZACION DEL HARDWARE//////////////// void INICIALIZO (void) { disable(); OldHandler=getvect(IRQ0); setvect(IRQ0,Handler); outportb(BASE+2, (inportb(BASE+2) | 0x10)); setvect(IRQ7,MILPT); outportb(0x21, (inportb(0x21) & 0x7f)); enable(); outportb(BASE,0Xff); apago) delay(30); outportb(BASE,0x0d); pap) delay(30); return; } //Instala handler //habilito int del LPT en BASE+2 //me cuelgo de la int del LPT //habilito la int del LPT en el PIC //1er. inicializo la placa (prendo luces y //2o. inicializo la placa (apago luces y reset /////////////ISR DEL LPT//////////// void interrupt far MILPT(void) { outportb(BASE,0xff); clrscr(); PARADA=1; outportb(0x20,0x20); } Autores: Morales Juan Jose Vengut Mariano Alberto //prendo todos las luces y apago todo el pap //levanto bandera de parada de emergencia //mando el EOI al PIC !!!!!! 5 UNIVERSIDAD TECNOLOGICA NACIONAL Proyecto de Informática II “Ascensor” //////////FUNCION DE IMPRESION EN PANTALLA////////// void MIPRINTF(char *s,int f,int c,char a) { int i; char far *placa; placa = (char far *)0xb8000000l; placa = 160 * (f - 1) + c * 2 + placa; for(i = 0 ; s[i] != '\0'; i++) { *placa = s[i]; placa ++; *placa = a; placa ++; } } //direccion de la placa de video color //////////FINALIZACION DEL HARDWARE///////////////// void FINALIZO(void) { disable(); setvect(IRQ0, OldHandler); outportb(0x21, (inportb(0x21) | 0x80)); outportb(BASE+2, (inportb(BASE+2) & 0xef)); enable(); outportb(BASE,0x07); exit(0); //restauro las ints del tick //deshabilito la int del LPT en el PIC //deshabilito int del LPT en BASE+2 //no necesito salir de la irq7 por ser propia //APAGO TODO!!!! } //////////////ISR DEL TIMER TICK////////////// void interrupt far Handler(void) { tick--; // fue inicializada en BDT para tener una base de tiempo de X s. if(!tick) // si llego a cero paso X segundos { tick = BDT; // la volvemos a "cargar" ENTRADAS=inportb(BASE+1); } OldHandler(); // Funcion original de la interrupcion // Esta manda el EOI al PIC } ///////ELECCION DEL PISO///////////// void RESTAURO (unsigned int POSICION) { switch(ENTRADAS) //segun las entradas ira al piso { case 0x27: clrscr(); MIPRINTF("ME VOY AL 2 PISO",12,20,color); ENPROGRESO=1; PISO2(POSICION); break; case 0x17: clrscr(); MIPRINTF("ME VOY AL 1 PISO",12,20,color); ENPROGRESO=1; Autores: Morales Juan Jose Vengut Mariano Alberto 6 UNIVERSIDAD TECNOLOGICA NACIONAL Proyecto de Informática II “Ascensor” PISO1(POSICION); break; case 0x0f: clrscr(); MIPRINTF("ME VOY A PLANTA BAJA",12,20,color); ENPROGRESO=1; PISO0(POSICION); break; } } //////LLEVA AL ASCENSOR A PLANTA BAJA/////////////// void PISO0 (unsigned int POS) { POS=POSICION; if(POS!=PLANTABAJA) { if(POS>PLANTABAJA) { while((POS!=PLANTABAJA) && (!PARADA)) { outportb(BASE,0x08); delay(VELOCIDAD); outportb(BASE,0x0c); delay(VELOCIDAD); POS--; } ENPROGRESO=0; POSICION=POS; outportb(BASE,0x18); } } } //////////////LLEVA LA ASCENSOR AL PRIMER PISO//////////// void PISO1 (unsigned int POS) { POS=POSICION; if(POS!=PRIMERPISO) { if(POS>PRIMERPISO) { while((POS!=PRIMERPISO) && (!PARADA)) { outportb(BASE,0x08); delay(VELOCIDAD); outportb(BASE,0x0c); delay(VELOCIDAD); POS--; } ENPROGRESO=0; POSICION=POS; outportb(BASE,0x48); } else { while((POS!=PRIMERPISO) && (!PARADA)) { outportb(BASE,0x09); delay(VELOCIDAD); outportb(BASE,0x0d); Autores: Morales Juan Jose Vengut Mariano Alberto 7 UNIVERSIDAD TECNOLOGICA NACIONAL Proyecto de Informática II “Ascensor” delay(VELOCIDAD); POS++; } } ENPROGRESO=0; POSICION=POS; outportb(BASE,0x48); } } ///////////LLEVA LA ASCENSOR AL SEGUNDO PISO/////////// void PISO2 (unsigned int POS) { POS=POSICION; if(POS!=SEGUNDOPISO) { if(POS<SEGUNDOPISO) { while((POS!=SEGUNDOPISO) && (!PARADA)) { outportb(BASE,0x09); delay(VELOCIDAD); outportb(BASE,0x0d); delay(VELOCIDAD); POS++; } ENPROGRESO=0; POSICION=POS; outportb(BASE,0x28); } } } Autores: Morales Juan Jose Vengut Mariano Alberto 8