ዝርዝር ሁኔታ:

በእውነተኛ ሰዓት ከአርዲኖ ጋር 3 ደረጃዎች
በእውነተኛ ሰዓት ከአርዲኖ ጋር 3 ደረጃዎች

ቪዲዮ: በእውነተኛ ሰዓት ከአርዲኖ ጋር 3 ደረጃዎች

ቪዲዮ: በእውነተኛ ሰዓት ከአርዲኖ ጋር 3 ደረጃዎች
ቪዲዮ: ንስሮቹ / በእውነተኛ ታሪክ ላይ የተመሰረተ ፊልም - new amharic movie 2023 / nesrochu / 2024, ሀምሌ
Anonim
እውነተኛ ሰዓት ሰዓት ከአርዲኖ ጋር
እውነተኛ ሰዓት ሰዓት ከአርዲኖ ጋር

በዚህ ፕሮጀክት ውስጥ በአርዱዲኖ እና በ RTC ሞዱል እገዛ አንድ ሰዓት እንሠራለን። እኛ እንደምናውቀው አርዱዲኖ ትክክለኛውን ሰዓት ማሳየት አይችልም ስለዚህ በ LCD ላይ ትክክለኛውን ጊዜ ለማሳየት የ RTC ሞዱሉን እንጠቀማለን። ሁሉንም እርምጃ በጥንቃቄ ያንብቡ ሰዓቱን ለመሥራት ብዙ ይረዳዎታል።

DS3231 አርዱinoኖ ኮድ እንደ DS1307 ኮድ ነው እና ከሁለቱም የ RTC ቺፖች ጋር ይሠራል።

ከስር ያለው የአርዱዲኖ ኮድ ለ DS3231 RTC ማንኛውንም ቤተ -መጽሐፍት አይጠቀምም ፣ የሽቦ ቤተ -መጽሐፍት በአርዱዲኖ እና በ DS3231 መካከል የ I2C ስብሰባን በመጠቀም ነው።

አዎ! ብዙ የኤሌክትሮኒክስ መሐንዲሶች በጊዜ-ተኮር ፕሮጄክቶቻቸው ላይ በእሱ ላይ ይወሰናሉ ፣ ግን RTC ሙሉ በሙሉ አስተማማኝ አይደለም። በባትሪ የሚሠራ እና በቅርቡ ወይም በኋላ መተካት አለበት። ወደ IoT ፕሮጄክቶች ሲመጣ ጠቃሚ የ SPI (ተከታታይ Peripheral በይነገጽ) ፒኖችን ይይዛል እና ከተጣበቁ ሽቦዎች ጋር ይረበሻል። መፍትሄ….እኛ የእኛ ጀግና NTP (የአውታረ መረብ ጊዜ ፕሮቶኮል) ይመጣል። NTP ከበይነመረቡ ጊዜ ስለሚያገኝ በጣም ትክክለኛ ነው። የደንበኛ-አገልጋይ ሁነታን በመጠቀም ይህንን ፕሮቶኮል እንሠራለን። ሂደቱ በጣም ቀላል ስለሆነ የእኛ Nodemcu እንደ ደንበኛ ሆኖ UDP ን በመጠቀም ከአገልጋዩ የ NTP ፓኬጅ ይጠይቃል። በምላሹ አገልጋዩ ውሂቡን ለሚተነተን ፓኬት ለደንበኛው ይልካል። NTP ሁለንተናዊ የጊዜ ማመሳሰል ፕሮቶኮል ነው። አሁን የላቦራቶሪ ሥራ ጣቢያችንን እናበራ

ደረጃ 1 - አስፈላጊ አካላት

  • አርዱዲኖ ቦርድ
  • DS3231 RTC ቦርድ
  • 16x2 ኤልሲዲ ማያ ገጽ
  • 2 x የግፊት አዝራር
  • 10 ኬ ohm ተለዋዋጭ resistor (ወይም ፖታቲሞሜትር)
  • 330-ohm resistor
  • 3V ሳንቲም ሴል ባትሪ
  • የዳቦ ሰሌዳ
  • ዝላይ ሽቦዎች

