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

Arduino RTC LED 시계

구성품 및 소모품

Arduino UNO
× 1
실시간 시계(RTC)
× 1
저항 1k 옴
× 15
스루 홀 저항기, 120옴
× 15
선형 조정기(7805)
× 1
커패시터 22pF
× 1
16MHz 크리스탈
× 1
커패시터 10μF
× 1
코인 셀 배터리 CR2032
× 1
배터리 홀더, 리튬 CR2032
× 1
5mm LED:녹색
× 190
바이폴라 - RF 트랜지스터, NPN
× 10
범용 트랜지스터 PNP
× 12
촉각 스위치, 상단 작동
× 4
Digilent 60W PCIe 12V 5A 전원 공급 장치
× 1

필요한 도구 및 기계

납땜 인두(일반)
납땜 와이어, 무연
Digilent Mastech MS8217 자동 범위 디지털 멀티미터

이 프로젝트 정보

먼저 다음 라이브러리를 다운로드해야 합니다(링크는 이 페이지 끝에 제공됨) 1. 와이어.h

2. RTClib.h부품 목록

동영상 보기

RTC 시계 모듈입니다.

이것은 Arduino 회로입니다.

RTC 배선 연결

RTC 스위치

양극 및 음극 식별

회로도(공통 양극)

공통 음극 LED를 사용하는 경우 다음과 같이 변경하십시오.

전원 공급 장치

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

코드

<울>
  • LED 시계 코드
  • LED 시계 코드Arduino
    이 코드를 다운로드하고 프로젝트에 업로드하십시오.
    /* 4자리 7세그먼트 디스플레이:http://www.sparkfun.com/products/9483 데이터시트:http://www.sparkfun.com/datasheets/Components/LED/ 7-Segment/YSD-439AR6B-35.pdf */// http://nicuflorica.blogspot.com// 데이터 시트에서 niq_ro에 의해 수정된 연결:http://www.tme.eu/ro/Document/dfc2efde2e22005fd28615e298Kea2655 -563XSA.pdf// BMIAK Basnayaka에 의해 수정된 코드// http://www.setnfix.comint digit1 =11; 정수 숫자2 =10; 정수 숫자3 =9; 정수 4 =6; 정수 5 =5; 정수 6 =3; //필요한 경우 Arduino에서 ATmega DIP28로 핀 매핑//http://www.arduino.cc/en/Hacking/PinMappingint segA =0; //디스플레이 핀 11int segB =1; //디스플레이 핀 7int segC =2; //디스플레이 핀 4int segD =4; //디스플레이 핀 2int segE =7; //디스플레이 핀 1int segF =8; //디스플레이 핀 10int segG =12; //디스플레이 핀 5int segDP =13; // 디스플레이 핀 3#include #include "RTClib.h"RTC_DS1307 RTC;// I2C 및 Wire lib// http://learn.adafruit의 원래 sketck를 통해 연결된 DS1307 RTC를 사용하는 날짜 및 시간 기능 .com/ds1307-real-time-clock-breakout-board-kit/// http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-에서 SQW=1Hz로 부품 추가 i2c-bus/// 수동 조정으로 부품 추가 http://www.bristolwatch.com/arduino/arduino_ds1307.htmbyte SW0 =A0;byte SW1 =A2;byte SW2 =A1;byte SWT =A3;int Adhr=0; int Admnt=0;int D =0;int Z =0;// 16진수 변환에서 16진수 사용long zh, uh, ore;long zm, um, miniti;void setup() { //Serial.begin(57600); Wire.begin(); RTC.begin(); // RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));// 시계를 설정해야 하는 경우... // 위 라인에서 // 제거 LEDWire.beginTransmission(0x68) 깜박임을 위한 부분 코드;Wire.write(0x07); // 포인터를 SQW 주소로 이동 // Wire.write(0x00); // SQW 핀을 끕니다. Wire.write(0x10); // 0x10(hex) 00010000(binary)을 제어 레지스터로 전송 - 1Hz에서 구형파 켜기// Wire.write(0x13); // 0x13(16진수) 00010011(바이너리) 전송 32kHzWire.endTransmission(); 핀모드(segA, 출력); 핀모드(세그B, 출력); 핀모드(segC, OUTPUT); 핀모드(세그D, 출력); 핀모드(세그, 출력); 핀모드(segF, 출력); 핀모드(세그G, 출력); 핀 모드(segDP, 출력); 핀모드(숫자1, 출력); 핀모드(숫자2, 출력); 핀모드(숫자3, 출력); 핀모드(숫자4, 출력); 핀모드(숫자5, 출력); pinMode(digit6, OUTPUT);//Serial.begin(9600);pinMode(SW0, INPUT); // 아니요. 푸시 버튼 스위치 핀 모드(SW1, INPUT); // 아니요. 푸시 버튼 스위치 핀 모드(SW2, INPUT); // 아니요. 푸시 버튼 스위치 핀 모드(SWT, INPUT); // 아니요. 푸시 버튼 스위치digitalWrite(SW0, HIGH); // 풀업 ondigitalWrite(SW1, HIGH);digitalWrite(SW2, HIGH);digitalWrite(segDP, LOW);}void loop() { DateTime now =RTC.now(); 긴 HR =now.hour()*1000; 긴 시간 =(HR*10)+now.minute()*100+now.second(); Adhr =now.hour(); Admnt=now.minute();int DIM =0;if(팀프>=250000)팀프=팀프-240000;//---------------------- --------------------------------//12/24시간 똥싸기 //--------- -------------------------------------------if (팀프 <130000 ){digitalWrite(segDP, LOW);}if (digitalRead(SWT)==0){지연(300); if (D ==0) { D =1;delay(200);} else{D =0;}}if (D ==0){ if (timp>
    =130000){timp=timp-120000;digitalWrite( segDP, HIGH);}}if (timp>
    =130000){ digitalWrite(segDP, LOW);}if ((D==1)&(timp <130000))digitalWrite(segDP, LOW);//--- -------------------------------------------------- - //int timp =(now.minute(), DEC);// displayNumber(12); // 이것은 표시할 숫자입니다. for(int i =100; i>0; i--) { if (timp>
    =100000) displayNumber01(timp); 그렇지 않으면 displayNumber02(팀프); } for(int i =100; i>0; i--) { if (팀프>=100000) displayNumber03(팀프); 그렇지 않으면 displayNumber04(팀프); } for(int i =100; i>0; i--) { if (팀프>=100000) displayNumber05(팀프); 그렇지 않으면 displayNumber06(팀프); } if (디지털 읽기(SW0)==0){지연(100);Z=1; set_time(); }// 스위치를 눌러 시간을 설정합니다.}void set_time() { byte minutes1 =0; 바이트 시간1 =0; 바이트 분 =0; 바이트 시간 =0; 시간 =Adhr; 분=주의; if ((시간 &0x0f)> 9) 시간 =시간 + 6; if (시간> 0x24) 시간 =1; // Mid night 12.00은 12:00(PM LED 켜짐) 또는 24:00으로 표시됩니다. //if(hours> 0x24) hours =1; // 자정 12:00은 0:00으로 표시됩니다. if ((분 &0x0f)> 9) 분 =분 + 6; if (분> 0x59) 분 =0; while (!(Z==0)){ // 종료하려면 시간 설정 스위치를 놓아야 합니다. int TST =digitalRead(SW2); while (TST==0) // 시간 설정 { hour++; // 16진수를 16진수로 변환:zh =시간 / 16; 어 =시간 - 16 * zh; 광석 =10 * zh + 어; zm =분 / 16; 음 =분 - 16 * zm; 미니티 =10 * zm + 음; if ((시간 &0x0f)> 9) 시간 =시간 + 6; if (시간> 0x24) 시간 =1; // Mid night 12.00은 12:00(PM LED 켜짐) 또는 24:00으로 표시됩니다. //if(hours> 0x24) hours =1; // 자정 12:00은 0:00으로 표시됩니다. if (hours <=9) delay(1); for(int i =400; i>0; i--) { displayNumber01(ore*10000+미니티*100); } TST =디지털 읽기(SW2); } while (!(digitalRead(SW1))) // 분 설정 { minutes++; // 16진수를 16진수로 변환:zh =시간 / 16; 어 =시간 - 16 * zh; 광석 =10 * zh + 어; zm =분 / 16; 음 =분 - 16 * zm; 미니티 =10 * zm + 음; for(int i =400; i>0; i--) { displayNumber01(ore*10000+미니티*100); } if ((분 &0x0f)> 9) 분 =분 + 6; if (분> 0x59) 분 =0; if (분>=9) delay(1); } Wire.beginTransmission(0x68); // DS1307 활성화 Wire.write(0); // 시작 위치 Wire.write(0x00); //초 Wire.write(분); //분 Wire.write(0x80 | 시간); //시간(24시간) Wire.write(0x06); // 01-07일 Wire.write(0x01); // 날짜 0-31 Wire.write(0x05); // 0-12월 Wire.write(0x09); // 00-99년 Wire.write(0x10); // 컨트롤 0x10은 핀 7에서 1HZ 구형파를 생성합니다. Wire.endTransmission(); // 16진수를 16진수로 변환:zh =시간 / 16; 어 =시간 - 16 * zh; 광석 =10 * zh + 어; zm =분 / 16; 음 =분 - 16 * zm; 미니티 =10 * zm + 음; for(int i =400; i>0; i--) { displayNumber01(ore*10000+미니티*100); }지연(100); //Serial.print(digitalRead(SW0));if (digitalRead(SW0)==0) Z =0; 지연(300); }//Serial.print(SW2);}void displayNumber01(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //켜기 짧은 시간 동안의 숫자 switch(digit) { 경우 1:digitalWrite(digit1, DIGIT_ON); 부서지다; 경우 2:digitalWrite(digit2, DIGIT_ON); //digitalWrite(segDP, LOW); 부서지다; 사례 3:digitalWrite(digit3, DIGIT_ON); 부서지다; 경우 4:digitalWrite(digit4, DIGIT_ON); 부서지다; 사례 5:digitalWrite(digit5, DIGIT_ON); 부서지다; 사례 6:digitalWrite(digit6, DIGIT_ON); 부서지다; } lightNumber(디스플레이 % 10); 표시하려면 // 10; 지연 마이크로초(DISPLAY_BRIGHTNESS); //모든 세그먼트 끄기 lightNumber(10); //모든 숫자 끄기 digitalWrite(digit1, DIGIT_OFF); 디지털 쓰기(digit2, DIGIT_OFF); 디지털 쓰기(digit3, DIGIT_OFF); 디지털 쓰기(digit4, DIGIT_OFF); 디지털 쓰기(digit5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber02(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //숫자 켜기 짧은 시간 동안 switch(digit) { 경우 1:lightNumber(10); 부서지다; 경우 2:digitalWrite(digit2, DIGIT_ON); //digitalWrite(segDP, LOW); 부서지다; 사례 3:digitalWrite(digit3, DIGIT_ON); 부서지다; 경우 4:digitalWrite(digit4, DIGIT_ON); 부서지다; 사례 5:digitalWrite(digit5, DIGIT_ON); 부서지다; 사례 6:digitalWrite(digit6, DIGIT_ON); 부서지다; } lightNumber(디스플레이 % 10); 표시하려면 // 10; 지연 마이크로초(DISPLAY_BRIGHTNESS); //모든 세그먼트 끄기 lightNumber(10); //모든 숫자 끄기 digitalWrite(digit1, DIGIT_OFF); 디지털 쓰기(digit2, DIGIT_OFF); 디지털 쓰기(digit3, DIGIT_OFF); 디지털 쓰기(digit4, DIGIT_OFF); 디지털 쓰기(digit5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber03(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //숫자 켜기 짧은 시간 동안 switch(digit) { 경우 1:digitalWrite(digit1, DIGIT_ON); 부서지다; 경우 2:digitalWrite(digit2, DIGIT_ON); 부서지다; 사례 3:digitalWrite(digit3, DIGIT_ON); 부서지다; 경우 4:digitalWrite(digit4, DIGIT_ON); 부서지다; 사례 5:digitalWrite(digit5, DIGIT_ON); 부서지다; 사례 6:digitalWrite(digit6, DIGIT_ON); 부서지다; } lightNumber(디스플레이 % 10); 표시하려면 // 10; 지연 마이크로초(DISPLAY_BRIGHTNESS); //모든 세그먼트 끄기 lightNumber(10); //모든 숫자 끄기 digitalWrite(digit1, DIGIT_OFF); 디지털 쓰기(digit2, DIGIT_OFF); 디지털 쓰기(digit3, DIGIT_OFF); 디지털 쓰기(digit4, DIGIT_OFF); 디지털 쓰기(digit5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber04(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //숫자 켜기 짧은 시간 동안 switch(digit) { 경우 1:lightNumber(10); 부서지다; 경우 2:digitalWrite(digit2, DIGIT_ON); 부서지다; 사례 3:digitalWrite(digit3, DIGIT_ON); 부서지다; 경우 4:digitalWrite(digit4, DIGIT_ON); 부서지다; 사례 5:digitalWrite(digit5, DIGIT_ON); 부서지다; 사례 6:digitalWrite(digit6, DIGIT_ON); 부서지다; } lightNumber(디스플레이 % 10); 표시하려면 // 10; 지연 마이크로초(DISPLAY_BRIGHTNESS); //모든 세그먼트 끄기 lightNumber(10); //모든 숫자 끄기 digitalWrite(digit1, DIGIT_OFF); 디지털 쓰기(digit2, DIGIT_OFF); 디지털 쓰기(digit3, DIGIT_OFF); 디지털 쓰기(digit4, DIGIT_OFF); 디지털 쓰기(digit5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber05(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //숫자 켜기 짧은 시간 동안 switch(digit) { 경우 1:digitalWrite(digit1, DIGIT_ON); 부서지다; 경우 2:digitalWrite(digit2, DIGIT_ON); 부서지다; 사례 3:digitalWrite(digit3, DIGIT_ON); 부서지다; 경우 4:digitalWrite(digit4, DIGIT_ON); 부서지다; 사례 5:digitalWrite(digit5, DIGIT_ON); 부서지다; 사례 6:digitalWrite(digit6, DIGIT_ON); 부서지다; } lightNumber(디스플레이 % 10); 표시하려면 // 10; 지연 마이크로초(DISPLAY_BRIGHTNESS); //모든 세그먼트 끄기 lightNumber(10); //모든 숫자 끄기 digitalWrite(digit1, DIGIT_OFF); 디지털 쓰기(digit2, DIGIT_OFF); 디지털 쓰기(digit3, DIGIT_OFF); 디지털 쓰기(digit4, DIGIT_OFF); 디지털 쓰기(digit5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber06(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //숫자 켜기 짧은 시간 동안 switch(digit) { case 1://digitalWrite(digit1, DIGIT_ON); 부서지다; 경우 2:digitalWrite(digit2, DIGIT_ON); 부서지다; 사례 3:digitalWrite(digit3, DIGIT_ON); 부서지다; 경우 4:digitalWrite(digit4, DIGIT_ON); 부서지다; 사례 5:digitalWrite(digit5, DIGIT_ON); 부서지다; 사례 6:digitalWrite(digit6, DIGIT_ON); 부서지다; } lightNumber(디스플레이 % 10); 표시하려면 // 10; 지연 마이크로초(DISPLAY_BRIGHTNESS); //모든 세그먼트 끄기 lightNumber(10); //모든 숫자 끄기 digitalWrite(digit1, DIGIT_OFF); 디지털 쓰기(digit2, DIGIT_OFF); 디지털 쓰기(digit3, DIGIT_OFF); 디지털 쓰기(digit4, DIGIT_OFF); 디지털 쓰기(digit5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} // 숫자가 주어지면 해당 세그먼트를 켭니다//숫자 ==10이면 number를 끕니다. lightNumber(int numberToDisplay) {//Common Anode ********* ****************#define SEGMENT_ON HIGH#define SEGMENT_OFF LOW/* 공통 음극 ***************** #define SEGMENT_ON LOW # 정의 SEGMENT_OFF HIGH*/ switch (numberToDisplay){ case 0:digitalWrite(segA, SEGMENT_ON); 디지털 쓰기(segB, SEGMENT_ON); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_ON); 디지털 쓰기(segE, SEGMENT_ON); 디지털 쓰기(segF, SEGMENT_ON); 디지털 쓰기(segG, SEGMENT_OFF); 부서지다; 사례 1:digitalWrite(segA, SEGMENT_OFF); 디지털 쓰기(segB, SEGMENT_ON); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_OFF); 디지털 쓰기(segE, SEGMENT_OFF); 디지털 쓰기(segF, SEGMENT_OFF); 디지털 쓰기(segG, SEGMENT_OFF); 부서지다; 사례 2:digitalWrite(segA, SEGMENT_ON); 디지털 쓰기(segB, SEGMENT_ON); 디지털 쓰기(segC, SEGMENT_OFF); 디지털 쓰기(segD, SEGMENT_ON); 디지털 쓰기(segE, SEGMENT_ON); 디지털 쓰기(segF, SEGMENT_OFF); 디지털 쓰기(segG, SEGMENT_ON); 부서지다; 사례 3:digitalWrite(segA, SEGMENT_ON); 디지털 쓰기(segB, SEGMENT_ON); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_ON); 디지털 쓰기(segE, SEGMENT_OFF); 디지털 쓰기(segF, SEGMENT_OFF); 디지털 쓰기(segG, SEGMENT_ON); 부서지다; 사례 4:digitalWrite(segA, SEGMENT_OFF); 디지털 쓰기(segB, SEGMENT_ON); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_OFF); 디지털 쓰기(segE, SEGMENT_OFF); 디지털 쓰기(segF, SEGMENT_ON); 디지털 쓰기(segG, SEGMENT_ON); 부서지다; 사례 5:digitalWrite(segA, SEGMENT_ON); 디지털 쓰기(segB, SEGMENT_OFF); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_ON); 디지털 쓰기(segE, SEGMENT_OFF); 디지털 쓰기(segF, SEGMENT_ON); 디지털 쓰기(segG, SEGMENT_ON); 부서지다; 사례 6:digitalWrite(segA, SEGMENT_ON); 디지털 쓰기(segB, SEGMENT_OFF); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_ON); 디지털 쓰기(segE, SEGMENT_ON); 디지털 쓰기(segF, SEGMENT_ON); 디지털 쓰기(segG, SEGMENT_ON); 부서지다; 사례 7:digitalWrite(segA, SEGMENT_ON); 디지털 쓰기(segB, SEGMENT_ON); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_OFF); 디지털 쓰기(segE, SEGMENT_OFF); 디지털 쓰기(segF, SEGMENT_OFF); 디지털 쓰기(segG, SEGMENT_OFF); 부서지다; 사례 8:digitalWrite(segA, SEGMENT_ON); 디지털 쓰기(segB, SEGMENT_ON); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_ON); 디지털 쓰기(segE, SEGMENT_ON); 디지털 쓰기(segF, SEGMENT_ON); 디지털 쓰기(segG, SEGMENT_ON); 부서지다; 사례 9:digitalWrite(segA, SEGMENT_ON); 디지털 쓰기(segB, SEGMENT_ON); 디지털 쓰기(segC, SEGMENT_ON); 디지털 쓰기(segD, SEGMENT_ON); 디지털 쓰기(segE, SEGMENT_OFF); 디지털 쓰기(segF, SEGMENT_ON); 디지털 쓰기(segG, SEGMENT_ON); 부서지다; // 모든 세그먼트가 ON 케이스 10:digitalWrite(segA, SEGMENT_OFF); 디지털 쓰기(segB, SEGMENT_OFF); 디지털 쓰기(segC, SEGMENT_OFF); 디지털 쓰기(segD, SEGMENT_OFF); 디지털 쓰기(segE, SEGMENT_OFF); 디지털 쓰기(segF, SEGMENT_OFF); 디지털 쓰기(segG, SEGMENT_OFF); 부서지다; }// 코딩 끝, BUDHUSARANAI, 행운을 빕니다. }

    회로도

    LED가 있는 SSD의 배선입니다.

    제조공정

    1. Arduino 관점 시계
    2. 단순 워드 클럭(Arduino)
    3. Nokia 5110 LCD의 DIY Simple 20kHz Arduino 오실로스코프
    4. 마스터 시계
    5. 스마트 블라인드
    6. 이탈리아어 단어 시계
    7. Bluetooth가 탑재된 Arduino로 LED 제어!
    8. Arduino Quadruped
    9. 7-세그먼트 어레이 시계
    10. Arduino용 절연 아날로그 입력