- Descrição: O Sensor Magnético com fio para Alarme MC-38 é um…

Sua casa estará incompleta se você não fizer este despertador com Arduino! Vamos montar? É simples e rápido!
Criar um despertador com Arduino é um projeto simples e barato para quem gosta de “brincar” com esta plataforma, assim como eu.
Não é novidade para ninguém a infinidade de coisas que dá para fazer com o Arduino, principalmente voltadas para IoT, e desenvolver um despertador com esta placa e alguns componentes é uma das variedades de projetos possíveis de implementar para facilitar o dia-a-dia.
Para o desenvolvimento desta prática, escolhi soluções viáveis e simples de trabalhar. Portanto, se você está começando nesse mundo maker, pode ficar tranquilo que você entenderá perfeitamente o passo a passo dessa prototipagem (mas se isso não acontecer, terei o maior prazer em responder suas dúvidas através de comentários nesta postagem).
Para iniciar, vamos falar sobre o que você precisa saber a respeito do módulo principal deste projeto: o DS3231. O Módulo Real Time Clock RTC DS3231 é um relógio em tempo real (RTC) de alta precisão e baixo consumo de energia. O módulo possui um sensor de temperatura embutido e possui também um cristal oscilador para ampliar sua exatidão. O mesmo é capaz de fornecer informações de hora, minutos, segundos, dia, data, mês e ano.
Para o funcionamento do Módulo RTC DS3231 é necessário uma bateria CR2032 para permitir que os dados fiquem armazenados mesmo com a falta de energia. Além disso, o módulo é capaz de detectar falhas de energia e consequentemente acionar a bateria, evitando que os dados sejam perdidos. O módulo também é capaz de ajustar automaticamente o final dos meses que possuem menos de 31 dias, faz a correção de ano bissexto e trabalha tanto no formato de 12 horas quanto 24 horas.
O segundo componente utilizado nesta prática foi um Display LCD com adaptador I2C. O Display LCD 16×2 com Adaptador I2C possui 16 colunas e 2 linhas. Ele pode ser utilizado em projetos onde será necessário exibir informações em tempo real, tais como temperatura, umidade, valor de tensão ou corrente, mensagens de erro e muitas outras finalidades. O grande diferencial do display usado nesta prática é que o mesmo possui um adaptador I2C, cuja a finalidade é simplificar a conexão do display a plataforma microcontrolada.
Além destes protagonistas, usamos outros componentes no projeto que serão listados abaixo.
Vale lembrar que todos esses produtos da lista você encontra na nossa Loja Virtual.
– Lista dos itens necessários:
– Placa ATmega328p com Cabo USB A/B (Compatível com Arduino Uno R3);
– Protoboard 400 pontos; (Se você preferir uma protoboard de tamanho diferente, não tem problema. Você pode conferir outros tamanhos clicando aqui);
– Módulo Real Time Clock RTC DS3231;
– Display LCD 16×2 com Adaptador I2C;
– Buzzer Ativo 5V;
– Cabos Jumpers para conexão;
– Esquema de ligação
Antes de dar continuidade a prática do nosso despertador, temos que comentar que tanto o DS3231 quanto o display LCD com I2C utilizam o mesmo protocolo de comunicação: I2C. Portanto, ambos irão usar as mesmas portas do Arduino para ligação, já que os pinos de comunicação I2C da placa são o A4 (SDA) e A5 (SCL).
– Como contornar este problema?
Pois bem, note que no esquema de ligação fizemos uma “cascata” ao ligar o DS3231 e o Display LCD na Protoboard.
Podemos ligar vários sensores e módulos I2C no mesmo barramento, mas eles não podem ter o mesmo endereço. Geralmente alguns módulos já vem com este endereço pré-definido de fábrica (o Display LCD com adaptador I2C é 0xx27 e o Módulo RTC DS3231 é 0xx68), porém sugiro que compile o código abaixo para saber o endereço dos seus dispositivos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan } |
Ao executar este código, veja no monitor serial qual é o endereço dos módulos, conforme a imagem abaixo:
OBS: se o endereço do seu display for diferente de 0xx27, sugiro que salve o endereço mostrado para futura modificação no código-fonte!
Feito o scanner dos endereços dos seus módulos, vamos ao código-fonte. Primeiramente sugiro que faça o download das bibliotecas DS3231.zip e NewliquidCrystal_1.3.4.zip e instale no seu IDE.
Caso não saiba como importar bibliotecas para o ambiente de programação do Arduino, sugiro que leia o seguinte post:
Arduino – Importando bibliotecas para a IDE
Após a importação das bibliotecas, basta copiar o código-fonte abaixo e colar no seu ide:
OBS 1: Caso o endereço do seu Display seja diferente de 0xx27, na linha 14 LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE) troque 0xx27 pelo endereço do seu display;
OBS 2: se o RTC estiver sendo ligado pela primeira vez, ficou sem energia, esgotou a bateria ou você precisa de ajustar as informações do mesmo, remova o comentário das linhas 36,38e 40 para que as informações sejam atualizadas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
/******************************************************************************* * * CRIANDO UM ALARME UTILIZANDO O DS3231 JUNTO AO ARDUINO. * BLOG Masterwalker Shop * Aproveite e conheça nossa Loja Virtual. Acesse: https://www.masterwalkershop.com.br/ * *******************************************************************************/ #include <DS3231.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> DS3231 rtc(SDA, SCL); // Declaração da variável rtc LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); // Endereçamento do display, já que ele e o ds3231 utilizam protocolo i2c para comunicação com o Arduino //uint32_t timer = 0; //int control = 0; Time t; # define buz 11 int Hor; int Min; int Sec; void setup() { Wire.begin (); //iniciando a comunicação i2c rtc.begin (); //iniciando o ds3231 Serial.begin (9600); pinMode (buz, OUTPUT); lcd.begin (16,2); //iniciando o display lcd.setCursor (0,0); lcd.print ("Alarme"); // As seguintes linhas deverão ser descomentadas para definir a data e hora pela primeira vez no Módulo //rtc.setDOW(WEDNESDAY); // Defina o dia da semana como SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY // rtc.setTime(12, 05, 0); // Defina a hora para 12:00:00 (formato de 24 horas) // rtc.setDate(23, 02, 2021); // Defina a data para 1º de janeiro de 2014 delay (2000); } void loop (){ t = rtc.getTime (); Hor = t.hour; Min = t.min; Sec = t.sec; lcd.setCursor (0,0); lcd.print ("Hora:"); lcd.print (rtc.getTimeStr ()); // Mostra a hora na tela do display lcd.setCursor (0,1); lcd.print ("Data:"); lcd.print (rtc.getDateStr ());// Mostra a data na tela do display if (Hor == 10 && (Min == 06 || Min == 06)) { // Compara a hora atual com a hora do alarme //Buzzer(); lcd.clear (); lcd.print ("Alarme LIGADO"); //Mostra a mensagem de alarme ligado na tela lcd.setCursor (0,1); lcd.print ("Hora do remedio"); // Mostra mensagem sobre o porquê do alarme disparar Buzzer(); // Chama a função Buzzer para acionamento do componente } digitalWrite (buz, LOW); // desliga o buzzer após o tempo do alarme delay(1000); } void Buzzer(){ digitalWrite (buz, LOW); delay (500); digitalWrite (buz, HIGH); delay (1000); digitalWrite (buz, LOW); delay (500); } |
Copiado o código, basta enviá-lo ao seu Arduino. Confira abaixo o resultado final desta prática.
Gostou do resultado final? Então deixe seu feedback nos comentários. Estou ansiosa para saber se você desenvolveu esta prática!!!
Espero ter contribuído com seu aprendizado. Até a próxima!!
Muito bom .
Olá Fernando,
Muito obrigada pelo seu feedback…