Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Affichage de la date, de l'heure, de la température et de l'humidité

Composants et fournitures

Arduino UNO
× 1
Capteur de température et d'humidité DHT11 (4 broches)
× 1
Maxim Integrated DS3231
× 1
Résistance 10k ohm
× 1
Affichage graphique OLED 128x64 Adafruit
× 1
Planche à pain (générique)
× 1
Câbles de raccordement (générique)
× 15

À propos de ce projet

Avez-vous déjà eu envie de créer votre propre interface pouvant afficher l'heure, la date, ainsi que la température et l'humidité ? Eh bien, c'est beaucoup plus facile que vous ne le pensez.

Quelques composants importants sont nécessaires, comme indiqué ci-dessous.

Arduino Uno/Nano

Tout d'abord, nous aurons besoin d'un microcontrôleur. J'ai utilisé un Arduino Uno pour mon projet mais un Arduino Nano aura également suffisamment de broches.

DHT11

Le DHT11 est un capteur numérique de température et d'humidité très abordable. Il utilise un capteur d'humidité capacitif et une thermistance pour mesurer l'air ambiant. Le timing des lectures est crucial, car il est conseillé de prendre des lectures toutes les 2 secondes.

Il y a un petit point à garder à l'esprit. Après avoir réglé l'heure une fois, assurez-vous de commenter cette ligne et compilez à nouveau. De cette façon, le RTC gardera une trace de l'heure et l'heure ne sera pas définie sur ce que vous avez compilé plus tôt.

DS3231

Le DS3231 est un module RTC, identique au module DS1307 couramment utilisé. Il est considérablement bon marché et bien plus précis que son homologue DS1307. Il contient un oscillateur à cristal à compensation de température (TCXO) et un cristal intégrés. L'appareil intègre une entrée de batterie et maintient un chronométrage précis lorsque l'alimentation principale de l'appareil est interrompue.

Écran graphique OLED 128x64

L'écran OLED affichera nos données. Cette taille d'écran est assez compacte et l'écran est d'une luminosité impressionnante. L'écran OLED Adafruit peut être contrôlé à l'aide de l'interface SPI ou I2C, qui peut être ajustée à l'arrière de l'écran. Vous pouvez également utiliser un écran plus abordable (il y en a beaucoup sur eBay), mais faites attention à celui que vous achetez car l'écran doit fonctionner avec les fichiers d'en-tête que nous allons utiliser via les bibliothèques d'Adafruit.

Code

  • Time_Temp_Humidity_Display.ino
Time_Temp_Humidity_Display.inoArduino
C'est le code pour compiler le projet. N'oubliez pas d'ajouter les fichiers d'en-tête nécessaires, sans le projet ne fonctionnera pas.
//Salut les utilisateurs de hackster.io!//Date, Time, Temperature and Humidity Display///////////// ////////////Pour OLED///////////////////////#include #include #include #include // Si vous utilisez le logiciel SPI (cas par défaut) :#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("Hauteur incorrecte, veuillez corriger Adafruit_SSD1306.h//!");#endif ////////////////////////////////////////////////////////////// ///////////////////////////////// Pour DHT //////////// /////////////#includedht DHT;#define DHT11_PIN 3int DHTtimer =0;///////////////// ////////////////////////////////////////////////////////////// ////////////////////Pour RTC (DS3231)/////////////////////// ////SDA vers A4, SCL vers A5#define DS3231_I2C_A DDRESS 0x68// Convertir les nombres décimaux normaux en octets décimaux codés binaire decToBcd(byte val){ return( (val/10*16) + (val%10) );}// Convertir les nombres décimaux codés binaires en nombres décimaux normauxbyte bcdToDec(byte val ){ return( (val/16*10) + (val%16) );}//////////////////////////// ///////////////////////////// void setup() { Wire.begin(); Serial.begin(9600); //réglez l'heure initiale ici, après avoir réglé l'heure, commentez cette section //DS3231 secondes, minutes, heures, jour, date, mois, année //setDS3231time(00,24,12,6,3,2,17); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay();}////////////////////////// Codage DS3231 //////////// /////////////void setDS3231time(octet seconde, octet minute, octet heure, octet dayOfWeek, bytedayOfMonth, octet mois, octet année){ // définit l'heure et la date sur DS3231 Wire.beginTransmission( DS3231_I2C_ADDRESS); Wire.write(0); // définit l'entrée suivante pour qu'elle commence au registre des secondes Wire.write(decToBcd(second)); // définit les secondes Wire.write(decToBcd(minute)); // définit les minutes Wire.write(decToBcd(hour)); // définir les heures Wire.write(decToBcd(dayOfWeek)); // définir le jour de la semaine (1=dimanche, 7=samedi) Wire.write(decToBcd(dayOfMonth)); // fixe la date (1 à 31) Wire.write(decToBcd(month)); // définir le mois Wire.write(decToBcd(year)); // définir l'année (0 à 99) Wire.endTransmission();}void readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year){ Wire. beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // définit le pointeur de registre DS3231 sur 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // demande sept octets de données à DS3231 à partir du registre 00h *second =bcdToDec(Wire.read() &0x7f); *minute =bcdToDec(Wire.read()); *heure =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *mois =bcdToDec(Wire.read()); *année =bcdToDec(Wire.read());}void displayTime(){ octet seconde, minute, heure, dayOfWeek, dayOfMonth, mois, année ; // récupérer les données du DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // l'envoie au moniteur série Serial.print(hour, DEC); // convertit la variable d'octet en nombre décimal lorsqu'elle est affichée Serial.print(":"); if (minute<10) { Serial.print("0"); } Serial.print(minute, DEC); Serial.print(":"); if (second<10) { Serial.print("0"); } Serial.print(second, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(mois, DEC); Serial.print("/"); Serial.print(année, DEC); Serial.print(" Jour de la semaine:");/////////////////////////////////// /////////////////////////// display.setCursor (50,0); display.print(dayOfMonth, DEC); display.print(","); display.setCursor(91,0) ; display.print("20"); display.print(année, DEC); if (heure<10) { display.setCursor(40,10); display.print("0"); display.print(heure, DEC); display.print(":"); } if (heure>9) { display.setCursor (40,10); display.print(heure, DEC); display.print(":"); } if (minute<10) { display.setCursor(58,10); display.print("0"); display.print(minute, DEC); display.print(":"); } if (minute>9) { display.setCursor(58,10); display.print(minute, DEC); display.print(":"); } if (second<10) { display.setCursor(75,10); display.print("0"); display.print(seconde, DEC); } if (second>9) { display.setCursor(75,10); display.print(seconde, DEC); } ////////////////////////////////////////////////////////////// //////////////// //////////////////////////// POUR LE JOUR DE SEMAINE//////////////////// switch(dayOfWeek){ case 1 :Serial.println("Dimanche"); display.setTextSize(1); display.setTextColor(BLANC); display.setCursor(20,0); display.print("Soleil"); Pause; cas 2 :Serial.println("lundi"); display.setTextSize(1); display.setTextColor(BLANC); display.setCursor(20,0); display.print("Lun"); Pause; cas 3 :Serial.println("mardi"); display.setTextSize(1); display.setTextColor(BLANC); display.setCursor(20,0); display.print("Mar"); Pause; cas 4:Serial.println("Mercredi"); display.setTextSize(1); display.setTextColor(BLANC); display.setCursor(20,0); display.print("Mer"); Pause; case 5:Serial.println("Jeudi"); display.setTextSize(1); display.setTextColor(BLANC); display.setCursor(20,0); display.print("Jeu"); Pause; cas 6 :Serial.println("Vendredi"); display.setTextSize(1); display.setTextColor(BLANC); display.setCursor(20,0); display.print("Ven"); Pause; cas 7 :Serial.println("samedi"); display.setTextSize(1); display.setTextColor(BLANC); display.setCursor(20,0); display.print("Sam"); Pause; }//////////////////////////////POUR MOIS///////////////// //// switch(month) { case 1 :display.setTextSize(1); display.setTextColor(BLANC); display.setCursor (70,0); display.print("Jan"); Pause; cas 2 :display.setTextSize(1); display.setTextColor(BLANC); display.setCursor (70,0); display.print("Fév"); Pause; cas 3 :display.setTextSize(1); display.setTextColor(BLANC); display.setCursor (70,0); display.print("Mar"); Pause; cas 4:display.setTextSize(1); display.setTextColor(BLANC); display.setCursor (70,0); display.print("Avr"); Pause; cas 5:display.setTextSize(1); display.setTextColor(BLANC); display.setCursor (70,0); display.print("Mai"); Pause; cas 6 :display.setTextSize(1) ; display.setTextColor(BLANC); display.setCursor (70,0); display.print("Juin"); Pause; cas 7 :display.setTextSize(1) ; display.setTextColor(BLANC); display.setCursor (70,0); display.print("juil"); Pause; cas 8 :display.setTextSize(1) ; display.setTextColor(BLANC); display.setCursor (70,0); display.print("Août"); Pause; cas 9 :display.setTextSize(1) ; display.setTextColor(BLANC); display.setCursor (70,0); display.print("Sep"); Pause; cas 10 :display.setTextSize(1) ; display.setTextColor(BLANC); display.setCursor (70,0); display.print("Oct"); Pause; cas 11 :display.setTextSize(1) ; display.setTextColor(BLANC); display.setCursor (70,0); display.print("Nov"); Pause; cas 12 :display.setTextSize(1) ; display.setTextColor(BLANC); display.setCursor (70,0); display.print("Déc"); Pause; } /////////////AIGUILLE DES HEURES////////////// float x1, y1, a, b; const float pi =3,14 ; a=((heure-15)*30); b =(a*pi)/180 ; x1=40+(9*cos(b)); y1=41+(9*sin(b)); display.drawLine (40,41, x1, y1, BLANC); /////////////MAIN DES MINUTES//////////////// float x1, y1, a, b;// const float pi =3.14; a=((minute-15)*6) ; b =(a*pi)/180 ; x1=40+(17*cos(b)); y1=41+(17*sin(b)); display.drawLine (40,41, x1, y1, BLANC); /////////////DEUXIÈME MAIN////////////// //float x1, y1, a, b; a=((seconde-15)*6) ; b =(a*pi)/180 ; x1=40+(19*cos(b)); y1=41+(19*sin(b)); display.drawLine (40,41, x1, y1, BLANC); ///////////////PARTIES DE L'HORLOGE ANALOGIQUE QUI NE BOUGERONT PAS///////////////display.drawCircle (40, 41, 22, BLANC); display.drawCircle (40, 41, 1, WHITE); display.drawLine (40, 20, 40, 25, WHITE); //12display.drawLine (40, 63, 40, 58, BLANC); //display.drawLine(62, 41, 57, 41, BLANC); //3display.drawLine (19, 41, 24, 41, BLANC); //9display.drawLine (50, 24, 47, 28, BLANC); //display.drawLine(57, 31, 53, 34, WHITE); //display.drawLine(60, 51, 54, 48, BLANC); //display.drawLine(51, 58, 48, 54, BLANC); //5display.drawLine(29, 58, 32, 54, BLANC); //display.drawLine(21, 51, 25, 48, WHITE); //8display.drawLine(22, 31, 27, 33, WHITE); //10display.drawLine(30, 23, 32, 28, BLANC); //11 }void ReadTempAndHum (){ int chk =DHT.read11(DHT11_PIN); display.setTextSize(1); display.setTextColor(BLANC); 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.humidité, 0); display.print("%");Serial.print(" Humidité:" );Serial.print(DHT.humidity, 1);Serial.print("%");Serial.print(" | Température:"); Serial.print(DHT.temperature, 1);Serial.println("C");}void loop() { displayTime(); // affiche les données de l'horloge en temps réel sur le moniteur série, DHTtimer =DHTtimer + 1; //Pour s'assurer que le DHT n'est lu que toutes les 2 secondes, nous effectuons un décompte qui dure 2 secondes if (DHTtimer> 1) { display.fillRect(70, 45, 128, 64, BLACK); ReadTempAndHum (); DHTtimer =0 ; } délai(1000); display.display(); //La partie de l'écran qui affiche l'heure et la date est effacée display.fillRect(0, 0, 64, 64, BLACK); display.fillRect(0, 0, 128, 20, NOIR);}

Pièces et boîtiers personnalisés

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

Schémas

Remarque :je n'ai pas trouvé l'écran OLED approprié sur Fritzing. Si vous avez besoin d'éclaircissements supplémentaires sur l'emplacement des broches de l'OLED, consultez les commentaires sur le code. breadboard_diagram_QvhPKCpIo5.fzzRemarque :Je n'ai pas trouvé l'écran OLED approprié sur Fritzing. Si vous avez besoin d'éclaircissements supplémentaires sur l'emplacement des broches de l'OLED, consultez les commentaires sur le code. schema_XKU0jQoWbx.fzz

Processus de fabrication

  1. Comment obtenir la date et l'heure actuelles en Python ?
  2. Moniteur réseau de température et d'humidité Raspberry Pi
  3. Capteur de température Python et Raspberry Pi
  4. Température et humidité faciles sur Raspberry Pi
  5. Laboratoire « Station météorologique »
  6. Capteur de température et de luminosité Raspberry Pi
  7. Java - Date et heure
  8. Date et heure C++
  9. Python - Date et heure