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

베를린 시계

구성품 및 소모품

Arduino UNO
× 1
Maxim 통합 max7219
LED 매트릭스 브레이크아웃에 사용되는 IC만...
× 1
실시간 시계(RTC)
× 1
5mm LED:노란색
× 13
5mm LED:빨간색
× 11
저항 10k 옴
× 1

이 프로젝트 정보

우선...

이것은 Instructables 웹 사이트에서 작성한 자습서의 복사/붙여넣기입니다. 한 사이트에서 다른 사이트로 이동하는 방법을 아직 파악해야 합니다. 그래서 아마도 이것은 원래처럼 매끄럽지 않을 수 있습니다... 하지만, 그다지 일상적이지 않은 시계로 시작하십시오.

소개:베를린 시계

베를린 시계(BerlinUhr 또는 Mengenlehreuhr)는 아마도 최초의 디지털 시계였을 것입니다.

1975년부터 존재했습니다...

여기에서 많은 정보를 찾을 수 있습니다:https://en.wikipedia.org/wiki/Mengenlehreuhr

어떻게 만들어지며 어떻게 시간을 알 수 있나요?

간단히 말해서 4줄의 조명이 있습니다. 위쪽 행은 시간 x 5를 제공하고 다음 행은 1에서 4까지의 "단일 시간"을 제공합니다. 세 번째 행은 "분 x5"를 제공하고 맨 아래 행은 분을 제공합니다.

표시된 그림에서(실제로는 하나의 램프가 고장났습니다...) 시간은 2x5시간 + 3시간 + 6x5분 + 2분입니다.

그래서 13시 32분입니다. 좋아요, 우리 유럽인들은 24시간 단위로 시간을 말하는 데 더 익숙하다고 생각합니다. 시계도 마찬가지입니다.

상단의 가장 큰 표시등이 1초마다 깜박입니다.

이 시계는 아두이노로 만들면 재미있을 것 같아요.

1단계:일부 전자 제품

이 프로젝트에 필요한 것은 무엇입니까?

우선 (물론) 우리의 Arduino.

저는 컴퓨터 근처에 있는 Uno 중 하나를 사용합니다.

시계에 대해 이야기하기 때문에 RTC를 사용할 수 있습니다. DS 1307과 함께 저렴한 것을 사용했습니다.

"디스플레이"의 경우 일부 LED가 필요합니다. 노란색 13개, 5mm, 빨간색 11개를 사용했습니다. (실제로 저는 주변에 레드가 부족해서 RGB를 레드에 사용했습니다...)

브레드보드, 구멍과 "납땜 섬"만 있는 인쇄판. 저는 소위 "유로 카드 포맷"의 일부를 사용했습니다.

내가 사용한 2개의 저항. 하나는 220Ohms(초 LED)이고 다른 하나는 68K입니다.

그리고 하나의 추가 IC:MAX7219.

MAX는 8자리 LED 디스플레이 드라이버입니다. LED 매트릭스에도 사용되기 때문에 많은 사람들이 알고 있습니다.

그것을 쉽게하기 위해 "LedControl"Arduino 라이브러리도 사용했습니다. 아직 없는 경우 여기에서 다운로드할 수 있습니다.

https://github.com/wayoda/LedControl

2단계:설정하기.

다음 위치에서 MAX 7219에 대한 아주 좋은 데이터 시트를 찾을 수 있습니다.

https://www.sparkfun.com/datasheets/Components/Gen...

COM-09622-MAX7219-MAX7221.pdf

해당 데이터 시트에 대해서는 더 이상 다루지 않겠지만 사용할 가치가 있으며 일종의 "재미있는" IC입니다.

Arduino로 이동합니다.

이 구성표에서 매우 간단한 구성을 볼 수 있습니다. SDA 및 SCL을 사용하여 클록(A 1307 브레이크아웃)을 사용하고 MAX 7219로 가는 DataIn, Clock 및 Chipselect, 우리가 사용하는 OUT 13의 추가 출력 깜박이는 "초"LED.

