Circuito de alarme digital com Arduino e módulo de relógio em tempo real.

[the_ad_placement id="article-top-ad"]

Neste post, vamos construir um relógio digital usando o módulo RTC ou Real Time Clock. Vamos entender o que é o módulo “RTC”, como interagir com o Arduino e o que ele faz.

O módulo RTC é um circuito que rastreia com precisão o horário atual. Possui duas funções, comunica-se com microcontroladores e microprocessadores para fornecer o tempo atual e atuar como um circuito de backup para manter o tempo em caso de falta de energia, uma vez que possui um sistema de backup de bateria embutido.

Podemos encontrar o RTC em qualquer dispositivo eletrônico, onde o tempo é uma função importante do dispositivo.

Por exemplo, nosso computador ou laptop mantém seu tempo mesmo após desligar a energia ou remover a bateria. Na placa-mãe de qualquer computador, podemos encontrar uma bateria CMOS, que alimenta o circuito RTC.

Tipo de circuito semelhante que vamos usar neste projeto.

O módulo RTC é um dispositivo barato que pode ser encontrado em qualquer site de comércio eletrônico e em lojas locais de projetos eletrônicos.

Ilustração do módulo RTC típico DS1307:

A maioria dos módulos RTC vem com uma bateria (CR2032) no momento da compra. Existem diferentes tamanhos e modelos, o que é ilustrado acima pode não ser o mesmo para você. Mas verifique se o número do modelo é DS1307. O código escrito nesta postagem é compatível apenas com o DS1307.

[the_ad_placement id="article-inline-ad-1-post-unico-17"]

Agora você sabe algo sobre o RTC. Agora vamos seguir o design do relógio digital. Antes de continuar com este projeto, você deve baixar a biblioteca a partir dos seguintes links e instalá-la no seu IDE:

• DS1307RTC.h

Link: github.com/PaulStoffregen/DS1307RTC

• TimeLib.h

Link: github.com/PaulStoffregen/Time

[the_ad_placement id="article-inline-ad-2"]

Duas outras bibliotecas teriam sido pré-instaladas no IDE do Arduino, se você tiver a versão mais recente.

• LiquidCrystal.h

• Wire.h

O circuito:

A conexão do circuito entre o arduino e o LCD é padrão, e podemos encontrar uma conexão semelhante em outros projetos baseados em LCD. O único componente adicional é o RTC.

Para reduzir o congestionamento do cabo durante a criação de protótipos, o RTC pode ser inserido nos pinos analógicos diretamente do arduino. Solde o SCl, SDA, Vcc e GND com pinos de cabeçalho macho e insira-o de A2 a A5, conforme mostrado no protótipo.

Protótipo do autor:

Como inserir corretamente o RTC no Arduino:

Se o seu RTC tiver locais de pinos diferentes e não puder ser replicado como ilustrado acima, você sempre poderá usar cabos para conexão. Agora que sua configuração de hardware está concluída, vamos para a parte de software do projeto.

Como definir a hora:

Uma vez programado o módulo RTC, ele mantém o tempo, mesmo que seja removido do arduino. A bateria deve durar pelo menos alguns anos.

Não há botão para ajustar a hora; O programa a seguir definirá a hora no RTC. A hora é sincronizada automaticamente com a hora do seu computador, enquanto compila o código, portanto, verifique se o computador está definido na hora correta, antes de carregar os programas.
Carregue o código “SetTime” para definir a hora com o RTC conectado:

#include 

#include 

#include 

int P=A3; //Assign power pins for RTC

int N=A2;

const char *monthName[12] = {

"Jan", "Feb", "Mar", "Apr", "May", "Jun",

"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"

};

tmElements_t tm;

