Olá pessoal! Estou começando agora no Arduino e meu primeiro projeto é acender uma lâmpada (30 LEDs) num aquário pequeno.  A questão é que preciso que a lâmpada acenda em dias e horários pré-definidos. Para isso estou usando um RTC. Consegui fazê-la acender todo dia das 17h às 22h, mas quando tento alternar com outros dias/horários, tipo, acender sábados e domingos das 8h-22h não funciona. E preciso também que o push button acenda ou apague a lâmpada fora desses horários predefinidos. Não consigo fazer a lógica toda sem conflitos. Até tentei por um sensor PIR, mas também conflitou.

Bom, resumindo: Consigo ter o RTC funcionando perfeitamente e acendendo o LED todo dia das 17h-22h, mas não consigo inserir nem o push button, nem o PIR ou nem mesmo acender a lampada em outros horários e dias. Eis o meu código:

//inclusão de biblioteca e objetos do módulo relógio
#include <DS3231.h>
DS3231 rtc(SDA, SCL);
Time t;

//determina pino botão
#define pinBotao 6

//determina pinoPIR
//#define pinPIR 7

//determina pinoRelè
#define pinRele 8

//determina estado relè
#define estadoRele

//parâmetros de horário que serão atualizados
int horaAtual, minutoAtual;

void setup()
{

//inicia o módulo relógio
rtc.begin();

//inicia o monitor serial
Serial.begin(115200);

//determina o pino do relé como saída
pinMode(pinRele, OUTPUT);

//determina pino do PIR como entrada
//pinMode(pinPIR, INPUT);

//determina pino botão como entrada usando resistor do arduino
pinMode(pinBotao, INPUT_PULLUP);

//desliga o relé para começar.
digitalWrite(pinRele, HIGH);

//as linhas abaixo devem ser descomentadas para configurar o relógio interno.
//Descomente, carregue o código para o arduino, comente novamente e suba o código mais uma vez.
//rtc.setDate(29,7,2019); // determina a data (dia, mes, ano)
//rtc.setDOW(MONDAY); // determina o dia da semana
//rtc.setTime(13,11,0); // determina o horário (hora, minuto, segundo)

}

void loop()
{

//determina o horário atual
t = rtc.getTime();
horaAtual = t.hour;
minutoAtual = t.min;

//lê estado da porta do PIR e guarda na variável
//bool valorPIR = digitalRead(pinPIR);

//verifica se iluminação precisa estar acesa por movimento
/*if (valorPIR)
{
digitalWrite(pinRele, LOW);
}
else
{
digitalWrite(pinRele, HIGH);
}
*/
//verifica se iluminação precisa estar acesa por horário
if ((horaAtual >=17) && (horaAtual <=21)){
digitalWrite(pinRele, LOW);
}
else{
digitalWrite(pinRele, HIGH);
}

//verifica se iluminação precisa estar acesa por botão
if(digitalRead(pinBotao) == LOW){
delay(300);
digitalWrite(pinRele, !digitalRead(pinRele));
}

//Imprime o horário
Serial.print("Horário atual: ");
Serial.println(rtc.getTimeStr());
//Serial.print("Sensor PIR: ");
//Serial.println(valorPIR);

//atualiza monitor serial
delay (1000);
}

Exibições: 1746

Responder esta

Respostas a este tópico

olá Rodrigo.

      Seu Sistema é um excelente alvo para uma implementação com um Máquina de Estados.

      Aqui no LDG já implementei uma boa quantidade de Máquinas para o Arduino.

      A Máquina de Estados é extremamente confiável, imune a bugs, e ela simplifica muito implementações iguais as que vc está tentando fazer, e que podem até parecer complexas, mas quando se usa uma Máquinas de Estados, fica uma "moleza"  implementar tudo (sem nenhum exagero!!!).

      Esta semana, não terei tempo para ver seu código e fazer uma implementação com Máquina de Estados.

      Mas se vc tiver força de vontade e quiser realmente aprender, poderá usar como exemplo algumas das implementações que já fiz aqui no LDG. Seguem os links para algumas dessas implementações:

      - Máquina de Estados JMelo:  "Sequenciamento de LEDs"

      - Máquina de Estados Lucas Piedra:  "Cronometragem com Botão"

      - Máquina de Estados Luiz Henrique:  "Controlando Semáforo"

      - Máquina de Estados Francikleber:  "Controle com Toque"

      - Máquina de Estados Oziel Marques:  "Pisca-pisca esperto com LED"

      - Máquina DogFeed Marcela:  "Controle da alimentação do Cachorro"

      - Escada com iluminação automática:  "Escada com Iluminacao Automatica"

      Os dois últimos links  ("Alimentação do Cachorro" e "Escada...Automática"), são ambientes com maior quantidade de dispositivos e temporizações mais complexas. Por isso aconselho vê-los apenas depois de ver os demais, que são mais simples. Mas também acredito que estes dois últimos poderão ser Sistemas mais próximos do que vc quer implementar (baseado na descrição que vc fez do Sistema).

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

     Abrçs,

     Elcids

Ok! Vou olhar sim, obrigado!

Eclids, li tudo e estudei cada caso, mas como eu sou iniciante, não consegui aproveitar no meu projeto. Pelo que leio, meu projeto não é nada tão elaborado, mas esbarro nas condições lógicas e acabo não conseguindo mesclar os "IF". Caso alguém possa me auxiliar e me mostrar especificamente meus erros, ficarei grato. Obrigado!

ok Rodrigo.

      Farei o seguinte então:

      Para que vc possa começar a aprender sobre como implementar isso, irei postar aqui uma implementação para seu Sistema.

      Porém farei isso a "conta-gotas", ou seja, irei implementando passo a passo e colocando a implementação aqui. Assim vc e outras pessoas poderão aproveitar o post para aprender como se faz isso. Ok?

      Durante o processo, pode ser que algum ponto não fique claro, e caso isso ocorra, pergunte antes que eu avance para a próxima etapa de implementação. Ok?

      Talvez seja necessário que vc tenha que esclarecer um ou outro aspecto de como quer que o Sistema funcione, pois nem sempre as descrições que as pessoas fazem nos tópicos, deixam claro como a coisa deve ser (e nos códigos que elas colocam, isso pode ser ainda mais confuso). Caso seja o caso, eu irei te perguntar pra esclarecer. Ok?

      Se estiver disposto, confirme e irei iniciar o processo.

      E se sua confirmação for positiva, aproveite enquanto a coisa não se inicia, para estudar um pouco sobre o Arduino (Hardware e Sofware, há muita informação na Internet),  e mais especificamente sobre a Linguagem C/C++ (se quiser pode ficar só no "C", que é muito mais acessível pra aprender do que o C++). 

      Abrçs,

      Elcids

ok.

      Veja se o livro deste link que vc postou é liberado para download. Se ele tiver Copyrigth, vc poderá estar infringindo regras legais do site, o que poderá causar problemas legais.

      Se o livro não for liberado, recomendo que exclua o post (apenas este com o link, é claro).

      Abrçs,

      Elcids

ok Rodrigo.

      Iniciando, forneça estas informações:

      - Informe qual Arduino vc está usando (UNO, Mega, Nano, etc).

      - Informe qual a biblioteca do DS3231 vc está usando (pois existem várias por aí afora). Pode ser o link para a Biblioteca, ou então anexe aqui a própria biblioteca que vc está usando, na forma de um arquivo zipado.

      Abrçs,

      Elcids

Olá Elcids!

Bom, o arduino é o UNO chinês. Aquele com microcontrolador soldado na placa.

A biblioteca RTC é essa:
https://drive.google.com/file/d/1DY29AsYrfEeMOeBgVbHouerxnYQ6VSEn/view

Abraços!

Olá novamente Rodrigo.

      Sobre os LEDs, vi que vc irá usar um Relé para acioná-los.

      Como irei também postar a simulação no Proteus,  irei usar uma fonte de 12V para alimentar os LEDs (via contatos do Relé, é claro). Esta poderá ser uma fonte ligada à rede elétrica ou então uma Bateria, pois nesta simulação isto não é importante (pois estaremos de fato preocupados que a Máquina de Estados controle corretamente o Sistema).

      Importante: sobre o livro que vc colocou o link, peço que vc delete o post (somente aquele), pois dei uma olhada e vi que o livro tem Copyright, ou seja, direitos autorais. Então para que não tenha problemas legais, insisto que delete aquele post.

      Em breve irei iniciar a publicação aqui, a "conta-gotas", a fim de que todos possam aprender como se projeta isso, passo a passo.

      Abrçs,

      Elcids

Olá Eucids, tudo bem? Espero que não tenha esquecido de mim! :)

PS: Sei que a vida é realmente corrida!

Abraços!

olá Rodrigo.

      Antes de tudo peço desculpa pela demora. Fiquei quase 10 dias sem vir aqui no LDG.

      Mas estou prestes a iniciar o discernimento de uma forma sistemática de implementar Máquinas de Estados, que atende 99,9%  dos problemas de lógica que aparecem por aqui. Esta metodologia, será capaz de resolver problemas simples, e também os extremamente sofisticados ou complexos (sofisticação e complexidade muitas vezes andam juntas, mas são coisas diferentes).

      Assim isso atenderá sua necessidade tanto de implementar seu Sistema, como de aprendizado. E também estarei cumprindo minha promessa ao Gustavo Murta, onde me comprometi a publicar a metodologia.

      Estarei planejando isso a partir da segunda-feira, e iniciarei a publicação imediatamente a seguir (uma vez que minha intenção é ir elaborando e publicando).

      Abrçs,

      Elcids

Olá Elcids! Isso. Tem um relé acionando os LEDs. Acredito que a ligação elétrica esteja correta pois como mencionei, separadamente, todos os comandos funcionam, ou seja, se tivermos somente o sensor PIR, a lâmpada acende/apaga corretamente, se tivermos somente o push button, ele também aciona perfeitamente a lâmpada e caso esteja somente os horários do RTC idem. O problema é quando junto isso tudo. Aí não funciona corretamente. O push button, por exemplo, fica efeito pisca-pisca por conta da minha lógica de união dos IFs errada. Sobre o livro, irei retirá-lo imediatamente, obrigado pelo aviso!
Abraços!
Beleza Eucids! Estarei aqui aguardando. Espero que eu consiga aprender porque, como havia dito, sou iniciante nesse mundo. E não precisa se desculpar nunca! Abraços!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço