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

날짜, 시간, 온도 및 습도 표시

구성품 및 소모품

Arduino UNO
× 1
DHT11 온도 및 습도 센서(4핀)
× 1
Maxim 통합 DS3231
× 1
저항 10k 옴
× 1
Adafruit 128x64 OLED 그래픽 디스플레이
× 1
브레드보드(일반)
× 1
점퍼 와이어(일반)
× 15

이 프로젝트 정보

온도와 습도와 함께 시간, 날짜를 표시할 수 있는 인터페이스를 만들고 싶었던 적이 있습니까? 생각보다 훨씬 쉽습니다.

아래와 같이 몇 가지 중요한 구성 요소가 필요합니다.

아두이노 우노/나노

먼저 마이크로 컨트롤러가 필요합니다. 프로젝트에 Arduino Uno를 사용했지만 Arduino Nano에도 핀이 충분합니다.

DHT11

DHT11은 매우 저렴한 디지털 온도 및 습도 센서입니다. 용량성 습도 센서와 서미스터를 사용하여 주변 공기를 측정합니다. 2초마다 읽는 것이 바람직하므로 판독 시간이 중요합니다.

명심해야 할 작은 점이 있습니다. 시간을 한 번 설정한 후 해당 행에 주석을 달았는지 확인하고 다시 컴파일하십시오. 이런 식으로 RTC는 시간을 추적하고 시간은 이전으로 컴파일한 것으로 설정되지 않습니다.

DS3231

DS3231은 일반적으로 사용되는 DS1307 모듈과 동일한 RTC 모듈입니다. DS1307에 비해 상당히 저렴하고 훨씬 정확합니다. 여기에는 통합 온도 보상 수정 발진기(TCXO)와 수정이 포함되어 있습니다. 이 장치는 배터리 입력을 통합하고 장치의 주 전원이 차단될 때 정확한 시간을 유지합니다.

128x64 OLED 그래픽 디스플레이

OLED 화면에 데이터가 표시됩니다. 이 화면 크기는 매우 작고 화면은 인상적으로 밝습니다. Adafruit OLED 화면은 화면 후면에서 조정할 수 있는 SPI 또는 I2C 인터페이스를 사용하여 제어할 수 있습니다. 더 저렴한 화면을 사용할 수도 있지만(eBay에 많이 있음) Adafruit의 라이브러리를 통해 사용할 헤더 파일과 화면이 작동해야 하므로 어떤 화면을 구매할지 주의하세요.

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

코드

