Բովանդակություն:

Arduino ոլորման տեքստային ժամացույց ՝ 3 քայլ
Arduino ոլորման տեքստային ժամացույց ՝ 3 քայլ

Video: Arduino ոլորման տեքստային ժամացույց ՝ 3 քայլ

Video: Arduino ոլորման տեքստային ժամացույց ՝ 3 քայլ
Video: How to use 4 channel Relay to control AC load with Arduino code 2024, Նոյեմբեր
Anonim
Arduino ոլորման տեքստային ժամացույց
Arduino ոլորման տեքստային ժամացույց

Այս նախագծի նպատակն է կառուցել ոլորվող տեքստային ժամացույց, որը կցուցադրի խոսքի ժամանակը (օրինակ ՝ «կեսգիշեր է»):

Սա արագ նախագիծ է. Մենք ձեզ տալիս ենք բավականաչափ սարքավորումների և ուրվագծերի հետ աշխատելու համար, այնուհետև կարող եք այն հետագայում տանել `ձեր կարիքներին համապատասխան:

Քայլ 1: Սարքավորումներ

Սարքավորումներ
Սարքավորումներ

Ձեզ հարկավոր է երեք հիմնական տարր ՝

  • Arduino Uno- համատեղելի տախտակ
  • իրական ժամանակի ժամացույցի միացում կամ մոդուլ ՝ օգտագործելով DS1307 կամ DS3231 IC
  • և միաձույլ P10 ոճով LED էկրան

Դուք կարող եք արտաքին էներգիայի մատակարարում ցանկանալ, բայց մենք դրան ավելի ուշ կհասնենք:

Առաջին փուլը պետք է տեղավորել ձեր իրական ժամանակի ժամացույցը: Սեղմեք այստեղ ձեռնարկի համար, եթե դրա համար օգնության կարիք ունեք:

Մինչ այժմ հույս ունեմ, որ դուք մտածում եք «ինչպե՞ս եք ժամանակը սահմանում»:

Այդ հարցի երկու պատասխան կա. Եթե դուք օգտագործում եք DS3231- ը, պարզապես դրեք այն ուրվագծում (տե՛ս ստորև), քանի որ ճշգրտությունը շատ լավ է, ձեզ հարկավոր է միայն տարին երկու անգամ էսքիզը վերբեռնել նոր ժամանակով `լուսաբացը լուսաբանելու համար:

Հակառակ դեպքում ավելացրեք պարզ ինտերֆեյս-մի քանի կոճակ կարող է դա անել: Ի վերջո, պարզապես անհրաժեշտ է տեղադրել ապարատը DMD- ի հետևի մասում: Ձեր կարիքները բավարարելու համար շատ հնարավորություններ կան, պարզ լուծում կարող է լինել կառավարման տախտակի հավասարեցումը, որպեսզի կարողանաք հեշտությամբ մուտք գործել USB վարդակից, այնուհետև այն կպցնել որոշ Sugru- ով:

Ինչ վերաբերում է ժամացույցի միացմանը, ապա Arduino- ից կարող եք գործարկել ՄԵԿ LED էկրան, և այն աշխատում է լավ պայծառությամբ ներքին օգտագործման համար: Եթե ցանկանում եք, որ DMD- ն աշխատի ամբողջությամբ, ցանցաթաղանթով այրվող պայծառությունը, անհրաժեշտ է օգտագործել առանձին 5V 4A DC սնուցման աղբյուր: Եթե դուք օգտագործում եք երկու DMD, դա հասնում է 8A- ի և այլն: Պարզապես միացրեք արտաքին էներգիան մեկ DMD- ի տերմինալին (միացրեք երկրորդ կամ ավելի DMD- ն այս տերմինալներին):

Եթե դուք չեք ցանկանում կտրել ձեր սնուցման աղբյուրի մալուխի ծայրը, օգտագործեք DC վարդակից ճեղքվածք:

Քայլ 2. Arduino ուրվագիծը

Ձեզ հարկավոր է տեղադրել Arduino- ի հետևյալ երկու գրադարանները ՝ TimerOne և DMD: Այնուհետեւ վերբեռնեք ուրվագիծը.

