Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Datum, tijd, temperatuur en vochtigheidsweergave

Componenten en benodigdheden

Arduino UNO
× 1
DHT11 temperatuur- en vochtigheidssensor (4 pinnen)
× 1
Maxim Integrated DS3231
× 1
Weerstand 10k ohm
× 1
Adafruit 128x64 OLED grafisch display
× 1
Broodplank (algemeen)
× 1
Jumperdraden (algemeen)
× 15

Over dit project

Heb je ooit je eigen interface willen maken die de tijd, datum, temperatuur en vochtigheid kan weergeven? Nou, het is een stuk makkelijker dan je zou denken.

Er zijn een paar belangrijke componenten nodig, zoals hieronder weergegeven.

Arduino Uno/Nano

Ten eerste hebben we een microcontroller nodig. Ik heb een Arduino Uno gebruikt voor mijn project, maar een Arduino Nano heeft ook genoeg pinnen.

DHT11

De DHT11 is een zeer betaalbare digitale temperatuur- en vochtigheidssensor. Het gebruikt een capacitieve vochtigheidssensor en een thermistor om de omringende lucht te meten. De timing van de metingen is cruciaal, aangezien het raadzaam is om elke 2 seconden een meting uit te voeren.

Er is een klein punt om in gedachten te houden. Nadat je de tijd eenmaal hebt ingesteld, moet je die regel becommentariëren en opnieuw compileren. Op deze manier houdt de RTC de tijd bij en wordt de tijd niet ingesteld op wat u eerder hebt gecompileerd.

DS3231

De DS3231 is een RTC-module, hetzelfde als de veelgebruikte DS1307-module. Het is aanzienlijk goedkoop en veel nauwkeuriger dan zijn DS1307-tegenhanger. Het bevat een geïntegreerde temperatuurgecompenseerde kristaloscillator (TCXO) en kristal. Het apparaat heeft een batterij-ingang en houdt de tijd nauwkeurig bij wanneer de stroomtoevoer naar het apparaat wordt onderbroken.

128x64 OLED grafisch display

Het OLED-scherm zal onze gegevens weergeven. Dit schermformaat is vrij compact en het scherm is indrukwekkend helder. Het Adafruit OLED-scherm kan worden bediend met behulp van de SPI- of I2C-interface, die aan de achterkant van het scherm kan worden aangepast. Je kunt ook een goedkoper scherm gebruiken (er zijn er veel op eBay), maar wees voorzichtig met welk scherm je koopt, want het scherm moet werken met de header-bestanden die we gaan gebruiken via de bibliotheken van Adafruit.

Code

  • Time_Temp_Humidity_Display.ino
Time_Temp_Humidity_Display.inoArduino
Dit is de code om het project te compileren. Vergeet niet om de benodigde header-bestanden toe te voegen, zonder dat het project niet werkt.
//Gegroet gebruikers van hackster.io!//Datum, tijd, temperatuur en vochtigheidsweergave///////////// ////////////Voor OLED////////////////////////#include #include #include #include // Bij gebruik van software SPI (het standaard geval):#define OLED_MOSI 9 //MOSI oftewel SDA#define OLED_CLK 10 //CLK oftewel 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("Hoogte onjuist, fix Adafruit_S#endif/h!"); ////////////////////////////////////////////////// ////////////////////////////////////Voor DHT//////////// //////////////#includedht DHT;#define DHT11_PIN 3int DHTtimer =0;////////////////// ////////////////////////////////////////////////// /////////////////////Voor RTC (DS3231)//////////////////////// ////SDA naar A4, SCL naar A5#define DS3231_I2C_A DDRESS 0x68// Converteer normale decimale getallen naar binair gecodeerde decimale byte decToBcd(byte val){ return( (val/10*16) + (val%10));}// Converteer binair gecodeerde decimaal naar normale decimale getallenbyte bcdToDec(byte val ){ return( (waarde/16*10) + (waarde%16) );}////////////////////////////// ///////////////////////////////void setup() { Wire.begin(); Serieel.begin(9600); // stel hier de begintijd in, na het instellen van de tijd, becommentarieer deze sectie // DS3231 seconden, minuten, uren, dag, datum, maand, jaar //setDS3231time(00,24,12,6,3,2,17); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay();}////////////////////////////DS3231-codering///////////// /////////////void setDS3231time (byte seconde, byte minuut, byte uur, byte dayOfWeek, bytedayOfMonth, byte maand, byte jaar) {// stelt tijd- en datumgegevens in op DS3231 Wire.beginTransmission ( DS3231_I2C_ADDRESS); Draad.schrijven(0); // stel de volgende invoer in om te beginnen bij het secondenregister Wire.write (decToBcd (second)); // stel seconden in Wire.write (decToBcd (minuut)); // minuten instellen Wire.write (decToBcd (uur)); // stel uren in Wire.write (decToBcd (dayOfWeek)); // dag van de week instellen (1 =zondag, 7 =zaterdag) Wire.write (decToBcd (dayOfMonth)); // datum instellen (1 tot 31) Wire.write (decToBcd (maand)); // set maand Wire.write (decToBcd (jaar)); // jaar instellen (0 tot 99) Wire.endTransmission();}void readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year){ Wire. beginTransmission (DS3231_I2C_ADDRESS); Draad.schrijven(0); // stel de DS3231-registeraanwijzer in op 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // verzoek zeven bytes aan gegevens van DS3231 vanaf register 00h *second =bcdToDec(Wire.read() &0x7f); *minuut =bcdToDec(Wire.read()); *uur =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *maand =bcdToDec(Wire.read()); *year =bcdToDec(Wire.read());}void displayTime(){ byte seconde, minuut, uur, dayOfWeek, dayOfMonth, maand, jaar; // gegevens ophalen van DS3231 readDS3231time (&seconde, &minuten, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // stuur het naar de seriële monitor Serial.print (uur, DEC); // converteer de bytevariabele naar een decimaal getal wanneer weergegeven Serial.print(":"); if (minuut<10) { Serial.print("0"); } Serial.print (minuut, DEC); Serial.print(":"); if (seconde<10) { Serial.print("0"); } Serial.print (tweede, DEC); Serieel.print(" "); Serial.print(dayOfMonth, DEC); Serieel.print("/"); Serial.print (maand, DEC); Serieel.print("/"); Serial.print (jaar, DEC); Serial.print(" Dag van de week:");////////////////////////////////////// //////////////////////////// display.setCursor(50,0); display.print(dayOfMonth, DEC); display.print(","); display.setCursor(91,0); display.print("20"); display.print (jaar, DEC); if (uur<10) { display.setCursor(40,10); display.print("0"); display.print (uur, DEC); display.print(":"); } if (uur>9) { display.setCursor(40,10); display.print (uur, DEC); display.print(":"); } if (minuut<10) { display.setCursor(58,10); display.print("0"); display.print (minuut, DEC); display.print(":"); } if (minuut>9) { display.setCursor(58,10); display.print (minuut, DEC); display.print(":"); } if (seconde<10) { display.setCursor(75,10); display.print("0"); display.print (tweede, DEC); } if (tweede>9) { display.setCursor(75,10); display.print (tweede, DEC); } ///////////////////////////////////////////////// ///////////////// ///////////////////////////////VOOR DAG VAN WEEK///////////////////// switch(dayOfWeek){ geval 1:Serial.println("zondag"); display.setTextSize(1); display.setTextColor(WIT); display.setCursor(20,0); display.print("Zon"); pauze; geval 2:Serial.println ("maandag"); display.setTextSize(1); display.setTextColor(WIT); display.setCursor(20,0); display.print("Ma"); pauze; geval 3:Serial.println ("dinsdag"); display.setTextSize(1); display.setTextColor(WIT); display.setCursor(20,0); display.print("Di"); pauze; geval 4:Serial.println ("woensdag"); display.setTextSize(1); display.setTextColor(WIT); display.setCursor(20,0); display.print("wo"); pauze; geval 5:Serial.println ("donderdag"); display.setTextSize(1); display.setTextColor(WIT); display.setCursor(20,0); display.print("Donder"); pauze; geval 6:Serial.println ("vrijdag"); display.setTextSize(1); display.setTextColor(WIT); display.setCursor(20,0); display.print("Vrij"); pauze; geval 7:Serial.println ("zaterdag"); display.setTextSize(1); display.setTextColor(WIT); display.setCursor(20,0); display.print("Zat"); pauze; }//////////////////////////////VOOR MAAND///////////////// //// switch (maand) { case 1:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("Jan"); pauze; geval 2:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("Feb"); pauze; geval 3:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("maart"); pauze; geval 4:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("april"); pauze; geval 5:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("mei"); pauze; geval 6:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("juni"); pauze; geval 7:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("juli"); pauze; geval 8:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("aug"); pauze; geval 9:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("september"); pauze; geval 10:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("oktober"); pauze; geval 11:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("november"); pauze; geval 12:display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,0); display.print("december"); pauze; } /////////////UURWIJZER/////////////// float x1, y1, a, b; const float pi =3,14; a=((uur-15)*30); b =(a*pi)/180; x1=40+(9*cos(b)); y1=41+(9*sin(b)); display.drawLine(40,41, x1, y1, WIT); /////////////MINUUT HAND///////////////// float x1, y1, a, b;// const float pi =3,14; a=((minuut-15)*6); b =(a*pi)/180; x1=40+(17*cos(b)); y1=41+(17*zonde(b)); display.drawLine(40,41, x1, y1, WIT); /////////////TWEEDEHANDS/////////////// //float x1, y1, a, b; a=((tweede-15)*6); b =(a*pi)/180; x1=40+(19*cos(b)); y1=41+(19*sin(b)); display.drawLine(40,41, x1, y1, WIT); ////////////////DELEN VAN DE ANALOGE KLOK DIE NIET ZULLEN BEWEGEN////////////////display.drawCircle(40, 41, 22, WIT);display.drawCircle(40, 41, 1, WIT);display.drawLine(40, 20, 40, 25, WIT); //12display.drawLine(40, 63, 40, 58, WIT); //6display.drawLine(62, 41, 57, 41, WIT); //3display.drawLine(19, 41, 24, 41, WIT); //9display.drawLine(50, 24, 47, 28, WIT); //1display.drawLine(57, 31, 53, 34, WIT); //2display.drawLine(60, 51, 54, 48, WIT); //4display.drawLine(51, 58, 48, 54, WIT); //5display.drawLine(29, 58, 32, 54, WIT); //7display.drawLine(21, 51, 25, 48, WIT); //8display.drawLine(22, 31, 27, 33, WIT); //10display.drawLine (30, 23, 32, 28, WIT); //11 }nietig ReadTempAndHum (){ int chk =DHT.read11(DHT11_PIN); display.setTextSize(1); display.setTextColor(WIT); display.setCursor(70,45); display.print("Temp:"); display.print(DHT.temperatuur, 0); display.print("C"); display.setCursor(70,56); display.print("Hum:"); display.print(DHT.vochtigheid, 0); display.print("%");Serial.print(" Vochtigheid:" );Serial.print(DHT.luchtvochtigheid, 1);Serial.print("%");Serial.print(" | Temperatuur:"); Serial.print(DHT.temperature, 1);Serial.println("C");}void loop() { displayTime(); // toon de real-time klokgegevens op de seriële monitor, DHTtimer =DHTtimer + 1; //Om ervoor te zorgen dat de DHT elke 2 seconden alleen wordt gelezen, tellen we 2 seconden als (DHTtimer> 1) { display.fillRect(70, 45, 128, 64, BLACK); ReadTempAndHum (); DHT-timer =0; } vertraging (1000); weergave.weergave(); // Het gedeelte van het scherm dat de tijd en datum toont, wordt gewist display.fillRect(0, 0, 64, 64, BLACK); display.fillRect(0, 0, 128, 20, ZWART);}

Aangepaste onderdelen en behuizingen

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

Schema's

Opmerking:ik kon het juiste OLED-scherm niet vinden op Fritzing. Als je meer uitleg nodig hebt over waar de pin-outs van de OLED naartoe gaan, bekijk dan de opmerkingen bij de code. breadboard_diagram_QvhPKCpIo5.fzzOpmerking:ik kon het juiste OLED-scherm niet vinden op Fritzing. Als je meer uitleg nodig hebt over waar de pin-outs van de OLED naartoe gaan, bekijk dan de opmerkingen bij de code. schematisch_XKU0jQoWbx.fzz

Productieproces

  1. Opladen en ontladen van condensator
  2. Hoe de huidige datum en tijd in Python te krijgen?
  3. Raspberry Pi temperatuur- en vochtigheidsnetwerkmonitor
  4. Python- en Raspberry Pi-temperatuursensor
  5. Eenvoudige temperatuur en vochtigheid op Raspberry Pi
  6. Laboratorium 'Weerstation'
  7. Raspberry Pi temperatuur- en lichtsensor
  8. Een vochtigheidssensor controleren en kalibreren
  9. Java - Datum en tijd
  10. C++ Datum en tijd
  11. Python - Datum en tijd