Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Despertador simples com DS1302 RTC

Componentes e suprimentos

Relógio em tempo real (RTC)
× 1
Buzzer
× 1
Adafruit LCD padrão - 16x2 branco em azul
× 1
Arduino UNO
× 1

Sobre este projeto




Olá a todos, neste projeto vamos tentar fazer um despertador fácil com a placa Arduino UNO. Este projeto é uma mistura de diferentes módulos que usei antes, se você estiver preso em algo, pode verificar no site do tutorial do módulo, porque é assim que eu normalmente trabalho:fazer as coisas separadamente e depois começar a mixar. :D

Para este projeto, vamos precisar de:
  • placa Arduino UNO, ou você pode usar o que mais lhe convier:
  • Módulo DS1302 RTC:
  • Módulo de teclado de matriz 4 * 4:
  • Tela LCD I2C:
  • Módulo de campainha ou a campainha de 2 pinos:

Caso você esteja preso em algo, pode verificar estes tutoriais anteriores sobre os módulos acima:

Como configurar o módulo DS1302 RTC com teclado + Arduino + LCD

Como usar simplesmente o módulo DS1302 RTC com placa Arduino e tela LCD

Arduino LCD I2C de uso simples e gravação direta de monitor serialArduino LCD I2C de uso simples e gravação direta de monitor serial

Arduino uno + Matriz de teclado 4 × 4 + tela LCD i2c

Como usar um alto-falante buzzer / piezo com Arduino

Fiação:

Bibliotecas e código:

Biblioteca LCD i2c Você pode escolher esta ou baixar a sua própria

Biblioteca do teclado Ou você pode baixá-lo do Arduino IDE

Biblioteca virtuabotix RTC DS1302





Código:


Baixar código

O funcionamento do código é muito simples, depois de conectar o módulo, você pode pressionar “*” para definir a hora e a data no DS1302 RTC, o display mostrará o dia e a hora atuais se você quiser definir o alarme, pressione “A” e você pode definir a hora e o minuto, e você pode desativá-lo pressionando “B” antes da hora ou pressionando qualquer botão enquanto toca.

Espero que gostem, qualquer problema pode entrar em contato comigo.

Código

  • RTC_alarm_clock_LCD.ino
RTC_alarm_clock_LCD.ino Arduino
Funciona com UNO + RTC DS1302 + LCD i2c + teclado 4x4
(Principais alterações feitas em 04/12/18 para resolver alguns problemas)
 // Este código deve ser usado com o módulo DS1302 RTC + teclado 4 * 4 + LCD i2c + Arduino + Buzzer // Após conectar os módulos, o LCD irá mostre a data e hora padrão ou aquela configurada antes // O objetivo deste projeto é que você possa configurar o módulo RTC a partir do teclado, e ter certeza que ficará armazenado // Em seguida, mostre-o na tela e depois você pode configurar seu alarm.//Consulte o canal Surtrtech.com ou SurtrTech no YouTube para obter mais informações # include  // Bibliotecas necessárias # include  #include  #include  #define I2C_ADDR 0x27 // LCD i2c stuff # define BACKLIGHT_PIN 3 # define En_pin 2 # define Rw_pin 1 # define Rs_pin 0 # define D4_pin 4 # define D5_pin 5 # define D6_pin 6 # define D7_pin 7LiquidCrystal_I2C lcd (I2C_ADDR_pin_pin, Rwpin_pin, Rwpin, Dwpin 4 , D5_pin, D6_pin, D7_pin); virtuabotixRTC myRTC (2, 3, 4); // Fiação do RTC (CLK, DAT, RST) // Se você mudar a fiação, troque os pinos aqui também pelo byte numRows =4; // número de linhas no tecladoconst byte numCols =4; // número de colunas no teclado // mapa de teclado define a tecla pressionada de acordo com a linha e colunas, assim como aparece no mapa de teclado do teclado numérico [numRows] [numCols] ={{'1', '2', '3', ' A '}, {' 4 ',' 5 ',' 6 ',' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins [numRows] ={12,11,10,9}; // Linhas 0 a 3 // se você modificar seus pinos, você deve modificar este toobyte colPins [numCols] ={8,7,6,5}; // Colunas 0 a 3int i1, i2, i3, i4; char c1, c2, c3, c4; char keypressed, keypressedx; int A_hour =NULL; int A_minute =NULL; int AlarmIsActive =NULL; int buzzer =13; Keypad myKeypad =Teclado (makeKeymap (mapa de teclado), rowPins, colPins, numRows, numCols); void setup () {Serial.begin (9600); lcd.begin (16,2); // Inicializa o LCD lcd.setBacklightPin (BACKLIGHT_PIN, POSITIVE); lcd.setBacklight (HIGH); lcd.home (); } void loop () {while (keypressed ==NO_KEY) {// Enquanto nenhuma tecla for pressionada, continuamos exibindo a data e a hora, sou obrigado a limpar a tela todas as vezes para que os números não se confundam // E devo adicionar esse pequeno atraso para que a tela seja exibida corretamente, caso contrário, não funcionou para mim keypressed =myKeypad.getKey (); lcd.clear (); // Aqui, após limpar o LCD, pegamos o tempo do módulo e o imprimimos na tela com as funções normais do LCD myRTC.updateTime (); if (myRTC.hours ==A_hour &&myRTC.minutes ==A_minute &&AlarmIsActive ==1 &&myRTC.seconds> =0 &&myRTC.seconds <=2) {while (keypressedx ==NO_KEY) {tone (buzzer, 1000); // Você pode modificar o tom ou fazer seu próprio atraso de som (100); tom (campainha, 2000); atraso (100); lcd.clear (); lcd.print ("Levante-se !!!"); // Mensagem para mostrar quando o alarme está tocando keypressedx =myKeypad.getKey (); }} keypressedx =NO_KEY; noTone (campainha); lcd.setCursor (0,0); lcd.print (myRTC.dayofmonth); lcd.print ("/"); lcd.print (myRTC.month); lcd.print ("/"); lcd.print (myRTC.ano); lcd.setCursor (0,1); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutos); lcd.print (":"); lcd.print (myRTC.segundos); atraso (100); } if (keypressed =='*') // Como sempre verificamos a tecla pressionada, só procedemos à configuração se pressionarmos "*" {lcd.clear (); lcd.print ("Configuração"); atraso (1000); lcd.clear (); lcd.print ("ano de instalação"); // Para que você possa entender como isso funciona, primeiro ele nos mostra "configuração" e depois imprime "ano de configuração" e agora você pode escrever seu ano normalmente (2-0-1-8) // Passa automaticamente para configurar o mês ... até que termine // As chaves do teclado são todas consideradas caracteres (c), então devemos convertê-las para int foi o que eu fiz e então as armazenamos (i) // Fazemos algumas contas e obtemos o ano, mês ... como int para que possamos injetá-los no RTC, caso contrário, não será compilado // Meses como abril você deve escrever 04, 03 para março ... caso contrário, não passará para o próximo parâmetro // O virtuabotix do RTC a biblioteca já está configurada para não aceitar hora e datas estranhas (45/17/1990) (58:90:70), e sim datas antigas são consideradas como erros char keypressed2 =myKeypad.waitForKey (); if (keypressed2! =NO_KEY &&keypressed2! ='*' &&keypressed2! ='#' &&keypressed2! ='A' &&keypressed2! ='B' &&keypressed2! ='C' &&keypressed2! ='D') { c1 =pressionado 2; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed3 =myKeypad.waitForKey (); if (keypressed3! =NO_KEY &&keypressed3! ='*' &&keypressed3! ='#' &&keypressed3! ='A' &&keypressed3! ='B' &&keypressed3! ='C' &&keypressed3! ='D') { c2 =pressionado 3; lcd.setCursor (1, 1); lcd.print (c2); } char keypressed4 =myKeypad.waitForKey (); if (keypressed4! =NO_KEY &&keypressed4! ='*' &&keypressed4! ='#' &&keypressed4! ='A' &&keypressed4! ='B' &&keypressed4! ='C' &&keypressed4! ='D') { c3 =pressionado 4; lcd.setCursor (2, 1); lcd.print (c3); } char keypressed5 =myKeypad.waitForKey (); if (keypressed5! =NO_KEY &&keypressed5! ='*' &&keypressed5! ='#' &&keypressed5! ='A' &&keypressed5! ='B' &&keypressed5! ='C' &&keypressed5! ='D') { c4 =pressionado 5; lcd.setCursor (3, 1); lcd.print (c4); } i1 =(c1-48) * 1000; // as teclas pressionadas são armazenadas em caracteres, eu as converto para int e, em seguida, multipliquei para obter o código como um int de xxxx i2 =(c2-48) * 100; i3 =(c3-48) * 10; i4 =c4-48; int N_ano =i1 + i2 + i3 + i4; atraso (500); lcd.clear (); lcd.print ("Setup month"); ////////////////////////////////////////// //////////////////////////// char keypressed6 =myKeypad.waitForKey (); // aqui todos os programas são interrompidos até que você insira os quatro dígitos, então ele é comparado ao código acima if (keypressed6! =NO_KEY &&keypressed6! ='*' &&keypressed6! ='#' &&keypressed6! ='A' &&keypressed6 ! ='B' &&keypressed6! ='C' &&keypressed6! ='D') {c1 =keypressed6; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed7 =myKeypad.waitForKey (); if (keypressed7! =NO_KEY &&keypressed7! ='*' &&keypressed7! ='#' &&keypressed7! ='A' &&keypressed7! ='B' &&keypressed7! ='C' &&keypressed7! ='D') { c2 =pressionado 7; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_mês =i1 + i2; atraso (500); lcd.clear (); lcd.print ("Dia de configuração"); //////////////////////////////////////////////////////// ////////////// char keypressed8 =myKeypad.waitForKey (); // aqui todos os programas são interrompidos até que você insira os quatro dígitos, então ele é comparado ao código acima if (keypressed8! =NO_KEY &&keypressed8! ='*' &&keypressed8! ='#' &&keypressed8! ='A' &&keypressed8 ! ='B' &&keypressed8! ='C' &&keypressed8! ='D') {c1 =keypressed8; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed9 =myKeypad.waitForKey (); if (keypressed9! =NO_KEY &&keypressed9! ='*' &&keypressed9! ='#' &&keypressed9! ='A' &&keypressed9! ='B' &&keypressed9! ='C' &&keypressed9! ='D') { c2 =pressionado 9; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_day =i1 + i2; atraso (500); lcd.clear (); lcd.print ("Setup hour"); ////////////////////////////////////////// //////////////////////////////////////////////////:char keypressed10 =myKeypad. waitForKey (); // aqui todos os programas são interrompidos até que você insira os quatro dígitos, então ele é comparado ao código acima if (keypressed10! =NO_KEY &&keypressed10! ='*' &&keypressed10! ='#' &&keypressed10! ='A' &&keypressed10 ! ='B' &&keypressed10! ='C' &&keypressed10! ='D') {c1 =keypressed10; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed11 =myKeypad.waitForKey (); if (keypressed11! =NO_KEY &&keypressed11! ='*' &&keypressed11! ='#' &&keypressed11! ='A' &&keypressed11! ='B' &&keypressed11! ='C' &&keypressed11! ='D') { c2 =pressionado 11; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_hour =i1 + i2; atraso (500); lcd.clear (); lcd.print ("minutos de configuração"); ////////////////////////////////////////// ////////////////////////////////////////////////:char keypressed12 =myKeypad. waitForKey (); // aqui todos os programas são interrompidos até que você insira os quatro dígitos, então ele é comparado ao código acima if (keypressed12! =NO_KEY &&keypressed12! ='*' &&keypressed12! ='#' &&keypressed12! ='A' &&keypressed12 ! ='B' &&keypressed12! ='C' &&keypressed12! ='D') {c1 =keypressed12; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed13 =myKeypad.waitForKey (); if (keypressed13! =NO_KEY &&keypressed13! ='*' &&keypressed13! ='#' &&keypressed13! ='A' &&keypressed13! ='B' &&keypressed13! ='C' &&keypressed13! ='D') { c2 =pressionado 13; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_minutos =i1 + i2; atraso (500); lcd.clear (); myRTC.setDS1302Time (22, N_minutos, N_horas, 1, N_dia, N_mês, N_ano); // assim que terminarmos de definir a data e hora que transferimos para os valores do módulo RTC // o 22 significa segundos, você também pode adicionar uma configuração para ele se quiser // o 1 significa o dia da semana, como longo Eu não mostro isso na tela Eu não mudo keypressed =NO_KEY; // a chave "*" é armazenada em "pressionado", então eu removo esse valor dela, caso contrário, ele me colocará na configuração novamente} //////////////////// ///////////////////////// Alarme setup ///////////////////////////// ////// if (keypressed =='A') {lcd.clear (); lcd.print ("Configuração de alarme"); atraso (1000); lcd.clear (); lcd.print ("Definir hora do alarme"); char keypressed14 =myKeypad.waitForKey (); // aqui todos os programas são interrompidos até que você insira os quatro dígitos, então ele é comparado ao código acima if (keypressed14! =NO_KEY &&keypressed14! ='*' &&keypressed14! ='#' &&keypressed14! ='A' &&keypressed14 ! ='B' &&keypressed14! ='C' &&keypressed14! ='D') {c1 =keypressed14; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed15 =myKeypad.waitForKey (); if (keypressed15! =NO_KEY &&keypressed15! ='*' &&keypressed15! ='#' &&keypressed15! ='A' &&keypressed15! ='B' &&keypressed15! ='C' &&keypressed15! ='D') { c2 =pressionado 15; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; A_hour =i1 + i2; atraso (500); lcd.clear (); lcd.print ("Definir minutos de alarme"); char keypressed16 =myKeypad.waitForKey (); // aqui todos os programas são interrompidos até que você insira os quatro dígitos, em seguida, ele é comparado ao código acima if (keypressed16! =NO_KEY &&keypressed16! ='*' &&keypressed16! ='#' &&keypressed16! ='A' &&keypressed16 ! ='B' &&keypressed16! ='C' &&keypressed16! ='D') {c1 =keypressed16; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed17 =myKeypad.waitForKey (); if (keypressed17! =NO_KEY &&keypressed17! ='*' &&keypressed17! ='#' &&keypressed17! ='A' &&keypressed17! ='B' &&keypressed17! ='C' &&keypressed17! ='D') { c2 =pressionado 17; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; A_minuto =i1 + i2; atraso (500); lcd.clear (); AlarmIsActive =1; pressionado =NO_KEY; } if (keypressed =='B') {lcd.clear (); lcd.print ("Alarme desativado"); AlarmIsActive =0; pressionado =NO_KEY; atraso (500); } else {myRTC.updateTime (); pressionado =NO_KEY; }} 

Esquemas


Processo de manufatura

  1. Painel LCD com Arduino para o simulador de vôo
  2. Relógio de visão pov do Arduino
  3. DIY mais simples relógio IV9 Numitron com Arduino
  4. Simple Word Clock (Arduino)
  5. Relógio Arduino com horas de oração islâmica
  6. Relógio mestre
  7. Arduino Temp. Monitor e relógio em tempo real com tela 3.2
  8. Sensor de obstáculo simples com Arduino
  9. Relógio digital TM1637 com configuração de hora e funcionalidade de alarme
  10. Exibindo uma imagem em uma tela LCD TFT com o Arduino UNO!