// RTC- ի համար #ներառել «Wire.h» #սահմանել DS1307_I2C_ADDRESS 0x68 // DS1307 RTC- ն 0x68 է

// LED էկրանին

#ներառել "SPI.h" #Include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #սահմանել DISPLAYS_ACROSS 1 // կարող եք ունենալ մեկից ավելի DMD տող #սահմանեք DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);

Լար վերջնական Լար; // օգտագործվում է DMD- ում ցուցադրվող վերջնական նախադասությունը պահելու համար

void ScanDMD () // պահանջվում է DMD- ի համար

{dmd.scanDisplayBySPI (); }

դատարկ կարգավորում ()

{// DMD Timer1.initialize- ի համար (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (ճշմարիտ);

// RTC- ի համար

Wire.begin (); // կրակեք I2C ավտոբուսի բայթ երկրորդ, րոպե, ժամ, dayOfWeek, dayOfMonth, ամիս, տարի; // փոխել փոփոխականները և մեկնաբանել ժամանակը setDateDs1307- ը // այնուհետև մեկնաբանել գործառույթը և նորից վերբեռնել ուրվագիծը երկրորդ = 0; րոպե = 13; ժամ = 23; dayOfWeek = 4; ամսվա օր = 19; ամիս = 5; տարի = 13; // setDateDs1307 (երկրորդ, րոպե, ժամ, dayOfWeek, dayOfMonth, ամիս, տարի); }

// սովորական RTC գործառույթներ

// Փոխարկել նորմալ տասնորդական թվերը երկուական կոդավորված տասնորդական բայթ decToBcd (բայթ val) {վերադարձ ((val/10*16) + (val%10)); }

// Երկուական կոդավորված տասնորդական դարձնել նորմալ տասնորդական թվեր

բայթ bcdToDec (բայթ val) {վերադարձ ((val/16*10) + (val%16)); }

անվավեր setDateDs1307 (բայթ երկրորդ, // 0-59

բայթ րոպե, // 0-59 բայթ ժամ, // 1-23 բայթ օրՇաբաթվա, // 1-7 բայթ օրՄսիս, // 1-28/29/բայթ ամիս, // 1-12 բայթ տարի) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (երկրորդ)); // 0 -ից 7 բիթը սկսում է ժամացույցը Wire.write (decToBcd (րոպե)); Wire.write (decToBcd (ժամ)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (ամիս)); Wire.write (decToBcd (տարի)); Wire.write (00010000); // 0x10 (hex) 00010000 (երկուական) է ուղարկում գրանցամատյան - միացնում է Wire.endTransmission քառակուսի ալիքը (); }

// Ստանում է ամսաթիվը և ժամը ds1307- ից

void getDateDs1307 (բայթ *երկրորդ, բայթ *րոպե, բայթ *ժամ, բայթ *dayOfWeek, բայթ *dayOfMonth, բայթ *ամիս, բայթ *տարի) {// Վերականգնել գրանցամատյանի ցուցիչը Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();

Մետաղալար. Խնդրում ենք (DS1307_I2C_ADDRESS, 7);

// Դրանցից մի քանիսին դիմակներ են պետք, քանի որ որոշ բիթեր վերահսկիչ բիթեր են

*երկրորդ = bcdToDec (Wire.read () & 0x7f); *րոպե = bcdToDec (Wire.read ()); *ժամ = bcdToDec (Wire.read () & 0x3f); // Սա պետք է փոխվի, եթե առավոտյան 12 ժամ/օր *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *ամիս = bcdToDec (Wire.read ()); *տարի = bcdToDec (Wire.read ()); }

void drawText (String oldString)

{dmd.clearScreen (ճշմարիտ); dmd.selectFont (Arial_Black_16); char newString [256]; int sLength = oldString.length (); oldString.toCharArray (newString, sLength+1); dmd.drawMarquee (newString, sLength, (32*DISPLAYS_ACROSS) -1, 0); երկար սկիզբ = millis (); երկար ժամանակաչափ = սկիզբ; երկար ժամանակաչափ 2 = սկիզբ; բուլյան ret = կեղծ; while (! ret) {if ((ժմչփ+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); ժմչփ = millis (); }}}

void createTextTime (int hh, int մմ)

// սա ամբողջ ժամանակ տվյալները տեքստում վերածում է մեկ նախադասության {finalString = ""; // ջնջել նախադասությունը հատուկ դեպքերի համար (ստորև) finalString = finalString+"It's";

// այժմ ավելացրեք ժամը

եթե (hh == 1 || hh == 13) {finalString = finalString+"one"; } if (hh == 2 || hh == 14) {finalString = finalString+"two"; } if (hh == 3 || hh == 15) {finalString = finalString+"երեք"; } if (hh == 4 || hh == 16) {finalString = finalString+"չորս"; } if (hh == 5 || hh == 17) {finalString = finalString+"հինգ"; } if (hh == 6 || hh == 18) {finalString = finalString+"վեց"; } if (hh == 7 || hh == 19) {finalString = finalString+"յոթ"; } if (hh == 8 || hh == 20) {finalString = finalString+"ութ"; } if (hh == 9 || hh == 21) {finalString = finalString+"ինը"; } if (hh == 10 || hh == 22) {finalString = finalString+"ten"; } if (hh == 11 || hh == 23) {finalString = finalString+"տասնմեկ"; }

// այժմ ավելացրեք րոպեները

անջատիչ (մմ) {դեպք 1: finalString = finalString+"oh one"; ընդմիջում; դեպք 2: finalString = finalString+"oh two"; ընդմիջում; դեպք 3: finalString = finalString+"oh three"; ընդմիջում; դեպք 4: finalString = finalString+"oh four"; ընդմիջում; դեպք 5: finalString = finalString+"oh five"; ընդմիջում; դեպք 6: finalString = finalString+"oh six"; ընդմիջում; դեպք 7: finalString = finalString+"oh յոթ"; ընդմիջում; գործ 8: finalString = finalString+"oh ութ"; ընդմիջում; դեպք 9: finalString = finalString+"oh nine"; ընդմիջում; դեպք 10: finalString = finalString+"տասը"; ընդմիջում; գործ 11: finalString = finalString+"տասնմեկ"; ընդմիջում; դեպք 12: finalString = finalString+"տասներկու"; ընդմիջում; գործ 13: finalString = finalString+"տասներեք"; ընդմիջում; գործ 14: finalString = finalString+"տասնչորս"; ընդմիջում; գործ 15: finalString = finalString+"տասնհինգ"; ընդմիջում; դեպք 16: finalString = finalString+"տասնվեց"; ընդմիջում; գործ 17: finalString = finalString+"տասնյոթ"; ընդմիջում; դեպք 18: finalString = finalString+"տասնութ"; ընդմիջում; գործ 19: finalString = finalString+"տասնինը"; ընդմիջում; գործ 20: finalString = finalString+"քսան"; ընդմիջում; գործ 21: finalString = finalString+"քսանմեկ"; ընդմիջում; գործ 22: finalString = finalString+"քսաներկու"; ընդմիջում; գործ 23: finalString = finalString+"քսաներեք"; ընդմիջում; գործ 24: finalString = finalString+"քսանչորս"; ընդմիջում; դեպք 25: finalString = finalString+"քսանհինգ"; ընդմիջում; դեպք 26: finalString = finalString+"քսան վեց"; ընդմիջում; գործ 27: finalString = finalString+"քսան յոթ"; ընդմիջում; գործ 28: finalString = finalString+"քսան ութ"; ընդմիջում; գործ 29: finalString = finalString+"քսան ինը"; ընդմիջում; գործ 30: finalString = finalString+"երեսուն"; ընդմիջում; գործ 31: finalString = finalString+"երեսուն մեկ"; ընդմիջում; գործ 32: finalString = finalString+"երեսուն երկու"; ընդմիջում; գործ 33: finalString = finalString+"երեսուն երեք"; ընդմիջում; գործ 34: finalString = finalString+"երեսուն չորս"; ընդմիջում; գործ 35: finalString = finalString+"երեսունհինգ"; ընդմիջում; գործ 36: finalString = finalString+"երեսուն վեց"; ընդմիջում; գործ 37: finalString = finalString+"երեսուն յոթ"; ընդմիջում; գործ 38: finalString = finalString+"երեսուն ութ"; ընդմիջում; գործ 39: finalString = finalString+"երեսուն ինը"; ընդմիջում; գործ 40: finalString = finalString+"քառասուն"; ընդմիջում; գործ 41: finalString = finalString+"քառասուն մեկ"; ընդմիջում; գործ 42: finalString = finalString+"քառասուն երկու"; ընդմիջում; գործ 43: finalString = finalString+"քառասուն երեք"; ընդմիջում; գործ 44: finalString = finalString+"քառասունչորս"; ընդմիջում; գործ 45: finalString = finalString+"քառասունհինգ"; ընդմիջում; գործ 46: finalString = finalString+"քառասուն վեց"; ընդմիջում; գործ 47: finalString = finalString+"քառասունյոթ"; ընդմիջում; գործ 48: finalString = finalString+"քառասունութ"; ընդմիջում; գործ 49: finalString = finalString+"քառասունինը"; ընդմիջում; գործ 50: finalString = finalString+"հիսուն"; ընդմիջում; գործ 51: finalString = finalString+"հիսուն մեկ"; ընդմիջում; գործ 52: finalString = finalString+"հիսուն երկու"; ընդմիջում; գործ 53: finalString = finalString+"հիսուն երեք"; ընդմիջում; գործ 54: finalString = finalString+"հիսունչորս"; ընդմիջում; գործ 55: finalString = finalString+"հիսուն հինգ"; ընդմիջում; գործ 56: finalString = finalString+"հիսուն վեց"; ընդմիջում; գործ 57: finalString = finalString+"հիսուն յոթ"; ընդմիջում; գործ 58: finalString = finalString+"հիսուն ութ"; ընդմիջում; գործ 59: finalString = finalString+"հիսուն ինը"; ընդմիջում; }

// կեսօր?

եթե (hh == 12 && մմ == 0) {finalString = finalString+"կեսօր"; } // կեսգիշեր? եթե (hh == 00 && mm == 0) {finalString = finalString+"կեսգիշեր"; }

}

դատարկ շրջան ()

{// ստացեք ժամանակը RTC բայթից վայրկյան, րոպե, ժամ, dayOfWeek, dayOfMonth, ամիս, տարի; getDateDs1307 (& երկրորդ, & րոպե, & ժամ, & dayOfWeek, & dayOfMthth, & month, & year);

// ժամանակը փոխակերպել նախադասության տողի

createTextTime (ժամ, րոպե);

// այժմ ուղարկեք տեքստը DMD- ին

drawText (finalString); }

Էսքիզն ունի սովորական գործառույթներ ՝ իրական ժամանակի DS1307/3232 ժամացույցների IC- ներից ժամանակ գտնելու և ստանալու համար, և ինչպես միշտ, մեր բոլոր ժամացույցների դեպքում ժամանակի մասին տեղեկությունները կարող եք մուտքագրել փոփոխականների մեջ void setup (), այնուհետև ապակոմենտավորել setDateDs1307 (), վերբեռնեք ուրվագիծը, նորից մեկնաբանեք setDateDs1307, այնուհետև ևս մեկ անգամ վերբեռնեք էսքիզը: Կրկնեք այդ գործընթացը ՝ ժամանակը նորից սահմանելու համար, եթե չեք ավելացրել որևէ ապարատային վրա հիմնված ինտերֆեյս:

Քայլ 3:

Theամանակը առբերվելուց հետո void loop (), այն փոխանցվում է createTextTime () գործառույթին: Այս գործառույթը ստեղծում է տեքստային տող ՝ ցուցադրելու համար ՝ սկսելով «It's» - ից, այնուհետև որոշում է, թե որ բառերին պետք է հետևել ՝ կախված ընթացիկ ժամանակից: Վերջապես drawText () ֆունկցիան փոխակերպում է տեքստը ցուցադրող տողը տեքստային փոփոխականի, որը կարող է փոխանցվել DMD- ին:

Խորհուրդ ենք տալիս: