Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Pantalla de fecha, hora, temperatura y humedad

Componentes y suministros

Arduino UNO
× 1
Sensor de temperatura y humedad DHT11 (4 pines)
× 1
Maxim Integrated DS3231
× 1
Resistencia de 10k ohmios
× 1
Pantalla gráfica Adafruit 128x64 OLED
× 1
Breadboard (genérico)
× 1
Cables de puente (genéricos)
× 15

Acerca de este proyecto

¿Alguna vez ha querido crear su propia interfaz que pueda mostrar la hora, la fecha, junto con la temperatura y la humedad? Bueno, es mucho más fácil de lo que piensas.

Se necesitan algunos componentes importantes, como se muestra a continuación.

Arduino Uno / Nano

En primer lugar, necesitaremos un microcontrolador. Usé un Arduino Uno para mi proyecto, pero un Arduino Nano también tendrá suficientes pines.

DHT11

El DHT11 es un sensor digital de temperatura y humedad muy asequible. Utiliza un sensor de humedad capacitivo y un termistor para medir el aire circundante. El tiempo de las lecturas es crucial, ya que es recomendable tomar lecturas cada 2 segundos.

Hay un pequeño punto a tener en cuenta. Después de configurar la hora una vez, asegúrese de comentar esa línea y compile nuevamente. De esta manera, el RTC mantendrá un registro del tiempo, y el tiempo no se ajustará a lo que fue compilado antes.

DS3231

El DS3231 es un módulo RTC, al igual que el módulo DS1307 de uso común. Es considerablemente más barato y mucho más preciso que su contraparte DS1307. Contiene un oscilador de cristal integrado con compensación de temperatura (TCXO) y un cristal. El dispositivo incorpora una entrada de batería y mantiene un cronometraje preciso cuando se interrumpe la alimentación principal del dispositivo.

Pantalla gráfica OLED de 128x64

La pantalla OLED mostrará nuestros datos. Este tamaño de pantalla es bastante compacto y la pantalla es impresionantemente brillante. La pantalla OLED de Adafruit se puede controlar mediante la interfaz SPI o I2C, que se puede ajustar en la parte posterior de la pantalla. También puede usar una pantalla más asequible (hay muchas en eBay), pero tenga cuidado con cuál compra, ya que la pantalla debe funcionar con los archivos de encabezado que vamos a usar a través de las bibliotecas de Adafruit.

Código

  • Time_Temp_Humidity_Display.ino
Time_Temp_Humidity_Display.ino Arduino
Este es el código para compilar el proyecto. Recuerde agregar los archivos de encabezado necesarios, sin con el proyecto no funcionará.
 // ¡Saludos usuarios de hackster.io! // Visualización de fecha, hora, temperatura y humedad ///////////// //////////// Para OLED //////////////////////// # incluya  #include  #include  #include  // Si usa software SPI (el caso predeterminado):# define OLED_MOSI 9 // MOSI también conocido como SDA # define OLED_CLK 10 // CLK también conocido 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 incorrecta, por favor arregle Ada6.h_Si! // //////////////////////////////////////////////////// ////////////////////////////////////// Para DHT //////////// //////////////#includedht DHT; #define DHT11_PIN 3int DHTtimer =0; //////////////////// //////////////////////////////////////////////////// ////////////////////// Para RTC (DS3231) ////////////////////////// //// SDA a A4, SCL a A5 # definir DS3231_I2C_A DDRESS 0x68 // Convertir números decimales normales a decimales codificados en binario decToBcd (byte val) {return ((val / 10 * 16) + (val% 10));} // Convertir números decimales codificados en binario a decimales normalesbyte bcdToDec (byte val ) {return ((val / 16 * 10) + (val% 16));} //////////////////////////////// /////////////////////////////// configuración vacía () {Wire.begin (); Serial.begin (9600); // establece la hora inicial aquí, después de configurar la hora, comenta esta sección // DS3231 segundos, minutos, horas, día, fecha, mes, año // setDS3231time (00,24,12,6,3,2,17); display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay ();} ////////////////////////////// Codificación DS3231 ///////////// ///////////// void setDS3231time (byte segundo, byte minuto, byte hora, byte dayOfWeek, bytedayOfMonth, byte mes, byte año) {// establece los datos de fecha y hora en DS3231 Wire.beginTransmission ( DS3231_I2C_ADDRESS); Wire.write (0); // establece la siguiente entrada para que comience en el registro de segundos Wire.write (decToBcd (segundo)); // establecer segundos Wire.write (decToBcd (minuto)); // establecer minutos Wire.write (decToBcd (hora)); // establecer horas Wire.write (decToBcd (dayOfWeek)); // establecer el día de la semana (1 =domingo, 7 =sábado) Wire.write (decToBcd (dayOfMonth)); // establecer fecha (1 a 31) Wire.write (decToBcd (mes)); // establecer el mes Wire.write (decToBcd (año)); // establece el año (0 a 99) Wire.endTransmission ();} void readDS3231time (byte * segundo, byte * minuto, byte * hora, byte * dayOfWeek, byte * dayOfMonth, byte * mes, byte * año) {Wire. beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // establece el puntero del registro DS3231 en 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // solicita siete bytes de datos de DS3231 a partir del registro 00h * second =bcdToDec (Wire.read () &0x7f); * minuto =bcdToDec (Wire.read ()); * hora =bcdToDec (Wire.read () &0x3f); * dayOfWeek =bcdToDec (Wire.read ()); * dayOfMonth =bcdToDec (Wire.read ()); * mes =bcdToDec (Wire.read ()); * año =bcdToDec (Wire.read ());} void displayTime () {byte segundo, minuto, hora, día de la semana, día del mes, mes, año; // recupera datos de DS3231 readDS3231time (&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // enviarlo al monitor serial Serial.print (hora, DEC); // convierte la variable de bytes en un número decimal cuando se muestra 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 (mes, DEC); Serial.print ("/"); Serial.print (año, DEC); Serial.print ("Día de la semana:"); //////////////////////////////////////// //////////////////////////// display.setCursor (50,0); display.print (dayOfMonth, DEC); display.print (","); display.setCursor (91,0); display.print ("20"); display.print (año, 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 (segundo> 9) {display.setCursor (75,10); display.print (segundo, DEC); } /////////////////////////////////////////////////// ///////////////// ////////////////////////////////// PARA EL DÍA DE WEEK ///////////////////// switch (dayOfWeek) {caso 1:Serial.println ("Domingo"); display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (20,0); display.print ("Sol"); descanso; caso 2:Serial.println ("Lunes"); display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (20,0); display.print ("Mon"); descanso; caso 3:Serial.println ("martes"); display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (20,0); display.print ("Mar"); descanso; caso 4:Serial.println ("miércoles"); display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (20,0); display.print ("Mié"); descanso; caso 5:Serial.println ("jueves"); display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (20,0); display.print ("Jue"); descanso; caso 6:Serial.println ("viernes"); display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (20,0); display.print ("Vie"); descanso; caso 7:Serial.println ("sábado"); display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (20,0); display.print ("Sat"); descanso; }//////////////////////////////POR MES///////////////// //// cambiar (mes) {caso 1:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("Jan"); descanso; caso 2:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("febrero"); descanso; caso 3:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("Mar"); descanso; caso 4:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("Abr"); descanso; caso 5:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("mayo"); descanso; caso 6:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("junio"); descanso; caso 7:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("julio"); descanso; caso 8:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("Agosto"); descanso; caso 9:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("Sep"); descanso; caso 10:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("Oct"); descanso; caso 11:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("Nov"); descanso; caso 12:display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,0); display.print ("Dec"); descanso; } ///////////// MANEJA DE HORA /////////////// flotar 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 * sin (b)); display.drawLine (40,41, x1, y1, BLANCO); ///////////// 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 * sin (b)); display.drawLine (40,41, x1, y1, BLANCO); ///////////// SEGUNDA MANO /////////////// // flotar x1, y1, a, b; a =((segundo-15) * 6); b =(a * pi) / 180; x1 =40 + (19 * cos (b)); y1 =41 + (19 * sin (b)); display.drawLine (40,41, x1, y1, BLANCO); //////////////// PARTES DEL RELOJ ANALÓGICO QUE NO SE MUEVEN //////////////// display.drawCircle (40, 41, 22, BLANCO); display.drawCircle (40, 41, 1, BLANCO); display.drawLine (40, 20, 40, 25, BLANCO); //12display.drawLine(40, 63, 40, 58, BLANCO); //6display.drawLine(62, 41, 57, 41, BLANCO); //3display.drawLine(19, 41, 24, 41, BLANCO); //9display.drawLine(50, 24, 47, 28, BLANCO); //1display.drawLine(57, 31, 53, 34, BLANCO); //2display.drawLine(60, 51, 54, 48, BLANCO); //4display.drawLine(51, 58, 48, 54, BLANCO); //5display.drawLine(29, 58, 32, 54, BLANCO); //7display.drawLine(21, 51, 25, 48, BLANCO); //8display.drawLine(22, 31, 27, 33, BLANCO); //10display.drawLine(30, 23, 32, 28, BLANCO); // 11} void ReadTempAndHum () {int chk =DHT.read11 (DHT11_PIN); display.setTextSize (1); display.setTextColor (BLANCO); display.setCursor (70,45); display.print ("Temp:"); display.print (DHT.temperature, 0); display.print ("C"); display.setCursor (70,56); display.print ("Hum:"); display.print (DHT.humidity, 0); display.print ("%"); Serial.print ("Humedad:"); Serial.print (DHT.humidity, 1); Serial.print ("%"); Serial.print ("| Temperatura:"); Serial.print (DHT.temperature, 1); Serial.println ("C");} void loop () {displayTime (); // muestra los datos del reloj en tiempo real en el monitor serial, DHTtimer =DHTtimer + 1; // Para asegurar que el DHT se lea solo cada 2 segundos, hacemos un recuento que dura 2 segundos si (DHTtimer> 1) {display.fillRect (70, 45, 128, 64, BLACK); ReadTempAndHum (); DHTtimer =0; } retraso (1000); display.display (); // Se borra la parte de la pantalla que muestra la hora y la fecha display.fillRect (0, 0, 64, 64, BLACK); display.fillRect (0, 0, 128, 20, NEGRO);} 

Piezas y carcasas personalizadas

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:No pude encontrar la pantalla OLED adecuada en Fritzing. Si necesita más aclaraciones sobre dónde van los pines del OLED, consulte los comentarios del código. breadboard_diagram_QvhPKCpIo5.fzz Nota:No pude encontrar la pantalla OLED adecuada en Fritzing. Si necesita más aclaraciones sobre dónde van los pines del OLED, consulte los comentarios del código. schematic_XKU0jQoWbx.fzz

Proceso de manufactura

  1. Carga y descarga de condensadores
  2. ¿Cómo obtener la fecha y hora actuales en Python?
  3. Monitor de red de temperatura y humedad Raspberry Pi
  4. Sensor de temperatura Python y Raspberry Pi
  5. Temperatura y humedad sencillas en Raspberry Pi
  6. Laboratorio "Estación meteorológica"
  7. Sensor de temperatura y luz Raspberry Pi
  8. Cómo comprobar y calibrar un sensor de humedad
  9. Java - Fecha y hora
  10. C++ Fecha y hora
  11. Python - Fecha y hora