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

128x64 LCD의 아날로그, 디지털 시계 및 온도계

구성품 및 소모품

Arduino Nano R3
× 1
Maxim 통합 DS3231M - ±5ppm, I2C 실시간 클록
× 1
단일 회전 전위차계 - 10k 옴
× 1
푸시버튼 스위치, 순간
× 1
128x64 LCD 그래픽 디스플레이
× 1

필요한 도구 및 기계

납땜 인두(일반)

이 프로젝트 정보

arduinoecia 웹 페이지에는 128x64 LCD 그래픽 디스플레이가 있는 Arduino 시계, 디스플레이 대비 조정을 위한 전위차계, DS3231 RTC 모듈 및 푸시 버튼이 있습니다. RTC 모듈은 A4(SDA) 및 A5(SCL) 핀에서 Arduino에 연결됩니다. 버튼은 소프트웨어를 통해 활성화된 Arduino의 내부 풀업 저항과 함께 디지털 핀 3에 연결됩니다. 이 프로그램은 컴파일하기 전에 설치해야 하는 일부 라이브러리를 사용합니다. 라이브러리의 압축을 풀고 Arduino IDE의 LIBRARIES 폴더에 넣습니다.

프로그램에는 두 개의 화면이 있습니다. 첫 번째 화면( screen_1 )은 아날로그 시계, 디지털 시계, 현재 날짜 및 온도를 보여줍니다.

두 번째 화면( screen_2 )은 디지털 시계, 요일, 날짜 및 현재 온도 정보, 최저 온도 및 최고 온도를 보여줍니다. 디지털 핀 3에 연결된 푸시 버튼을 눌러 화면을 선택합니다.

RTC DS3231 모듈의 날짜와 시간을 설정하려면 직렬 모니터를 사용하여 정보를 년, 월, 일, 시, 분, 초 형식으로 입력합니다.

정보를 올바르게 입력한 경우 " "라는 메시지가 표시됩니다.

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

코드

