Arduino에서 시계를 만드는 방법. RTC 모듈을 사용하지 않고 Arduino에서 시계를 작동합니다. DS3231 실시간 클록과 간단한 프로그램의 연결 다이어그램

시력 기관은 모든 사람의 삶에서 중요한 역할을 하며, 그 질병은 모든 병리 중에서 특별한 위치를 차지합니다. 시각 장애는 어린이와 성인 모두에게 발생할 수 있습니다. 이러한 유형의 병리 중 하나는 근시이고 이 질병의 두 번째 이름은 근시입니다. 근시가 있으면 시력이 감소하고 사람은 가까운 거리에 있는 물체만 잘 볼 수 있습니다.

  • 유전적 요인, 즉 근시는 유전될 수 있습니다.
  • 시력 기관에 심각한 부담을 주고 눈을 편안하게 하는 운동을 수행하지 못합니다.
  • 선천성 및 후천성 병리;
  • 안구 부상;
  • 위반 올바른 모드눈 작업.

청소년기의 근시 진단은 유전적 요인에 따라 발생하는 경우 매우 흔한 것으로 간주됩니다. 노년기에 시력 장애의 주요 원인은 수정체의 조절 또는 경화성 변화입니다.

근시로 시력을 회복하는 방법

성공 완전한 회복근시의 시력은 병리학의 정도에 따라 달라지며, 병리가 적을수록 달성 가능성이 커집니다. 긍정적인 결과. 근시가 약하거나 중간 정도인 경우 다양한 안구 운동을 통해 시력을 회복할 수 있습니다. 시각 기관을 위한 특별 운동은 인체의 여러 문제를 한 번에 해결하는 데 도움이 됩니다.

  • 눈 근육을 훈련시키십시오;
  • 눈을 편안하게 도와주세요.


빠르고 긍정적인 결과를 얻으려면 가능할 때마다 이러한 신체 운동을 하는 것이 좋습니다. 전제 조건보유의 규칙 성입니다.

고도근시로 진단되면 다음과 같은 방법으로 시력을 회복할 수 있습니다. 급진적인 방법제시된 것 간단한 조작그리고 레이저를 이용해서 근시의 시력을 회복할 수 있는 또 다른 기회는 다음을 포함하는 보존적 치료 방법을 사용하는 것입니다.

  • 약물;
  • 물리 치료 절차 수행;
  • 특수 충전;
  • 콘택트렌즈와 안경의 사용.

제외하고 특별한 방법치료는 공간배분과 일반 조건환자의 건강. 신체의 보호 기능을 강화하고 강화하려면 다음을 사용할 수 있습니다.

  • 비타민 복합체 복용;
  • 다양한 종류의 마사지;
  • 활동적인 스포츠;
  • 조직 적절한 영양


그러나 근시를 치료하는 다양한 방법에도 불구하고 항상 긍정적인 결과를 얻을 수 있는 것은 아니며, 이 경우 수술을 통해 시력을 회복할 수 있습니다.

시력 회복 수술

오늘날 근시의 경우 수술을 통해 시력을 회복할 수 있으며 다양한 치료 방법이 사용됩니다.

  • 경화증은 환자의 진행 속도가 빠른 근시인 경우에 가장 자주 시행됩니다. 이러한 유형의 외과적 개입을 수행하면 공막을 강화하여 다양한 유형의 합병증 발생을 예방하는 데 도움이 됩니다.
  • 혈액 공급에 문제가 있는 경우 눈 혈관 수술을 시행합니다.
  • 레이저 교정은 안과에서 사용되는 가장 일반적인 수술 중 하나입니다.

레이저 교정

시력을 회복하기 위해 일반적으로 중등도 근시에서 수행되는 레이저 교정이 점점 더 많이 사용되고 있습니다. 이는 레이저의 영향으로 눈의 굴절력을 교정하는 것을 기반으로 합니다.

이는 기능의 정상화가 아니라 수술을 통해 각막의 특징을 회복시켜 영상에 집중할 수 있도록 하는 것입니다. 황반망막. 레이저를 사용하여 각막 표면을 수정하는 데 도움이 되는 작은 절개를 만듭니다.


외과 적 개입노출 깊이를 조절하는 데 도움이 되는 특수 장치가 사용됩니다. 레이저 교정은 최소 침습적 치료 방법으로 치료 시간은 몇 분에 불과하지만, 그럼에도 불구하고 환자는 시술 후 며칠 동안 의료기관에 머물게 된다.

굴절수술

이 치료법은 환자가 심한 근시로 진단되었을 때 시력을 회복하기 위해 사용됩니다. 시력 기관에 대한 수술 효과는 다음과 같은 방법으로 수행할 수 있습니다.

  • 실제 렌즈 삽입;
  • 렌즈 제거 또는 교체;
  • 각막의 변화;
  • 방사형 각막절개술을 시행합니다.

근시의 불편한 특징 높은 온도회복 후에도 시력이 다시 악화될 수 있다는 사실입니다. 이런 경우에는 반복적인 수술이 필요합니다.

보수적 치료

근시 치료에서 긍정적인 결과를 얻으려면 먼저 근시 진행 정도를 확인하는 것이 필요합니다. 안정적이고 진행되지 않는 정도의 근시가 발견되면 보존적 치료 방법을 사용하여 시력을 회복할 수 있습니다.

이 경우 약물은 원하는 결과를 얻지 못할 가능성이 높으며 대부분의 경우 전문가는 근육의 경련 상태를 줄이는 것을 목표로 하는 약물을 처방합니다. 더 효과적인 수단치료는 눈을 위한 특별한 운동 세트를 사용하고 시각 기관의 올바른 작동 모드를 준수하는 것입니다.


을 위한 자기 실행눈 체조에서는 다음 운동을 사용할 수 있습니다.

  • 1~2분 동안 눈을 빠르게 번갈아 깜박입니다.
  • 앉은 자세에서는 몇 초 동안 눈을 꽉 감았다가 다시 열어야 합니다.
  • 눈을 감고 손가락 끝을 눈꺼풀 위에 놓고 가볍게 누르십시오.
  • 눈으로 다른 방향으로 원형 회전을 수행하십시오.

근시는 위험한 질병, 이는 사람의 정상적인 생활과 신체의 발달을 방해할 수 있습니다. 근시인 경우 수술을 통해 빠르고 효과적으로 시력을 회복할 수 있습니다. 그러나 종종 경미한 형태의 질병의 경우 약물 요법과 눈에 대한 특별한 운동을 통해 질병을 제거하는 것이 가능합니다.

많은 Arduino 프로젝트에서는 특정 이벤트 발생 시간을 모니터링하고 기록해야 합니다. 추가 배터리가 장착된 실시간 시계 모듈을 사용하면 다음을 저장할 수 있습니다. 현재 날짜, 장치 자체의 전원 가용성에 관계없이. 이 기사에서는 Arduino 보드와 함께 사용할 수 있는 가장 일반적인 RTC 모듈 DS1307, DS1302, DS3231에 대해 설명합니다.

시계 모듈은 작은 수수료, 일반적으로 DS1307, DS1302, DS3231 마이크로 회로 중 하나가 포함되어 있습니다. 또한 보드에서는 실제로 배터리 설치 메커니즘을 찾을 수 있습니다. 이러한 보드는 시간, 날짜, 요일 및 기타 시간 측정 매개변수를 추적하는 데 자주 사용됩니다. 모듈은 다음에서 작동합니다. 자율 전원 공급 장치– 배터리, 축전지 등 Arduino의 전원이 꺼져도 계속 카운트됩니다. 가장 일반적인 시계 모델은 DS1302, DS1307, DS3231입니다. Arduino에 연결된 RTC(실시간 시계) 모듈을 기반으로 합니다.

시계는 편리한 단위로 계산됩니다. 평범한 사람에게– "틱"을 읽는 기존 카운터 및 시계 생성기와 달리 분, 시간, 요일 및 기타. 아두이노는 특수 기능다양한 시간 간격을 읽을 수도 있는 millis(). 하지만 이 기능의 가장 큰 단점은 타이머가 켜지면 0으로 재설정된다는 것입니다. 도움을 받으면 시간을 읽을 수만 있습니다. 날짜나 요일을 설정하는 것은 불가능합니다. 이 문제를 해결하기 위해 실시간 클록 모듈이 사용됩니다.

전자 회로에는 마이크로 회로, 전원 공급 장치, 석영 공진기 및 저항기가 포함됩니다. 석영 공진기는 32768Hz의 주파수에서 작동하며 이는 기존 바이너리 카운터에 편리합니다. DS3231 회로에는 석영 및 열 안정화 기능이 내장되어 있어 매우 정확한 값을 얻을 수 있습니다.

인기 있는 RTC 모듈 DS1302, DS1307, DS3231 비교

이 표에는 가장 많이 사용되는 모듈과 해당 모듈의 주요 특성 목록이 나와 있습니다.

이름 빈도 정확성 지원되는 프로토콜
DS1307 1Hz, 4.096kHz, 8.192kHz, 32.768kHz 석영에 따라 다릅니다. 일반적으로 값은 하루 2.5초에 도달하며 하루 1초보다 높은 정확도를 달성하는 것은 불가능합니다. 또한 정확도는 온도에 따라 달라집니다. I2C
DS1302 32.768kHz 하루에 5초 I2C, SPI
DS3231 2개의 출력 - 첫 번째 출력은 32.768kHz, 두 번째 출력은 1Hz ~ 8.192kHz에서 프로그래밍 가능 0C ~ 40C 온도에서 ±2ppm.

-40C ~ 85C 온도에서 ±3.5ppm.

온도 측정 정확도 - ±3С

I2C

모듈 DS1307

DS1307은 타이밍에 사용되는 모듈입니다. DS1307ZN 칩을 기반으로 조립되었으며 전원은 다음에서 나옵니다. 리튬 배터리구현을 위해 배터리 수명오랜 기간에 걸쳐. 보드에 배터리가 장착되어 있습니다. 후면. 모듈에는 AT24C32 칩이 있습니다. 이는 32KB 비휘발성 EEPROM 메모리입니다. 두 마이크로회로는 I2C 버스로 연결됩니다. DS1307은 저전력 소비 2100년까지의 시계와 달력이 포함되어 있습니다.

모듈에는 다음 매개변수가 있습니다.

  • 전원 공급 장치 – 5V;
  • 작동 온도 범위는 -40C ~ 85C입니다.
  • 56바이트 메모리;
  • 리튬 배터리 LIR2032;
  • 12시간 및 24시간 모드를 구현합니다.
  • I2C 인터페이스 지원.

이 모듈은 일주일 이상의 간격으로 데이터를 매우 드물게 읽는 경우에 적합합니다. 중단 없이 사용하려면 배터리를 사용해도 더 많은 전압이 필요하므로 이렇게 하면 전력을 절약할 수 있습니다. 메모리가 있으면 등록할 수 있습니다. 다양한 매개변수(예: 온도 측정) 모듈에서 수신된 정보를 읽습니다.

다른 장치와의 상호 작용 및 정보 교환은 SCL 및 SDA 핀의 I2C 인터페이스를 사용하여 수행됩니다. 회로에는 필요한 신호 레벨을 제공할 수 있는 저항기가 포함되어 있습니다. 보드에는 또한 특별한 장소 DS18B20 온도 센서 장착용 접점은 2.54mm 피치의 2개 그룹으로 분배됩니다. 첫 번째 연락처 그룹에는 다음 핀이 포함되어 있습니다.

  • DS – 센서 DS18B20용 출력;
  • SCL - 클록 라인;
  • SDA – 데이터 라인;
  • VCC – 5V;

두 번째 연락처 그룹에는 다음이 포함됩니다.

  • SQ – 1MHz;
  • BAT – 리튬 배터리용 입력입니다.

Arduino 보드에 연결하려면 보드 자체가 필요합니다( 이 경우 Arduino Uno가 고려 중임), RTC DS1307 실시간 클럭 모듈, 전선 및 USB 케이블.

컨트롤러를 Arduino에 연결하려면 VCC, 접지, SCL, SDA의 4개 핀이 사용됩니다. 시계의 VCC는 Arduino의 5V에 연결되고 시계의 접지는 Arduino, SDA - A4, SCL의 접지에 연결됩니다. - A5.

시계 모듈 작업을 시작하려면 DS1307RTC, TimeLib 및 Wire 라이브러리를 설치해야 합니다. 업무용으로 RTCLib를 사용할 수도 있습니다.

RTC 모듈 확인

첫 번째 코드를 실행하면 프로그램은 초당 한 번씩 모듈에서 데이터를 읽습니다. 먼저, 아두이노 보드가 컴퓨터에 연결되지 않은 상태에서 모듈에서 배터리를 제거하고 다른 배터리로 교체하면 프로그램이 어떻게 동작하는지 확인할 수 있습니다. 몇 초 정도 기다렸다가 배터리를 제거하면 결국 시계가 재부팅됩니다. 그런 다음 예제→RTClib→ds1307 메뉴에서 예제를 선택해야 합니다. 전송 속도를 57600bps로 올바르게 설정하는 것이 중요합니다.

직렬 모니터 창을 열면 다음 줄이 나타나야 합니다.

시간은 0:0:0으로 표시됩니다. 이는 시계의 전원이 꺼지고 시간 계산이 중단되기 때문입니다. 이러한 이유로 모듈이 작동하는 동안 배터리를 제거해서는 안됩니다.

모듈에서 시간을 설정하려면 스케치에서 선을 찾아야 합니다.

RTC.adjust(DateTime(__DATE__, __TIME__));

이 줄에는 실시간 시계 모듈을 플래시하는 데 사용되는 컴퓨터의 데이터가 포함됩니다. 을 위한 올바른 작동먼저 컴퓨터의 날짜와 시간이 올바른지 확인한 다음 시계 모듈 깜박임을 시작해야 합니다. 설정 후 모니터에 다음 데이터가 표시됩니다.

설정이 올바르게 완료되었으며 실시간 시계를 추가로 재구성할 필요가 없습니다.

독서 시간. 모듈이 구성되면 시간 요청을 보낼 수 있습니다. 이는 시간 및 날짜 정보가 포함된 DateTime 객체를 반환하는 now() 함수를 사용하여 수행됩니다. 시간을 읽는 데 사용되는 라이브러리가 많이 있습니다. 예를 들어 RTC.year() 및 RTC.hour()는 연도와 시간에 대한 정보를 별도로 가져옵니다. 작업할 때 문제가 발생할 수 있습니다. 예를 들어 시간 표시 요청은 1:19:59에 이루어집니다. 시간 1:20:00을 표시하기 전에 시계는 시간 1:19:00을 표시합니다. 이는 본질적으로 1분이 손실된다는 의미입니다. 따라서 이러한 라이브러리는 읽기가 자주 발생하지 않는 경우(며칠에 한 번씩) 사용하는 것이 좋습니다. 시간을 호출하는 다른 함수도 있지만 오류를 줄이거나 방지해야 하는 경우 now()를 사용하고 여기에서 필요한 판독값을 추출하는 것이 좋습니다.

i2C 클록 모듈 및 디스플레이가 포함된 예제 프로젝트

프로젝트는 표시기가 표시되는 일반 시계입니다. 정확한 시간, 숫자 사이의 콜론이 1초 간격으로 깜박입니다. 프로젝트를 구현하려면 Arduino Uno 보드가 필요합니다. 디지털 표시기, 실시간 시계(이 경우 위에서 설명한 ds1307 모듈), 연결용 쉴드(이 경우 Troyka Shield가 사용됨), 시계 및 전선용 배터리입니다.

이 프로젝트는 TM1637 칩에 간단한 4자리 표시기를 사용합니다. 이 장치에는 2선 인터페이스가 있으며 8단계의 모니터 밝기를 제공합니다. 시간을 시:분 형식으로 표시하는 데에만 사용됩니다. 표시기는 사용하기 쉽고 연결도 쉽습니다. 분 단위 또는 시간 단위의 데이터 검증이 필요하지 않은 프로젝트에 사용하면 유용합니다. 더 많은 것을 얻으려면 완전한 정보 LCD 모니터는 시간과 날짜를 표시하는 데 사용됩니다.

클럭 모듈은 I2C 버스에 속하는 SCL/SDA 핀에 연결됩니다. 또한 접지와 전원을 연결해야 합니다. 위에서 설명한 것과 동일한 방식으로 Arduino에 연결됩니다. SDA – A4, SCL – A5, 모듈에서 Arduino의 접지, VCC -5V까지 접지됩니다.

표시기는 간단하게 연결됩니다. CLK 및 DIO 핀은 보드의 모든 디지털 핀에 연결됩니다.

스케치. 코드를 작성하려면 시계와 표시기를 초기화하고 컴파일 시간을 기록할 수 있는 설정 기능을 사용하세요. 루프를 사용하여 화면에 시간을 인쇄합니다.

#포함하다 #include "TM1637.h" #include "DS1307.h" //모든 것을 포함해야 함 필수 라이브러리시계와 디스플레이 작업에 사용됩니다. char compileTime = __TIME__; //컴파일 시간. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 //화면이 연결된 Arduino 출력의 번호; void setup() ( display.set(); display.init(); //화면을 연결하고 구성합니다. clock.begin(); //시계를 켭니다. byte hour = getInt(compileTime, 0); byte Minute = getInt( compileTime, 2); byte second = getInt(compileTime, 4); //시간 모듈에 쓸 준비 중 clock.setTime(); 에서 받았습니다 내부 저장소, 독서 시간 시작. ) void loop() ( int8_t timeDisp; //4자리 각각에 표시. clock.getTime(); //시간을 구하기 위한 쿼리. timeDisp = clock.hour / 10; timeDisp = clock.hour % 10; timeDisp = 시계 .분 / 10; timeDisp = 시계.분 % 10; 다양한 작업수십, 시간, 분 등의 단위를 얻으려면. 디스플레이.디스플레이(timeDisp); //표시기에 시간 표시 display.point(clock.second % 2 ? POINT_ON: POINT_OFF);//1초 후에 콜론을 켜고 끕니다. ) char getInt(const char* string, int startIndex) ( return int(string - "0") * 10 + int(string) - "0"; //작업 올바른 입력시간을 두 자리 정수로 변환합니다. 그렇지 않으면 몇 개의 기호만 화면에 표시됩니다. )

그런 다음 스케치를 로드해야 하며 시간이 모니터에 표시됩니다.

프로그램은 약간 현대화될 수 있습니다. 전원이 꺼지면 위에서 작성한 스케치를 통해 전원을 켠 후 컴파일 중에 설정한 시간이 디스플레이에 표시됩니다. 설정 함수에서는 00:00:00부터 컴파일 시작까지의 시간을 매번 계산합니다. 이 해시는 전원이 제거될 때 유지되는 EEPROM에 저장된 것과 비교됩니다.

시간을 기록하고 읽으려면 비 휘발성 기억 장치또는 여기에서 EEPROMWriteInt 및 EEPROMReadInt 기능을 추가해야 합니다. 해시가 EEPROM에 기록된 해시와 일치/불일치하는지 확인하는 데 필요합니다.

프로젝트는 개선될 수 있습니다. LCD 모니터를 사용하면 날짜와 시간을 화면에 표시하는 프로젝트를 만들 수 있습니다. 모든 요소의 연결이 그림에 표시됩니다.

결과적으로 코드에 지정해야 합니다. 새 도서관(LCD 화면의 경우 LiquidCrystal입니다.) loop() 함수에 행을 추가하여 날짜를 가져옵니다.

작동 알고리즘은 다음과 같습니다.

  • 모든 구성 요소를 연결합니다.
  • 확인 - 모니터 화면의 시간과 날짜가 매초 변경되어야 합니다. 화면에 다음과 같이 표시되면 잘못된 시간, 스케치에 RTC.write(tmElements_t tm) 기능을 추가해야 합니다. 잘못된 문제 지정된 시간이는 시계 모듈이 꺼지면 날짜와 시간이 00:00:00 01/01/2000으로 재설정되기 때문입니다.
  • 쓰기 기능을 사용하면 컴퓨터에서 날짜와 시간을 얻을 수 있으며 그 후에 올바른 매개변수가 화면에 표시됩니다.

결론

시계 모듈은 많은 프로젝트에서 사용됩니다. 주어진 일정에 따라 작동하는 타이머 및 제어 장치를 만들 때 데이터 기록 시스템에 필요합니다. 가전 ​​제품. 널리 사용 가능하고 저렴한 모듈을 사용하면 알람 시계 또는 센서 데이터 로거와 같은 프로젝트를 생성하고, SD 카드에 정보를 기록하거나 디스플레이 화면에 시간을 표시할 수 있습니다. 이 기사에서 우리는 살펴 보았습니다. 일반적인 시나리오가장 널리 사용되는 모듈 유형의 ​​사용 및 연결 옵션.

". DS3231 실시간 클록 모듈에 대해 알아봅시다. 이 기사에는 비디오 지침, 프로그램 목록, 연결 목적 및 방법이 포함되어 있습니다. Arduino 모듈 DS 제품군에서.

DS3231 실시간 클럭 모듈

DS3231 실시간 클럭 모듈이란 무엇입니까?

실시간 클럭 모듈- 이것 전자 회로, 크로노메트릭 데이터를 기록하도록 설계되었습니다( 현재 시간, 날짜, 요일 등)은 자율 전원과 계량 장치로 구성된 시스템입니다.

DS3231 모듈기본적으로는 평범한 시계입니다. Arduino 보드에는 이미 시간 센서가 내장되어 있습니다. 밀리스단, 보드에 전원이 공급될 때만 작동합니다. 연결이 끊어졌을 때 및 추가 포함 Arduino Millis 시간은 0으로 재설정됩니다. 그리고 DS3231에는 배터리가 내장되어 있어 Arduino 보드의 연결이 끊어진 경우에도 모듈에 계속 "전원"을 공급하여 시간을 측정할 수 있습니다.

모듈은 다음을 기반으로 시계 또는 알람 시계로 사용할 수 있습니다. 아두이노 보드. 아니면 알림으로 다양한 시스템, 예를 들어 "스마트 홈"에서.

DS3231 사양:

  • 모듈은 시간, 분, 초, 날짜, 월, 연도를 계산합니다(2100년까지 윤년이 고려됩니다).
  • 연결하다 다양한 장치, 시계는 I2C 인터페이스를 통해 연결됩니다.

32K— 공급을 위한 출력 외부 전원 공급 장치>12V.

S.Q.W.— 프로그래밍 가능한 구형파 신호 출력.

SCL– 이 핀을 통해 I2C 인터페이스를 통해 시계와 데이터가 교환됩니다.

S.D.A.– 시계의 데이터는 이 핀을 통해 전송됩니다.

VCC– 실시간 시계용 전원 공급 장치, 5V 필요. 이 핀에 전압이 공급되지 않으면 시계는 절전 모드로 전환됩니다.

접지- 지구.

DS3231 실시간 클록과 간단한 프로그램의 연결 다이어그램

SDA 및 SCL 핀 켜짐 다른 보드아두이노:

S.D.A. SCL
우노 A4 A5
미니 A4 A5
나노 A4 A5
메가2560 20 21
레오나르도 2 3

실시간 시계 모듈을 연결해 보겠습니다. 아두이노 우노. SDA - 핀 A4, SCL - 핀 A5.

작업 모델에 맞는 다음 프로그램(단순히 프로그램을 복사하여 아두이노 IDE):

#포함하다

무효 설정() (
지연(300);
Serial.begin(9600);
시간.시작();
}
무효 루프()



}
}

이 스케치에서는 시간이 단순히 카운트다운됩니다.

먼저 SKTECH에서 라이브러리를 연결해 주세요 iarduino_RTC.h.

거기에 표시해 주세요 정확한 이름올바른 작업을 위한 모듈입니다.

결과적으로 DS3231 모듈에서 포트 모니터로의 시간 출력을 얻습니다. 시, 분, 초가 표시됩니다.

다음 스케치에서는 함수를 추가하겠습니다. 설정 시간, 초기 카운트다운 시간을 설정할 수 있습니다.

#포함하다
iarduino_RTC 시간(RTC_DS3231);
무효 설정() (
지연(300);
Serial.begin(9600);
시간.시작();
시간.설정시간(0,0,18,24,04,17,1); // 0초, 0분, 18시간, 2017년 4월 24일, 월요일
}
무효 루프()
if(millis()%1000==0)( // 1초가 경과한 경우
Serial.println(time.gettime("d-m-Y, H:i:s, D")); // 표시 시간
지연(1); // 1ms 동안 여러 번 시간이 표시되지 않도록 1ms 동안 일시 정지합니다.
}
}

예시에서는 2017년 4월 24일 월요일 0초, 0분, 18시간부터 시간이 계산되기 시작합니다.

강의 게시물:

  1. 첫 수업: .
  2. 두 번째 강의: .
  3. 세 번째 강의: .
  4. 네 번째 강의: .
  5. 다섯 번째 수업: .
  6. 6과: .
  7. 일곱 번째 수업: .
  8. 여덟 번째 수업: .
  9. 아홉 번째 교훈:

안녕하세요. 오늘은 실내 온도계로 시계를 만드는 방법을 공유하겠습니다( DIY 아두이노 시계). 시계는 Arduino UNO에서 실행되며 WG12864B 그래픽 화면은 시간과 온도를 표시하는 데 사용됩니다. 온도 센서 - ds18b20. 대부분의 다른 시계와 달리 RTS(Real Time Clock)를 사용하지 않고 이 추가 모듈 없이 사용하도록 노력하겠습니다.

Arduino 회로는 단순함이 특징이며 누구나 Arduino를 배울 수 있습니다. 우리 기사에서 라이브러리를 연결하고 Arduino를 플래시하는 방법을 읽을 수 있습니다.

시작하자.

이 시계를 만들려면 다음이 필요합니다.

Arduino UNO(또는 기타 아두이노 호환지불하다)
- 그래픽 화면WG12864B
- 온도 센서 ds18b20
- 저항기 4.7Kom 0.25W
- 저항기 100Ω 0.25W
- AA 배터리 4개를 넣을 수 있는 배터리 수납공간
- 어울리는 상자
- 파인 파일
- 매니큐어(검은색 또는 바디 컬러)
- 얇은 플라스틱이나 판지
- 전기 테이프
- 전선 연결하기
- 회로 기판
- 버튼
- 납땜 인두
- 솔더, 로진
- 양면 테이프

그래픽 화면을 준비 중입니다.
언뜻보기에 화면을 연결하는 것은 많은 문제와 어려움을 안겨줍니다. 하지만 먼저 해당 유형을 이해하면 훨씬 더 쉽고 명확해질 것입니다. ks0107/ks0108 컨트롤러에는 다양한 종류와 유형의 화면이 있습니다. 모든 화면은 일반적으로 4가지 유형으로 구분됩니다.
옵션 A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T
옵션 B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ 디스플레이 AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864J4, 4F, 4L-2, 12864J-1
옵션 C: Shenzhen Jinghua Displays Co Ltd. JM12864
옵션 D: Wintek-Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS19264/HD61202

