objetivo - UTN FRBA

Comentarios

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

Documentos relacionados