የ RTC ሞለኪውል DS3231

በዚህ ፈጣን የሰው ልጅ ዓለም ውስጥ ጊዜ አስፈላጊ ስሜት ነው። በእውነተኛ ጊዜ ፕሮጀክት ውስጥ

እኛ RTC ን እንጠቀማለን (ኤኬ የእውነተኛ ጊዜ ሰዓት)

RTC ሪል-ሰዓት-ሰዓት (RTC) የአሁኑን ጊዜ የሚከታተል የተቀናጀ ወረዳ (አይሲሲ) ነው። RTC በእውነተኛ ሁኔታ ጊዜን ይንከባከባል። RTC ብዙውን ጊዜ ወቅታዊ መዳረሻን ለመፈለግ በኮምፒተር ማዘርቦርዶች እና በተካተቱ ስርዓቶች ውስጥ ይገኛል።

ደረጃ 2 የአርዱዲኖ ሰዓት ግንኙነት

የአርዱዲኖ ሰዓት ግንኙነት
የአርዱዲኖ ሰዓት ግንኙነት
  • የ SCL ፒን ከ RTC ሞዱል ወደ አርዱዲኖ ኤ 5 ያገናኙ
  • ኤስዲኤ ፒን ከ RTC ሞዱል ወደ አርዱዲኖ ኤ 4 ያገናኙ
  • VCC ን ወደ 5v እና GND ን ከ GND ጋር ያገናኙ
  • የግፊት ቁልፍን ከፒን 8 ጋር ያገናኙ
  • ሌላ የግፊት ቁልፍን ከፒን 9 ጋር ያገናኙ
  • የአርዲኖን ፒን 2 ከፒሲዲ ጋር ያገናኙ
  • የአርዱዲኖን 3 ለመሰካት ኤል ዲ ኤልን ያገናኙ
  • ኤልዲዲውን D7 ከ Arduino ፒን 7 ጋር ያገናኙ
  • ኤልዲዲውን D6 ከ Arduino ፒን 6 ጋር ያገናኙ
  • ኤልዲዲውን D5 ን ከአርዲኖን ፒን 5 ጋር ያገናኙ
  • የአርዲኖን 4 ፒን ከፒዲኤፍ ጋር ያገናኙ
  • VSS & K ን ከ GND ጋር ያገናኙ
  • VDD እና A ን ከ 5 ቪ ጋር ያገናኙ
  • ቮን ከ potentiometer ውፅዓት ፒን ጋር ያገናኙ

ደረጃ 3: የአርዱዲኖ ሰዓት ኮድ ከ RTC ጋር

ኮድ ለ አርዱዲኖ ሰዓት ከ RTC ጋር
ኮድ ለ አርዱዲኖ ሰዓት ከ RTC ጋር

DS3231 የሚሠራው በቢሲዲ ቅርጸት ብቻ ነው እና ቢሲሲድን ወደ አስርዮሽ እና ቪዛ ለመለወጥ ከዚህ በታች ያሉትን 2 መስመሮች ተጠቅሜአለሁ (ለምሳሌ ለደቂቃ) ፦ // BCD ን ወደ አስርዮሽ ደቂቃ = (ደቂቃ >> 4) * 10 + (ደቂቃ እና 0x0F) ይለውጡ;

// አስርዮሽ ወደ BCDminute = ((ደቂቃ / 10) << 4) + (ደቂቃ % 10) ይለውጡ። ባዶ DS3231_display (): ጊዜን እና የቀን መቁጠሪያን ያሳያል ፣ ጊዜ ከማሳየቱ በፊት እና የቀን መቁጠሪያ ውሂብ ከቢሲሲ ወደ አስርዮሽ ቅርጸት ይቀየራል። blink_parameter ():