Arduino에서 가장 많은 일이 발생합니다. 시계를 읽고 이를 다른 종류의 출력으로 변환한 다음 데이터를 7219로 보냅니다.

코드를 읽을 때, 나는 그것을 위해 내 자신의 언어인 네덜란드어를 사용한다는 것을 알게 될 것입니다. 예를 들어, 내가 사용하는 int "vijfuren"은 "5시간"을 계산하는 변수이며 "vijfminuten" 및 "vijfminuten1"과 동일합니다. 이 변수는 "5분" 출력을 제공합니다.

스케치에서는 년, 월, 일, 요일도 사용합니다. 이 스케치에서는 필요하지 않지만 나중에 캘린더를 추가할 수도 있습니다.

Fritzing(c) 레이아웃에서 IC는 배선되지 않습니다. 출력이 많기 때문에 쉽게 하기 위해 그렇게 했습니다.

요약하자면:

핀 4와 9는 GND에 연결되고,

19는 VCC입니다.

18, ISet은 저항으로 VCC에 연결됩니다. 이 저항은 출력으로 가는 전류를 제한합니다. 먼저 20K 저항으로 시도했지만 10분 정도 후에 모든 것이 어두워졌습니다. 이제 68K 저항으로 시계가 계속 실행됩니다(24시간 이상). 하지만 빨간색과 노란색의 밝기에는 차이가 있는데, 빨간색이 실제로는 RGB Led이기 때문이라고 생각합니다. 정리해야지...

핀 1은 DataIn이고 이것은 Arduino, 핀 12에서 가져온 것입니다.

핀 12는 Arduino 핀 10에서 오는 로드입니다.

핀 13은 Arduino 11에서 가져온 Clk입니다.

지금까지 7219의 입력에 대해.

출력 살펴보기:

7219는 8개의 7seg 디스플레이에 전원을 공급할 수 있습니다.

이 출력 DIG 0 ~ DIG 4는 여기에서 LED의 "라인"을 구동하는 데 사용됩니다. "5분" 라인에는 11개의 LED가 있으므로 DIG 1과 DIG 2를 사용하여 구동합니다.

다른 출력:세그먼트 A ~ G 및 DP(일반 7Seg 디스플레이).

이 경우(LedControl 사용), Binary Words(B01010100과 같은 바이트 형식)를 보냅니다.

그리고 거기에서 나는 실수를 저질렀다. 일부 논리에서는 SEG A가 MSB가 되고 B가 두 번째 최상위 비트가 되는 식으로 DP가 될 때까지 LSB(최하위 비트)가 될 것이라고 말했습니다. Wrong... 이런저런 이유로 IC 제조사들은 DP가 MSB가 될 것이라고 생각했습니다. 논리가 안보이네요...

이미 LED를 납땜했기 때문에 코딩을 변경하게 되었습니다...

3단계:LED

이 회로도에서 LED가 함께 연결되는 방식을 볼 수 있습니다. 나는 처음 세 개만 그렸고 나머지는 같은 방식으로 그렸습니다.

초 LED는 핀 13에 바로 연결됩니다.

그림은 "작동 방식"을 보여줍니다. 17시 47분입니다...

좋아요, 맨 아래 줄은 그렇게 명확하지 않습니다. 브레드보드에 있습니다. 그것이 정말로 효과가 있다는 것을 믿으시기 바랍니다. (그렇습니다!).

오, 앞으로 한 걸음 더...

4단계:"마지막" 단계, 코드.

