Este documento resume la práctica 1 del laboratorio de sistemas adaptativos. El objetivo de la práctica era simular el funcionamiento de un cruce vehicular mediante un sistema que regula automáticamente el tiempo de los semáforos dependiendo del tráfico. Se diseñó el cruce, la solución y el código en Java con tres clases: Carro, Ciudad y Semáforo. La interfaz gráfica muestra imágenes del cruce y un botón para activar y desactivar el movimiento de los vehículos.
Simulador de cruce vehicular con semáforos inteligentes
1. Laboratorio de Sistemas Adaptativos
Martes – M4.M5
Angel Rodolfo Reyna Acevedo 1459652
Lucía Guadalupe Moyeda Cornejo 1145154
Adrian Vega Magaña 1497896
Lucero Itzel Ramos García 1491994
2. El objetivo de la Practica #1 del Laboratorio de
Sistemas Adaptativos consiste en un sistema que
simule el funcionamiento de un cruce vehicular y
que regule automáticamente el tiempo de
semáforo que tiene cada calle.
El sistema simula la interacción entre las 4 calles:
A,B,C y D(con sus restricciones). Aleatoriamente
se le agregan carros a los carriles. Y dependiendo
del carril con mas carros se van asignando los
tiempos y van “saliendo” los carros.
3. Diseño del Cruce
Diseño de la Solución
Código
4.
5.
6. El comportamiento de los carros ya ha sido definido por
medio de la tabla. Aparte del comportamiento, hemos
analizado la solución para ser programada en JAVA y
sabemos que debemos de generar tres clases: Carro,
Ciudad y Semáforo.
Carro de lo único que se encargara es de cuando agregar
un nuevo carro al carril y de verificar cuando puede salir
un carro. Ciudad lo único que hace es la carga de los
gráficos y de iniciar el hilo de semáforo. Y por último,
Semáforo se encargara de asignar los tiempos y de recibir
de Carros la cantidad de carros que hay en X carril. El
semáforo tiene un máximo y mínimo de tiempo de la luz
verde así como el de asignar el tiempo utilizando razón y
proporción.
7. private static final long serialVersionUID = 1L;
private ImageIcon fondo;
private JPanel base;
private JLabel glu;
private JButton btn;
private void Cargar()
{
◦ this.setDefaultCloseOperation(EXIT_ON_CLOSE);
◦ fondo = new ImageIcon("calles.jpg");
◦ base = new JPanel();
◦ glu = new JLabel(fondo);
◦ glu.setBounds(0,0,550,550);
◦ base.add(glu);
◦ btn = new JButton("Activar");
◦ btn.setBounds(200,200,30,90);
◦ base.add(btn);
◦ this.add(base);
◦ this.setVisible(true);
◦ btn.addActionListener(this);
◦ una = false;
}
8. La GUI en este demo es bastante simple, ya que
el objetivo de la practica era el buen manejo de la
información de los carriles, entonces decidimos
mantener la interacción con el usuario casi nula,
con solo una imagen de un cruce de calles y un
botón que activa o desactiva el movimiento de
los carros.
En este caso, la carga de la GUI se hace en la
clase Ciudad, en el constructor se definen las
dimensiones, en carga se instancian las clases
necesarias, como JPanel, JButton, etc. Y se
agregan a la interfaz para hacer visibles estos
componentes. También usando un ActionListener
para activar o desactivar el demo
9. Con la creación de la tabla del comportamiento, la
programación de todos los aspectos a tomar en cuenta fue
mucho mas fácil.
Nos limitamos a simular un comportamiento de vehículos
que avanzaban derecho y otros que giraban a la derecha,
este ultimo no es tan notorio, dado que arrojamos datos a
la consola sobre salidas, longitudes de carriles, entradas.
Hacer un comportamiento mas grafico nos pareció un
valor agregado del cual no tuvimos la oportunidad de
completar como lo buscábamos, pero toda la información
y comportamiento sobre entradas y salidas de vehículos,
así como el movimiento de las luces, fue lo mas apegado
posible a lo real y a la tabla que presentamos inicialmente.
10. Para la realización de este programa nos
basamos en conocimientos adquiridos en
POO y TPOO e hicimos algunas consultas al
libro "Java para estudiantes" 7a ed y a la
pagina www.java2s.com
Las imágenes utilizadas en todo el proyecto
fueron creadas por los integrantes del
equipo.