Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Anzeige von Datum, Uhrzeit, Temperatur und Luftfeuchtigkeit

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
DHT11 Temperatur- und Feuchtigkeitssensor (4 Pins)
× 1
Maxim Integrated DS3231
× 1
Widerstand 10k Ohm
× 1
Adafruit 128x64 OLED-Grafikdisplay
× 1
Breadboard (generisch)
× 1
Jumper (generisch)
× 15

Über dieses Projekt

Wollten Sie schon immer Ihre eigene Benutzeroberfläche erstellen, die Uhrzeit, Datum sowie Temperatur und Luftfeuchtigkeit anzeigen kann? Nun, es ist viel einfacher, als Sie denken.

Es werden einige wichtige Komponenten benötigt, wie unten gezeigt.

Arduino Uno/Nano

Zuerst benötigen wir einen Mikrocontroller. Ich habe für mein Projekt ein Arduino Uno verwendet, aber ein Arduino Nano hat auch genug Pins.

DHT11

Der DHT11 ist ein sehr erschwinglicher digitaler Temperatur- und Feuchtigkeitssensor. Es verwendet einen kapazitiven Feuchtigkeitssensor und einen Thermistor, um die Umgebungsluft zu messen. Das Timing der Messwerte ist entscheidend, da es ratsam ist, alle 2 Sekunden abzulesen.

Es gibt einen kleinen Punkt, den Sie beachten sollten. Stellen Sie nach dem einmaligen Einstellen der Uhrzeit sicher, dass Sie diese Zeile kommentieren und kompilieren Sie erneut. Auf diese Weise verfolgt die RTC die Zeit, und die Zeit wird nicht auf das eingestellt, was Sie früher kompiliert haben.

DS3231

Das DS3231 ist ein RTC-Modul, genauso wie das häufig verwendete DS1307-Modul. Es ist erheblich billiger und viel genauer als sein DS1307-Pendant. Es enthält einen integrierten temperaturkompensierten Quarzoszillator (TCXO) und Quarz. Das Gerät verfügt über einen Batterieeingang und behält die genaue Zeitmessung bei, wenn die Hauptstromversorgung des Geräts unterbrochen wird.

128x64 OLED-Grafikdisplay

Der OLED-Bildschirm zeigt unsere Daten an. Diese Bildschirmgröße ist recht kompakt und der Bildschirm ist beeindruckend hell. Der Adafruit OLED-Bildschirm kann über eine SPI- oder I2C-Schnittstelle gesteuert werden, die auf der Rückseite des Bildschirms eingestellt werden kann. Sie können auch einen günstigeren Bildschirm verwenden (bei eBay gibt es viele), aber seien Sie vorsichtig, welchen Sie kaufen, da der Bildschirm mit den Header-Dateien funktionieren muss, die wir über die Bibliotheken von Adafruit verwenden werden.

Code

  • Time_Temp_Humidity_Display.ino
