Arduino에 실시간 시계를 추가하는 방법과 이유

Arduino에 실시간 시계를 추가하는 방법과 이유

Arduino 프로젝트에서 시간을 유지하는 것은 생각만큼 쉬운 일이 아닙니다. 일단 컴퓨터에 연결되지 않으면 전원이 공급되지 않은 Arduino는 내부 티커를 포함하여 실행을 멈춥니다.





맥북에서 배터리 비율을 표시하는 방법

Arduino를 주변 세계와 동기화 상태로 유지하려면 '실시간 시계 모듈'이라는 것이 필요합니다. 다음은 하나를 사용하는 방법입니다.





실시간 시계(RTC)의 요점은 무엇입니까?

컴퓨터는 인터넷과 시간을 동기화할 가능성이 높지만 인터넷에 연결하지 않거나 전원이 꺼진 상태에서도 계속 작동하는 내부 시계가 있습니다. 컴퓨터에 연결된 Arduino를 사용하면 시스템 시계에서 제공하는 정확한 시간에 액세스할 수 있습니다. 그것은 꽤 유용하지만 대부분의 Arduino 프로젝트는 컴퓨터에서 멀리 떨어져서 사용하도록 설계되었습니다. 이 시점에서 전원이 뽑히거나 Arduino가 다시 시작될 때마다 지금이 몇 시인지 전혀 알 수 없습니다. 내부 시계가 재설정되고 다음에 전원을 켤 때 0부터 다시 계산을 시작합니다.





귀하의 프로젝트가 야간 조명 및 일출 알람 시계와 같이 시간이 필요한 것과 관련이 있는 경우 이는 분명히 문제가 될 것입니다. 그 프로젝트에서 우리는 매일 밤 시간을 다소 조잡한 방식으로 수동으로 설정하여 문제를 해결했습니다. 사용자는 잠자리에 들기 직전에 재설정 버튼을 눌러 수동 시간 동기화를 제공합니다. 분명히 그것은 이상적인 장기 솔루션이 아닙니다.

RTC 모듈은 작은 코인 셀 배터리가 필요한 추가 회로로 Arduino가 꺼져 있어도 시간을 계속 계산합니다. 한 번 설정하면 배터리 수명 동안 해당 시간이 유지됩니다. 일반적으로 좋은 1년 정도입니다.



타이니RTC

Arduino용으로 가장 인기 있는 RTC는 TinyRTC라고 하며 eBay에서 약 -에 구입할 수 있습니다. 자신의 배터리(해외 여러 곳으로 배송하는 것은 불법)와 일부 헤더(구멍에 들어가는 핀, 직접 납땜해야 함)를 제공해야 할 가능성이 큽니다.

이것은 내가 가지고있는 모듈입니다.





온도 센서가 내장되어 있기도 하지만 사용하지 않을 경우 배터리가 더 오래 지속됩니다.

그 구멍의 수는 꽤 무섭게 보이지만 4개만 있으면 됩니다. GND, VCC, SCL 및 SDA - RTC 모듈의 양쪽에서 관련 핀을 사용할 수 있습니다. 당신은 사용하여 시계에 이야기 I2C 프로토콜 , 이는 '클럭'(직렬 통신 데이터 클럭, 시간과 관련 없음)용과 데이터용으로 각각 2개의 핀만 사용됨을 의미합니다. 실제로 동일한 두 핀에 최대 121개의 I2C 장치를 연결할 수도 있습니다. 이 Adafruit 페이지 다른 I2C 장치를 선택하려면 추가할 수 있습니다. 많이 있기 때문입니다!





시작하기

아래 다이어그램에 따라 TinyRTC 모듈을 연결하십시오. 분홍색 DS 라인은 온도 센서용이므로 필요하지 않습니다.

다음으로 다운로드 시간 그리고 DS1307RTC 라이브러리를 만들고 결과 폴더를 /라이브러리 폴더.

Arduino 환경을 종료하고 다시 실행하여 라이브러리와 예제를 로드합니다.

DS1307RTC 메뉴에서 두 가지 예를 찾을 수 있습니다. 업로드 및 실행 시간 설정 첫 번째 예 - 이것은 RTC를 정확한 시간으로 설정합니다. 실제 코드는 자세히 설명할 가치가 없으며 초기 시간 동기화를 수행하려면 한 번만 실행해야 합니다.

다음으로 사용 예를 살펴보십시오. 읽기 테스트 .

이 말을 하려면 얼마나 걸릴까

#include
#include
#include
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println('DS1307RTC Read Test');
Serial.println('-------------------');
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print('Ok, Time = ');
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(', Date (D/M/Y) = ');
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println('The DS1307 is stopped. Please run the SetTime');
Serial.println('example to initialize the time and begin running.');
Serial.println();
} else {
Serial.println('DS1307 read error! Please check the circuitry.');
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number <10) {
Serial.write('0');
}
Serial.print(number);
}

핵심도 포함했습니다. 와이어.h 라이브러리 - 이것은 Arduino와 함께 제공되며 I2C를 통한 통신에 사용됩니다. 코드를 업로드하고 9600 보드에서 직렬 콘솔을 열고 Arduino가 매초 현재 시간을 출력하는 것을 지켜보십시오. 기이!

예제에서 가장 중요한 코드는 tm엘리먼츠_t tm - 이것은 구조 현재 시간으로 채울 것입니다. 그리고 RTC.read(tm) RTC 모듈에서 현재 시간을 가져오는 함수는 그것을 우리의 티엠 모든 것이 잘되면 true를 반환합니다. 시간을 출력하거나 이에 반응하는 것과 같이 'if' 문 안에 디버그 또는 논리 코드를 추가하십시오.

컴퓨터에서 전화 인터넷을 사용하는 방법

이제 Arduino로 적절한 시간을 맞추는 방법을 알았으므로 일출 알람 프로젝트를 다시 작성하거나 LED 단어 시계를 만들 수 있습니다. 가능성은 무한합니다! 당신은 무엇을 만들 것인가?

이미지 크레딧: 스누트랩 플리커를 통해

공유하다 공유하다 트위터 이메일 Windows 10 데스크탑의 모양과 느낌을 변경하는 방법

Windows 10을 더 멋지게 만드는 방법을 알고 싶으십니까? 이러한 간단한 사용자 지정을 사용하여 Windows 10을 나만의 것으로 만드십시오.

다음 읽기
관련 항목
  • DIY
  • 아두이노
저자 소개 제임스 브루스(707건의 기사 게재)

James는 인공 지능 학사 학위를 보유하고 있으며 CompTIA A+ 및 Network+ 인증을 받았습니다. 하드웨어 리뷰 편집자로 바쁘지 않을 때는 LEGO, VR 및 보드 게임을 즐깁니다. MakeUseOf에 합류하기 전에 그는 조명 기술자, 영어 교사 및 데이터 센터 엔지니어였습니다.

제임스 브루스가 참여한 작품 더보기

뉴스레터 구독

기술 팁, 리뷰, 무료 전자책 및 독점 거래에 대한 뉴스레터에 가입하십시오!

구독하려면 여기를 클릭하세요.