TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

DOCUMENTAÇÃO SISTEMA DE INFORMAÇÃO

Por:   •  15/11/2018  •  Monografia  •  4.788 Palavras (20 Páginas)  •  173 Visualizações

Página 1 de 20

  CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE TAQUARITINGA

ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

TÓPICOS ESPECIAIS EM INFORMÁTICA

SINAL TRÂNSITO INTELIGENTE

FELIPE BOTELHO RODRIGUES

LUCAS MICHELONI ANTEVERE

BRUNO VILELA

TAQUARITINGA

2016

ESCOPO

O ambiente é composto por duas vias: uma rua e uma avenida. Elas são perpendiculares e possuem mão única. Em seu cruzamento, há dois semáforos, um para cada via.

Cada semáforo possui tempos padrões distintos para adequar ao tráfego da via.

O tempo padrão do semáforo da avenida é de 30 segundos, sendo distribuídos em 26 segundos com acesso livre e 4 segundos em atenção.

O tempo padrão do semáforo da rua é de 20 segundos, sendo distribuídos em 16 segundos para acesso livre e 4 segundos em atenção.

Há fatores do ambiente que influenciam no tempo do semáforo: tŕafego, horários de pico e precipitação.

Os horários de picos são das 7:00 às 9:00 e 17:30 às 20:30. Nesses períodos há um acréscimo de 5 segundos no tempo de acesso livre da avenida.

Quando há precipitação, há um acréscimo de 5 segundos no tempo de acesso livre da avenida.

Em relação ao volume de tráfego, as vias possuem diferentes tempos e limites de carro.

Deve-se inserir um acréscimo de 5 segundos no tempo de acesso livre da avenida quando o volume de tráfego for superior a 40 veículos entre os sensores distribuídos na via, e 5 segundos no tempo de acesso livre da rua quando o volume de tráfego for superior a 25 veículos entre os sensores distribuídos na rua.

Ambas as vias possuem o limite de acréscimo de 10 segundos.

Variáveis de acréscimos de tempo no acesso livre das vias

Rua

Avenida

Horários de Pico

7:00 às 9:00 e 17:30 às 20:30

7:00 às 9:00 e 17:30 às 20:30

Volume de Tráfego

maior que 25

maior que 40

Precipitação

qualquer volume

qualquer volume

Acréscimos de tempo no acesso livre das vias

Rua

Avenida

Horários de Pico

-

5s

Volume de Tráfego

5s

5s

Precipitação

-

5s

Limite acréscimo

10s

10s

OBJETIVO

Criar um sistema que gerencie os tempos dos semáforos em duas vias dados as condições variantes do ambiente: precipitação, volume de tráfego e horários de pico

JUSTIFICATIVA

O transito é um fator de muita variação nas cidades, sendo necessário um bom gerenciamento  de tráfego urbano para garantir a fluidez no volume de carros.

O tráfego lento, além de causar irritação nos motoristas, pode acarretar em acidentes de trânsito, problemas na circulação de veículos de urgência (ambulâncias e viaturas policiais) e atrasos nos trabalhos e escolas.

O uso de semáforos inteligentes é uma forma de diminuir a lentidão das vias, gerenciando o fluxo de veículos baseados em variáveis do ambiente, como feriados, climas, horários de picos e outros fatores.

Considerando esses fatos, o Sinal de Trânsito Inteligente gerenciará os tempos dos semáforos a fim de diminuir a lentidão no trânsito e evitar os problemas citados.

CODIFICAÇÃO

O Sinal Inteligente de Trânsito foi desenvolvido utilizando a linguagem JavaScript.

Disponível em: https://goo.gl/rsrbQ0.

window.onload = function(){

        var ambiente = new Ambiente();        

};

/* Representa o ambiente e suas características onde as vias estão. */

function Ambiente(){

        /* Tempo está chuvoso? */

        this.chuva = true;

        /* Lista de horários de picos */        

        this.picos = [];

        /* Novo pico das 7:00h às 9:00h */

        this.inserePico(

                        new Date(2016, 01, 01, 7, 0, 0),

                        new Date(2016, 01, 01, 9, 0, 0)

        );

        /* Novo pica das 17:30h às 20:30h */

        this.inserePico(

                        new Date(2016, 01, 01, 17, 30, 0),

                        new Date(2016, 01, 01, 20, 30, 0)

        );

        /* Lista de semáforos. */

        this.semaforos = [];

        /* Semáforo Rua:

           - 20 segundos tempo padrão;  

           - 2 = inicia verde.

           - 25 carros limite de tráfego

           - FALSE não recebe influência do horário de pico

           - FALSE não recebe influência da chuva

        */

        this.insereSemaforo("RUA", 20, 2, 25, false, false);

        /* Semáforo Avenida:

           - 30 segundos tempo padrão;  

           - 3 = inicia vermelho.

           - 40 carros limite de tráfego

           - TRUE = recebe influência do horário de pico

           - TRUE = recebe influência da chuva

        */

        this.insereSemaforo("AVE", 30, 3, 40, true, true);

        

        /* Atualiza semáforos a cada 1 segundo. */

        setInterval(this.atualiza.bind(this), 1000);        

}