// የእውነተኛ ሰዓት ሰዓት እና የቀን መቁጠሪያ DS3231 ን እና አርዱinoኖን በመጠቀም ከተቀመጡ አዝራሮች ጋር // የ LCD ቤተ -መጽሐፍትን ኮድ ያካትቱ #ያካትቱ // የሽቦ ቤተመፃሕፍት ኮድ (ለ I2C ፕሮቶኮል መሣሪያዎች ያስፈልጋል) #ያካትቱ/ // የ LCD ሞዱል ግንኙነቶች (RS ፣ E ፣ D4 ፣ D5), D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); ባዶነት ማዋቀር () {pinMode (8 ፣ INPUT_PULLUP) ፤ // button1 ከፒን 8 ፒን ሞዶ (9 ፣ INPUT_PULLUP) ጋር ተገናኝቷል ፤ // button2 ከፒን 9 ጋር ተገናኝቷል // የ LCD ን የአምዶች እና የረድፎች ብዛት lcd.begin (16 ፣ 2) ፣ Wire.begin (); // i2c አውቶቡስ} ቻር ሰዓት ይቀላቀሉ = "ጊዜ::"; char የቀን መቁጠሪያ = "DATE: / / 20"; ባይት i ፣ ሁለተኛ ፣ ደቂቃ ፣ ሰዓት ፣ ቀን ፣ ወር ፣ ዓመት ፣ ባዶ DS3231_display () {// BCD ን ወደ አስርዮሽ ሁለተኛ = (ሁለተኛ >> 4) * 10 + (ሁለተኛ እና 0x0F) ይለውጡ ፤ ደቂቃ = (ደቂቃ >> 4) * 10 + (ደቂቃ & 0x0F); ሰዓት = (ሰዓት >> 4) * 10 + (ሰዓት & 0x0F); ቀን = (ቀን >> 4) * 10 + (ቀን & 0x0F); ወር = (ወር >> 4) * 10 + (ወር & 0x0F); ዓመት = (ዓመት >> 4) * 10 + (ዓመት & 0x0F); // ማብቂያ ጊዜ [12] = ሰከንድ % 10 + 48; ጊዜ [11] = ሰከንድ / 10 + 48; ጊዜ [9] = ደቂቃ % 10 + 48; ጊዜ [8] = ደቂቃ / 10 + 48; ጊዜ [6] = ሰዓት % 10 + 48; ጊዜ [5] = ሰዓት / 10 + 48; የቀን መቁጠሪያ [14] = ዓመት % 10 + 48; የቀን መቁጠሪያ [13] = ዓመት / 10 + 48; የቀን መቁጠሪያ [9] = ወር % 10 + 48; የቀን መቁጠሪያ [8] = ወር / 10 + 48; የቀን መቁጠሪያ [6] = ቀን % 10 + 48; የቀን መቁጠሪያ [5] = ቀን / 10 + 48; lcd.setCursor (0, 0); lcd.print (ሰዓት); // የማሳያ ጊዜ lcd.setCursor (0, 1); lcd.print (የቀን መቁጠሪያ); // የቀን መቁጠሪያ አሳይ} ባዶ blink_parameter () {byte j = 0; ሳለ (j 23) // ሰዓታት ከሆነ - 23 ==> ሰዓታት = 0 መለኪያ = 0; ከሆነ (i == 1 && parameter> 59) // ደቂቃዎች ከሆኑ 59 ==> ደቂቃዎች = 0 መለኪያ = 0; ከሆነ (i == 2 && parameter> 31) // ቀን ከሆነ 31 ==> ቀን = 1 መለኪያ = 1; ከሆነ (i == 3 && parameter> 12) // ወር ከሆነ> 12 ==> ወር = 1 መለኪያ = 1; ከሆነ (i == 4 && parameter> 99) // ዓመት ከሆነ 99 ==> ዓመት = 0 መለኪያ = 0; sprintf (ጽሑፍ ፣ “%02u” ፣ ግቤት); lcd.setCursor (x, y); lcd.print (ጽሑፍ); መዘግየት (200); // 200ms ይጠብቁ} lcd.setCursor (x, y); lcd.print (""); // ሁለት ቦታዎችን blink_parameter () ያሳዩ ፤ sprintf (ጽሑፍ ፣ “%02u” ፣ ግቤት); lcd.setCursor (x, y); lcd.print (ጽሑፍ); blink_parameter (); ከሆነ (! digitalRead (8)) {// አዝራር (ፒን #8) ከተጫነ i ++; // ለቀጣዩ ግቤት የመመለሻ ልኬት መጨመሪያ ‹i› ፤ // የመለኪያ እሴት ይመልሱ እና ይውጡ}}} ባዶ ቦታ () (ከሆነ (! DigitalRead (8)) {// አዝራር (ፒን #8) ተጭኖ ከሆነ i = 0; ሰዓት = አርትዕ (5 ፣ 0 ፣ ሰዓት); ደቂቃ = አርትዕ (8 ፣ 0 ፣ ደቂቃ); ቀን = አርትዕ (5 ፣ 1 ፣ ቀን); ወር = አርትዕ (8 ፣ 1 ፣ ወር); ዓመት = አርትዕ (13 ፣ 1 ፣ ዓመት); // አስርዮሽ ወደ BCD ደቂቃ = ((ደቂቃ / 10) << 4) + (ደቂቃ % 10); ሰዓት = ((ሰዓት / 10) << 4) + (ሰዓት % 10); ቀን = ((ቀን / 10) << 4) + (ቀን % 10); ወር = ((ወር / 10) << 4) + (ወር % 10); ዓመት = ((ዓመት / 10) << 4) + (ዓመት % 10); // ልወጣ ጨርስ // ውሂብ ወደ DS3231 RTC Wire.begin ማስተላለፍ (0x68) ይፃፉ ፤ // የ I2C ፕሮቶኮል በ DS3231 አድራሻ Wire.write (0) ይጀምሩ። // የመመዝገቢያ አድራሻ ላክ Wire.write (0); // ሴኮንድን ዳግም ያስጀምሩ እና oscillator Wire.write (ደቂቃ) ይጀምሩ። // ደቂቃ ይፃፉ Wire.write (ሰዓት); // ሰዓት ይፃፉ Wire.write (1); // ቀን ይፃፉ (ጥቅም ላይ ያልዋለ) Wire.write (ቀን); // ቀን ይፃፉ Wire.write (ወር); // ወር ይፃፉ Wire.write (ዓመት); // ዓመት ይፃፉ Wire.endTransmission (); // ስርጭትን ያቁሙ እና የ I2C አውቶቡስ መዘግየትን (200) ይልቀቁ። // 200ms ይጠብቁ} Wire.begin ማስተላለፊያ (0x68); // I2C ፕሮቶኮል በ DS3231 አድራሻ Wire.write (0) ይጀምሩ። // የመመዝገቢያ አድራሻ ላክ Wire.endTransmission (ሐሰት); // I2C Wire.requestFrom ን እንደገና ያስጀምሩ (0x68 ፣ 7); // ከ DS3231 7 ባይቶችን ይጠይቁ እና በንባብ ሁለተኛ = Wire.read () ላይ I2C አውቶቡስን ይልቀቁ። // ከምዝገባ 0 ሴኮንድ አንብብ = Wire.read (); // ደቂቃዎችን ከምዝገባ ያንብቡ 1 ሰዓት = Wire.read (); // ከምዝገባ 2 ሰዓት ያንብቡ። Wire.read (); // ቀን ከመዝገቡ አንብብ 3 (ጥቅም ላይ ያልዋለ) ቀን = Wire.read (); // የተነበበበት ቀን ከምዝገባ 4 ወር = Wire.read (); // ወር ከመዝገብ አንብብ 5 ዓመት = Wire.read (); // ዓመቱን ከመዝገቡ ያንብቡ 6 DS3231_display (); // የንግግር ጊዜ እና የቀን መቁጠሪያ መዘግየት (50); // 50ms ይጠብቁ}

የሚመከር: