Мазмұны:
Бейне: Arduino айналдыру мәтіндік сағаты: 3 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:24
Бұл жобаның мақсаты - айтылатын уақытты көрсететін айналмалы мәтінді сағат құру (мысалы, «түн ортасы»).
Бұл жылдам жоба - біз сізге аппараттық құралдар мен эскиздерді алуға жеткілікті мүмкіндік береміз, содан кейін оны сіздің қажеттіліктеріңізге сәйкес жалғастыра аласыз.
1 -қадам: Жабдық
Сізге үш негізгі элемент қажет -
- Arduino Uno үйлесімді тақта
- нақты уақыттағы сағат схемасы немесе DS1307 немесе DS3231 IC көмегімен модуль
- және монохромды P10 стиліндегі жарықдиодты дисплей
Сізге сыртқы қуат көзі қажет болуы мүмкін, бірақ біз оны кейінірек аламыз.
Бірінші кезең-бұл сіздің нақты уақытқа сәйкес келу. Егер сізге көмек қажет болса, оқулық үшін мына жерді басыңыз.
Қазіргі уақытта сіз «уақытты қалай орнатасыз?» Деп ойлайсыз деп үміттенемін.
Бұл сұраққа екі жауап бар. Егер сіз DS3231 -ді қолдансаңыз, оны тек эскизге орнатыңыз (төменде қараңыз), дәлдігі өте жақсы, күндізгі уақытты үнемдеу үшін эскизді жылына екі рет жаңа уақытпен жүктеу қажет.
Әйтпесе, қарапайым пайдаланушы интерфейсін қосыңыз-бірнеше түйме жасай алады. Соңында сізге DMD артқы жағындағы жабдықты қою керек. Сіздің жеке қажеттіліктеріңізді қанағаттандыруға мүмкіндік бар, қарапайым шешім USB тақтасына оңай кіруге болатын басқару тақтасын туралау болуы мүмкін, содан кейін оны Sugru -мен жабыстырыңыз.
Сағатты қосуға келер болсақ, сіз Arduino -дан ONE LED дисплейін іске қоса аласыз, ол үй ішінде жақсы жарықтықта жұмыс істейді. Егер сіз DMD толық жұмыс жасайтынын қаласаңыз, торлы қабықпен жанатын жарық 5В 4А тұрақты ток көзін пайдалануыңыз қажет. Егер сіз екі DMD қолдансаңыз - бұл 8А -ға барады және т. Сыртқы қуатты бір DMD терминалына қосыңыз (екінші немесе одан да көп DMD осы терминалдарға қосыңыз).
Егер сіз қуат кабелінің ұшын кесуді қаламасаңыз, тұрақты ток розеткасын қолданыңыз.
2 -қадам: Arduino эскизі
Сізге келесі екі Arduino кітапханасын орнату қажет - TimerOne және DMD. Содан кейін эскизді жүктеңіз:
// RTC #үшін «Wire.h» қосылады #DS1307_I2C_ADDRESS 0x68 анықтаңыз // DS1307 RTC - 0x68
// жарықдиодты дисплей үшін
#«SPI.h» қосу «» DMD.h «қосу» «TimerOne.h» қосу «SystemFont5x7.h» қосу «» Arial_black_16.h «қосу #DISPLAYS_ACROSS 1 анықтау // сізде бірнеше DMD болуы мүмкін жол #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
String finalString; // 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; dayOfMonth = 19; ай = 5; жыл = 13; // setDateDs1307 (секунд, минут, сағат, dayOfWeek, dayOfMonth, ай, жыл); }
// әдеттегі RTC функциялары
// Қалыпты ондық сандарды екілік кодты ондыққа түрлендіру decToBcd (byte val) {return ((val/10*16) + (val%10)); }
// Екілік кодталған ондық бөлшекті қалыпты ондық сандарға түрлендіру
байт bcdToDec (байт val) {қайтару ((val/16*10) + (val%16)); }
жарамсыз setDateDs1307 (байт секунд, // 0-59
байт минут, // 0-59 байт сағаты, // 1-23 байт күніOfWeek, // 1-7 байт күніOfMonth, // 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 (он алтылық) 00010000 (екілік) жібереді - Wire.endTransmission шаршы толқынын қосады (); }
// ds1307 күн мен уақытты алады
void getDateDs1307 (байт *секунд, байт *минут, байт *сағат, байт *dayOfWeek, байт *dayOfMonth, байт *ай, байт *жыл) {// Wire.beginTransmission регистр көрсеткішін қалпына келтіру (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Олардың кейбіреулеріне маскалар қажет, себебі белгілі бір биттер басқару биттері
*секунд = bcdToDec (Wire.read () & 0x7f); *минут = bcdToDec (Wire.read ()); *сағат = bcdToDec (Wire.read () & 0x3f); // Мұны өзгерту қажет, егер сағат 12.00/pm *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); таймер = миллис (); }}}
жарамсыз createTextTime (инт сағ, инт мм)
// бұл барлық уақыттағы мәліметтерді мәтінге біріктіреді {finalString = «»; // ерекше жағдайларда сөйлемді сүртіңіз (төменде) finalString = finalString+«Бұл»;
// енді сағатты қосыңыз
if (hh == 1 || hh == 13) {finalString = finalString+«бір»; } if (hh == 2 || hh == 14) {finalString = finalString+«екі»; } 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+«six»; } 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+«он»; } if (hh == 11 || hh == 23) {finalString = finalString+«он бір»; }
// енді минуттарды қосыңыз
қосқыш (мм) {1 -жағдай: finalString = finalString+«бір бір»; үзіліс; 2 -жағдай: finalString = finalString+«екі екі»; үзіліс; 3 -жағдай: finalString = finalString+«үш үш»; үзіліс; 4 -жағдай: finalString = finalString+«төрт төрт»; үзіліс; 5 -жағдай: finalString = finalString+«бес бес»; үзіліс; 6 -жағдай: finalString = finalString+«oh six»; үзіліс; 7 -жағдай: finalString = finalString+«о жеті»; үзіліс; 8 -жағдай: finalString = finalString+«сегіз»; үзіліс; 9 -жағдай: finalString = finalString+«о тоғыз»; үзіліс; 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+«елу тоғыз»; үзіліс; }
// түстен кейін?
if (hh == 12 && mm == 0) {finalString = finalString+«midday»; } // түн ортасы? if (hh == 00 && mm == 0) {finalString = finalString+«түн ортасы»; }
}
бос цикл ()
{// уақытты RTC байтынан секунд, минут, сағат, dayOfWeek, dayOfMonth, ай, жыл алу; getDateDs1307 (& екінші, & минут, & сағат, & dayOfWeek, & dayOfMonth, & ай, & жыл);
// уақытты сөйлем жолына түрлендіру
createTextTime (сағат, минут);
// енді мәтінді DMD -ге жіберіңіз
drawText (finalString); }
Эскизде DS1307/3232 нақты уақытты IC-ден уақытты орнатуға және шығаруға арналған әдеттегі функциялар бар, және әдеттегідей барлық сағаттарда уақытты айнымалыларға void setup () ішінде енгізуге болады, содан кейін setDateDs1307 () белгісін өшіріңіз, нобайды жүктеңіз, setDateDs1307-ге түсініктеме беріңіз, содан кейін эскизді тағы бір рет жүктеңіз. Егер сіз жабдыққа негізделген пайдаланушы интерфейсін қоспасаңыз, уақытты қайта орнату үшін осы процедураны қайталаңыз.
3 -қадам:
Уақыт void loop () ішінде шығарылғаннан кейін, createTextTime () функциясына беріледі. Бұл функция «Бұл» деп басталатын мәтін жолын жасайды, содан кейін ағымдағы уақытқа байланысты қандай сөздерді ұстану керектігін анықтайды. Соңында drawText () функциясы мәтінді ұстап тұратын жолды DMD -ге жіберуге болатын символдық айнымалыға түрлендіреді.
Ұсынылған:
Arduino ESP жобасынан SMS мәтіндік хабарларды қалай жіберуге болады: 6 қадам
Arduino ESP жобасынан SMS мәтіндік хабарларды қалай жіберуге болады: Бұл нұсқаулық ESP8266 құрылғысы мен WiFi байланысын қолдана отырып, arduino жобасынан SMS мәтіндік хабарларды қалай жіберу керектігін көрсетеді. Неліктен SMS қолдану керек?* SMS хабарламалары қолданба хабарламасына қарағанда әлдеқайда жылдам және сенімді. хабарламалар. * SMS хабарламалар сонымен қатар
Мәтіндік дисплейі бар Arduino музыкалық қорабы: 9 қадам
Lyrics дисплейі бар Arduino музыкалық қорабы: Мен жақында ойнау үшін 16-жолақты 2-жолақты СКД (Сұйық кристалды дисплей) сатып алдым. Онымен танысқаннан кейін мен оны қолдану үшін жоба туралы ойлана бастадым; сәл түпнұсқа. Мен лириканы көрсететін музыкалық қорап жасауды шештім
Gixie сағаты: ең әдемі жарқыраған түтік сағаты: 4 қадам
Gixie сағаты: ең әдемі жарқыраған сағаттар: маған Nixie түтігі өте ұнайды, бірақ ол тым қымбат, мен оған шыдай алмаймын. Мен бұл Gixie сағатын жасауға жарты жыл жұмсадым. Gixie сағаты ws2812 акрил жарығын қолдану арқылы қол жеткізілді, мен RGB түтікшесін жұқа ету үшін барымды саламын
Мәтіндік ескертуі бар Arduino есік дабылы: 14 қадам (суреттермен)
Мәтіндік ескертуі бар Arduino есік дабылы: бұл есіктің күйін анықтау үшін магнитті қамысты қосқышты қолданатын, дыбыстық дабыл мен мәтіндік хабарға негізделген дабыл бар Arduino негізіндегі есік дабылы
Тітіркендіргіш айналдыру дөңгелегі Элиминаторды басыңыз (тегіс айналдыру): 5 қадам
Тітіркендіргіш айналдыру дөңгелегі Элиминаторды басыңыз (тегіс айналдыру): сіз айналдыру дөңгелегінің дыбысына ашуланасыз ба? міне, бұл шиыршықтан сол шертуді алып тастауға сіздің мүмкіндігіңіз! Егер сіз тышқанды сындырсаңыз, бұл менің кінәм емес. Мен бұл режимді logitech тінтуірімен жасаймын. Мен оның басқа тінтуірде жұмыс істейтініне сенімді емеспін