#include  #include const int DS1307 =0x68;// A5 =SCL, A4 =SDA const char* 일[] ={"일요일", "월요일" , "화요일", "수요일", "목요일", "금요일", "토요일"};const char* months[] ={"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"};바이트 초 =0; 바이트 분 =0; 바이트 시간 =0; 바이트 요일 =0; 바이트 월일 =0; 바이트 월 =0; 바이트 연도 =0; 바이트 마지막 분 =0; 바이트 lastSecond =0; int 주도 =13; 바이트 널 =B0000000; 바이트 엔 =B01000000; 바이트 트위 =B01100000; 바이트 드라이 =B01110000; 바이트 비어 =B01111000; 바이트 vijf =B01111100; 바이트 zes =B01111110; 바이트 제벤 =B01111111; 바이트 acht =B11111111; 바이트 부정 =B01000000; 바이트 텐 =B01100000;바이트 엘프 =B01110000; 정수 =0; 정수 b =0; 정수 c =0; int vijfMinTwee=0;int uitgang =낮음; /*핀 12는 DataIn에 연결되고 핀 11은 CLK에 연결됩니다. 핀 10은 LOAD에 연결됩니다. */LedControl lc=LedControl(12, 11, 10, 1);unsigned long delaytime=100; 무효 설정() { Wire.begin(); Serial.begin(9600);pinMode(LED, OUTPUT);lc.shutdown(0, false); /* 밝기를 중간 값으로 설정 */ lc.setIntensity(0, 8); /* 디스플레이를 지우고 */ lc.clearDisplay(0);}void loop() { readTime(); digitalWrite(Led, uitgang); if (second !=lastSecond){ if (uitgang ==LOW) uitgang =HIGH; 그렇지 않으면 uitgang =낮음; digitalWrite(Led, 의강); lastSecond =두 번째; } if (분 !=lastMinute) { printTime(); lastMinute =분;}}byte bcdToDec(byte val) {return ((val/16*10) + (val%16));}void printTime() { char 버퍼[3];long minn =min;long uren =시간; int vijfmin =분 /5; int enminuut =minn -(vijfmin * 5);int vijfuren =uren/5; int eenuren =uren - (vijfuren *5); a =vijfmin; 디지털(); vijfmin =b; vijfMinTwee =c;a =enminuut;digitaal(); 최소 단위 =b; a=비퓨렌; 디지털(); vijfuren =b;a =enuren; 디지털();enuren =b; lc.setRow(0, 4, vijfuren);lc.setRow(0, 3, enuren); lc.setRow(0, 1, vijfmin); lc.setRow(0, 2, vijfMinTwee); lc.setRow(0, 0, enminuut);} 무효 readTime() { Wire.beginTransmission(DS1307); Wire.write(바이트(0)); Wire.endTransmission();Wire.requestFrom(DS1307, 7); 초 =bcdToDec(Wire.read()), 분 =bcdToDec(Wire.read()), 시간 =bcdToDec(Wire.read()), 요일 =bcdToDec(Wire.read()); 월일 =bcdToDec(Wire.read()); 월 =bcdToDec(Wire.read()); 연도 =bcdToDec(Wire.read()); }void digital(){switch (a){ case 0:b=nul; c=무효; 부서지다; 사례 1:b =엔; c=무효; 부서지다; 경우 2:b =twee; c=무효; 부서지다; 사례 3:b =건조; c=무효; 부서지다; 사례 4:b =비에르; c=무효; 중단; 경우 5:b =vijf; c=무효; 부서지다; 사례 6:b =zes; c=무효; 부서지다; 사례 7:b =zeven; c=무효; 부서지다; 사례 8:b =acht; c=무효; 부서지다; 사례 9:b =acht; c =네겐; 부서지다; 사례 10:b=acht; c =타이엔; 부서지다; 사례 11:b=acht; c =엘프; 부서지다; } } 

아주 간단합니다.

이 스케치의 또 다른 이점:이제 네덜란드어로 계산하는 방법을 배웁니다... 0에서 11까지...;-)

즐기시기 바랍니다!

마크

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

코드

깃허브
https://github.com/wayoda/LedControlhttps://github.com/wayoda/LedControl

제조공정

  1. 시간 상수 방정식
  2. 뻐꾸기 시계
  3. 모래시계
  4. 보기
  5. 파이썬 수면()
  6. Rpibot – 로봇 공학 학습 정보
  7. Arduino 관점 시계
  8. Verilog 클록 생성기
  9. 파이썬 - 날짜 및 시간
  10. 무한 거울 시계