<울>
  • Time_Temp_Humidity_Display.ino
  • Time_Temp_Humidity_Display.ino아두이노
    프로젝트를 컴파일하는 코드입니다. 필요한 헤더 파일을 추가하면 프로젝트가 작동하지 않습니다.<사전>//hackster.io 사용자에게 인사드립니다!//날짜, 시간, 온도 및 습도 표시///////////// ////////////OLED용////////////////////////#include #include #include #include // 소프트웨어 SPI를 사용하는 경우(기본 경우):#define OLED_MOSI 9 //MOSI aka SDA#define OLED_CLK 10 //CLK aka SCL#define OLED_DC 11 #define OLED_CS 12#define OLED_RESET 13Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);#if (SSD1306_LCDHEIGHT !=64)#error("높이가 잘못되었습니다. 수정하세요!" Adafruit_SSD130/);# ////////////////////////////////////////////////////// //////////////////////////////////////DHT의 경우///////////// //////////////#includedht DHT;#define DHT11_PIN 3int DHTtimer =0;/////////////////// ////////////////////////////////////////////////////// /////////////////////RTC용(DS3231)//////////////////////// ////SDA에서 A4로, SCL에서 A5로#define DS3231_I2C_A DDRESS 0x68// 일반 십진수를 이진 코드 십진수로 변환byte decToBcd(byte val){ return( (val/10*16) + (val%10) );}// 이진 코딩 십진수를 일반 십진수로 변환byte bcdToDec(byte val ){ return( (val/16*10) + (val%16) );}/////////////////////////////// /////////////////////////////// 무효 설정() { Wire.begin(); Serial.begin(9600); //여기에 초기 시간을 설정하고 시간을 설정한 후 이 섹션에 주석을 추가합니다. //DS3231 초, 분, 시간, 일, 날짜, 월, 년 //setDS3231time(00,24,12,6,3,2,17); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay();}////////////////////////////DS3231 코딩////////////// /////////////void setDS3231time(바이트 초, 바이트 분, 바이트 시간, 바이트 dayOfWeek, bytedayOfMonth, 바이트 월, 바이트 연도){ // 시간 및 날짜 데이터를 DS3231로 설정 Wire.beginTransmission( DS3231_I2C_ADDRESS); Wire.write(0); // 다음 입력을 초에서 시작하도록 설정 레지스터 Wire.write(decToBcd(second)); // 초 설정 Wire.write(decToBcd(분)); // 분 설정 Wire.write(decToBcd(hour)); // 시간 설정 Wire.write(decToBcd(dayOfWeek)); // 요일 설정 (1=일요일, 7=토요일) Wire.write(decToBcd(dayOfMonth)); // 날짜 설정(1 ~ 31) Wire.write(decToBcd(month)); // 월 설정 Wire.write(decToBcd(year)); // 연도 설정(0~99) Wire.endTransmission();}void readDS3231time(byte *second,byte *분,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year){ Wire. 시작전송(DS3231_I2C_ADDRESS); Wire.write(0); // DS3231 레지스터 포인터를 00h로 설정 Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // 레지스터 00h에서 시작하여 DS3231에서 7바이트의 데이터 요청 *second =bcdToDec(Wire.read() &0x7f); *분 =bcdToDec(Wire.read()); *시간 =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *월 =bcdToDec(Wire.read()); *년 =bcdToDec(Wire.read());} 무효 displayTime(){ 바이트 초, 분, 시, dayOfWeek, dayOfMonth, 월, 년; // DS3231에서 데이터 검색 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // 시리얼 모니터로 보냅니다. Serial.print(hour, DEC); // 표시될 때 바이트 변수를 10진수로 변환합니다. Serial.print(":"); if (분<10) { Serial.print("0"); } Serial.print(분, 12월); Serial.print(":"); if (second<10) { Serial.print("0"); } Serial.print(초, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(월, DEC); Serial.print("/"); Serial.print(연도, DEC); Serial.print(" 요일:");////////////////////////////////////// //////////////////////////// display.setCursor(50,0); display.print(dayOfMonth, DEC); display.print(","); display.setCursor(91,0); display.print("20"); display.print(연도, DEC); if (시간<10) { display.setCursor(40,10); display.print("0"); display.print(시, 12월); display.print(":"); } if (시>9) { display.setCursor(40,10); display.print(시, 12월); display.print(":"); } if (분<10) { display.setCursor(58,10); display.print("0"); display.print(분, 12월); display.print(":"); } if (분>9) { display.setCursor(58,10); display.print(분, 12월); display.print(":"); } if (second<10) { display.setCursor(75,10); display.print("0"); display.print(초, 12월); } if (초>9) { display.setCursor(75,10); display.print(초, 12월); } //////////////////////////////////////////////////// ///////////////// //////////////////////////////////////////////////////////////////////// WEEK///////////////////// switch(dayOfWeek){ 경우 1:Serial.println("일요일"); display.setTextSize(1); display.setTextColor(흰색); display.setCursor(20,0); display.print("태양"); 부서지다; 사례 2:Serial.println("월요일"); display.setTextSize(1); display.setTextColor(흰색); display.setCursor(20,0); display.print("월"); 부서지다; 사례 3:Serial.println("화요일"); display.setTextSize(1); display.setTextColor(흰색); display.setCursor(20,0); display.print("화"); 부서지다; 사례 4:Serial.println("수요일"); display.setTextSize(1); display.setTextColor(흰색); display.setCursor(20,0); display.print("수"); 부서지다; 사례 5:Serial.println("목요일"); display.setTextSize(1); display.setTextColor(흰색); display.setCursor(20,0); display.print("목"); 부서지다; 사례 6:Serial.println("금요일"); display.setTextSize(1); display.setTextColor(흰색); display.setCursor(20,0); display.print("금"); 부서지다; 사례 7:Serial.println("토요일"); display.setTextSize(1); display.setTextColor(흰색); display.setCursor(20,0); display.print("토"); 부서지다; }///////////////////////////////////////////////////////// //// switch(month) { 경우 1:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("1월"); 부서지다; 사례 2:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("2월"); 부서지다; 사례 3:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("3월"); 부서지다; 사례 4:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("4월"); 부서지다; 사례 5:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("5월"); 부서지다; 사례 6:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("6월"); 부서지다; 사례 7:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("7월"); 부서지다; 사례 8:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("8월"); 부서지다; 사례 9:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("9월"); 부서지다; 사례 10:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("10월"); 부서지다; 사례 11:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("11월"); 부서지다; 사례 12:display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,0); display.print("12월"); 부서지다; } /////////////시침/////////////// float x1, y1, a, b; 상수 부동 파이 =3.14; a=((시-15)*30); b =(a*pi)/180; x1=40+(9*cos(b)); y1=41+(9*sin(b)); display.drawLine(40,41, x1, y1, 흰색); /////////////분침///////////////// float x1, y1, a, b;// const float pi =3.14; a=((분-15)*6); b =(a*pi)/180; x1=40+(17*cos(b)); y1=41+(17*sin(b)); display.drawLine(40,41, x1, y1, 흰색); /////////////초침///////////// //float x1, y1, a, b; a=((초-15)*6); b =(a*pi)/180; x1=40+(19*cos(b)); y1=41+(19*sin(b)); display.drawLine(40,41, x1, y1, 흰색); ////////////////움직이지 않을 아날로그 시계 부분////////////////display.drawCircle(40, 41, 22, 흰색); display.drawCircle(40, 41, 1, 흰색); display.drawLine(40, 20, 40, 25, 흰색); //12display.drawLine(40, 63, 40, 58, 흰색); //6display.drawLine(62, 41, 57, 41, 흰색); //3display.drawLine(19, 41, 24, 41, 흰색); //9display.drawLine(50, 24, 47, 28, 흰색); //1display.drawLine(57, 31, 53, 34, 흰색); //2display.drawLine(60, 51, 54, 48, 흰색); //4display.drawLine(51, 58, 48, 54, 흰색); //5display.drawLine(29, 58, 32, 54, 흰색); //7display.drawLine(21, 51, 25, 48, 흰색); //8display.drawLine(22, 31, 27, 33, 흰색); //10display.drawLine(30, 23, 32, 28, 흰색); //11 }ReadTempAndHum 무효(){ int chk =DHT.read11(DHT11_PIN); display.setTextSize(1); display.setTextColor(흰색); display.setCursor(70,45); display.print("온도:"); display.print(DHT.온도, 0); display.print("C"); display.setCursor(70,56); display.print("흠:"); display.print(DHT.습도, 0); display.print("%");Serial.print(" 습도:" );Serial.print(DHT.humidity, 1);Serial.print("%");Serial.print(" | 온도:"); Serial.print(DHT.온도, 1);Serial.println("C");} 무효 루프() { displayTime(); // 직렬 모니터에 실시간 시계 데이터를 표시합니다. DHTtimer =DHTtimer + 1; //DHT가 2초마다 읽히도록 하기 위해 2초 동안 계산합니다. if (DHTtimer> 1) { display.fillRect(70, 45, 128, 64, BLACK); ReadTempAndHum(); DHT 타이머 =0; } 지연(1000); 디스플레이.디스플레이(); //화면에서 시간과 날짜가 표시되는 부분이 지워집니다. display.fillRect(0, 0, 64, 64, BLACK); display.fillRect(0, 0, 128, 20, 검은색);}

    맞춤형 부품 및 인클로저

    adafruit_ssd1306-master_KOASsXZpW2.zip adafruit-gfx-library-master_2IU6g1UpF6.zip dht_library_Xgke1ZhPls.zip dht-sensor-library-master_Al4SeQRvaS.zip arduinortclibrary-master_hKLoSjCilY.zip

    회로도

    참고:Fritzing에서 적절한 OLED 화면을 찾지 못했습니다. OLED의 핀 출력 위치에 대한 추가 설명이 필요하면 코드의 주석을 확인하세요. breadboard_diagram_QvhPKCpIo5.fzz참고:Fritzing에서 적절한 OLED 화면을 찾지 못했습니다. OLED의 핀 출력 위치에 대한 추가 설명이 필요하면 코드의 주석을 확인하세요. schema_XKU0jQoWbx.fzz

    제조공정

    1. Python에서 현재 날짜와 시간을 얻는 방법은 무엇입니까?
    2. Raspberry Pi 온도 및 습도 네트워크 모니터
    3. Python 및 Raspberry Pi 온도 센서
    4. Raspberry Pi의 간편한 온도 및 습도
    5. 실험실 '기상 관측소'
    6. Raspberry Pi 온도 및 광 센서
    7. 습도 센서를 확인하고 보정하는 방법
    8. 자바 - 날짜 및 시간
    9. C++ 날짜 및 시간
    10. 파이썬 - 날짜 및 시간