목록은 완전하지 않으며 목록이 많습니다. 가장 일반적이고 제 생각에는 편리한 것은 WG12864B3 V2.0입니다. 디스플레이는 직렬 또는 직렬을 통해 Arduino에 연결할 수 있습니다. 병렬 포트. Arduino UNO와 함께 사용할 때는 다음을 통해 연결을 선택하는 것이 좋습니다. 직렬 포트– 그러면 병렬 포트를 통해 연결할 때 최소 13개의 라인 대신 3개의 마이크로컨트롤러 출력만 필요합니다. 모든 것이 아주 간단하게 연결됩니다. 뉘앙스가 하나 더 있습니다. 내장형 전위차계(대비 조정용)가 있는 것과 없는 것의 두 가지 디스플레이 옵션이 판매 중입니다. 나는 선택했고 내장형으로도 똑같이하도록 조언합니다.


부품 수와 납땜 시간이 줄어듭니다. 백라이트용 100Ω 전류 제한 저항을 설치하는 것도 좋습니다. 5V를 직접 연결하면 백라이트가 소진될 위험이 있습니다.
WG12864B - 아두이노 UNO
1(GND) - GND
2(VCC) - +5V
4(RS) – 10
5(읽기/쓰기) – 11
6 (E) – 13
15(PSB) - GND
19(BLA) – 저항을 통해 - +5V
20(BLK) – GND

가장 편리한 방법은 화면 뒤에 있는 모든 것을 조립하고 화면에서 5개의 전선을 꺼내 Arduino UNO에 연결하는 것입니다. 최종 결과는 다음과 같아야 합니다.


그래도 선택하시는 분들을 위해 병렬 연결연결 테이블을 제공하겠습니다.

옵션 B 화면의 다이어그램은 다음과 같습니다.



하나의 통신선에 여러 개의 센서를 연결할 수 있습니다. 우리 시계에는 하나면 충분합니다. ds18b20의 "DQ" 핀에서 Arduino UNO의 "핀 5"까지 와이어를 연결합니다.

버튼이 있는 보드를 준비합니다.
시계의 시간과 날짜를 설정하려면 세 개의 버튼을 사용하겠습니다. 편의상 회로 기판에 버튼 3개를 납땜하고 전선을 제거합니다.


우리는 다음과 같이 연결합니다. 세 개의 버튼 모두에 공통된 와이어를 Arduino의 "GND"에 연결합니다. 시간 설정 모드 진입 및 시간, 날짜 전환에 사용되는 첫 번째 버튼은 “핀 2”에 연결되어 있습니다. 두 번째 값을 증가시키는 버튼은 “Pin 3”이고, 세 번째는 값을 감소시키는 버튼은 “Pin 4”입니다.

함께 모아서.
피하려면 단락, 화면은 절연되어야 합니다. 전기테이프로 동그랗게 감싼 뒤 뒤쪽에에 연결하다 양면 테이프, 크기에 맞게 절단한 단열재 스트립. 두꺼운 판지나 얇은 플라스틱이 좋습니다. 나는 태블릿의 플라스틱을 종이로 사용했습니다. 결과는 다음과 같습니다.


화면 앞 가장자리를 따라 양면 폼 테이프(검은색이 바람직함)를 붙입니다.


화면을 Arduino에 연결합니다.


배터리실의 플러스를 Arduino의 "VIN"에 연결하고 마이너스를 "GND"에 연결합니다. Arduino 뒤에 배치합니다. 케이스에 설치하기 전에 온도 센서와 보드를 버튼으로 연결하는 것을 잊지 마십시오.


스케치를 준비하고 채웁니다.
온도 센서에는 OneWire 라이브러리가 필요합니다.

화면 출력은 U8glib 라이브러리를 통해 수행됩니다.

스케치를 편집하고 채우려면 이 두 라이브러리를 설치해야 합니다. 이를 수행하는 방법에는 두 가지가 있습니다. 이 아카이브의 압축을 풀고 Arduino IDE 설치 폴더에 있는 "라이브러리" 폴더에 압축을 푼 파일을 넣기만 하면 됩니다. 또는 두 번째 옵션은 프로그래밍 환경에 라이브러리를 직접 설치하는 것입니다. 다운로드한 아카이브의 압축을 풀지 않고, 아두이노 환경 IDE에서 스케치 메뉴 – 라이브러리 포함을 선택합니다. 드롭다운 목록 상단에서 “Add.Zip 라이브러리”를 선택하세요. 나타나는 대화 상자에서 추가하려는 라이브러리를 선택하십시오. 스케치 메뉴를 다시 엽니다 – 라이브러리 연결. 드롭다운 목록 맨 아래에 새 라이브러리가 표시됩니다. 이제 프로그램에서 라이브러리를 사용할 수 있습니다. 이 모든 작업이 끝나면 Arduino IDE를 다시 시작하는 것을 잊지 마십시오.

