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;
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
Tags:
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...
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.
Uma solução pronta seria isso? Já usou?
https://www.filipeflop.com/produto/regulador-de-tensao-lm2596-conve...
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?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por