void setup() {

pinMode(P,OUTPUT);

pinMode(N,OUTPUT);

digitalWrite(P,HIGH);

digitalWrite(N,LOW);

bool parse=false;

bool config=false;

// get the date and time the compiler was run

if (getDate(__DATE__) && getTime(__TIME__)) {

parse = true;

// and configure the RTC with this info

if (RTC.write(tm)) {

config = true;

}

}

Serial.begin(9600);

while (!Serial) ; // wait for Arduino Serial Monitor

delay(200);

if (parse && config) {

Serial.print("DS1307 configured Time=");

Serial.print(__TIME__);

Serial.print(", Date=");

Serial.println(__DATE__);

} else if (parse) {

Serial.println("DS1307 Communication Error :-{");

Serial.println("Please check your circuitry");

} else {

Serial.print("Could not parse info from the compiler, Time="");

Serial.print(__TIME__);

Serial.print("", Date="");

Serial.print(__DATE__);

Serial.println(""");

}

}

void loop() {

}

bool getTime(const char *str)

{

int Hour, Min, Sec;

if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;

tm.Hour = Hour;

tm.Minute = Min;

tm.Second = Sec;

return true;

}

bool getDate(const char *str)

{

char Month[12];

int Day, Year;

uint8_t monthIndex;

if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;

for (monthIndex = 0; monthIndex < 12; monthIndex++) {

if (strcmp(Month, monthName[monthIndex]) == 0) break;

}

if (monthIndex >= 12) return false;

tm.Day = Day;

tm.Month = monthIndex + 1;

tm.Year = CalendarYrToTm(Year);

return true;

}

Depois que o código for carregado, abra o monitor serial e uma mensagem de sucesso deve aparecer informando que a hora foi definida.

Isso significa que sua conexão entre o RTC e o arduino está correta e a hora está definida.

Agora faça o upload do código a seguir para exibir a hora no LCD.

[the_ad_placement id="article-inline-ad-3"]
//------------Program Developed by R.Girish-------//

#include 

#include 

#include 

#include 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int P=A3;

int N=A2;

void setup() {

lcd.begin(16,2);

pinMode(P,OUTPUT);

pinMode(N,OUTPUT);

digitalWrite(P,HIGH);

digitalWrite(N,LOW);

}

void loop() {

tmElements_t tm;

lcd.clear();

if (RTC.read(tm))

{

if(tm.Hour>=12)

{

lcd.setCursor(14,0);

lcd.print("PM");

}

if(tm.Hour<12)

{

lcd.setCursor(14,0);

lcd.print("AM");

}

lcd.setCursor(0,0);

lcd.print("TIME:");

if(tm.Hour>12) //24Hrs to 12 Hrs conversion//

{

if(tm.Hour==13) lcd.print("01");

if(tm.Hour==14) lcd.print("02");

if(tm.Hour==15) lcd.print("03");

if(tm.Hour==16) lcd.print("04");

if(tm.Hour==17) lcd.print("05");

if(tm.Hour==18) lcd.print("06");

if(tm.Hour==19) lcd.print("07");

if(tm.Hour==20) lcd.print("08");

if(tm.Hour==21) lcd.print("09");

if(tm.Hour==22) lcd.print("10");

if(tm.Hour==23) lcd.print("11");

}

else

{

lcd.print(tm.Hour);

}

lcd.print(":");

lcd.print(tm.Minute);

lcd.print(":");

lcd.print(tm.Second);

lcd.setCursor(0,1);

lcd.print("DATE:");

lcd.print(tm.Day);

lcd.print("/");

lcd.print(tm.Month);

lcd.print("/");

lcd.print(tmYearToCalendar(tm.Year));

} else {

if (RTC.chipPresent()) {

lcd.setCursor(0,0);

lcd.print("RTC stopped!!!");

lcd.setCursor(0,1);

lcd.print("Run SetTime code");

} else {

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Read error!");

lcd.setCursor(0,1);

lcd.print("Check circuitry!");

}

delay(500);

}

delay(500);

}


//------------Program Developed by R.Girish-------//

Feito isso, você verá a hora e a data exibidas no LCD e em execução.

Nota: O código “SetTime” é modificado a partir do código de exemplo do DS1307RTC para otimizar as conexões dos fios do módulo RTC, o upload do código original não determina o tempo.

Despertador digital usando Arduino

Acima, aprendemos como construir o relógio básico do Arduino usando o módulo RTC, na seção a seguir, investigamos como isso pode ser atualizado em um circuito de despertador digital usando o Arduino.

Existem pessoas que não precisam de despertador, elas acordam naturalmente e outras que acordam depois que o despertador toca algumas vezes e há pessoas que pressionam o botão soneca várias vezes e vão para a faculdade / trabalho até tarde. algumas desculpas.

O divertido projeto de despertador proposto pode confrontar o problema com a preguiça durante a madrugada. A maioria dos despertadores possui um botão de soneca e tempo de corte pré-determinado para alarme, se o usuário não responder.

Criamos este despertador sem um botão lento (botão de soneca) e o alarme não será desativado até que o usuário aperte um botão.

Este relógio pode mostrar a hora no formato de 12 horas e a data no formato DD / MM / AAAA.

A hora e a data serão exibidas no visor LCD 16 x 2. Um RTC ou módulo de relógio de tempo real cuidará do rastreamento da hora e poderá reter a hora correta, mesmo após um longo corte de energia.

Existem 5 botões, desde que a função será explicada em breve. O cérebro do projeto Arduino pode ser de qualquer modelo à sua escolha; recomendamos o Arduino pro mini ou o Arduino nano por causa de seu tamanho compacto.

Agora vamos mergulhar nos esquemas.

O esquema acima é para que o Arduino exiba a conexão, ajuste o contraste da tela girando o potenciômetro de 10K.

A seguir, o restante do circuito:

O circuito pode ser alimentado com adaptador de parede de 9V 500mA.

Funções de 5 botões:

S1 – É usado para parar o alarme (também é o botão de reset).
S2 – É usado para definir o alarme. Pressionando S2, você chegará ao menu de configuração de alarme.
S3 – É usado para incrementar horas.
S4 – é usado para incrementar minutos.
S5 – É usado para alternar o status do alarme. Se “*” existir no visor LCD no canto inferior direito, o alarme estará LIGADO, se o “*” não existir, as estatísticas do alarme estarão DESLIGADAS.

Mais detalhes sobre como definir o alarme são explicados na parte inferior do artigo.

Faça o download dos arquivos da biblioteca abaixo:

Link1: github.com/PaulStoffregen/DS1307RTC
Link2: github.com/PaulStoffregen/Time

Agora, temos que definir o tempo para o módulo RTC, o tempo será sincronizado do seu PC para o módulo RTC.

Faça o upload do código abaixo para definir o horário e abrir o Monitor serial:

//------------------------------------------------//
#include 
#include 
#include 
const char *monthName[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
tmElements_t tm;
void setup() {
bool parse=false;
bool config=false;
// get the date and time the compiler was run
if (getDate(__DATE__) && getTime(__TIME__)) {
parse = true;
// and configure the RTC with this info
if (RTC.write(tm)) {
config = true;
}
}
Serial.begin(9600);
while (!Serial) ; // wait for Arduino Serial Monitor
delay(200);
if (parse && config) {
Serial.print("DS1307 configured Time=");
Serial.print(__TIME__);
Serial.print(", Date=");
Serial.println(__DATE__);
} else if (parse) {
Serial.println("DS1307 Communication Error :-{");
Serial.println("Please check your circuitry");
} else {
Serial.print("Could not parse info from the compiler, Time="");
Serial.print(__TIME__);
Serial.print("", Date="");
Serial.print(__DATE__);
Serial.println(""");
}
}
void loop() {
}
bool getTime(const char *str)
{
int Hour, Min, Sec;
if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
tm.Hour = Hour;
tm.Minute = Min;
tm.Second = Sec;
return true;
}
bool getDate(const char *str)
{
char Month[12];
int Day, Year;
uint8_t monthIndex;
if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
for (monthIndex = 0; monthIndex < 12; monthIndex++) {
if (strcmp(Month, monthName[monthIndex]) == 0) break;
}
if (monthIndex >= 12) return false;
tm.Day = Day;
tm.Month = monthIndex + 1;
tm.Year = CalendarYrToTm(Year);
return true;
}
//----------------------------------------//

Agora você definiu com êxito a hora para o RTC
Next, é necessário fazer o upload do seguinte código principal:

//------------Program Developed by R.Girish-------//
#include 
#include 
#include 
#include 
#include 
const int rs = 7;
const int en = 6;
const int d4 = 5;
const int d5 = 4;
const int d6 = 3;
const int d7 = 2;
const int buzzer = 8;
boolean alarm = false;
boolean outloop = true;
const int setAlarm = A0;
const int Hrs = A1;
const int Min = A2;
const int ok = A3;
const int HrsADD = 0;
const int MinADD = 1;
const int ALsave = 2;
int HrsVal = 0;
int MinVal = 0;
int H = 0;
int M = 0;
int S = 0;
int i = 0;
int j = 0;
int k = 0;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(buzzer, OUTPUT);
pinMode(setAlarm, INPUT);
pinMode(Hrs, INPUT);
pinMode(Min, INPUT);
pinMode(ok, INPUT);
digitalWrite(setAlarm, HIGH);
digitalWrite(Hrs, HIGH);
digitalWrite(Min, HIGH);
digitalWrite(ok, HIGH);
}
void loop()
{
tmElements_t tm;
lcd.clear();
if (EEPROM.read(ALsave) == false)
{
lcd.setCursor(15, 1);
lcd.print("");
}
if (EEPROM.read(ALsave) == true)
{
lcd.setCursor(15, 1);
lcd.print(F("*"));
}
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0);
lcd.print("PM");
}
if (tm.Hour < 12)
{
lcd.setCursor(14, 0);
lcd.print("AM");
}
lcd.setCursor(0, 0);
lcd.print("TIME:");
H = tm.Hour;
if (tm.Hour > 12)
{
if (tm.Hour == 13)
{
lcd.print("01");
}
if (tm.Hour == 14)
{
lcd.print("02");
}
if (tm.Hour == 15)
{
lcd.print("03");
}
if (tm.Hour == 16)
{
lcd.print("04");
}
if (tm.Hour == 17)
{
lcd.print("05");
}
if (tm.Hour == 18)
{
lcd.print("06");
}
if (tm.Hour == 19)
{
lcd.print("07");
}
if (tm.Hour == 20)
{
lcd.print("08");
}
if (tm.Hour == 21)
{
lcd.print("09");
}
if (tm.Hour == 22)
{
lcd.print("10");
}
if (tm.Hour == 23)
{
lcd.print("11");
}
}
else
{
lcd.print(tm.Hour);
}
M = tm.Minute;
S = tm.Second;
lcd.print(":");
lcd.print(tm.Minute);
lcd.print(":");
lcd.print(tm.Second);
lcd.setCursor(0, 1);
lcd.print("DATE:");
lcd.print(tm.Day);
lcd.print("/");
lcd.print(tm.Month);
lcd.print("/");
lcd.print(tmYearToCalendar(tm.Year));
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0);
lcd.print("RTC stopped!!!");
lcd.setCursor(0, 1);
lcd.print("Run SetTime code");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Read error!");
lcd.setCursor(0, 1);
lcd.print("Check circuitry!");
}
}
if (digitalRead(setAlarm) == LOW)
{
setALARM();
}
if (H == EEPROM.read(HrsADD) && M == EEPROM.read(MinADD) && S == 0)
{
if (EEPROM.read(ALsave) == true)
{
sound();
}
}
if (digitalRead(ok) == LOW)
{
if (EEPROM.read(ALsave) == true) 
{
EEPROM.write(ALsave, 0);
alarm = false;
delay(1000);
return;
}
if (EEPROM.read(ALsave) == false)
{
EEPROM.write(ALsave, 1);
alarm = true;
delay(1000);
return;
}
}
delay(1000);
}
void setALARM()
{
HrsVal = EEPROM.read(HrsADD);
MinVal = EEPROM.read(MinADD);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(">>>>SET ALARM<<<"));
lcd.setCursor(0, 1);
lcd.print(F("Hrs:"));
lcd.print(EEPROM.read(HrsADD));
lcd.print(F(" Min:"));
lcd.print(EEPROM.read(MinADD));
delay(600);
while (outloop)
{
if (HrsVal > 23)
{
HrsVal = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(">>>>SET ALARM<<<"));
lcd.setCursor(0, 1);
lcd.print(F("Hrs:"));
lcd.print(HrsVal);
lcd.print(F(" Min:"));
lcd.print(MinVal);
}
if (MinVal > 59)
{
MinVal = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(">>>>SET ALARM<<<"));
lcd.setCursor(0, 1);
lcd.print(F("Hrs:"));
lcd.print(HrsVal);
lcd.print(F(" Min:"));
lcd.print(MinVal);
}
if (digitalRead(Hrs) == LOW)
{
HrsVal = HrsVal + 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(">>>>SET ALARM<<<"));
lcd.setCursor(0, 1);
lcd.print(F("Hrs:"));
lcd.print(HrsVal);
lcd.print(F(" Min:"));
lcd.print(MinVal);
delay(250);
}
if (digitalRead(Min) == LOW)
{
MinVal = MinVal + 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(">>>>SET ALARM<<<"));
lcd.setCursor(0, 1);
lcd.print(F("Hrs:"));
lcd.print(HrsVal);
lcd.print(F(" Min:"));
lcd.print(MinVal);
delay(250);
}
if (digitalRead(setAlarm) == LOW)
{
EEPROM.write(HrsADD, HrsVal);
EEPROM.write(MinADD, MinVal);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Alarm is Set for"));
lcd.setCursor(0, 1);
lcd.print(EEPROM.read(HrsADD));
lcd.print(F(":"));
lcd.print(EEPROM.read(MinADD));
lcd.print(F(" Hrs"));
delay(1000);
outloop = false;
}
}
outloop = true;
}
void sound()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Wakey Wakey !!!");
lcd.setCursor(0, 1);
lcd.print("Its Time now.....");
for (j = 0; j < 10; j++)
{
for (i = 0; i < 2 ; i++)
{
digitalWrite(buzzer, HIGH);
delay(150);
digitalWrite(buzzer, LOW);
delay(150);
}
delay(400);
}
for (k = 0; k < 10; k++)
{
for (i = 0; i < 4 ; i++)
{
digitalWrite(buzzer, HIGH);
delay(150);
digitalWrite(buzzer, LOW);
delay(150);
}
delay(250);
}
while (true)
{
digitalWrite(buzzer, HIGH);
delay(150);
digitalWrite(buzzer, LOW);
delay(150);
}
}
//------------Program Developed by R.Girish-------//

