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

실시간 시계가 있는 Arduino OLED 온도 디스플레이

구성품 및 소모품

Arduino UNO
× 1
Adafruit DS3231 RTC
× 1
Digilent Pmod OLED
× 1
Texas Instruments LM35 온도 센서
× 1
점퍼 와이어(일반)
× 1
브레드보드(일반)
× 1

이 프로젝트 정보

우리는 시간, 날짜 및 온도를 알려주는 Arduino 날씨 시계를 만들 것입니다. LM35 센서가 온도를 알려주고 DS3231이 날짜와 시간을 알려주고 OLED를 사용하여 온도, 날짜 및 시간을 표시합니다.

필수 구성 요소

이 프로젝트에 필요한 구성 요소는 다음과 같습니다.

<울>
  • 아두이노
  • <울>
  • DS3231(실시간 클록 모듈)
  • <울>
  • OLED 디스플레이(여기서 SSD1306이 사용됨)
  • <울>
  • SSD1306.pdf
  • <울>
  • Lm35
  • <울>
  • 전선 연결
  • <울>
  • 브레드보드
  • lm35.pdf

    회로도

    먼저 아두이노와 OLED를 연결합니다. OLED는 Arduino와 SPI 및 I2C 통신을 통해 작동하지만 SPI 통신을 사용하여 연결했습니다. Arduino의 SPI 핀은 8, 9, 10, 11, 13번 핀입니다. OLED와 Arduino의 연결은 다음과 같습니다.

    <울>
  • OLED의 CS를 Arduino의 10번 핀에 연결합니다.
  • <울>
  • OLED의 DC를 Arduino의 9번 핀에 연결합니다.
  • <울>
  • OLED의 RES를 Arduino의 8번 핀에 연결합니다.
  • <울>
  • OLED의 D1을 Arduino의 11번 핀에 연결합니다.
  • <울>
  • OLED의 D0을 Arduino의 13번 핀에 연결합니다.
  • <울>
  • OLED의 VCC를 Arduino의 5V 핀에 연결합니다.
  • <울>
  • OLED의 GND를 Arduino의 GND 핀에 연결합니다.
  • 그런 다음 DS3231 모듈을 Arduino와 연결합니다. DS3231 모듈은 I2C 통신을 통해 Arduino와 함께 작동합니다. Arduino에서 I2C 통신을 위한 핀은 SDA와 SCL입니다. 다음과 같이 DS3231 모듈을 Arduino에 연결합니다.

    <울>
  • DS3231의 GND를 Arduino의 GND 핀에 연결합니다.
  • <울>
  • DS3231의 VCC를 Arduino의 5V 핀에 연결합니다.
  • <울>
  • OLED의 SDA를 Arduino의 A4에 연결합니다.
  • <울>
  • OLED의 SCL을 Arduino의 A5 핀에 연결합니다.
  • 마지막으로 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="코드">

    코드

    <울>
  • 코드 스니펫 #4
  • 코드 스니펫 #5
  • 코드 스니펫 #6
  • 코드 스니펫 #4일반 텍스트
    <사전> display.clearDisplay(); display.setTextColor(흰색); display.setTextSize(2); display.setCursor(0,0); display.print(" 날씨 "); display.setCursor(0,17); display.print(" 시계 "); 디스플레이.디스플레이(); 지연(5000);
    코드 스니펫 #5일반 텍스트
    <사전> 출력 =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());
    코드 스니펫 #6일반 텍스트
    #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);}

    회로도


    제조공정

    1. 실제 센서로 효과 제어
    2. Arduino로 DIY 가장 간단한 IV9 Numitron 시계
    3. 이슬람 기도 시간이 있는 Arduino 시계
    4. Arduino Pong 게임 - OLED 디스플레이
    5. 단어 단위의 시간 분해능이 있는 워드 시계
    6. 마스터 시계
    7. Arduino Temp. 3.2 디스플레이가 있는 모니터 및 실시간 시계
    8. 베를린 시계
    9. Nextion 디스플레이로 재생
    10. DS1302 RTC가 있는 간단한 알람 시계