Pessoal, eu tenho um Arduino UNO um RTC 3231 e um Servo Motor, o Arduino vai precisar enviar comando para o servo somente 3x ao dia, então eu pensei o seguinte; Coloco o Arduino para dormir e em determinado horário eu executo uma interrupção para acordar o arduino e fazer oque for necessário.

Meu problema é que não estou conseguindo lançar interrupção com o RTC, estou fazendo algo bem simples para executar a interrupção em determinada hora mas não funciona; meu código simples;

https://pastebin.com/DL4tcTJ0

No meu código acima ele não deveria chamar a função somente no alarme? É isso que não estou entendendo.

Estou utilizando essa biblioteca https://github.com/jarzebski/Arduino-DS3231

Exibições: 907

Responder esta

Respostas a este tópico

Vc ligou o pino SQW/INT do relogio no pino que gera a interrupção ?

Ref:

http://www.instructables.com/id/Arduino-Sleep-and-Wakeup-Test-With-...

Pelo que o Eduardo falou, o pino SQW do DS deve ser ligado ao pino 2 do Arduino (interrupção)

Outras dicas dicas que tirei desse site: https://github.com/JChristensen/DS3232RTC/issues/5

Recomendam:

// Desabiltar SQW padrão.
RTC.squareWave(SQWAVE_NONE);

// Criar a interrupção no pino2
pinMode(SQW_PIN, INPUT_PULLUP);
attachInterrupt(0, function, FALLING);

Caramba ! Será que ele não conectou o pino SQW do DS3231 no D02 do Arduino ??

http://www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywisteg...

Isso é básico. 

Bom dia , 

O chip RTC DS3231 possui internamente, somente dois registradores de alarme. (Two Time-of-Day Alarms)

Para usar um terceiro, terá que apagar o primeiro alarme depois de acionado, atualizar com o terceiro alarme.

https://datasheets.maximintegrated.com/en/ds/DS3231.pdf

No seu programa, vai gerar uma interrupção (pulso) de um segundo a cada 10 segundos , usando o Alarme 1 !

Alarme 2 não foi configurado. 

Set Alarm1 - Every 10s in each minute

Seu relógio já esta com a data e horário corretos ?

// Manual (Year, Month, Day, Hour, Minute, Second)
clock.setDateTime(2014, 4, 25, 0, 0, 0);


https://github.com/jarzebski/Arduino-DS3231/blob/master/DS3231_alar...

Não use delay dentro da interrupção. A chamada da função de interrupção, deve ser a mais rápida possível.

Como Flavio disse, a função de interrupção deve ter poucos comandos.

De preferência uma atribuição de variável no máximo.

Você pode, por exemplo, definir uma variável flag indicando que o alarme foi atingido:

volatile boolean disparouAlarme = false;

Depois a função:


void interrupcao()

{
  disparouAlarme = true;
}

Colegas, eu troquei a library pela DS3232RTC e a interrupção ocorreu normalmente. Consegui fazer o sleep e meu arduino que antes consumia 68.9 mA está consumindo 47.9 mA no modo sleep(economia de ~ 14%).

Agora eu pedi todos os competentes para montar uma placa standalone, pois quero reduzir ainda mais esse consumo, já que onde vai ficar meu projeto é em um sítio, e não tenho como carregar todo dia.

Vou utilizar bateria de lipo de 3s (12V), pensei em utilizar o Regulador de Tensão 7805, alguns disseram que ele pode consumir muito, isso é verdade? 

Boa tarde, 

O regulador 7805 é linear e tem baixa eficiência. (tem perdas com calor dissipado). 

Quanto menor for a diferença de tensão entre a entrada e a saída, menor será  a perda. 

Maior eficiência, conseguirá com step down regulator. 

Serve sim. 

Maicon, bom dia!

A Library quye você está usando é está?

https://github.com/JChristensen/DS3232RTC/blob/master/examples/Time...

Tentei usá-la, mas está dando um erro com o comando setSyncProvider

Como você fez para compilar?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço