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

Exibição de data, hora, temperatura e umidade

Componentes e suprimentos

Arduino UNO
× 1
Sensor DHT11 de Temperatura e Umidade (4 pinos)
× 1
Maxim Integrated DS3231
× 1
Resistor 10k ohm
× 1
Tela gráfica OLED Adafruit 128x64
× 1
Breadboard (genérico)
× 1
Fios de jumpers (genérico)
× 15

Sobre este projeto


Você sempre quis fazer sua própria interface que pudesse exibir a hora, a data, junto com a temperatura e a umidade? Bem, é muito mais fácil do que você pensa.

Alguns componentes importantes são necessários, conforme mostrado abaixo.





Arduino Uno / Nano


Em primeiro lugar, precisaremos de um microcontrolador. Usei um Arduino Uno para meu projeto, mas um Arduino Nano também terá pinos suficientes.





DHT11


O DHT11 é um sensor digital de temperatura e umidade muito acessível. Ele usa um sensor de umidade capacitivo e um termistor para medir o ar circundante. O tempo das leituras é fundamental, pois é aconselhável fazer a leitura a cada 2 segundos.

Há um pequeno ponto a ter em mente. Depois de definir a hora uma vez, certifique-se de comentar essa linha e compilar novamente. Dessa forma, o RTC manterá o controle da hora, e a hora não será definida como o que você compilou antes.





DS3231


O DS3231 é um módulo RTC, igual ao módulo DS1307 comumente usado. É consideravelmente barato e muito mais preciso que seu homólogo DS1307. Ele contém um oscilador de cristal com compensação de temperatura (TCXO) e cristal integrados. O dispositivo incorpora uma entrada de bateria e mantém uma cronometragem precisa quando a alimentação principal do dispositivo é interrompida.





Visor gráfico OLED de 128x64


A tela OLED exibirá nossos dados. Este tamanho de tela é bastante compacto e tem um brilho impressionante. A tela OLED da Adafruit pode ser controlada usando a interface SPI ou I2C, que pode ser ajustada na parte de trás da tela. Você também pode usar uma tela mais acessível (existem muitas no eBay), mas tome cuidado com a tela que você compra, pois a tela precisa funcionar com os arquivos de cabeçalho que usaremos nas bibliotecas do Adafruit.


Código

  • Time_Temp_Humidity_Display.ino