Após o upload do código acima, você deverá ver a hora e a data corretas em exibição no visor.

Agora vamos ver como definir o alarme:
• Pressione e segure S2 até ver o menu Alarme.
• Pressione S3 e S4 para ajustar as horas e os minutos, respectivamente.
• Após o tempo desejado, pressione S2 novamente. Ele diz "O alarme está definido para xx: xx horas".
• Se o alarme estiver LIGADO, você poderá ver o símbolo "*" no visor; se o alarme estiver DESLIGADO, não haverá símbolo "*".
• Você pode ativar / desativar o alarme pressionando S5 por meio segundo. Não pressione até que “*” desapareça (ele volta novamente); basta pressionar meio segundo para alternar o status do alarme.

NOTA IMPORTANTE:

O erro mais comum ao definir um alarme em qualquer relógio é alternar acidentalmente AM / PM, o que resulta em não tocar o alarme no momento desejado.

Para combater esse problema, a configuração de despertador proposta é projetada no formato de 24 horas.

A hora exibida no LCD será de 12 horas no formato AM / PM, mas, quando você define um alarme para este projeto, deve definir no formato de 24 horas, de 0 a 23 horas.

Por exemplo: se você deseja definir o alarme para 21:00, precisa definir 21 horas e 0 minutos. Por 5:00: 5 horas e 0 minutos e assim por diante.