<울>
  • 코드
  • 라이브러리
  • 코드Arduino
    //프로그램:디스플레이 LCD 128x64 e RTC DS3231//자동:Arduino e Cia#include #include #include #include #include //라인하 바이소는 conexoes do display e dev ser //ajustada 준수 o modelo utilizadoU8GLIB_ST7920_128X64_1X u8g(6, 5, 4, 7); //Enable, RW, RS, RESETint X2 =0;int Y2 =0;int X3 =0;int Y3 =0;float angulo =0;int posicao =0;int posicaoh =0;int 온도 =0;int min_temp =500;int max_temp =-500;int ScreenWith =128;int ScreenWithC =96;int ScreenHeight =64;int ScreenHeightC =32;#define botao 3int estado_botao =0;char* dia_da_semana[]={ "일", "월 ", "화", "수", "목", "금", "토"};void tela_1() { u8g.drawRFrame(0, 0, 128, 64, 3); //최고 온도 u8g.setPrintPos(20, 30); u8g.print(온도); u8g.drawStr(42, 30, "C"); u8g.drawCircle(37, 34, 2); Mostra_relogio_digital(); //Mostra relogio analogico fundo_relogio(); //Atualiza Ponteiro de horas desenha_ponteiro(hour()-1, 12.0, 10); //Atualiza Ponteiro de minutos desenha_ponteiro(min()-5, 60.0, 19); //Atualiza Ponteiro de segundos desenha_ponteiro(second()-5, 60, 21);}void tela_2(){ u8g.drawRFrame(0, 0, 128, 64, 3); u8g.drawRFrame(68, 4, 55, 56, 2); Mostra_relogio_digital(); u8g.setFont(u8g_font_5x8); u8g.drawStr(78, 35, "최소"); u8g.drawStr(78, 53, "최대"); u8g.setFont(u8g_font_6x13); u8g.setPrintPos(25, 41); u8g.print(dia_da_semana[(요일()-1)]); //기온 u8g.setPrintPos(83, 19); u8g.print(온도); u8g.drawStr(105, 19, "C"); u8g.drawCircle(100, 12, 2); //최고 온도 최소값 u8g.setPrintPos(98, 36); u8g.print(최소온도); u8g.drawCircle(113, 29, 2); //최고 온도 최대 u8g.setPrintPos(98, 54); u8g.print(max_temp); u8g.drawCircle(113, 47, 2);}void desenha_ponteiro(float valor, float rotacao, int Radius) { angulo =valor * 2.0 * 3.1415 / rotacao - 1,5707; X2 =ScreenWithC + 반경 * cos(각도); Y2 =화면 높이C + 반경 * sin(각도); u8g.drawLine(ScreenWithC, ScreenHeightC, X2, Y2);}void fundo_relogio() { u8g.drawCircle(ScreenWithC, ScreenHeightC, 27); u8g.drawCircle(ScreenWithC, ScreenHeightC, 1); u8g.setFont(u8g_font_6x13); u8g.setFontPosTop(); u8g.drawStr(90, 9, "12"); u8g.drawStr(114, 25, "3"); u8g.drawStr(94, 44, "6"); u8g.drawStr(74, 25, "9"); for(int traco_minuto =0; traco_minuto<12; traco_minuto++) { //Desenha linhas relogio analogico angulo =traco_minuto / 12.0 * 2 * 3.1415; X2 =ScreenWithC + 25 * cos(각도); Y2 =화면 높이C + 25 * sin(각도); X3 =ScreenWithC + 25 * cos(각도); Y3 =화면 높이C + 25 * sin(각도); u8g.drawLine(X2, Y2, X3, Y3); }}void mostra_relogio_digital(){ //Mostra a 데이터 u8g.setFont(u8g_font_5x8); u8g.setPrintPos(8, 55); u8g.print(일()); u8g.drawStr(19, 55, "/"); u8g.setPrintPos(24, 55); u8g.print(월()); u8g.drawStr(35, 55, "/"); u8g.setPrintPos(41, 55); u8g.print(연도()); //최소한의 시간 u8g.drawRBox(3, 4, 62, 21,2); u8g.setColorIndex(0); u8g.setFont(u8g_font_fub17); u8g.drawStr(29,21,":"); //Acerta a posicao do digito caso a hora //seja menor do que 10 if (hour() <10) { u8g.drawStr(3,23,"0"); 포시카오 =16; } 그렇지 않으면 포시카오 =3; u8g.setPrintPos(포지카오, 23); u8g.print(시()); //Acerta a posicao do digito caso o minuto //seja menor do que 10 if (minute() <10) { u8g.drawStr(38,23,"0"); 포시카오 =51; } 그렇지 않으면 posicao =38; u8g.setPrintPos(포지카오,23); u8g.print(분()); u8g.setColorIndex(1);} 무효 설정() { pinMode(3, INPUT_PULLUP); Serial.begin(9600); if ( u8g.getMode() ==U8G_MODE_R3G3B2 ) u8g.setColorIndex(255); // 흰색 else if ( u8g.getMode() ==U8G_MODE_GRAY2BIT ) u8g.setColorIndex(3); // 최대 강도 else if ( u8g.getMode() ==U8G_MODE_BW ) u8g.setColorIndex(1); // setSyncProvider(RTC.get)의 픽셀; 직렬 <=max_temp) { max_temp =온도; } if (온도 <=min_temp) { min_temp =온도; } 정적 time_t tLast; time_t t; tmElements_t tm; //Verifica se foi setado um novo horario //형식:ano, mes, dia, hora, minuto, segundo if (Serial.available()>=12) { int y =Serial.parseInt(); if (y>=100 &&y <1000) Serial<=1000) tm.Year =CalendarYrToTm(y); else //(y <100) tm.Year =y2kYearToTm(y); tm.Month =Serial.parseInt(); tm.Day =Serial.parseInt(); tm.Hour =Serial.parseInt(); tm.Minute =Serial.parseInt(); tm.Second =Serial.parseInt(); t =makeTime(tm); RTC.set(t); 세트타임(t); Serial < 0) Serial.read(); } } t =지금(); if (t !=tLast) { tLast =t; 인쇄날짜시간(t); 직렬 < 0) Serial < 
    라이브러리Arduino
    미리보기 없음(다운로드만 가능).

    회로도


    제조공정

    1. 아날로그 및 디지털 신호
    2. 애플리케이션이 있는 아날로그 및 디지털 센서 유형
    3. Arduino 관점 시계
    4. 마스터 시계
    5. LCD 애니메이션 및 게임
    6. Arduino Temp. 3.2 디스플레이가 있는 모니터 및 실시간 시계
    7. 시간 설정 및 알람 기능이 있는 TM1637 디지털 시계
    8. Arduino 및 Nokia 5110 디스플레이가 있는 DIY 전압계
    9. Nextion 디스플레이의 BME280 온도, 습도 및 압력
    10. DS1302 RTC가 있는 간단한 알람 시계