- Descrição: O Sensor Infravermelho Reflexivo de Obstáculo funciona através de 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!!
Boa tarde Greice, Segui as informações do projeto e ao concluir não apresenta nada no display. Depois percebi que o meu é 20×4, pode me informar as linhas que devo alterar para o projeto funcionar ?
Oi Greice, me chamo Rogerio, gostei muito de seu blog, tentei de tudo que é jeito conciliar o código do rtc ds1302 com o do display Display LCD Shield com Teclado, mas não consegui. Você conseguiria me dar um mão?
Ola, Parabéns pela pagina! Vocês sabem me informar se consigo fazer esse esquema em algum simulador online e gratuito?
Tentei pelo tinkercad mas lá não tem os modulos RTC.
Saberiam indicar outro simulador? Obrigado
Muito bom .
Olá Fernando,
Muito obrigada pelo seu feedback…