Protótipo do autor:

Você gosta deste projeto? Tem alguma dúvida sobre este projeto, sinta-se à vontade para expressar no comentário, você pode receber uma resposta rápida.

Videoclipe:


FONTE

Nota: Este foi traduzido do Inglês para português (auto)

Pode conter erros de tradução

Olá, se tiver algum erro de tradução (AUTO), falta de link para download etc...

Veja na FONTE até ser revisado o post.

Status (Não Revisado)

Se tiver algum erro coloque nos comentários

Mas se gostou compartilhe!!!


[the_ad_placement id="article-bottom-ad"]
[the_ad_placement id="final-do-post"]

Veja mais

[the_ad_placement id="correspodente-para-imagens"]
Axtudohttps://www.axtudo.com/
“Solidários, seremos união. Separados uns dos outros seremos pontos de vista. Juntos, alcançaremos a realização de nossos propósitos.” (Bezerra de Menezes)

Comentários

DEIXE UMA RESPOSTA

Por favor digite seu comentário!
Por favor, digite seu nome aqui

Compartilhe

[the_ad_placement id="barra-lateral-topo"]
[the_ad_placement id="correspodente-para-imagens"]
[the_ad_placement id="barra-lateral-inferior"]

Últimos Posts

00:02:22

VOU ENSINAR A PROFISSÃO DO FUTURO PRA ELE –...

