Ok. Elcids, obrigado pela atenção, no meu caso seria uma escada com 6 degrau com fitas de Led em baixo de cada degrau, assim quando eu passar pelo sensor acender os 6 degraus em intervalos de 1 segundos cada e apagar por um tempo que comece a contar na hora que eu chegar la em cima ou vi si e verso.

Exibições: 2265

Responder esta

Respostas a este tópico

olá Eliseu.

      Fiz a implementação que vc sugeriu (lá no tópico do Lucas, no link  "Lâmpadas Automáticas no Corredor"  ), com 6 Lâmpadas (ou Fitas LED, se preferir), em uma escadaria.

      Deixei o código configurável, e vc poderá alterar a quantidade de Lâmpadas facilmente, e isto ajudará muito quem quiser usar uma quantidade diferente da que vc está usando (no caso 6).

      A implementação foi também testada no Proteus, o que ajuda muito já que pode-se ver a coisa funcionando sem precisar montar os circuitos (o que demora bem mais tempo, e é mais difícil de alterar).

      No Proteus utilizei um Arduino Nano. Mas seja na simulação ou na implementação real, vc poderá compilar o código para outros Arduinos, UNO, Mega, Due, ESP, etc (lembrando de alterar no código os números dos pinos para cada tipo de Arduino). Claro, se for usar mais Lâmpadas, os Arduinos com mais saídas serão mais adequados. Mas se for interessante, posso publicar posteriormente, uma versão que utiliza o I2C para facilmente vc conseguir aumentar bastante o número de Lâmpadas no Arduino UNO, Nano (seria mais barato que usar o Mega ou Due). Esta versão com I2C também seria interessante para o ESP8266 ou ESP32, já que estes também não tem muitos pinos disponíveis. Ela seria adequada também mesmo para o Mega ou Due, pois o I2C poderia simplificar as ligações elétricas para qualquer placa que vc use.

      A implementação necessitou de duas Máquinas de Estados (na verdade são três, pois tem uma "menor" que gerencia o sensor Dia/Noite, exatamente como na implementação que fiz para o Lucas).

      As Máquinas concorrem entre si, e gerenciam de forma independente o sequenciamento das Lâmpadas da escadaria. Uma Máquina gerencia quando alguém sobe pela escadaria, e outra Máquina quando alguém desce.

      O Diagrama de Estados é idêntico para as duas Máquinas. Cada Máquina controla Lâmpadas "virtuais", que nada mais são do que estados lógicos ON/OFF. E portanto cada Máquina tem suas próprias Lâmpadas "virtuais". Uma função externa às Máquinas, então trata de atualizar as Lâmpadas "reais", conforme o estado lógico das Lâmpadas "virtuais". Da mesma forma, outra função externa às Máquinas, encaminha de forma seletiva para cada Máquina, os eventos gerados pelos Sensores de Passagem. No Diagrama de Estados há mais detalhes sobre isso, e no código também.

      O Diagrama pode ser visto na figura a seguir:

(clique na imagem para "zoom")

      A implementação no Proteus pode ser vista na figura a seguir. O print foi feito logo após o código ser executado:

(clique na imagem para "zoom")

      Observe que no Monitor Serial do Arduino, são mostrados os parâmetros atuais utilizados. Estes parâmetros podem ser facilmente definidos no programa, e a maioria deles está definida logo no início do código (lá está tudo comentado e explicado).

      Vou fazer uma explicação rápida sobre alguns destes parâmetros (alguns são iguais aos que utilizei no caso do Lucas). Mas alguns dispensam explicações (como o total de Lâmpadas).

      1) "liga/desliga na mesma direção" . Você pode determinar se as lâmpadas desligam na mesma sequência que acendem,  ou na sequência contrária. Claro, essencialmente isso tem apenas efeito estético, mas alguns irão preferir a mesma sequência, e outras pessoas a sequência contrária.

      2) "Timeout para desligar" . Se por algum motivo o sensor de passagem final não for acionado (por exemplo a pessoa ficou parada em algum degrau), então após um tempo de Timeout, o Sistema inicia a sequência de desligamentos automaticamente. Isto garante que ao final das contas, as Lâmpadas fiquem desligadas, evitando desperdício de energia.

      3) "Tempo estendido" . Se a sequência de desligamento estiver em progresso, e o sensor de início for acionado, então o Sistema mantém as Lâmpadas acesas por um tempo estendido, para permitir que uma outra pessoa percorra a escadaria na mesma direção.

      4) "Sensor Lock" . Esta funcionalidade pode ser habilitada ou desabilitada no código. Ela funciona da seguinte forma: se uma das Máquinas de Estados está ligando as Lâmpadas (ou seja, alguém está passando pela escadaria), então esta Máquina pode requisitar acesso exclusivo ao Sensor de Passagem que indicará que a sequência de desligamentos deve ser iniciada. Você pode escolher a partir de qual Lâmpada quer que isso ocorra. Exemplo: se vc determinar que o "Sensor Lock" será a partir da Lâmpada 5, então quando esta Lâmpada ligar, o efeito descrito irá ocorrer (ou seja, o Sensor de Passagem final será direcionado exclusivamente para a Máquina que está ligando as Lâmpadas). Quando a sequência de desligamentos é iniciada, a Máquina sempre desativa o "Sensor Lock". O "Sensor Lock" poderá ser útil em certas condições que possam ocorrer na utilização diária da escadaria.

      5) "debouncing dos Sensores" .  Há um mecanismo no Sistema, que ignora acionamentos consecutivos que ocorram em intervalos muito curtos. Por exemplo nesta situação: duas pessoas entrando pelo mesmo lado da escadaria, passam pelo Sensor uma atrás da outra, ocasionando disparos consecutivos num intervalo curto. Neste caso, o mecanismo irá ignorar estes disparos, e irá considerar apenas um único disparo. Assim, o tempo de "debouncing dos Sensores", é justamente o período de tempo que disparos são ignorados, imediatamente após um disparo ter ocorrido. No Programa, este tempo está atualmente em 2 segundos, e pode ser alterado conforme a necessidade, podendo ser encontrado junto às rotinas que tratam dos Sensores de Passagem.

      6) "debouncing para Dia/Noite". É comum em sensores que indiquem dia ou noite, que ocorram indicações errôneas, devido a oscilações de diversas origens (sombra temporária, anoitecer lento, amanhecer lento, etc). Assim quando ocorre uma alteração na indicação do Sensor Dia/Noite, o Sistema aguarda um período de tempo para confirmar que aquela mudança realmente ocorreu. Então, se após esse tempo a mudança é confirmada pelo Sensor, ela realmente passa a ser considerada pelo Sistema. No código este tempo está em 10 segundosúnica e exclusivamente para facilitar os testes (afinal não dá pra ficar esperando muito tempo pra testar se a coisa está operante). Mas certamente será preciso mudar este tempo para um valor maior, talvez 1 minuto ou mais (vai depender das condições físicas onde o Sensor Dia/Noite  está instalado). Este tempo, está definido junto às rotinas que tratam do Sensor Dia/NoiteImportanteno código, este tempo é especificado em segundos, e para colocar por exemplo 2 minutos, deve-se setar o valor em 120 segundos.

      7) "LED Alive habilitado". Um LED "Alive" indica que o Sistema está operante, através de um lampejo bem curto e cíclico. Ele indica também se o Sistema está no período "Dia" ou no período "Noite". No período "Dia", o LED "Alive" pisca uma vez a cada 3 segundos, e no período "Noite" pisca uma vez a cada segundo.

      Veja que tanto o Sensor Dia/Noite, como o LED "Alive", podem ser facilmente desabilitados, caso não sejam implementados no Hardware. Estas opções para habilitar/desabilitar, estão logo no início do código, facilmente encontráveis.

      Observe também, que os tempos podem ter valores fracionários. Isto permite um ajuste fino, por exemplo, no intervalo de tempo entre os acendimentos e apagamentos das Lâmpadas, permitindo-se adequar o sequenciamento das Lâmpadas para a melhor situação possível.

      Importante: ao fazer os testes no Proteus, é preciso lembrar que os acionamentos dos sensores de passagem (que na simulação é feita através de botões), devem ser feitos considerando-se uma situação real, pois o comportamento do Sistema foi pensado para tentar atender as necessidades reais.

      No arquivo zipado que estou postando, se encontra o código do Arduino, os arquivos para simulação no Proteus, e os arquivos do Diagrama de Estados (formato Visio e PDF).

      Segue o arquivo:   Luzes_Automaticas_02.zip

      Uma ideia que pode ser interessante:  usar um trimpot ou potenciômetro para ajuste fino do intervalo de tempo para a sequência de acionamentos das Lâmpadas. Isto pode ser prático para ajustes, e é relativamente simples de implementar. Mas se for fazê-lo, deve-se tomar o cuidado para não corromper a lógica e temporização de funcionamento das Máquinas de Estados do Sistema. Além disso, veja que a variação do trimpot (ou potenciômetro), deveria ser usada para ajustar apenas uma parcela do intervalo de tempo, e não o intervalo de tempo completo. Se for de interesse, posso postar uma versão com essa característica.

      Espero que a implementação atenda à maioria dos casos. Caso tenha alguma dúvida ou comentário, não deixe de fazer.

      Abrçs,

      Elcids

Elcids, desde já agradeço o seu tempo por nos ajudar em nossas dificuldade, muito interessante essa ideia do potenciômetro gostei, assim não precisaria ficar mexendo no código para aumentar os Delay dos degraus, ficou muito deis a sua implementação, obrigado.

só uma pergunta, qual seria o sensor ideal de passagem para minha instalação, pensei no sensor IR, mas minha escada tem uma parede do lado direito e do lado esquerdo e a grade de proteção?

informações adicionais:

     - o valor "CONT_lock" definido logo no início do código, se refere à funcionalidade "Sensor Lock" que descrevi no post anterior (quando expliquei sobre os parâmetros). Assim, para que o "Sensor Lock" atue a partir de uma certa Lâmpada, o valor "CONT_lock" deve ser setado com o número dessa Lâmpada, considerando uma numeração crescente (mas o "Sensor Lock" irá atuar em ambas direções da escadaria). Esclarecendo: "CONT_lock" = Contagem de Lâmpadas para o "Sensor Lock".

     - para desativar o "Sensor Lock", basta colocar para o "CONT_lock" qualquer valor maior que o número total de Lâmpadas do Sistema (no código está descrito isto).

     - para alterar o total de Lâmpadas do Sistema, basta mudar a quantidade definida em "total_LAMP", e alterar (retirar ou acrescentar) os números dos pinos na Lista  "pino_LAMP". Observe que não é necessário configurar os pinos, pois o código fará isso automaticamente.

      Encontrei uns três comentários incorretos no programa (onde troquei "entrada" por "saída", e "desliga" por "liga"), mas o código está correto. Então isso não afeta o funcionamento do Sistema. Quando fizer uma atualização, irei corrigir estes comentários.

      Abrçs

      Elcids

olá Eliseu,

    Sobre a implementação dos sensores, deve-se avaliar qual a mais adequada para cada caso. Obviamente a opção mais "simples",  é justamente usar emissores e receptores de luz, normalmente infravermelho (os famigerados "IR"). Hoje em dia, é fácil encontrar LEDs emissores e Diodos receptores infravermelhos, e a baixo custo.  Neste caso, apenas adeque a corrente do LED emissor, de forma a obter uma intensidade no feixe de luz infravermelha, que garanta uma boa confiabilidade para a detecção da passagem (ou seja, quando o feixe é interrompido, nenhuma outra fonte de Luz infravermelha deve acionar o receptor).

      No seu caso que tem duas paredes (acho que é um caso bem comum), para a montagem pode-se usar uma das opções mostradas a seguir:

      Atente para a altura "H" mostrada nas figuras. Ela deve ser tal que se garanta a detecção da interrupção do feixe de luz, quando alguém passar por ali. Se for muito baixa, poderá acontecer que passadas longas não interrompam o feixe, e também poderão ocorrer acionamentos pelos animais da casa (gatos, cachorros, etc), os quais normalmente não precisam de iluminação na escadaria (e provavelmente é até incômodo para eles).

      Sobre a segunda figura, a reflexão na parede é importante. Então artifícios podem ser usados, como pequenos espelhos tipo "pastilhas", muito comuns hoje em dia e facilmente aplicáveis numa parede lisa.

      Mas é um trabalho prático, e cada caso deverá ver qual a solução mais adequada.

      É possível também usar um Emissor/Receptor de Ultra-Som, tipo HC-SR04, conforme na figura a seguir:

      Esta opção com ultra-som, é interessante. Mas cuidado deve ser tomado para que o sensor em uma extremidade da escadaria, não afete o que está na outra extremidade. Também o sinal emitido, pode ser perturbador para animais de estimação (principalmente os cães), pois o sinal de Ultra-Som estará sendo constantemente emitido a intervalos muito curtos. E uma lógica com uma certa "esperteza", deverá ser implementada para detectar que o sinal foi interrompido (certamente uma Máquina de Estados seria a forma mais simples e confiável de fazer isso).

      E claro, na implementação no código, não deve ser utilizado a função "delay" para detectar o sinal do Sensor de Ultra-Som (para evitar corromper temporizações existentes). Se for implementar, use temporização com o "millis" (como foi feito no LED "Alive")

      Aliás, o "delay" normalmente deve ser evitado na implementação de Sistemas "reais" (a não ser que se tenha certeza de que não irá corromper qualquer outra temporização). E nem precisa ser usado, não é?  Praticamente todas as temporizações podem ser feitas com o "millis" ou "micros" (e no caso de maior precisão pode-se usar Timers e Interrupções).

      Sobre a versão com trimpot (ou potenciômetro) como opção para ajuste do intervalo de acendimento, irei publicar por esses dias.

      Espero ter ajudado.

      Abrçs,

     Elcids

obrigado Elcids pela as ideias dos sensores, vou implementar uns deles valeu...

Para ilustrar o seu projeto ( video sugerido por um colega do Lab):

Obrigado  José Gustavo Abreu Murta vou da uma olhada, valeu

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço