산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

DS1302 RTC가 있는 간단한 알람 시계

구성품 및 소모품

실시간 시계(RTC)
× 1
부저
× 1
Adafruit Standard LCD - 파란색 바탕에 16x2 흰색
× 1
Arduino UNO
× 1

이 프로젝트 정보

안녕하세요 여러분 이번 프로젝트에서는 아두이노 UNO 보드로 간단한 알람시계를 만들어 보겠습니다. 이 프로젝트는 내가 이전에 사용한 여러 모듈을 혼합한 것입니다. 무언가에 갇힌 경우 웹사이트에서 모듈 튜토리얼을 확인할 수 있습니다. 왜냐하면 그것이 제가 일반적으로 작업하는 방식이기 때문입니다. 개별 작업을 수행한 다음 믹싱을 시작합니다. :D

이 프로젝트에는 다음이 필요합니다.

<울>
  • Arduino UNO 보드 또는 자신에게 맞는 것을 사용할 수 있습니다.
  • <울>
  • DS1302 RTC 모듈:
  • <울>
  • 4*4 매트릭스 키패드 모듈:
  • <울>
  • LCD I2C 화면:
  • <울>
  • 부저 모듈 또는 2핀 부저:
  • 뭔가 막힌 경우 위의 모듈에 대한 이전 자습서를 확인할 수 있습니다.

    키패드 + Arduino + LCD로 DS1302 RTC 모듈을 설정하는 방법

    Arduino 보드와 LCD 화면과 함께 DS1302 RTC 모듈을 간단하게 사용하는 방법

    Arduino LCD I2C 간편 사용 및 직렬 모니터에서 직접 쓰기Arduino LCD I2C 간편 사용 및 직렬 모니터에서 직접 쓰기

    Arduino uno + 4×4 키패드 매트릭스 + LCD i2c 화면

    Arduino에서 버저/피에조 스피커를 사용하는 방법

    배선:

    라이브러리 및 코드:

    LCD i2c 라이브러리 선택하거나 직접 다운로드할 수 있습니다.

    키패드 라이브러리 또는 Arduino IDE에서 다운로드할 수 있습니다.

    RTC DS1302 virtuabotix 라이브러리

    코드:

    코드 다운로드

    코드 기능은 매우 간단합니다. 모듈을 배선한 후 "*"를 눌러 DS1302 RTC에서 시간과 날짜를 설정할 수 있습니다. 알람을 설정하려면 "A"를 누르고 디스플레이에 현재 날짜와 시간이 표시됩니다. 당신은 시간과 분을 설정할 수 있으며 시간 전에 "B"를 누르거나 벨이 울릴 때 아무 버튼이나 누르면 비활성화 할 수 있습니다.

    당신이 그것을 좋아하기를 바랍니다. 어떤 문제가 있으면 저에게 연락할 수 있습니다.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • RTC_alarm_clock_LCD.ino
  • RTC_alarm_clock_LCD.ino아두이노
    UNO + RTC DS1302 + LCD i2c + 4x4 키패드와 함께 작동
    (일부 문제를 해결하기 위해 12/04/18 주요 변경 사항)
    //이 코드는 DS1302 RTC 모듈 + 4*4 키패드 + LCD i2c + Arduino + Buzzer와 함께 사용합니다.//모듈을 배선한 후 LCD는 기본 날짜와 시간 또는 이전에 설정된 시간 표시//이 프로젝트의 목적은 키패드에서 RTC 모듈을 설정할 수 있고 저장된 상태로 유지되는지 확인하는 것입니다. 알람.//자세한 내용은 Surtrtech.com 또는 SurtrTech youtube 채널 참조#include  //필요한 라이브러리#include #include #include #define I2C_ADDR 0x27 //LCD i2c 재료#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 tal_I2Cry ,D5_pin,D6_pin,D7_pin);virtuabotixRTC myRTC(2, 3, 4); //RTC의 배선(CLK,DAT,RST) //배선을 변경하면 여기에서도 핀을 변경합니다. const byte numRows=4; // 키패드의 행 수const byte numCols=4; //키패드의 열 수//keymap은 키패드에 표시된 대로 행과 열에 따라 누르는 키를 정의합니다char keymap[numRows][numCols]={{'1', '2', '3', ' A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'},{'*', '0', ' #', 'D'}};바이트 rowPins[numRows] ={12,11,10,9}; //0~3행 //핀을 수정했다면 이 toobyte도 수정해야 합니다. colPins[numCols]={8,7,6,5}; //0~3열 int 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 =키패드(makeKeymap(키맵), rowPins, colPins, numRows, numCols); 무효 설정() { Serial.begin(9600); lcd.begin(16,2); //LCD 초기화 lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.set백라이트(높음); lcd.home(); }void loop() { while(keypressed ==NO_KEY){ //키를 누르지 않는 한 날짜와 시간이 계속 표시되므로 숫자가 혼동되지 않도록 매번 화면을 지워야 합니다 // 그리고 화면이 올바르게 표시되도록 약간의 지연을 추가해야 합니다. 그렇지 않으면 작동하지 않습니다. keypressed =myKeypad.getKey(); lcd.clear(); //여기서 LCD를 지운 후 모듈에서 시간을 가져와 일반적인 LCD 기능을 사용하여 화면에 인쇄합니다. myRTC.updateTime(); if(myRTC.hours==A_hour &&myRTC.minutes==A_minute &&AlarmIsActive==1 &&myRTC.seconds>=0 &&myRTC.seconds <=2){ while(keypressedx ==NO_KEY){ 톤(부저, 1000); //톤을 수정하거나 사운드를 직접 만들 수 있습니다. delay(100); 톤(부저, 2000); 지연(100); lcd.clear(); lcd.print("일어나세요!!!"); //알람이 울릴 때 표시할 메시지 keypressedx =myKeypad.getKey(); } } keypressedx =NO_KEY; 노톤(부저); lcd.setCursor(0,0); lcd.print(myRTC.dayofmonth); lcd.print("/"); lcd.print(myRTC.month); lcd.print("/"); lcd.print(myRTC.year); lcd.setCursor(0,1); lcd.print(myRTC.시간); lcd.print(":"); lcd.print(myRTC.분); lcd.print(":"); lcd.print(myRTC.seconds); 지연(100); } if (keypressed =='*') //누른 키를 확인할 때마다 "*"를 누를 때만 설정을 진행합니다. { lcd.clear(); lcd.print("설정"); 지연(1000); lcd.clear(); lcd.print("설정 연도"); //이것이 어떻게 작동하는지 이해할 수 있도록 먼저 "setup"을 표시한 다음 "setup year"를 인쇄하고 이제 일반적으로 연도를 쓸 수 있습니다(2-0-1-8) //자동으로 설정을 설정합니다. 월...끝날 때까지 //키패드의 키는 모두 chars(c)로 간주되므로 int로 변환해야 합니다. 그렇게 한 다음 저장합니다(i) //수학을 수행하고 연도를 구합니다. month... int로 RTC에 주입할 수 있으므로 그렇지 않으면 컴파일되지 않습니다 //4월과 같은 달은 3월에 대해 04, 03을 작성해야 합니다... 그렇지 않으면 다음 매개변수로 전달되지 않습니다 //The RTC virtuabotix 라이브러리는 이미 이상한 시간과 날짜를 허용하지 않도록 설정되어 있습니다(45/17/1990)(58:90:70). 예, 오래된 날짜는 오류로 간주됩니다. char keypressed2 =myKeypad.waitForKey(); if (keypressed2 !=NO_KEY &&keypressed2 !='*' &&keypressed2 !='#' &&keypressed2 !='A' &&keypressed2 !='B' &&keypressed2 !='C' &&keypressed2 !='D' ) { c1 =키 누름2; lcd.setCursor(0, 1); lcd.print(c1); } 문자 keypressed3 =myKeypad.waitForKey(); if (keypressed3 !=NO_KEY &&keypressed3 !='*' &&keypressed3 !='#' &&keypressed3 !='A' &&keypressed3 !='B' &&keypressed3 !='C' &&keypressed3 !='D' ) { c2 =키 누름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 =키 누름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 =키 누름5; lcd.setCursor(3, 1); lcd.print(c4); } i1=(c1-48)*1000; //누른 키는 문자에 저장됩니다. int로 변환한 다음 곱셈을 수행하여 코드를 int of xxxx i2=(c2-48)*100; i3=(c3-48)*10; i4=c4-48; 정수 N_년=i1+i2+i3+i4; 지연(500); lcd.clear(); lcd.print("설정 월");//////////////////////////////////////// //////////////////////// char keypressed6 =myKeypad.waitForKey(); // 여기에서 모든 프로그램은 4자리를 입력할 때까지 중지된 다음 위의 코드와 비교됩니다. if (keypressed6 !=NO_KEY &&keypressed6 !='*' &&keypressed6 !='#' &&keypressed6 !='A' &&keypressed6 !='B' &&keypressed6 !='C' &&keypressed6 !='D' ) { c1 =keypressed6; lcd.setCursor(0, 1); lcd.print(c1); } 문자 keypressed7 =myKeypad.waitForKey(); if (keypressed7 !=NO_KEY &&keypressed7 !='*' &&keypressed7 !='#' &&keypressed7 !='A' &&keypressed7 !='B' &&keypressed7 !='C' &&keypressed7 !='D' ) { c2 =키 누름7; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_month=i1+i2; 지연(500); lcd.clear(); lcd.print("설정일"); ////////////////////////////////////////////////////// ////////////// 문자 keypressed8 =myKeypad.waitForKey(); // 여기서 모든 프로그램은 4자리 숫자를 입력할 때까지 중지된 다음 위의 코드와 비교됩니다. 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 =키 누름9; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; 정수 N_day=i1+i2; 지연(500); lcd.clear(); lcd.print("설정 시간");//////////////////////////////////////// /////////////////////////////////////////////:char keypressed10 =myKeypad. 대기 키(); // 여기서 모든 프로그램은 4자리 숫자를 입력할 때까지 중지된 다음 위의 코드와 비교됩니다. if (keypressed10 !=NO_KEY &&keypressed10 !='*' &&keypressed10 !='#' &&keypressed10 !='A' &&keypressed10 !='B' &&keypressed10 !='C' &&keypressed10 !='D' ) { c1 =keypressed10; lcd.setCursor(0, 1); lcd.print(c1); } 문자 keypressed11 =myKeypad.waitForKey(); if (keypressed11 !=NO_KEY &&keypressed11 !='*' &&keypressed11 !='#' &&keypressed11 !='A' &&keypressed11 !='B' &&keypressed11 !='C' &&keypressed11 !='D' ) { c2 =키 누름11; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; 정수 N_시간=i1+i2; 지연(500); lcd.clear(); lcd.print("설정 시간");//////////////////////////////////////// ////////////////////////////////////////////:char keypressed12 =myKeypad. 대기 키(); // 여기서 모든 프로그램은 4자리 숫자를 입력할 때까지 중지된 다음 위의 코드와 비교됩니다. if (keypressed12 !=NO_KEY &&keypressed12 !='*' &&keypressed12 !='#' &&keypressed12 !='A' &&keypressed12 !='B' &&keypressed12 !='C' &&keypressed12 !='D' ) { c1 =keypressed12; lcd.setCursor(0, 1); lcd.print(c1); } 문자 keypressed13 =myKeypad.waitForKey(); if (keypressed13 !=NO_KEY &&keypressed13 !='*' &&keypressed13 !='#' &&keypressed13 !='A' &&keypressed13 !='B' &&keypressed13 !='C' &&keypressed13 !='D' ) { c2 =키 누름13; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_분=i1+i2; 지연(500); lcd.clear(); myRTC.setDS1302Time(22, N_분, N_시간, 1, N_일, N_월, N_년); // RTC 모듈에 값으로 전송하는 날짜와 시간 설정이 완료되면 // 22는 초를 나타냅니다. 원하는 경우 설정을 추가할 수도 있습니다. // 1은 다음과 같이 요일을 나타냅니다. 오랫동안 화면에 표시하지 않습니다. 변경하지 않습니다. keypressed=NO_KEY; // "*" 키는 "keypressed"에 저장되므로 해당 값을 제거합니다. 그렇지 않으면 설정에 다시 들어가게 됩니다. }///////////////////// //////////////////////알람 설정//////////////////////////// ////// if (keypressed =='A'){ lcd.clear(); lcd.print(" 알람 설정 "); 지연(1000); lcd.clear(); lcd.print("알람 시간 설정"); char keypressed14 =myKeypad.waitForKey(); // 여기에서 모든 프로그램은 4자리 숫자를 입력할 때까지 중지된 다음 위의 코드와 비교됩니다. if (keypressed14 !=NO_KEY &&keypressed14 !='*' &&keypressed14 !='#' &&keypressed14 !='A' &&keypressed14 !='B' &&keypressed14 !='C' &&keypressed14 !='D' ) { c1 =keypressed14; lcd.setCursor(0, 1); lcd.print(c1); } 문자 keypressed15 =myKeypad.waitForKey(); if (keypressed15 !=NO_KEY &&keypressed15 !='*' &&keypressed15 !='#' &&keypressed15 !='A' &&keypressed15 !='B' &&keypressed15 !='C' &&keypressed15 !='D' ) { c2 =keypressed15; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; A_시간=i1+i2; 지연(500); lcd.clear(); lcd.print("알람 분 설정"); char keypressed16 =myKeypad.waitForKey(); // 여기서 모든 프로그램은 4자리 숫자를 입력할 때까지 중지된 다음 위의 코드와 비교됩니다. if (keypressed16 !=NO_KEY &&keypressed16 !='*' &&keypressed16 !='#' &&keypressed16 !='A' &&keypressed16 !='B' &&keypressed16 !='C' &&keypressed16 !='D' ) { c1 =keypressed16; lcd.setCursor(0, 1); lcd.print(c1); } 문자 keypressed17 =myKeypad.waitForKey(); if (keypressed17 !=NO_KEY &&keypressed17 !='*' &&keypressed17 !='#' &&keypressed17 !='A' &&keypressed17 !='B' &&keypressed17 !='C' &&keypressed17 !='D' ) { c2 =키 누름17; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; A_분=i1+i2; 지연(500); lcd.clear(); 알람IsActive=1; 키 누름 =NO_KEY; } if (keypressed =='B') { lcd.clear(); lcd.print("알람 비활성화"); 알람IsActive=0; 키 누름 =NO_KEY; 지연(500); } else { myRTC.updateTime(); 키 누름 =NO_KEY; } }

    회로도


    제조공정

    1. 비행 시뮬레이터용 Arduino가 있는 LCD 패널
    2. Arduino 관점 시계
    3. Arduino로 DIY 가장 간단한 IV9 Numitron 시계
    4. 단순 워드 클럭(Arduino)
    5. 이슬람 기도 시간이 있는 Arduino 시계
    6. 마스터 시계
    7. Arduino Temp. 3.2 디스플레이가 있는 모니터 및 실시간 시계
    8. Arduino를 사용한 간단한 장애물 센서
    9. 시간 설정 및 알람 기능이 있는 TM1637 디지털 시계
    10. Arduino UNO로 LCD TFT 화면에 이미지 표시하기!