Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Analógico, Relógio Digital e Termômetro em LCD 128x64

Componentes e suprimentos

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ± 5ppm, I2C Real-Time Clock
× 1
Potenciômetro de volta única - 10k ohms
× 1
Botão de pressão, momentâneo
× 1
Visor gráfico LCD de 128x64
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Sobre este projeto




Na página da web da arduinoecia é apresentado o relógio Arduino com display gráfico LCD de 128x64, um potenciômetro para ajustar o contraste do display, o módulo DS3231 RTC e um botão de pressão. O módulo RTC é conectado ao Arduino nos pinos A4 (SDA) e A5 (SCL). O botão é conectado ao pino digital 3, com o resistor pull-up interno do Arduino habilitado via software. O programa usa algumas bibliotecas que você terá que instalar antes de compilar. Descompacte as bibliotecas e coloque-as dentro da pasta LIBRARIES do Arduino IDE.

O programa possui duas telas:a primeira (tela_1), mostra o relógio analógico, o relógio digital, bem como a data e a temperatura atuais.

A segunda tela (tela_2) mostra o relógio digital, dia da semana, data e informações de temperatura atual, temperatura mínima e temperatura máxima. As telas são selecionadas pressionando o botão, conectado ao pino digital 3.





Para definir a data e hora do módulo RTC DS3231, use o monitor serial e insira as informações no formato de ano, mês, dia, hora, minuto, segundo.

Se você digitou as informações corretamente, a mensagem "" será exibida.


Código

  • código
  • bibliotecas
código Arduino
 // Programa:Display LCD 128x64 e RTC DS3231 // Autor:Arduino e Cia # include  #include  #include  #include  #include  // A linha abaixo define como conexões para exibição e deve ser // ajustada conforme o modelo usadoU8GLIB_ST7920_128X64_1X u8g (6, 5, 4, 7); // Habilitar, RW, RS, RESETint X2 =0; int Y2 =0; int X3 =0; int Y3 =0; float angulo =0; int posicao =0; int posicaoh =0; int temperatura =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 [] ={"Dom", "Seg "," Ter "," Quarta "," Qui "," Sex "," Sáb "}; void tela_1 () {u8g.drawRFrame (0, 0, 128, 64, 3); // Mostra temperatura u8g.setPrintPos (20, 30); u8g.print (temperatura); u8g.drawStr (42, 30, "C"); u8g.drawCircle (37, 34, 2); mostra_relogio_digital (); // Mostra relogio analogico fundo_relogio (); // Atualiza Ponteiro de horas desenha_ponteiro (hora () - 1, 12.0, 10); // Atualiza Ponteiro de minutos desenha_ponteiro (minuto () - 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, "MIN"); u8g.drawStr (78, 53, "MAX"); u8g.setFont (u8g_font_6x13); u8g.setPrintPos (25, 41); u8g.print (dia_da_semana [(dia da semana () - 1)]); // Mostra temperatura atual u8g.setPrintPos (83, 19); u8g.print (temperatura); u8g.drawStr (105, 19, "C"); u8g.drawCircle (100, 12, 2); // Mostra temperatura mínima u8g.setPrintPos (98, 36); u8g.print (min_temp); u8g.drawCircle (113, 29, 2); // Mostra temperatura maxima 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 =Tela com C + Raio * cos (angulo); Y2 =Altura da tela C + Raio * sen (angulo); 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 =Tela com C + 25 * cos (angulo); Y2 =ScreenHeightC + 25 * sin (angulo); X3 =Tela com C + 25 * cos (angulo); Y3 =ScreenHeightC + 25 * sin (angulo); u8g.drawLine (X2, Y2, X3, Y3); }} void mostra_relogio_digital () {// Mostra os dados u8g.setFont (u8g_font_5x8); u8g.setPrintPos (8, 55); u8g.print (dia ()); u8g.drawStr (19, 55, "/"); u8g.setPrintPos (24, 55); u8g.print (mês ()); u8g.drawStr (35, 55, "/"); u8g.setPrintPos (41, 55); u8g.print (ano ()); // Mostra hora e minutos 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"); posicaoh =16; } else posicaoh =3; u8g.setPrintPos (posicaoh, 23); u8g.print (hora ()); // Acerta a posicao do digito caso o minuto // seja menor do que 10 if (minute () <10) {u8g.drawStr (38,23, "0"); posicao =51; } else posicao =38; u8g.setPrintPos (posição, 23); u8g.print (minuto ()); u8g.setColorIndex (1);} void setup () {pinMode (3, INPUT_PULLUP); Serial.begin (9600); if (u8g.getMode () ==U8G_MODE_R3G3B2) u8g.setColorIndex (255); // branco else if (u8g.getMode () ==U8G_MODE_GRAY2BIT) u8g.setColorIndex (3); // intensidade máxima else if (u8g.getMode () ==U8G_MODE_BW) u8g.setColorIndex (1); // pixel em setSyncProvider (RTC.get); Serial < =max_temp) {max_temp =temperatura; } se (temperatura <=min_temp) {min_temp =temperatura; } static time_t tLast; time_t t; tmElements_t tm; // Verifica se foi definido um novo horario // Formato: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.Segundo =Serial.parseInt (); t =makeTime (tm); RTC.set (t); setTime (t); Serial < 0) Serial.read (); }} t =agora (); if (t! =tLast) {tLast =t; printDateTime (t); Serial < 0) Serial < 
bibliotecas Arduino
 Sem visualização (somente download). 

Esquemas


Processo de manufatura

  1. Sinais analógicos e digitais
  2. Tipos de sensores analógicos e digitais com aplicativos
  3. Relógio de visão pov do Arduino
  4. Relógio mestre
  5. Animação de LCD e jogos
  6. Arduino Temp. Monitor e relógio em tempo real com tela 3.2
  7. Relógio digital TM1637 com configuração de hora e funcionalidade de alarme
  8. Voltímetro DIY com Arduino e um visor Nokia 5110
  9. BME280 Temperatura, Umidade e Pressão na Tela Nextion
  10. Despertador simples com DS1302 RTC