Boa noite,

   Peguei este projeto da internet e gostaria de colocar um temporizador nele, porque não aguento ver ligado a noite inteira.

   Iria funcionar da seguinte forma, usando um pushbotton para dar inicio ao timer e ao mesmo tempo acender os led´s, seria programado com 30min.

  Se puderem me dar uma ajuda eu agradeço.

  Este é o código do projeto arcoiris.ino.

 

Exibições: 256

Anexos

Responder esta

Respostas a este tópico

Boa noite Valentina, tente utilizar Timers(interrupções do arduino) ao invés de Delay(), através do Timer você consegue fazer a contagem de tempo que precisa e assim desenvolver o seu temporizador de 30minutos:

https://www.youtube.com/watch?v=Uv9UeYUsA8A

https://www.youtube.com/watch?v=BHa6u096Svo&t=148s

olá Valentina.

      Sei que o RV  é muito competente para implementar isso, e que talvez ele esteja com os dedos comichando, mas mesmo assim vou postar uma implementação deste seu Sistema, partindo do código original que vc postou aqui. Afinal uma visão diferente é sempre vem vinda e a diversificação ajuda as pessoas a aprenderem técnicas diferentes.

      O código está disponível para download no final deste post.

      A implementação segue a mesma sequência de Cores  que vc postou, e vc pode facilmente alterá-la no código.

      A duração da "animação" do sequenciamento de Cores  está em 30 minutos (o tempo que vc sugeriu), mas vc pode facilmente alterar isso no código, conforme mostrado na figura a seguir:

(clique na figura para "zoom")

      Como vc não especificou o pino  onde o Botão  seria ligado, usei o pino "4" do Arduino, mas vc pode facilmente alterar isso conforme desejar. A figura a seguir mostra esta definição logo no início do código:

(clique na figura para "zoom")

      A ligação do Botão é feita entre o pino especificado e o GND do Arduino,  sendo usado o "Pullup interno" daquele pino. Vc pode ver isso na figura a seguir:

(clique na figura para "zoom")

      O circuito da figura anterior, foi capturado do Proteus, ou seja, também implementei uma simulação para testar o funcionamento. Esta simulação também está disponível para download no final do post. Lembrar que a simulação executa em um "tempo virtual", e portanto quando os LEDs são acionados via PWM, vc consegue ver alguns efeitos pisca-pisca destes LEDs, mas isso só ocorre na simulação.

      Na figura a seguir, vc pode ver a função de nome "executa_ciclo_Sequencia_Cores", onde cada Cor é sequencialmente setada:

(clique na figura para "zoom")

      Note que na figura anterior, marquei em azul onde a primeira cor é setada (na linha 130), e em amarelo (na linha 132) onde é especificado o tempo que esta cor fica visível (está em mili-segundos, no caso "1500" para 1.5 segundos, ou seja, um segundo e meio).

      Veja que o restante da função é uma repetição  destas duas linhas em azul e amarelo, onde cada cor é setada e então aguardado o tempo individual para aquela cor.

      Observe que vc pode "encerrar" antes que termine o tempo total da duração do Sequenciamento (no caso 30 minutos).  Para isto basta acionar novamente o Botão. Quando vc faz isso, o Sistema apenas conclui o Sequenciamento atual e então termina. Mas depois disso, vc pode reiniciar a qualquer momento, bastando acionar novamente o Botão (e claro, será iniciado e contado o tempo de 30 minutos  novamente).

      Em suma, o Botão permite vc iniciar o Sequenciamento de Cores na duração definida,  mas permite também que vc "aborte" isso.

      O código está aqui:   "Arco_Iris_02.zip"

      E os arquivos da Simulação aqui:  "Simulacao_Proteus.zip"

      Caso tenha alguma dúvida, não deixe de perguntar.

      Espero ter ajudado,

      abrçs,

      Elcids

Bom dia pessoal.

este mês está bem difícil responder os posts aqui.

Estão em minha casa:

2 filhos, uma nora, 2 netos então o LdG vai ficar devagar......

  Sei que o RV  é muito competente para implementar isso, "   kkkkkkkkkkkkk  mas tô devagar...

Rv mineirin

Liga não RV,

Eu também não consigo tempo para responder muita pergunta aqui.

  Sei que o RV  é muito competente para implementar isso, " == TRUE STATEMENT

Muita saúde a todos!

  'Eiju

Boa noite, Elcids Chagas

 Carreguei o código no arduino, mas o temporizador não funcionou. Ele fica ligado direto. Estou usando o arduino nano.

Olá Valentina.

      Testei o código via Simulador, e funcionou como esperado.

      Mas vou gravar em um Arduino Nano  pra verificar. E se estiver funcionando , posto um vídeo mostrando.

      Nota:  preparei uma "versão Turbinada" deste Sistema, que estarei publicando logo mais. Esta nova versão tem funcionalidades interessantes, como por exemplo alterar o próprio tempo total  através do Botão.

      Abrçs,

      Elcids