Time_Temp_Humidity_Display.ino Arduino
Este é o código para compilar o projeto. Lembre-se de adicionar os arquivos de cabeçalho necessários, sem com o projeto não funcionará.
 // Saudações usuários do hackster.io! // Exibição de Data, Hora, Temperatura e Umidade /////////////// //////////// Para OLED //////////////////////// # include  #include  #include  #include  // Se estiver usando o software SPI (o caso padrão):# define OLED_MOSI 9 // MOSI também conhecido como SDA # define OLED_CLK 10 // CLK também conhecido como 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 ("Altura incorreta, corrija Adafruit_SSD1306.h!"); //////////////////////////////////////////////////////// //////////////////////////////////////// Para DHT //////////// ////////////////#includedht DHT; #define DHT11_PIN 3int DHTtimer =0; ////////////////// //////////////////////////////////////////////////////// /////////////////////// Para RTC (DS3231) //////////////////////////// //// SDA para A4, SCL para A5 # define DS3231_I2C_A DDRESS 0x68 // Converte números decimais normais em decimais codificados em binário decToBcd (byte val) {return ((val / 10 * 16) + (val% 10));} // Converte números decimais codificados em binários em números decimais normaisbyte bcdToDec (byte val ) {return ((val / 16 * 10) + (val% 16));} ////////////////////////////////// /////////////////////////////////// void setup () {Wire.begin (); Serial.begin (9600); // definir a hora inicial aqui, após definir a hora, comente esta seção // DS3231 segundos, minutos, horas, dia, data, mês, ano // setDS3231time (00,24,12,6,3,2,17); display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay ();} //////////////////////////// DS3231 codificação /////////////// ///////////// void setDS3231time (byte segundo, byte minuto, byte hora, byte dayOfWeek, bytedayOfMonth, byte mês, byte ano) {// define data e hora para DS3231 Wire.beginTransmission ( DS3231_I2C_ADDRESS); Wire.write (0); // define a próxima entrada para começar no registro de segundos Wire.write (decToBcd (second)); // definir segundos Wire.write (decToBcd (minuto)); // definir minutos Wire.write (decToBcd (hora)); // definir horas Wire.write (decToBcd (dayOfWeek)); // definir o dia da semana (1 =Domingo, 7 =Sábado) Wire.write (decToBcd (dayOfMonth)); // definir data (1 a 31) Wire.write (decToBcd (mês)); // definir o mês Wire.write (decToBcd (ano)); // definir ano (0 a 99) Wire.endTransmission ();} void readDS3231time (byte * segundo, byte * minuto, byte * hora, byte * dayOfWeek, byte * dayOfMonth, byte * mês, byte * ano) {Wire. beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // define o ponteiro de registro DS3231 para 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // solicita sete bytes de dados do DS3231 a partir do registro 00h * segundos =bcdToDec (Wire.read () &0x7f); * minuto =bcdToDec (Wire.read ()); * hora =bcdToDec (Wire.read () &0x3f); * dayOfWeek =bcdToDec (Wire.read ()); * dayOfMonth =bcdToDec (Wire.read ()); * mês =bcdToDec (Wire.read ()); * ano =bcdToDec (Wire.read ());} void displayTime () {byte segundo, minuto, hora, dayOfWeek, dayOfMonth, month, year; // recuperar dados do DS3231 readDS3231time (&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // envia para o monitor serial Serial.print (hora, DEC); // converte a variável de byte em um número decimal quando exibida Serial.print (":"); if (minuto <10) {Serial.print ("0"); } Serial.print (minuto, DEC); Serial.print (":"); if (segundo <10) {Serial.print ("0"); } Serial.print (segundo, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (mês, DEC); Serial.print ("/"); Serial.print (ano, DEC); Serial.print ("Dia da semana:"); ////////////////////////////////////////// //////////////////////////////// display.setCursor (50,0); display.print (dayOfMonth, DEC); display.print (","); display.setCursor (91,0); display.print ("20"); display.print (ano, DEC); if (hora <10) {display.setCursor (40,10); display.print ("0"); display.print (hora, DEC); display.print (":"); } if (hora> 9) {display.setCursor (40,10); display.print (hora, DEC); display.print (":"); } if (minuto <10) {display.setCursor (58,10); display.print ("0"); display.print (minuto, DEC); display.print (":"); } if (minuto> 9) {display.setCursor (58,10); display.print (minuto, DEC); display.print (":"); } if (segundo <10) {display.setCursor (75,10); display.print ("0"); display.print (segundo, DEC); } if (segundos> 9) {display.setCursor (75,10); display.print (segundo, DEC); } ///////////////////////////////////////////////////// /////////////////// ////////////////////////////// PARA O DIA DO WEEK /////////////////////// switch (dayOfWeek) {case 1:Serial.println ("Sunday"); display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (20,0); display.print ("Sol"); pausa; caso 2:Serial.println ("segunda-feira"); display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (20,0); display.print ("Mon"); pausa; caso 3:Serial.println ("terça-feira"); display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (20,0); display.print ("Ter"); pausa; caso 4:Serial.println ("quarta-feira"); display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (20,0); display.print ("Quarta"); pausa; caso 5:Serial.println ("quinta-feira"); display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (20,0); display.print ("Qui"); pausa; caso 6:Serial.println ("Friday"); display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (20,0); display.print ("Sex"); pausa; caso 7:Serial.println ("sábado"); display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (20,0); display.print ("Sat"); pausa; }//////////////////////////////POR MÊS///////////////// //// switch (mês) {case 1:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("Jan"); pausa; caso 2:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("fevereiro"); pausa; caso 3:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("Mar"); pausa; caso 4:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("abril"); pausa; caso 5:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("maio"); pausa; caso 6:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("Jun"); pausa; caso 7:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("julho"); pausa; caso 8:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("agosto"); pausa; caso 9:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("Set"); pausa; caso 10:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("Out"); pausa; caso 11:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("novembro"); pausa; caso 12:display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,0); display.print ("Dez"); pausa; } ///////////// HORA HAND /////////////// float x1, y1, a, b; const float pi =3,14; a =((hora-15) * 30); b =(a * pi) / 180; x1 =40 + (9 * cos (b)); y1 =41 + (9 * sen (b)); display.drawLine (40,41, x1, y1, BRANCO); ///////////// MINUTE HAND ///////////////// float x1, y1, a, b; // const float pi =3,14; a =((minuto-15) * 6); b =(a * pi) / 180; x1 =40 + (17 * cos (b)); y1 =41 + (17 * sen (b)); display.drawLine (40,41, x1, y1, BRANCO); ///////////// SEGUNDA HAND /////////////// // float x1, y1, a, b; a =((segundo-15) * 6); b =(a * pi) / 180; x1 =40 + (19 * cos (b)); y1 =41 + (19 * sen (b)); display.drawLine (40,41, x1, y1, BRANCO); //////////////// PARTES DO RELÓGIO ANALÓGICO QUE NÃO ESTARÃO SE MOVENDO //////////////// display.drawCircle (40, 41, 22, WHITE); display.drawCircle (40, 41, 1, WHITE); display.drawLine (40, 20, 40, 25, WHITE); //12display.drawLine(40, 63, 40, 58, WHITE); //6display.drawLine(62, 41, 57, 41, WHITE); //3display.drawLine(19, 41, 24, 41, WHITE); //9display.drawLine(50, 24, 47, 28, WHITE); //1display.drawLine(57, 31, 53, 34, WHITE); //2display.drawLine(60, 51, 54, 48, WHITE); //4display.drawLine(51, 58, 48, 54, WHITE); //5display.drawLine(29, 58, 32, 54, WHITE); //7display.drawLine(21, 51, 25, 48, WHITE); //8display.drawLine(22, 31, 27, 33, WHITE); //10display.drawLine(30, 23, 32, 28, BRANCO); // 11} void ReadTempAndHum () {int chk =DHT.read11 (DHT11_PIN); display.setTextSize (1); display.setTextColor (WHITE); display.setCursor (70,45); display.print ("Temp:"); display.print (DHT.temperatura, 0); display.print ("C"); display.setCursor (70,56); display.print ("Hum:"); display.print (DHT.umidade, 0); display.print ("%"); Serial.print ("Umidade:"); Serial.print (DHT.umidade, 1); Serial.print ("%"); Serial.print ("| Temperatura:"); Serial.print (DHT.temperatura, 1); Serial.println ("C");} void loop () {displayTime (); // exibe os dados do relógio em tempo real no Monitor Serial, DHTtimer =DHTtimer + 1; // Para garantir que o DHT seja lido apenas a cada 2 segundos, fazemos uma contagem de 2 segundos if (DHTtimer> 1) {display.fillRect (70, 45, 128, 64, BLACK); ReadTempAndHum (); DHTtimer =0; } atraso (1000); display.display (); // A parte da tela que mostra a hora e a data são apagadas display.fillRect (0, 0, 64, 64, BLACK); display.fillRect (0, 0, 128, 20, PRETO);} 

Peças personalizadas e gabinetes

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

Esquemas

Nota:Não consegui encontrar a tela OLED adequada no Fritzing. Se você precisar de mais esclarecimentos sobre onde vão os pinos do OLED, verifique os comentários no código. breadboard_diagram_QvhPKCpIo5.fzzNota:Não consegui encontrar a tela OLED adequada no Fritzing. Se você precisar de mais esclarecimentos sobre onde vão os pinos do OLED, verifique os comentários no código. schematic_XKU0jQoWbx.fzz

Processo de manufatura

  1. Como obter data e hora atuais em Python?
  2. Monitor de rede de temperatura e umidade Raspberry Pi
  3. Sensor de temperatura Python e Raspberry Pi
  4. Temperatura e umidade fáceis no Raspberry Pi
  5. Laboratório ‘Estação meteorológica’
  6. Temperatura do Raspberry Pi e sensor de luz
  7. Como verificar e calibrar um sensor de umidade
  8. Java - Data e hora
  9. Data e hora do C++
  10. Python - Data e hora