온도 센서는 One Wire 프로토콜을 사용하여 작동하며 각 장치에 대해 고유한 주소(64비트 코드)를 갖습니다. 이 코드를 매번 검색하는 것은 실용적이지 않습니다. 따라서 먼저 센서를 Arduino에 연결하고 파일 – 예제 – Dallas 온도 – OneWireSearch 메뉴에 있는 스케치를 업로드해야 합니다. 다음으로 도구 - 포트 모니터를 실행하세요. Arduino는 센서를 찾아서 주소와 현재 온도 판독값을 기록해야 합니다. 센서의 주소를 복사하거나 간단히 적어둡니다. Arduino_WG12864B_Term 스케치를 열고 다음 줄을 찾으세요.

바이트 주소=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97);//내 센서의 주소

우리는 다음 사이에 센서의 주소를 기록합니다. 중괄호, 내 센서의 주소를 교체합니다.

재고:

//u8g.setPrintPos(44, 64); u8g.print(초); // 이동의 정확성을 제어하는 ​​초를 출력합니다.

"데이터" 비문 옆에 초를 표시하는 역할을 합니다. 이는 다음을 위해 필요합니다. 정확한 설치시간의 흐름.
시계가 빠르거나 늦다면 다음 줄의 값을 변경해야 합니다.

If (micros() - prevmicros >494000) ( // 수정하려면 다른 것으로 변경하세요. 500000입니다.

나는 경험적으로 시계가 매우 정확하게 작동하는 숫자를 결정했습니다. 시계가 너무 빠르면 이 숫자를 늘려야 하고, 뒤쳐지면 숫자를 줄여야 합니다. 이동의 정확성을 확인하려면 초를 표시해야 합니다. 숫자를 정확하게 보정한 후 초를 주석 처리하여 화면에서 제거할 수 있습니다.

이 모든 것은 우연히 BTHQ 22005VSS 텍스트 LCD 화면(각각 20자씩 2줄)과 보드의 소유자가 되었다는 사실에서 시작되었습니다. 전자시계 DS1302. 사실 제가 아두이노 제조에 첫발을 내딛는 시점이라 이러한 부품을 확보하는데 결정적인 역할을 한 것은 합리적인 가격그리고 빠른 배송 가능성. 결국, 거의 "세계의 절반"을 여행했기 때문에 "장치"가 중세 왕국에서 도착할 때까지 기다릴 시간이 없으며 단순히 원하지 않는 경우가 많습니다.

왜 시계인가? 다양한 시계가 판매되는 시대에 가장 간단한 시계의 가격은 주스 상자와 비슷합니다. 그러나 문제는 정확한 시간(때때로 필요한 날짜)을 아는 것뿐만 아니라 이 시간을 조작하는 것도 필요한 경우가 많다는 것입니다. 예를 들어, 온도 변화(습도, 압력, 빛 등)가 발생한 정확한 시간을 나타내는 로그를 유지하세요. 여기에 시계를 장착한 ARDUINO가 멋진 서비스를 제공하게 될 것입니다. 게다가 장치에 시간도 표시되면 좋습니다. 결국, 심지어 일을 위해 개인용 컴퓨터우리는 때때로 오른쪽 하단을 흘끗 봅니다. 이미 점심 시간이거나 근무일의 끝이거나 이미 새벽이라면 어떨까요?

내 마음으로 이 프로젝트저는 구매하기 매우 쉬운 ARDUINO UNO를 사용했습니다. 물론 이것은 고품질의 제품을 신속하게 구매하려는 경우입니다. 물론 더 저렴하다는 것을 알 수 있지만 다시 기다려야하고 기다리고 싶지 않았습니다. Arduinka는 LED를 유쾌하게 깜박이고 필요한 모든 작업을 수행했으며 다음을 통해 간단한 메시지를 전달했습니다. 직렬 포트, 일반적으로 나는 기뻤습니다. 하지만 시계로 돌아가 보겠습니다. 언제나 그렇듯이 문제는 예기치 않게 시작되었습니다. 화면이나 집회에서 몇 시간 동안 합리적인 기사와 그 밖의 모든 것을 찾는 것은 불가능했습니다. 다른 화면에는 원하는만큼 다른 시계가 있지만 손에있는 것에는 거의 아무것도 없습니다. 하지만 아무것도 없을 때 "거의"도 많다는 뜻입니다.

화면부터 시작해 보겠습니다. BTHQ 22005VSS는 평범한 20x2 LCD 화면으로 밝혀졌습니다(즉, 각각 20개의 문자로 구성된 2줄이 있음). 대신 화면에 "단지" 16자만 포함되어 있음에도 불구하고 화면을 사용하는 것이 꽤 가능합니다. 하지만 대부분의 프로젝트에서는 이 정도면 충분합니다. 이 화면 16핀 커넥터가 있지만 단일 행은 아니지만 이중 행(2x8)입니다. 화면이 사용자 반대쪽을 향하고 커넥터가 오른쪽에 있는 상태로 장치를 잡으면 첫 번째 핀이 왼쪽 아래에 있게 됩니다. 두 번째는 오른쪽 아래, 세 번째는 첫 번째 위, 네 번째는 두 번째 위 등입니다. 왼쪽 위(15)는 양극이 되고, 오른쪽 위(16)는 음극이 됩니다. 영어에 대한 지식이 있고 호기심이 있다면 기술설명을 읽어볼 수 있습니다. 첫 번째가 거의 없고 실험하려는 욕구보다 호기심이 훨씬 약하다면 다음과 같이 연결했습니다.

화면 접촉 아두이노 연락처 메모
1 접지 이것은 "마이너스" 또는 "접지"입니다.
2 +5V
3 접지 밝은 간판이 필요한 경우.
4 4
5 접지 "쓰기"만한다면.
6 5
7 -- 사용하지 않음
8 -- 사용하지 않음
9 -- 사용하지 않음
10 -- 사용하지 않음
11 10
12 11
13 12
14 13
에이(15) +5V 500Ω 저항을 통해 연결했습니다.
케이(16) 접지

일부 소스에서는 Arduino 측의 "핀아웃"이 다르지만 나에게는 이 방법이 더 편리했습니다. 시계를 연결해도 문제가 발생하지 않았습니다.

DS1302 보기 아두이노 메모
VCC +5V
접지 접지 여기서는 10kOhm 저항을 통해 연결했습니다.
CLK 0 GND와 혼동하지 마세요!!! 핀은 SCLK라고도 합니다.
DAT 1 접점은 IO라고도 합니다.
RST 3 연락처는 CE라고도 합니다.

전선이나 케이블로 연결할 수 있습니다. 제가 직접 브레드보드에 조립했습니다.

문제는 데모 스케치가 로드되고 시계가 작동하기 시작했을 때 시작되었습니다. 사실, 그들은 2165년, 45월, 85주차를 보여주었습니다... 아마도 이것은 "천왕성" 또는 "해왕성" 달력에 따른 것입니다... 하지만 저는 지구에 살지 않을 것이고 앞으로도 가지 않을 것입니다. 아직 천왕성과 해왕성에. 일반적으로 뭔가 조치를 취해야 합니다. 10kOhm 저항을 GND->GND 회로에 납땜해도 도움이 되지 않았습니다. 문제는 잘못된 라이브러리로 밝혀졌습니다. 바로 그 말을 할게요 올바른 라이브러리촬영할 수 있습니다. 이것은 시계용입니다. 작은 화면은 다음의 라이브러리를 성공적으로 사용합니다. 표준 세트, LiquidCrystal.h라고 합니다.

문제 #2. 시계가 시작될 때마다 프로그램에 "스티칭"된 시간부터 카운트가 시작됩니다. 먹다 어려운 결정이 문제. 해시를 생성하고 시계 메모리에 쓴 다음 시작할 때 거기에서 읽고 비교합니다. 일반적으로 Arduino 엔지니어링 초보자에게는 약간 복잡합니다. 결과적으로 간단한 해결책이 있습니다. 아니면 오히려 매우 간단합니다. 즉, 2번 플래시를 하세요. 처음에는 날짜와 시간을 설정하여 플래시하고, 두 번째에는 바로 이 날짜를 설정하여 행을 이전에 "주석 처리"(줄의 맨 처음에 // 기호 넣기)한 후 플래시합니다.

실제로 스케치:

// DS1302_LCD (C)2010 헤닝 칼센
// 웹사이트: http://www.henningkarlsen.com/electronics
// 내 DS1302 라이브러리를 사용하여 빠르게 만드는 방법에 대한 빠른 데모입니다.
// DS1302와 20x2 LCD를 사용한 시계.
// 시계 핀과 Arduino pinpm 화면 간의 대응입니다.
// DS1302: CE 핀 -> Arduino Digital 3
// I/O 핀 -> Arduino 디지털 1
// SCLK 핀 -> Arduino 디지털 0
// LCD: DB7 -> 아두이노 디지털 13
// DB6 -> 아두이노 디지털 12
// DB5 -> 아두이노 디지털 11
// DB4 -> 아두이노 디지털 10
// E -> 아두이노 디지털 5
// RS -> 아두이노 디지털 4

#포함하다 // 화면 라이브러리를 연결합니다.
#포함하다 // 시계 라이브러리를 연결합니다.

// 클럭 핀 초기화
DS1302 rtc(3, 1, 0);
// 화면 핀 초기화
LiquidCrystal LCD(4, 5, 10, 11, 12, 13);

무효 설정()
{
// 시계 시작
rtc.halt(false);
rtc.writeProtect(false);

// 문자 및 줄 수를 나타내는 화면을 시작합니다.
lcd.begin(20, 2);

// 맨 아래 세 줄은 처음으로 주석 처리가 해제되었습니다. 여기에는 현재 날짜와 시간이 표시됩니다. 두 번째로 - 주석을 달겠습니다.
//rtc.setDOW(THURSDAY); // 요일, 금요일이면 러시아어로 FRIDAY를 쓰지 마세요!
//rtc.setTime(11, 41, 0); // 24시간 형식의 시, 분, 초입니다.
//rtc.setDate(13, 6, 2013); // 날짜. 숫자로!!! 한 자리 숫자 앞에 0을 넣을 필요는 없습니다!
}

무효 루프()
{
// 윗줄을 중심으로 시간을 표시한다.
lcd.setCursor(6, 0); // 맨 윗줄에 시간을 인쇄하도록 커서를 설정합니다.
lcd.print(rtc.getTimeStr()); // 시간을 출력한다

// 왼쪽 하단에 축약된 요일을 표시합니다.
lcd.setCursor(0, 1); // 요일을 출력하기 위해 왼쪽 하단에 커서를 설정합니다.
lcd.print(rtc.getDOWStr(FORMAT_LONG)); // 화면에서 허용하므로 요일 전체를 인쇄합니다.

//우측 하단에 날짜 표시
lcd.setCursor(9, 1); // 날짜를 인쇄하도록 커서를 설정합니다.
lcd.print(rtc.getDateStr()); // 날짜를 인쇄합니다.

// 반복하기 전에 1초 정도 기다립니다.
지연(1000); // 1초 동안 멈추고 다시 시작하세요!
}



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: