제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
우리는 시간, 날짜 및 온도를 알려주는 Arduino 날씨 시계를 만들 것입니다. LM35 센서가 온도를 알려주고 DS3231이 날짜와 시간을 알려주고 OLED를 사용하여 온도, 날짜 및 시간을 표시합니다.
필수 구성 요소
이 프로젝트에 필요한 구성 요소는 다음과 같습니다.
<울>
회로도
먼저 아두이노와 OLED를 연결합니다. OLED는 Arduino와 SPI 및 I2C 통신을 통해 작동하지만 SPI 통신을 사용하여 연결했습니다. Arduino의 SPI 핀은 8, 9, 10, 11, 13번 핀입니다. OLED와 Arduino의 연결은 다음과 같습니다.
<울>그런 다음 DS3231 모듈을 Arduino와 연결합니다. DS3231 모듈은 I2C 통신을 통해 Arduino와 함께 작동합니다. Arduino에서 I2C 통신을 위한 핀은 SDA와 SCL입니다. 다음과 같이 DS3231 모듈을 Arduino에 연결합니다.
<울>마지막으로 LM35 센서를 Arduino에 연결합니다. LM35의 왼쪽 핀을 Arduino의 5V에, 중간 핀을 Arduino의 A0에, 왼쪽 핀을 Arduino의 접지에 연결합니다.
다음을 찾을 수 있습니다. 전체 크기 회로도
코드 설명
먼저 DS3231 모듈과 OLED용 라이브러리를 추가했습니다. OLED용 Adafruit 라이브러리는 다른 OLED용 라이브러리에 비해 더 많은 기능을 가지고 있습니다.
#include #include
다음으로 DS3231 모듈과 OLED를 연결한 핀을 정의했습니다. DS3231 모듈은 I2C 통신을 통해 Arduino와 작동하므로 Arduino의 SDA 및 SCL 핀을 사용했습니다. OLED는 SPI 통신을 통해 Arduino와 작동합니다. 따라서 SPI 통신용 핀 8, 9, 10, 11, 13을 초기화했습니다. 그 후 LM35 센서 핀 및 기타 변수를 초기화했습니다.
<사전><코드>DS3231 rtc(SDA, SCL); #define OLED_MOSI 11 #define OLED_CLK 13 #define OLED_DC 9 #define OLED_CS 10 #define OLED_RESET 8 Adafruit_SSD1306 디스플레이(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); const int sensor_pin =A0; 부동 온도; 플로트 출력;설정 함수에서 Arduino가 센서에서 입력을 받기 때문에 LM35 센서 핀을 입력으로 선언했습니다. 그런 다음 DS3231과 OLED에 명령을 내려 Arduino와 통신을 시작했습니다.
pinMode(sensor_pin,INPUT);rtc.begin();display.begin(SSD1306_SWITCHCAPVCC);
아래 줄은 코드에서 주석 처리되지만 DS3231 모듈을 처음 사용하고 날짜, 날짜 및 시간을 설정하려면 이 줄의 주석 처리를 제거하고 설정하십시오.
<사전><코드> //rtc.setDOW(수요일); // 요일을 SUNDAY로 설정 //rtc.setTime(19, 02, 0); // 시간을 12:00:00으로 설정(24시간 형식) //rtc.setDate(7, 12, 2017); // 날짜를 2017년 6월 6일로 설정그런 다음 OLED에 5초 동안 "날씨 시계"를 인쇄했습니다.
<사전><코드> display.clearDisplay(); display.setTextColor(흰색); display.setTextSize(2); display.setCursor(0,0); display.print(" 날씨 "); display.setCursor(0,17); display.print(" 시계 "); 디스플레이.디스플레이(); 지연(5000);루프 기능에서 LM35에서 읽고 온도를 계산했습니다. 그런 다음 시간과 날짜를 가져와 OLED에 인쇄합니다.
<사전><코드> 출력 =analogRead(sensor_pin); 온도 =(출력*500)/1023; display.clearDisplay(); display.setTextSize(2); display.setCursor(20,0); display.print(rtc.getTimeStr()); display.setTextSize(1); display.setCursor(0,15); display.print(rtc.getDateStr()); display.setTextSize(1); display.setCursor(70,15); display.print(rtc.getDOWStr());
전체 Arduino 코드
#include #include DS3231 rtc(SDA, SCL);#define OLED_MOSI 11#define OLED_CLK 13#define OLED_DC 9#define OLED_CS 10#define OLED_RESET 8Adafruit_SSD1306 디스플레이(OLED_MOSI, OLED_DC, OLED_CLK, OLED_RESET;const int sensor_pin =A0; 부동 온도; float 출력, 무효 setup() { pinMode(sensor_pin,INPUT); rtc.begin(); display.begin(SSD1306_SWITCHCAPVCC); //rtc.setDOW(수요일); // 요일을 SUNDAY로 설정 //rtc.setTime(19, 02, 0); // 시간을 12:00:00으로 설정(24시간 형식) //rtc.setDate(7, 12, 2017); // 날짜를 2017년 6월 6일로 설정합니다. display.clearDisplay(); display.setTextColor(흰색); display.setTextSize(2); display.setCursor(0,0); display.print(" 날씨 "); display.setCursor(0,17); display.print(" 시계 "); 디스플레이.디스플레이(); 지연(5000);} 무효 루프(){ 출력 =analogRead(sensor_pin); 온도 =(출력*500)/1023; display.clearDisplay(); display.setTextSize(2); display.setCursor(20,0); display.print(rtc.getTimeStr()); display.setTextSize(1); display.setCursor(0,15); display.print(rtc.getDateStr()); display.setTextSize(1); display.setCursor(70,15); display.print(rtc.getDOWStr()); display.setTextSize(1); display.setCursor(20,25); display.print("온도:"); display.print(온도); display.print("C"); 디스플레이.디스플레이(); 지연(1000);}
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> #include #include DS3231 rtc(SDA, SCL);#define OLED_MOSI 11#define OLED_CLK 13#define OLED_DC 9#define OLED_CS 10#define OLED_RESET 8Adafruit_SSD1306 디스플레이(OLED_MOSI, OLED_CLKRESET, OLED_DC, OLED_CLKRESET) sensor_pin =A0; 부동 온도; float 출력, 무효 setup() { pinMode(sensor_pin,INPUT); rtc.begin(); display.begin(SSD1306_SWITCHCAPVCC); //rtc.setDOW(수요일); // 요일을 SUNDAY로 설정 //rtc.setTime(19, 02, 0); // 시간을 12:00:00으로 설정(24시간 형식) //rtc.setDate(7, 12, 2017); // 날짜를 2017년 6월 6일로 설정합니다. display.clearDisplay(); display.setTextColor(흰색); display.setTextSize(2); display.setCursor(0,0); display.print(" 날씨 "); display.setCursor(0,17); display.print(" 시계 "); 디스플레이.디스플레이(); 지연(5000);} 무효 루프(){ 출력 =analogRead(sensor_pin); 온도 =(출력*500)/1023; display.clearDisplay(); display.setTextSize(2); display.setCursor(20,0); display.print(rtc.getTimeStr()); display.setTextSize(1); display.setCursor(0,15); display.print(rtc.getDateStr()); display.setTextSize(1); display.setCursor(70,15); display.print(rtc.getDOWStr()); display.setTextSize(1); display.setCursor(20,25); display.print("온도:"); display.print(온도); display.print("C"); 디스플레이.디스플레이(); 지연(1000);}섹션>
제조공정
구성품 및 소모품 Arduino Nano R3 × 1 LED 매트릭스 × 1 포토 저항기 × 1 브레드보드(일반) × 1 DS3231 × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 몇 미터 떨어진 방의 시계 디스플레이를 읽으려면 이러한 LED 매트릭스 디스플레이가 필요합니다. 좋은 가격에 4셀 디스플레이를 구입한 후 Hackster에서 사용 가능한 프로젝트를
이 Arduino Tutorial에서는 DS3231 Real Time Clock Module을 사용하는 방법을 배웁니다. 다음 비디오를 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다. 개요 여기에 오는 첫 번째 질문은 Arduino 자체에 내장된 시간 측정기가 있는 경우 Arduino 프로젝트에 대해 실제로 별도의 RTC가 필요한 이유입니다. 요점은 RTC 모듈이 배터리로 실행되며 마이크로컨트롤러를 다시 프로그래밍하거나 주 전원을 분리하더라도 시간을 추적할 수 있다는 것입니다. DS3231 실시간 시계 DS3231은 시