olá novamente Valentina.

      Gravei o código no Nano. Testei com três tempos diferentes:  1 minuto10 minutos, e com 30 minutos.  E todos funcionaram exatamente como na Simulação.

      Gravei um vídeo do funcionamento para 1 minuto (apenas para ficar um vídeo curto e com tamanho de arquivo "pequeno").  No vídeo eu aciono o Botão  e aguardo o tempo de 1 minuto para conferir que o Sequenciamento das Cores é parado. Vc vai notar que leva pouco mais de 1 minuto, pois quando dá o tempo programado , o Sistema conclui o Sequenciamento atual em curso antes de parar (o tempo de um ciclo de Sequenciamento é de cerca de 19 segundos, pois são 13 cores e cada uma demora 1.5 segundos).

      O vídeo pode ser visto aqui:   "Arco_Iris - tempo_1_minuto"

      Como vc deve ter visto no vídeo, usei um LED RGB  e coloquei um saquinho plástico cobrindo este LED pra diminuir o efeito da intensidade luminosa na câmera do celular.

      Assim, como eu gravei o código e testei o mesmo, peço que vc verifique se realmente gravou o código que postei, pois vi que a algum tempo atrás vc teve problemas para gravar códigos justamente no Nano.

      Aproveito para perguntar: qual comprimento dos fios vc deixou entre o Botão  e a placa do Arduino Nano ?

      Pergunto isso, porque se vc deixou um comprimento muito longo, ruídos podem "disparar" uma animação das Cores, exatamente como se o Botão tivesse sido acionado. Claro que isso se aplica também a parar a animação, mas como o ruído provavelmente seria constante,  o contínuo "pára/inicia/.../pára/inicia" daria a impressão de que uma animação iniciou e não parou mais.

      Se for este o caso,  vc deve acrescentar um Resistor  externo de Pullup "mais forte", pois o "Pullup" interno é "fraco" (um "weak pullup" entre 20k e 50k, como vc pode constatar no datasheet da CPU AVR).  O valor desse Resistor externo de Pullup pode ser entre 470 Ohms  e 1k Ohms. Ele seria ligado entre o pino  do Arduino onde o Botão  está conectado e o +5V do Arduino.

      De qualquer forma, pode contar comigo e com o pessoal daqui do LDG para ajudar no que for possível.

      Seria legal vc conseguir fazer funcionar,  pois como eu disse, implementei uma versão "turbinada", com algumas funcionalidades a mais, que tornam o Sistema muito mais versátil (e ainda com um único Botão). Logo mais irei publicar essa versão (ainda tenho que capturar e preparar algumas figuras para o post).

      Abrçs,

      Elcids

Boa noite Valentina, tente usar este código: arcoiris_Lab.ino

Testei no meu arduino nano na protoboard e funcionou, apenas para desligar você tem que esperar alguns segundos já que estamos usando delay().

A ligação do circuito é a mesma que o Elcids Chagas fez porém usei para o botão o pino 2.

