Em alguns projetos é necessário comprovar a hora, a hora ou a data. Seja pela necessidade de realizar determinadas funções com base no tempo, para manter um calendário de eventos ou registro, para manter a hora em um sistema, ou simplesmente para criar um relógio digital com Arduino. com o DS3231 você pode pegá-lo, outro dos componentes que adicionamos à lista.
O DS3231 é o módulo que você procurava, e aqui você encontrará tudo o que precisa para seu controle e também mostrarei um exemplo de como integrá-lo com o Arduino com um exemplo prático ...
O que é o DS3231?
Em primeiro lugar, você deve saber o que RTC (Relógio em tempo real), ou relógio em tempo real. Esses chips são muito freqüentes em uma infinidade de aplicações, na verdade, seu PC possui um deles na placa-mãe, e também é alimentado por um Bateria CR2032 tb. É aquele que mantém o tempo e a configuração na BIOS / UEFI e de onde o sistema operacional o tira ao inicializar para estar no horário (embora agora, com a Internet, a sincronização com servidores possa ser usada para maior precisão, mas esta é outra história ...).
O que o RTC faz é obter medições de tempo, tão simples. A diferença de outros tipos de relógios eletrônicos é que eles simplesmente medir o tempo, e faz isso contando os pulsos do sinal do relógio, sabendo sua frequência e períodos. Além do tempo, um RTC também permite que você mantenha uma contabilidade de dias, semanas, meses e anos. Ou seja, a data completa ...
Para que isso seja possível, o RTC deve vir acompanhado de um Cristal xtal ou quartzo que atuará como um ressonador, aquele que fornece a frequência. Além disso, você precisa de um circuito eletrônico capaz de contar e armazenar a data na memória. O circuito deve ser capaz de contar segundos, minutos, horas, dias, semanas, meses e anos.
Que memória é volátilÉ por isso que precisa da bateria, para ter energia constante. Se você não tem bateria ou ela acaba, vai se apagar ... É o que acontece com os PCs quando a bateria acaba, dão um horário incorreto. Se configurá-lo com o PC ligado, a hora será mantida, já que o RTC está sendo alimentado, mas é durante os processos em que está desligado que essa bateria é necessária ...
Para projetos DIY, os fabricantes costumam usar dois chips RTC comuns, que são os DS1307 e DS3231. Ambos são fabricados pela Maxim (anteriormente Dallas Semiconductor), e o DS3231 é o mais preciso dos dois, pois não é tão afetado pelas variações de temperatura quanto o anterior. Portanto, não oscila muito dependendo da temperatura e mantém o tempo com mais precisão.
O DS3231 não é que não seja afetado por variações, mas que tem sistemas de medição e compensação de temperatura embutidos para garantir uma precisão de 2 ppm, o que seria equivalente a um atraso de cerca de 172ms por dia, ou seja, um pouco mais de 1 segundo por semana, no máximo. E, na prática, geralmente variam apenas 1 ou 2 segundos por mês.
Quanto ao caminho comunicar com o RTC DS3131 para obter os valores de data que obtém, é feito por Barramento I2C. E para energia, você pode usar 2.3 a 5.5 V para o DS3231, que é um pouco menor do que 4.5 a 5.5 V para o DS1307, então pode ser mais eficiente em termos de energia e fazer a bateria durar mais.
Além disso, você deve saber que esses módulos geralmente têm um EEPROM AT24C32 adicional para armazenar alguns registros e medições anteriores, o que é bastante prático.
Aplicações
Em relação às aplicações, já mencionei algumas, como implementar um relógio com Arduino, criar um sistema que atue baseado em a hora Seja como for, para manter o tempo em equipamentos como PCs e muitos outros dispositivos eletrônicos e aparelhos que têm tempo, etc.
Também pode ser usado em projetos para criar temporizadores para iluminação, sistemas de irrigação, datalogger, etc. As aplicações podem ser as mais numerosas ...
Compre um RTC DS3231
O módulo DS3131 é barato, e você pode encontrá-lo em algumas lojas especializadas de eletrônicos ou em grandes lojas como eBay, AliExpress, Amazon, etc. Se você estiver interessado em ter um, aqui estão algumas recomendações:
- Compre DS3231
- Nenhum produto encontrado.
Integração com DS3231 Arduino
Se você quiser integre seu DS3231 com sua placa Arduino e começar a criar projetos "cronometrados", você deve primeiro fazer as conexões apropriadas. Para poder conectá-lo, é tão simples como:
- O pino SLC da placa DS3231 deve ser conectado ao A5 do seu Arduino UNO.
- O SDA do DS3231 está conectado ao A4 do Arduino.
- O Vcc do módulo irá para 5V do Arduino.
- GND para GND.
Agora que você tem o sistema conectado, a próxima coisa é escrever o esboço do código fonte para programá-lo. Você pode modificar os códigos e adaptá-los às suas necessidades, mas pode começar simplesmente obtendo a data de um RTC DS3231 conectado ao Arduino:
#include <Wire.h> #include "RTClib.h" // RTC_DS1307 rtc; RTC_DS3231 rtc; String daysOfTheWeek[7] = { "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado" }; String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" }; void setup() { Serial.begin(9600); delay(1000); if (!rtc.begin()) { Serial.println(F("No se encuentra el RTC")); while (1); } // Si se ha perdido el suministro eléctrico, fijar fecha y hora if (rtc.lostPower()) { // Fijar a fecha y hora (poner la de compilación del sketch) rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Fijar a fecha y hora específica. En este ejemplo el 2021-01-01 a las 00:00:00 // rtc.adjust(DateTime(2020, 1, 1, 0, 0, 0)); } } //Imprimir completa obtenida la fecha en decimal void printDate(DateTime date) { Serial.print(date.year(), DEC); Serial.print('/'); Serial.print(date.month(), DEC); Serial.print('/'); Serial.print(date.day(), DEC); Serial.print(" ("); Serial.print(daysOfTheWeek[date.dayOfTheWeek()]); Serial.print(") "); Serial.print(date.hour(), DEC); Serial.print(':'); Serial.print(date.minute(), DEC); Serial.print(':'); Serial.print(date.second(), DEC); Serial.println(); } void loop() { // Obtener fecha actual y mostrar por Serial DateTime now = rtc.now(); printDate(now); delay(3000); //Espera 3 segundos }
E para usar a data RTC para agende alguma tarefa, como para ligar ou desligar luzes, para rega automática ou para soar um alarme, etc. Lembre-se de que para lidar com dispositivos de alta tensão, você pode usar transistores ou confiou:
#include <Wire.h> #include "RTClib.h" const int outputPin = LED_BUILTIN; bool state = false; // RTC_DS1307 rtc; RTC_DS3231 rtc; void setup() { Serial.begin(9600); delay(1000); if (!rtc.begin()) { Serial.println(F("Couldn't find RTC")); while (1); } if (rtc.lostPower()) { rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } } // Se comprueba si está programado el encendido bool isScheduledON(DateTime date) { int weekDay = date.dayOfTheWeek(); float hours = date.hour() + date.minute() / 60.0; // Configuración de horas de 08:30 a 9:30 y de 22:00 a 23:00 (usando decimal) bool hourCondition = (hours > 8.50 && hours < 9.50) || (hours > 22.00 && hours < 23.00); // Configuración del día Lunes, Sábado y Domingo con números (recuerda que en inglés comienza la semana en Domingo=0, Lunes=1,... bool dayCondition = (weekDay == 1 || weekDay == 6 || weekDay == 0); if (hourCondition && dayCondition) { return true; } return false; } void loop() { DateTime now = rtc.now(); if (state == false && isScheduledON(now)) // Apagado { digitalWrite(outputPin, HIGH); state = true; Serial.print("Activado"); } else if (state == true && !isScheduledON(now)) // Encendido { digitalWrite(outputPin, LOW); state = false; Serial.print("Desactivado"); } delay(3000); }