Time_Temp_Humidity_Display.inoArduino
Dies ist der Code zum Kompilieren des Projekts. Denken Sie daran, die erforderlichen Header-Dateien hinzuzufügen, ohne dass das Projekt nicht funktioniert. ////////////Für OLED////////////////////////#include #include #include #include // Bei Verwendung von Software-SPI (Standardfall):#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("Höhe falsch, bitte Adafruit_SSD1306.h/ korrigieren!");#endif// //////////////////////////////////////////////// ///////////////////////////////////Für DHT//////////// //////////////#includedht DHT;#define DHT11_PIN 3int DHTtimer =0;////////////////// //////////////////////////////////////////////// /////////////////////Für RTC (DS3231)//////////////////////// ////SDA zu A4, SCL zu A5#define DS3231_I2C_A DDRESS 0x68// Konvertieren Sie normale Dezimalzahlen in binär codierte Dezimalzahlenbyte decToBcd(byte val){ return( (val/10*16) + (val%10));}// Konvertieren binär codierte dezimalzahlen in normale Dezimalzahlenbyte bcdToDec(byte val ){ return( (val/16*10) + (val%16) );}///////////////////////////// ///////////////////////////////void setup () { Wire.begin (); Serial.begin (9600); // Stellen Sie die Anfangszeit hier ein, nachdem Sie die Uhrzeit eingestellt haben, kommentieren Sie diesen Abschnitt // DS3231 Sekunden, Minuten, Stunden, Tag, Datum, Monat, Jahr // setDS3231time(00,24,12,6,3,2,17); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay();}///////////////////////////DS3231-Codierung///////////// /////////////void setDS3231time(Byte Sekunde, Byte Minute, Byte Stunde, Byte DayOfWeek, BytedayOfMonth, Byte Monat, Byte Jahr){// setzt Zeit- und Datumsdaten auf DS3231 Wire.beginTransmission( DS3231_I2C_ADDRESS); Wire.write(0); // nächsten Eingang setzen, um beim Sekundenregister zu beginnen Wire.write (decToBcd (second)); // Sekunden setzen Wire.write (decToBcd (Minute)); // Minuten einstellen Wire.write (decToBcd (hour)); // Stunden setzen Wire.write (decToBcd (dayOfWeek)); // Wochentag einstellen (1=Sonntag, 7=Samstag) Wire.write(decToBcd(dayOfMonth)); // Datum einstellen (1 bis 31) Wire.write (decToBcd (Monat)); // Monat setzen Wire.write (decToBcd (Jahr)); // set year (0 to 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); // DS3231-Registerzeiger auf 00h setzen Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // sieben Byte Daten von DS3231 anfordern, beginnend mit Register 00h *second =bcdToDec(Wire.read() &0x7f); *Minute =bcdToDec(Wire.read()); *Stunde =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *Monat =bcdToDec(Wire.read()); *Jahr =bcdToDec(Wire.read());}void displayTime(){ Byte Sekunde, Minute, Stunde, dayOfWeek, dayOfMonth, month, year; // Daten von DS3231 abrufen readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // an den seriellen Monitor senden Serial.print (Stunde, DEC); // Konvertieren Sie die Byte-Variable in eine Dezimalzahl, wenn sie angezeigt wird Serial.print (":"); wenn (Minute <10) {Serial.print("0"); } Serial.print (Minute, DEZ); Serial.print (":"); wenn (zweite <10) {Serial.print("0"); } Serial.print (zweite, DEZ); Serial.print ( " "); Serial.print (dayOfMonth, DEC); Serial.print("/"); Serial.print (Monat, DEZ); Serial.print("/"); Serial.print (Jahr, DEZ); Serial.print(" Wochentag:"); //////////////////////////////////// //////////////////////////// display.setCursor(50,0); display.print (dayOfMonth, DEZ); display.print(","); display.setCursor(91,0); display.print("20"); display.print (Jahr, DEZ); if (Stunde<10) { display.setCursor(40,10); display.print("0"); display.print (Stunde, DEZ); display.print(":"); aufrechtzuerhalten. Wenn (Stunde>9) {display.setCursor(40,10); display.print (Stunde, DEZ); display.print(":"); aufrechtzuerhalten. Wenn (Minute <10) { display.setCursor (58,10); display.print("0"); display.print (Minute, DEZ); display.print(":"); aufrechtzuerhalten. Wenn (Minute>9) {display.setCursor(58,10); display.print (Minute, DEZ); display.print(":"); aufrechtzuerhalten. Wenn (zweite <10) { display.setCursor (75,10); display.print("0"); display.print (zweite, DEZ); aufrechtzuerhalten. Wenn (Sekunde>9) {display.setCursor(75,10); display.print (zweite, DEZ); } /////////////////////////////////////////////// ///////////////// /////////////////////////////FÜR DEN TAG VON WOCHE //////////////////// Schalter (TagOfWoche) {Fall 1:Serial.println ("Sonntag"); display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(20,0); display.print("Sonne"); brechen; Fall 2:Serial.println ("Montag"); display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(20,0); display.print("Mon"); brechen; Fall 3:Serial.println ("Dienstag"); display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(20,0); display.print("Di"); brechen; Fall 4:Serial.println ("Mittwoch"); display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(20,0); display.print("Mittwoch"); brechen; Fall 5:Serial.println ("Donnerstag"); display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(20,0); display.print("Do"); brechen; Fall 6:Serial.println ("Freitag"); display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(20,0); display.print("Fr"); brechen; Fall 7:Serial.println ("Samstag"); display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(20,0); display.print("Sa"); brechen; }/////////////////////////////FÜR MONAT//////////////// //// Schalter (Monat) { Fall 1:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Jan"); brechen; Fall 2:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Feb"); brechen; Fall 3:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("März"); brechen; Fall 4:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Apr"); brechen; Fall 5:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Mai"); brechen; Fall 6:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Jun"); brechen; Fall 7:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Jul"); brechen; Fall 8:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("August"); brechen; Fall 9:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Sep"); brechen; Fall 10:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Oktober"); brechen; Fall 11:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("November"); brechen; Fall 12:display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,0); display.print("Dez."); brechen; } /////////////STUNDENZEIGER /////////////// float x1, y1, a, b; const float pi =3,14; a=((Stunde-15)*30); b =(a*pi)/180; x1=40+(9*cos(b)); y1=41+(9*sin(b)); display.drawLine(40,41, x1, y1, WEISS); /////////////MINUTENZEIGER ///////////////// 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, WEISS); /////////////ZWEITER HAND /////////////// // Float x1, y1, a, b; a=((zweite-15)*6); b =(a*pi)/180; x1=40+(19*cos(b)); y1=41+(19*sin(b)); display.drawLine(40,41, x1, y1, WEISS); ////////////////TEILE DER ANALOGUHR, DIE SICH NICHT BEWEGEN////////////////display.drawCircle(40, 41, 22, WEISS);display.drawCircle(40, 41, 1, WEISS);display.drawLine(40, 20, 40, 25, WEISS); //display.drawLine(40, 63, 40, 58, WEISS); //display.drawLine(62, 41, 57, 41, WEISS); //display.drawLine(19, 41, 24, 41, WEISS); //9display.drawLine(50, 24, 47, 28, WEISS); //display.drawLine(57, 31, 53, 34, WEISS); //display.drawLine(60, 51, 54, 48, WEISS); //display.drawLine(51, 58, 48, 54, WEISS); //display.drawLine(29, 58, 32, 54, WEISS); //display.drawLine(21, 51, 25, 48, WEISS); //display.drawLine(22, 31, 27, 33, WEISS); //display.drawLine(30, 23, 32, 28, WEISS); //11}void ReadTempAndHum(){int chk =DHT.read11(DHT11_PIN); display.setTextSize(1); display.setTextColor (WEISS); display.setCursor(70,45); display.print("Temp:"); display.print (DHT.temperature, 0); display.print("C"); display.setCursor(70,56); display.print("Summen:"); display.print (DHT.humidity, 0); display.print("%");Serial.print("Feuchtigkeit:");Serial.print(DHT.humidity, 1);Serial.print("%");Serial.print(" | Temperatur:"); Serial.print (DHT.temperature, 1); Serial.println ("C");}void loop () { displayTime (); // Anzeige der Echtzeituhrdaten auf dem Serial Monitor, DHTtimer =DHTtimer + 1; // Um ​​sicherzustellen, dass das DHT nur alle 2 Sekunden gelesen wird, zählen wir 2 Sekunden lang if (DHTtimer> 1) { display.fillRect(70, 45, 128, 64, BLACK); ReadTempAndHum(); DHTtimer =0; } Verzögerung (1000); display.display(); //Der Teil des Bildschirms, der Uhrzeit und Datum anzeigt, wird gelöscht display.fillRect(0, 0, 64, 64, BLACK); display.fillRect(0, 0, 128, 20, BLACK);}