/* As ações do ambiente. */

Ambiente.prototype = {

        atualiza: function(){

                /* Iteração nos semáforos existentes para realizar a atualização. */

                for(var i = 0; i < this.semaforos.length; i++){

                        /* Atualiza o semáforo e verifica se já fechou (retorna false). */

                        if(!this.semaforos[i].atualizaTempo()){

                                /* Abre o outro semáforo. */

                                this.abrirOutro(this.semaforos[i]);

                                return;

                        }

                }

                

        },

        /* Abre o outro semáforo. */

        abrirOutro: function(semaforo){

                for(var i = 0; i < this.semaforos.length; i++){

                        if(this.semaforos[i].nome != semaforo.nome){

                                this.abrirSemaforo(this.semaforos[i]);

                                return;

                        }

                }

        },

        /* Verifica se a hora atual está em algum horário de pico. */

        estaEmHorarioDePico: function(){

                for(var i = 0; i < this.picos.length; i++){

                        if(this.picos[i].estaEmPico(new Date())){

                                return true;

                        }

                }

                return false;

        },

        /* Insere um novo horário de pico. */

        inserePico: function(inicio, fim){

                this.picos.push(

                        new HorarioPico(inicio, fim)

                );

        },

        /* Configura o semáforo como verde. */

        abrirSemaforo: function(s){

                s.setVerde();                

                s.abrir(this.chuva, this.estaEmHorarioDePico());

        },

        /* Insere um novo semáforo. */

        insereSemaforo: function(nome, tempoPadrao, status,

                         limiteTrafego, recebeHorario, recebeChuva){

                var s = new Semaforo(nome, tempoPadrao, limiteTrafego,

                                recebeHorario, recebeChuva);

                if(status == 1){

                        s.setAmarelo();

                }else if(status == 2){

                        this.abrirSemaforo(s);

                } else{

                        s.setVermelho();

                }

                this.semaforos.push(s);

        }        

};

/* Representa um semaforo. */

function Semaforo(nome, tempoPadrao, limiteTrafego, recebeHorario, recebeChuva){

        this.nome = nome;

        /* Identifica se o semáforo está AMARELO (1), VERDE (2) ou VERMELHO (3) */

        this.status = null;

        /* Tempo do sinal amarelo. */

        this.tempoAmarelo = 4;

        /* Representa o tempo padrão no semáforo. */

        this.tempoPadrao = tempoPadrao;

        /* Armazena o tempo para fechar o semáforo quando abre-se o mesmo. */

        this.tempoParaFechar = null;

        /* Representa a quantidade de veículos na via. */

        this.trafegoAtual = 0;

        /* Representa o limite de veículos na via para acrescentar o acréscimo. */

        this.limiteTrafego = limiteTrafego;

        /* Diz se a via recebe acréscimo de tempo reference ao horário de pico. */

        this.recebeHorario = recebeHorario;

        /* Diz se a via recebe acréscimo de tempo referente à chuva */

        this.recebeChuva = recebeChuva;

        /* Armazena a informação se está chovendo no momento. */

        this.estaChovendo = null;

        /* Armazena a informação se está em um horário de pico. */

        this.estaHorarioPico = null;

        /* Representa o limite máximo dos acréscimos. */

        this.limiteAcrescimo = 10;

}

/* Representa as ações de um semaforo. */

Semaforo.prototype = {

        estaAmarelo: function(){

                return this.status == 1;

        },

        estaVerde: function(){

                return this.status == 2;

        },

        estaVermelho: function(){

                return this.status == 3;

        },

        setAmarelo: function(){

                this.status = 1;

        },

        setVerde: function(){

                this.status = 2;

        },

        setVermelho: function(){

                this.status = 3;

        },

        /* Retorna o tempo que o sinal deve ficar VERDE com os ACRÉSCIMOS. */

        getTempoVerde: function(){

                var tempo = this.tempoPadrao - this.tempoAmarelo;

                var acrescimo = 0;

                if(this.estaComTrafegoAlto()){

                        this.write("TRAFEGO +5s | LIMITE CARROS: " + this.limiteTrafego);

                        acrescimo += 5;

                }else{

                        this.write("TRAFEGO +0s | LIMITE CARROS:" + this.limiteTrafego);

                }

                if(this.estaChovendo && this.recebeChuva){

                        this.write("CHUVA +5s");

                        acrescimo += 5;

                }

                if(this.estaHorarioPico && this.recebeHorario){

                        this.write("HORARIO PICO: +5s");

                        acrescimo += 5;

                }

                if(acrescimo > this.limiteAcrescimo)

                        acrescimo = this.limiteAcrescimo;

                var total = tempo + acrescimo;                        

                this.write("TEMPO " + tempo + "s | ACRESCIMO " + acrescimo + "s | TOTAL " + total + "s");

                return total;

        },

        /* Configura o sinal como VERDE. */

        abrir: function(chuva, horarioPico){

                this.estaChovendo = chuva;

                this.estaHorarioPico = horarioPico;

                if(!this.estaVerde()){

                        this.write("NAO PODE SER ABERTO.");

                        return;

                }

                this.tempoParaFechar = this.getTempoVerde();

                this.setVerde();

        },

        /* Atualiza o tempo do sinal. */

        atualizaTempo: function(){

                /* Se ele está vermelho, inserir tráfego na via. */

                if(this.estaVermelho()){

                        this.inserirTrafego();

                        return true;

                }

                /* Se o tempo para fechar não acabou, liberar carros da via. */

                if(this.tempoParaFechar > 0){

                        this.liberarCarro();

                        this.tempoParaFechar--;

                        this.write("VERDE | TEMPO " +        this.tempoParaFechar + "s ");                

                        return true;

                }

                /* Se o tempo para fechar acabou e está dentro do tempo do sinal AMARELO,

                   liberar carro. */

                if(this.tempoParaFechar <= 0 &&

                   this.tempoParaFechar > (this.tempoAmarelo * -1)){

                        this.liberarCarro();

                        this.tempoParaFechar--;

                        this.setAmarelo();

                        this.write("AMARELO | TEMPO " + this.tempoParaFechar + "s ");                

                        return true;

                }

                

                /* Se o tempo de VERDE e AMARELO acabou, fechar o semáforo. */

                this.write("VERMELHO");                

                this.setVermelho();                        

                return false;

        },

        /* Libera carro da via. */

        liberarCarro: function(){

                if(this.trafegoAtual <= 0){

                        this.trafegoAtual = 0;

                        return;

                }

                if(this.trafegoAtual % 2 == 0)

                        this.trafegoAtual -= 1;

                else

                        this.trafegoAtual -= 2;

        },

        /* Insere carros na via. */

        inserirTrafego: function(){

                this.trafegoAtual += 1;

        },

        /* Verifica se o limite de tráfego foi ultrapassado. */

        estaComTrafegoAlto: function(){

                return this.trafegoAtual > this.limiteTrafego;

        },

        write: function(m){

                var l = "SINAL " + this.nome + " | " + m + " | TRÁFEGO: " + this.trafegoAtual + " carros |";

                console.debug(l);

                var log = document.getElementById("log");

                log.innerHTML += "

  • " +  l + "
  • ";

            }

    };

    /* Representa um horário de pico. */

    function HorarioPico(inicio, fim){

            /* Representa a hora de início do horário de pico. */

            this.inicio = inicio;

            /* Representa a hora de fim do horário de pico. */

            this.fim = fim;

    }

    /* Representa as ações de um horário de pico. */

    HorarioPico.prototype = {

            /* Verifica se a hora passada está no horário de pico. */

            estaEmPico: function(data){

                    this.inicio = this.zerarData(this.inicio);                

                    this.fim = this.zerarData(this.fim);                

                    data = this.zerarData(data);                

                    return this.inicio <= data && this.fim >= data;

            },

            /* Desconsidera a data para verificação do horário. */

            zerarData: function(data){

                    return new Date(2016, 0, 1, data.getHours(), data.getMinutes(), 0);

            }

    };

    ...

    Baixar como (para membros premium)  txt (14.1 Kb)   pdf (106.2 Kb)   docx (19.5 Kb)  
    Continuar por mais 19 páginas »
    Disponível apenas no TrabalhosGratuitos.com