Ir para o conteúdo
Eletrônica União
Monte sua lista e peça um orçamento — respondemos no mesmo dia pelo WhatsApp.Ver minha lista

Programador horário com relógio DS3231 (bomba de aquário, irrigação, luz de jardim)

Automação · Intermediário · Tempo: 2 horas

O módulo DS3231 tem bateria e cristal compensado por temperatura: atrasa ou adianta poucos segundos por mês.

Como funciona

Os horários ficam na tabela PROGRAMAS (hora e minuto de ligar e de desligar). O programa converte tudo em "minutos do dia" e mantém o relé ligado enquanto o horário atual estiver dentro de algum intervalo — funciona também em intervalos que passam da meia-noite, como 22:00 às 02:00.

Como a decisão é recalculada a cada segundo, se faltar energia no meio de um intervalo o aparelho volta ao estado certo quando a energia retorna.

Na primeira gravação (ou se a bateria acabar) o relógio é acertado com a data e hora da compilação. Para acertar de novo, digite no Monitor Serial H 14:30.

Segurança: Este projeto liga aparelhos na rede elétrica (127/220 V), que pode causar choque grave e incêndio. Faça as ligações da rede com o disjuntor DESLIGADO, use bornes e caixa fechada isolada, fios de bitola adequada e nunca toque na placa energizada. Se não tiver experiência com instalação elétrica, peça ajuda a um eletricista. Alguns módulos DS3231 têm um circuito de recarga para bateria recarregável (LIR2032); com bateria comum CR2032, remova o resistor/diodo de carga do módulo.

Esquema de ligações

12345678910DS3231VCCGNDSDASCLMódulo reléVCCGNDINCOMNARedeFaseNeutroAparelhoABArduino5VGNDA4A5D7

Vermelho = alimentação (+), preto = terra (GND/−). As etiquetas indicam ligação com a fonte ou bateria; os números correspondem à tabela abaixo.

#DeParaObservação
1DS3231: VCCArduino: 5V
2DS3231: GNDArduino: GND
3DS3231: SDAArduino: A4I2C
4DS3231: SCLArduino: A5I2C
5Módulo relé: VCCArduino: 5V
6Módulo relé: GNDArduino: GND
7Módulo relé: INArduino: D7
8Rede: FaseMódulo relé: COMdisjuntor desligado!
9Módulo relé: NAAparelho: A
10Aparelho: BRede: Neutro

Código-fonte Arduino (C/C++)

// Programador horário com DS3231 — vários intervalos por dia
#include <RTClib.h>

const int RELE = 7;
const bool RELE_ATIVO_BAIXO = true;

struct Programa { byte hLiga, mLiga, hDesliga, mDesliga; };
const Programa PROGRAMAS[] = {
  { 6, 30,  7,  0},   // 06:30 às 07:00 (ex.: irrigação da manhã)
  {18,  0, 18, 20},   // 18:00 às 18:20
  {22,  0,  2,  0},   // 22:00 às 02:00 (passa da meia-noite)
};
const int QTD = sizeof(PROGRAMAS) / sizeof(PROGRAMAS[0]);

RTC_DS3231 rtc;

bool dentro(int agora, int ini, int fim) {
  return ini <= fim ? (agora >= ini && agora < fim) : (agora >= ini || agora < fim);
}

void setup() {
  Serial.begin(9600);
  pinMode(RELE, OUTPUT);
  digitalWrite(RELE, RELE_ATIVO_BAIXO ? HIGH : LOW);
  if (!rtc.begin()) {
    Serial.println("DS3231 nao encontrado — confira SDA/SCL");
    while (true) delay(1000);
  }
  if (rtc.lostPower()) rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop() {
  // acerto manual pelo Monitor Serial: "H 14:30"
  if (Serial.available() && Serial.read() == 'H') {
    int h = Serial.parseInt(), m = Serial.parseInt();
    DateTime d = rtc.now();
    rtc.adjust(DateTime(d.year(), d.month(), d.day(), h, m, 0));
  }
  DateTime t = rtc.now();
  int agora = t.hour() * 60 + t.minute();
  bool ligar = false;
  for (int i = 0; i < QTD; i++)
    if (dentro(agora, PROGRAMAS[i].hLiga * 60 + PROGRAMAS[i].mLiga, PROGRAMAS[i].hDesliga * 60 + PROGRAMAS[i].mDesliga)) ligar = true;
  digitalWrite(RELE, (ligar ^ RELE_ATIVO_BAIXO) ? HIGH : LOW);

  char buf[24];
  snprintf(buf, sizeof(buf), "%02d:%02d:%02d rele %s", t.hour(), t.minute(), t.second(), ligar ? "ON" : "off");
  Serial.println(buf);
  delay(1000);
}

Referências

Circuito baseado na documentação oficial dos fabricantes e bibliotecas:

Montagem

  1. Instale a biblioteca RTClib (Adafruit) pelo Gerenciador de Bibliotecas.
  2. DS3231: VCC 5V, GND, SDA no A4 e SCL no A5. Coloque a bateria CR2032.
  3. Módulo relé no pino 7.
  4. Edite a tabela PROGRAMAS e carregue o código; confira a hora no Monitor Serial (9600 baud).
  5. Com o disjuntor desligado, ligue o aparelho no COM/NA do relé.

Ferramentas

Computador com Arduino IDE
Cabo USB