olá Valentina.

      Estou publicando a "versão turbinada",  sobre a qual me referi anteriormente.

      Esta versão tem novas funcionalidades, e também algumas facilidades a mais pra especificar a sequência de Cores no código. Sobre estas facilidades no código, falo mais à frente. Vou iniciar pela descrição das novas funcionalidades:

      -  é possível verificar qual o atual "tempo total"  do Sequenciamento de Cores.

      -  é possível alterar o "tempo total" do Sequenciamento de Cores. Após a alteração, o novo "tempo total"  é salvo na EEPROM do Arduino.  Assim caso caia a energia, logo que ela for restabelecida, o "tempo total"  será automaticamente restaurado pela leitura da EEPROM.

      -  se um Sequenciamento de Cores  estiver sendo executado, ao acionar o Botão, o Sequenciamento é terminado imediatamente (na primeira versão, o Sistema aguardava completar o ciclo de Sequenciamento antes de parar).

      -  quando vc ligar o Sistema, ele pisca os LEDs muito rapidamente na "cor Branca",  por cerca de 2 segundos, para sinalizar que iniciou o Sistema.  Esta mesma sinalização "piscante", também é usada para sinalizar outras ocorrências, como por exemplo quando termina um Sequenciamento de Cores, ou quando vc interrompe um Sequenciamento através do Botão.

      Verificando o atual "tempo total":

      Para verificar o "tempo total",  o Sequenciamento de Cores  deve estar parado. Se o Sequenciamento estiver sendo executado, basta pará-lo acionando o Botão.

      Então siga estes dois passos:

      1)  mantenha o Botão  pressionado por 5 segundos, até que a cor Azul  seja exibida nos LEDs. Assim que vc ver a cor Azul  ligar, solte o Botão.

      2)  após isso, os LEDs irão piscar na cor Verde, exatamente na quantidade de minutos referente ao "tempo total".  Exemplo:  se o "tempo total" é de 8 minutos, então a cor Verde  irá piscar 8 vezes. O Sistema faz uma piscada a cada segundo, para facilitar a contagem destas piscadas.

      Após as piscadas, os LEDs ficam apagados e o Sistema aguarda novos comandos via Botão.

      Alterando o "tempo total":

      Para alterar o "tempo total",  o Sequenciamento de Cores  deve estar parado. Se o Sequenciamento estiver sendo executado, basta pará-lo acionando o Botão.

      Então siga estes três passos:

      1)  mantenha o Botão  pressionado por 5 segundos, até que a cor Azul  seja exibida nos LEDs, mas não solte  o Botão.  Assim que vc ver a cor Azul, continue mantendo o Botão pressionado por mais 5 segundos,  até que a cor Vermelha  seja exibida nos LEDs.  Então solte o Botão. Os LEDs se apagam e o Sistema agora está no modo de alteração do "tempo total".

      2)  então acione o Botão  pelo total de minutos que vc deseja alterar o "tempo total".  Exemplo:  se vc deseja 5 minutos para o "tempo total", então acione o Botão 5 vezes. A cada acionamento do Botão, a cor Verde  "pisca", confirmando o acionamento.

      3)  após ter acionado o Botão pela quantidade desejada para o "tempo total", então aguarde 7 segundos.  Após este intervalo de tempo,  o Sistema irá salvar na EEPROM  do Arduino  o novo "tempo total"  que vc especificou.  Em seguida,  o Sistema irá piscar os LEDs  muito rapidamente na "cor Branca", por cerca de 2 segundos. A partir deste ponto o novo "tempo total" está ativo.

      Após as piscadas, os LEDs ficam apagados e o Sistema aguarda novos comandos via Botão.

      Importante:  após ver a cor Vermelha  e soltar o Botão, se nenhum acionamento do Botão for feito no intervalo de 7 segundos, então o Sistema cancela o comando, e o "tempo total" atual não é alterado.

      Descrição de alguns aspectos do código desta nova versão:

      Para facilitar a definição da Sequência de Cores,  nesta versão isto é definido através de uma "Lista", a qual pode ser vista na figura a seguir:

(clique na figura para "zoom")

      Em cada linha dessa "Lista" é especificada uma Cor  e o tempo em segundos  que esta Cor  é exibida.  Observar que este tempo pode ser fracionário (por exemplo 3.1 segundos).

      Altere a Lista conforme vc desejar (ela pode conter até 1000 linhas, mas este limite vc também pode mudar facilmente no código).

      Notar que a Lista tem um "marcador de fim" da mesma.  Este marcador é obrigatório. Qualquer item de cor depois do "marcador de fim", não será exibido no Sequenciamento de Cores.

      Como vc deve ter percebido, na Lista  foram utilizados nomes de Cores,  ao invés do tradicional formato de três bytes RGB.  Para isto, estes nomes de Cores foram anteriormente definidos no código, usando o #define  da linguagem C/C++,  conforme pode ser visto na figura a seguir:

(clique na figura para "zoom")

      Assim,  crie novas definições de nomes de Cores,  conforme vc desejar. Com os nomes criados, fica muito mais fácil e prático alterar a Lista de Sequenciamento de Cores. Vc pode inclusive ter diversas Listas criadas no seu código, e alterar na função "setup" do Arduino  qual Lista irá usar para o Sequenciamento de Cores.  Veja isto na função "setup" mostrada na figura a seguir:

(clique na figura para "zoom")

      Com um pouco de experiência em programação, vc pode até mesmo alternar entre as Listas de Cores que vc criar.  Se achar isso mais difícil de implementar, vc pode acrescentar mais um Botão para fazer a seleção da Lista de Cores, o que já é bem mais fácil.

      Finalmente,  sobre o "tempo total padrão" definido logo no início do código,  conforme  mostrado na figura a seguir:

(clique na figura para "zoom")

      Este tempo padrão  em minutos,  será usado até que vc especifique um novo "tempo total" através dos passos descritos anteriormente.  Portanto, quando vc gravar o código no Arduino  pela primeira vez, é este tempo total padrão que estará ativo.

      E lembre-se que gravações de código pela IDE  do Arduino  não apagam  a EEPROM. Assim, uma vez que vc tenha alterado o "tempo total",  se regravar o código através da IDE, o tempo padrão não terá efeito, já que na EEPROM estará o "tempo total" alterado anteriormente.  Mas existem programas que apagam a EEPROM, e assim se vc realmente desejar isso (o que me parece meio sem sentido neste Sistema), basta usar um destes programas (muitos são gratuitos).

      O código desta nova versão está aqui:   "Arco_Iris_03.zip"

      Espero que aprecie esta "versão turbinada".

      Há diversas técnicas de programação que podem ser aprendidas analisando o código. Para isto, o código está comentado funcionalmente  e totalmente organizado. Mas caso tenha alguma dúvida, não deixe de perguntar.

      abrçs,

      Elcids

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço