Bom, estou tentando fazer um projeto de um controle de um cruzamento com dois semáforos de veiculos (3 leds cada) e 2 de pedestre(2 leds cada)
Como existem várias ideias eu acabei mesclando algumas e adicionando algumas, o diferencial desse semáforo são os sinalizadores azuis para deficientes 1 em cada semáforo de veiculo.
A ideia eu peguei de um tópico daqui:
http://labdegaragem.com/forum/topics/sem-foro-inteligente-arduino?c...
aos trancos e barrancos consegui fazer do meu modo ( sou iniciante no arduino ou programação em geral)
O problema foi quando tentei adicionar um sensor( na verdade um botão que simula um sensor) que fará a contagem de veículos em cada sinal e adicionará maior tempo ao sinal verde da rua com maior fluxo ( nada complicado, só a contagem, a que tiver mais que 9 veiculos e maior quantidade que a rua oposta recebe mais tempo no sinal verde)
Por nada consigo fazer isso, tentei diversas formas...
Eu tentei não usar o comando "delay" nos ciclos do semáforo, mas admito que não entendi muito bem a lógica usando o "millis" e intervalo ( a pesar de eu ter usado um pouco)
enfim se alguém puder me ajudar, agradeço
meu sketch:
OBS: não cheguei a adicionar o Sensor 2, porque não consegui fazer o primeiro funcionar
OBS²: Estou utilizando o Arduino Mega 2560
Tags:
Boa tarde DSB,
De mais informações sobre seu projeto.
Por exemplo qual deve ser a sequencia de acendimento dos LEDs, qual arduino está usando, etc etc.
analisei seu código e vi que bastante coisa pode ser melhorada.
O que senti muita falta foi de comentários nas linhas de código.
Esta é uma prática (comentar linhas) muito salutar e no futuro ajuda a você que escreveu o código lembrar
pra que escreveu aquela linha e pra quem vai te ajudar, o que vc pensava qdo escreveu a linha.
Agora em termos de funcionamento, acho que vc pode melhorar muita coisa.
Por exemplo:
Não precisa de port independente para os LEDs de pedestres, já que eles são sincronizados com os de carros.
Não precisa de port para os LEDs de um lado e o outro da rua, pois eles também são sincronizados.
Só o amarelo precisa de um port para cada um.
Não entendi bem o uso do LED azul.
RV
A sequencia que vi do seu projeto é assim:
1
Carros Lado 1 Lado 2 Pedestres 1 Pedestres 2
Vermelho Apagado Aceso Apagado <--< Apagado <--< igual vermelho 1
Amarelo Apagado Apagado
Verde Aceso Apagado Aceso <--< Aceso <--< igual vermelho 2
2
delay
Carros Lado 1 Lado 2 Pedestres 1 Pedestres 2
Vermelho Apagado Aceso Apagado <--< Apagado <--< igual vermelho 1
Amarelo Aceso Apagado
Verde Apagado Apagado Aceso <--< Aceso <--< igual vermelho 2
3
delay
Carros Lado 1 Lado 2 Pedestres 1 Pedestres 2
Vermelho Aceso Apagado Aceso <--< Aceso <--< igual vermelho 1
Amarelo Apagado Apagado
Verde Apagado Aceso Apagado <--< Apagado <--< igual vermelho 2
4
delay
Carros Lado 1 Lado 2 Pedestres 1 Pedestres 2
Vermelho Aceso Apagado Aceso <--< Aceso <--< igual vermelho 1
Amarelo Apagado Aceso
Verde Apagado Apagado Apagado <--< Apagado <--< igual vermelho 2
5
delay
Carros Lado 1 Lado 2 Pedestres 1 Pedestres 2
Vermelho Apagado Aceso Apagado <--< Apagado <--< igual vermelho 1
Amarelo Apagado Apagado
Verde Aceso Apagado Aceso <--< Aceso <--< igual vermelho 2
RV
Bom, vamos lá.
Primeiramente, muito obrigado por me responder.
1- O funcionamento básico deve ser idêntico a um semáforo convencional, assim ele possui os três sinalizadores, verde, amarelo e vermelho, os sinalizadores dos pedestres; verde e vermelho. Estes sinalizadores possuem um tempo pré-determinado para que os Leds se apaguem e acendam.
2- O led azul é para quando o botão que fica junto ao semáforo for acionado
A ideia é que luz azul sirva para que os motoristas saibam que que alguém com necessidades especiais irá atravessar, então teoricamente ele irá ficar junto aos 3 sinalizadores padrões para veículos.
3- Quando o botão for pressionado o led azul só acenderá junto ao led vermelho, ou seja, quando o sinal estiver fechado para os veículos.
Também serão acrescidos alguns segundos extras para travessia do pedestre com deficiência.
Como serão 2 semáforos de veículos e 2 de pedestre, que estarão fazendo o controle de um cruzamento, então acho que a lógica deveria ser a seguinte:
1ª situação
Semáforo 1 Veículo – Verde >>>>>>>>>>>>>> Semáforo 2 Veículo - Vermelho
Semáforo 1 Pedestre – Vermelho >>>>>>>>>>> Semáforo 2 Pedestre – Verde
2ª situação
Semáforo 1 Veiculo – Amarelo >>>>>>>>>>>> Semáforo 2 Veiculo – Vermelho
Semáforo 1 Pedestre – Vermelho >>>>>>>>>>> Semáforo 2 Pedestre – Verde
3ª situação
Semáforo 1 Veiculo – Vermelho >>>>>>>>>>>> Semáforo 2 Veiculo – Verde
Semáforo 1 Pedestre – verde >>>>>>>>>>> Semáforo 2 Pedestre – Vermelho
4ª situação
Semáforo 1 Veiculo – Vermelho >>>>>>>>>>>> Semáforo 2 Veiculo – Amarelo
Semáforo 1 Pedestre – Verde >>>>>>>>>>> Semáforo 2 Pedestre – Verde
Aí tem a situação após o botão pressionado que eu não tenho certeza se entram como situações a parte.
5ª situação
Semáforo 1 Veiculo – Vermelho + Azul >>>>>>>> Semáforo 2 Veiculo – Verde
Semáforo 1 Pedestre – Verde >>>>>>>>>>> Semáforo 2 Pedestre – Vermelho
6ª situação
Semáforo 1 Veiculo – Verde >>>>>>>>>>> Semáforo 2 Veiculo – Vermelho + Azul
Semáforo 1 Pedestre – Vermelho >>>>>>>>>>> Semáforo 2 Pedestre – Verde
A outra parte do projeto é o “sensor”, no caso vai ser um botão (push button) que simula a leitura do volume de trânsito.
São 2 botões, cada um simulando sensores que fariam a leitura e cada lado do cruzamento.
No código que postei não coloquei todas essas coisas porque não consegui, então tentei fazer o mais básico primeiro e depois ir modificando.
Entendo a observação que fez sobre o código que fiz, até porque fui improvisando muita coisa pra compensar o que eu não conseguia ou não sabia fazer... Então acabou virando uma salada.
Mas enfim, se puder me orientar eu agradeço muito.
Boa tarde DSB,
fiz aqui a montagem do seu projeto para entender o que vc já fez.
O funcionamento básico dos sinais estão funcionando corretamente.
Agora vamos às minhas dúvidas:
1: sobre o LED Azul:
Ao apertar o botão ( e segurar apertado) vc quer que o tempo do sinal verde de pedestre
qdo abrir, fique x segundos maior do que o tempo normal. É isto?
2. Não entendi bem a questão da quantidade de veículos.
Qdo o sinal está verde vão passando veículos, se a qtde for maior do que a contagem anterior do outro
sinal, acrescenta x segundos no verde. É isto?
RV
Boa noite
1: exatamente isso...
2:Correto também, é que da forma que escrevi fez parecer que os dois fariam a contagem ao mesmo tempo...
Faz a contagem, guarda o valor para ser comparado com o outro contador, após a comparação se um dos contadores tiver o dobro de contagem será acrescido a este 5s no sinal verde.
Basicamente é uma simulação controle de fluxo de transito, faz a leitura e acrescenta mais tempo ao sinal aberto(verde) para a via com maior volume de transito.
Bom dia DSB,
veja se este sketch te ajuda.
É um pouco complexo, mas qq dúvida pode perguntar.
Não usei delays, para poder atender as rotinas de especiais e contagem.
RV
Boa noite.
Não entendi muito bem a lógica envolvendo as variáveis; "bool", "unsigned long intervalo" e "byte"
eu sei que a intervaloVD, por exemplo é o tempo para fazer o ciclo dos leds, mas não entendo a lógica de ativação usando "bool flag_1" por exemplo... e a não entendi porque usou o byte... Se puder me ajudar a entender
tirando isso, achei bastante interessante a forma que montou, porque estou acostumado a ver codigos onde a maior parte da lógica está dentro do loop, e você criou varias funções e depois só chamou no loop
Boa tarde DSB,
para organizar um código é sem bom separar as atividades (funções).
Isto ajuda "visualizar" o código com mais facilidade,
e diminui o uso de repetições desnecessárias.
Sobre bool (booleana) vou explicar aqui.
bool é um tipo de variável que só admite 2 situações ou é verdadeira( True) ou falsa( false).
O uso de bool estabelece alguns bloqueios necessários à alguma lógica de fluxo de um programa
de uma forma simples.
Vou mostra no caso do seu programa:
Ao pressionar o botão 1 eu digo para uma variável bool, que dei o nome, "flag_1" que ela terá
o valor de "true".
No fluxo do programa (void controleTempo() ) eu testo se "flag_1" = "true".
Se for, eu então defino que qdo acender o vermelho o azul tb tem que ser acendido.
E para criar esta situação e informar através da variável bool "espec_1 ".
Antes de acender o vermelho, vou verificar se o botão foi pressionado. Se "espec_1 " = "true",
se for, acende o azul tb.
QQ dúvida ainda, pode perguntar.
Sobre o uso de byte. É uma forma reduzida de usar um só valor para todas situações.
Como um byte tem 8 bits, e eles podem ser ligados (bitSet() 1) e desligados(bitSet() 0) ou bitClear(),
individualmente, fica um código mais limpo.
Espero ter ajudado.
RV
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por