#VOU #ENSINAR #PROFISSÃO #FUTURO #PRA #ELE #Tiago #Fonseca FAÇA PARTE DA COMUNIDADE SECRETA- link➤https:dominacaodigital.com.br/video1/ Neste vídeo Tiago Fonseca...
00:10:39

STROGONOFF DE SALSICHA SIMPLES, FÁCIL, RÁPIDO E DELICIOSO

Nesse vídeo te ensino a fazer um Strogonoff de Salsicha super diferente mas que é muito simples, fácil, rápido de fazer e muito Delicioso....
00:02:18

COMPREI UM PRESENTE PARA ELE! com Tiago Fonseca.

#COMPREI #PRESENTE #PARA #ELE #Tiago #Fonseca FAÇA PARTE DA COMUNIDADE SECRETA- link➤https:dominacaodigital.com.br/video1/ Neste vídeo o nosso convidado eucomprei um presente para um entregador, veja o porque...

Moto G9 Plus ENFIM com Câmeras Boas e um...

#Moto #ENFIM #Câmeras #Boas #Design #Lindo #REVIEW #CanalJMS CLICA AQUI PRA SE INSCREVER 💚→ link➤http:goo.gl/vSPsIH Assista...

COMO CONSEGUIR MILHARES DE ACESSOS NOS PRIMEIROS MINUTOS

#COMO #CONSEGUIR #MILHARES #ACESSOS #NOS #PRIMEIROS #MINUTOS Leadlovers: link➤http:amoleads.com/leadlovers-peterj Copymaker: link➤https:amoleads.com/copymaker-peterj Os primeiros minutos de um post, seja ele...

O Luxo e a sofisticação dos Weintraub – Um...

#Luxo #sofisticação #dos #Weintraub #abraço #Lusa #para #Presidente #nossa #nova #aquisição FONTE - Duração...
[the_ad_placement id="barra-lateral-inferior"]