Kundenspezifische Teile und Gehäuse

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

Schaltpläne

Hinweis:Ich konnte auf Fritzing nicht den richtigen OLED-Bildschirm finden. Wenn Sie weitere Erläuterungen benötigen, wo die Pinbelegung der OLED hingehört, lesen Sie die Kommentare zum Code. Breadboard_diagram_QvhPKCpIo5.fzzHinweis:Ich konnte den richtigen OLED-Bildschirm auf Fritzing nicht finden. Wenn Sie weitere Erläuterungen benötigen, wo die Pinbelegung der OLED hingehört, lesen Sie die Kommentare zum Code. schematisch_XKU0jQoWbx.fzz

Herstellungsprozess

  1. Wie bekomme ich das aktuelle Datum und die Uhrzeit in Python?
  2. Raspberry Pi Temperatur- und Luftfeuchtigkeits-Netzwerkmonitor
  3. Python- und Raspberry Pi-Temperatursensor
  4. Einfache Temperatur und Luftfeuchtigkeit auf Raspberry Pi
  5. Labor ‚Wetterstation‘
  6. Raspberry Pi Temperatur- und Lichtsensor
  7. So überprüfen und kalibrieren Sie einen Feuchtigkeitssensor
  8. Java - Datum und Uhrzeit
  9. C++ Datum und Uhrzeit
  10. Python - Datum &Uhrzeit