Turinys:
Video: „Arduino“slinkties teksto laikrodis: 3 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Šio projekto tikslas yra sukurti slankiojantį teksto laikrodį, kuris rodytų laiką, kai jis sakomas (pavyzdžiui, „yra vidurnaktis“).
Tai greitas projektas - mes jums duosime pakankamai, kad galėtumėte pradėti dirbti su technine įranga ir eskizu, o tada galėsite jį tęsti, kad atitiktų jūsų poreikius.
1 žingsnis: Aparatūra
Jums reikės trijų pagrindinių elementų -
- su „Arduino Uno“suderinama plokštė
- realaus laiko laikrodžio grandinė arba modulis, naudojant DS1307 arba DS3231 IC
- ir vienspalvis P10 stiliaus LED ekranas
Galbūt norėsite išorinio maitinimo šaltinio, bet mes pasieksime tai vėliau.
Pirmasis etapas yra pritaikyti jūsų realaus laiko laikrodį. Spustelėkite čia, kad gautumėte pamoką, jei jums reikia pagalbos.
Tikiuosi, kad dabar galvojate „kaip nustatyti laiką?“.
Yra du atsakymai į šį klausimą. Jei naudojate DS3231, tiesiog nustatykite jį eskize (žr. Toliau), nes tikslumas yra labai geras, jums reikia tik įkelti eskizą nauju laiku tik du kartus per metus, kad būtų sumažintas vasaros laikas.
Priešingu atveju pridėkite paprastą vartotojo sąsają-tai gali padaryti keli mygtukai. Galiausiai jums tereikia įdėti aparatūrą į DMD galinę dalį. Yra daug galimybių patenkinti jūsų poreikius, paprastas sprendimas gali būti suderinti valdymo plokštę, kad galėtumėte lengvai pasiekti USB lizdą - ir tada priklijuokite jį prie kai kurių „Sugru“.
Kalbant apie laikrodžio maitinimą - galite paleisti VIENĄ LED ekraną iš „Arduino“ir jis veikia pakankamai ryškiai, kad būtų galima naudoti patalpose. Jei norite, kad DMD veiktų visu ryškumu, degindamas tinklainę, turite naudoti atskirą 5V 4A DC maitinimo šaltinį. Jei naudojate du DMD - tai yra 8A ir pan. Tiesiog prijunkite išorinį maitinimą prie vieno DMD terminalo (prie šių gnybtų prijunkite antrą ar daugiau DMD).
Jei nenorite nukirpti maitinimo kabelio galo, naudokite nuolatinės srovės lizdo pertrauką.
2 žingsnis: „Arduino“eskizas
Jums reikės įdiegti šias dvi „Arduino“bibliotekas - „TimerOne“ir DMD. Tada įkelkite eskizą:
// RTC #įtraukite „Wire.h“#define DS1307_I2C_ADDRESS 0x68 // DS1307 RTC yra 0x68
// skirtas LED ekranui
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // galite turėti daugiau nei vieną DMD eilutė #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
Styga finalString; // naudojamas paskutiniam sakiniui laikyti, kad būtų rodomas DMD
void ScanDMD () // reikalingas DMD
{dmd.scanDisplayBySPI (); }
negaliojanti sąranka ()
{// DMD Timer1.initialize (5000); Laikmatis1.attachInterrupt (ScanDMD); dmd.clearScreen (tiesa);
// RTC
Wire.begin (); // suaktyvinti I2C magistralės baitą antra, minutė, valanda, diena, savaitė, diena, mėnuo, mėnuo, metai; // pakeiskite kintamuosius ir atmeskite setDateDs1307, kad nustatytumėte laiką // tada iš naujo pakomentuokite funkciją ir vėl įkelkite eskizą second = 0; minutė = 13; valanda = 23; dayOfWeek = 4; dayOfMonth = 19; mėnuo = 5; metai = 13; // setDateDs1307 (antra, minutė, valanda, diena, savaitė, diena, mėnuo, mėnuo, metai); }
// įprastos RTC funkcijos
// Įprastus dešimtainius skaičius paversti dvejetainiu koduotu dešimtainiu baitu decToBcd (baitų val) {return ((val/10*16) + (val%10)); }
// Konvertuoti dvejetainį koduotą dešimtainį skaičių į normalius dešimtainius skaičius
baitas bcdToDec (baitas val) {return ((val/16*10) + (val%16)); }
void setDateDs1307 (baitas antras, // 0-59
baitų minutė, // 0–59 baitų valanda, // 1-23 baitų diena „Savaitė“, // 1–7 baitų diena „Mėnuo“, // 1-28/29/baitų mėnuo, // 1–12 baitų metai) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (antras)); // nuo 0 iki bitų 7 pradeda laikrodį Wire.write (decToBcd (minutė)); Wire.write (decToBcd (valanda)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (mėnuo)); Wire.write (decToBcd (metai)); Wire.write (00010000); // siunčia 0x10 (šešioliktainį) 00010000 (dvejetainį) į registrą - įjungia kvadratinę bangą Wire.endTransmission (); }
// Gauna datą ir laiką iš ds1307
void getDateDs1307 (baitas *sekundė, baitas *minutė, baitas *valanda, baitas *dayOfWeek, baitas *dayOfMonth, baitas *mėnuo, baitas *metai) {// Iš naujo nustatyti registro rodyklę Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Kai kuriems iš jų reikia kaukių, nes tam tikri bitai yra valdymo bitai
*antras = bcdToDec (Wire.read () & 0x7f); *minutė = bcdToDec (Wire.read ()); *valanda = bcdToDec (Wire.read () & 0x3f); // Reikia tai pakeisti, jei 12 val. Am/pm *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *mėnuo = bcdToDec (Wire.read ()); *metai = bcdToDec (Wire.read ()); }
void drawText (eilutė sena eilutė)
{dmd.clearScreen (tiesa); 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); ilga pradžia = milis (); ilgas laikmatis = pradžia; ilgas laikmatis2 = pradžia; loginis retas = klaidingas; while (! ret) {if ((laikmatis+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); laikmatis = milis (); }}}
void createTextTime (int hh, int mm)
// tai visą laiką sutelkia duomenis į tekstą kaip vieną sakinį {finalString = ""; // ištrinkite sakinį ypatingais atvejais (žemiau) finalString = finalString+"It's";
// dabar pridėkite valandą
if (hh == 1 || hh == 13) {finalString = finalString+"vienas"; } if (hh == 2 || hh == 14) {finalString = finalString+"du"; } if (hh == 3 || hh == 15) {finalString = finalString+"trys"; } if (hh == 4 || hh == 16) {finalString = finalString+"keturi"; } if (hh == 5 || hh == 17) {finalString = finalString+"penki"; } if (hh == 6 || hh == 18) {finalString = finalString+"six"; } if (hh == 7 || hh == 19) {finalString = finalString+"septyni"; } if (hh == 8 || hh == 20) {finalString = finalString+"aštuoni"; } if (hh == 9 || hh == 21) {finalString = finalString+"devyni"; } if (hh == 10 || hh == 22) {finalString = finalString+"dešimt"; } if (hh == 11 || hh == 23) {finalString = finalString+"vienuolika"; }
// dabar pridėkite minutes
jungiklis (mm) {1 atvejis: finalString = finalString+"oh one"; pertrauka; 2 atvejis: finalString = finalString+"oi du"; pertrauka; 3 atvejis: finalString = finalString+"oi trys"; pertrauka; 4 atvejis: finalString = finalString+"oi keturi"; pertrauka; 5 atvejis: finalString = finalString+"oh five"; pertrauka; 6 atvejis: finalString = finalString+"oh six"; pertrauka; 7 atvejis: finalString = finalString+"oh seven"; pertrauka; 8 atvejis: finalString = finalString+"o aštuoni"; pertrauka; 9 atvejis: finalString = finalString+"oi devyni"; pertrauka; 10 atvejis: finalString = finalString+"dešimt"; pertrauka; 11 atvejis: finalString = finalString+"vienuolika"; pertrauka; 12 atvejis: finalString = finalString+"dvylika"; pertrauka; 13 atvejis: finalString = finalString+"trylika"; pertrauka; 14 atvejis: finalString = finalString+"keturiolika"; pertrauka; 15 atvejis: finalString = finalString+"penkiolika"; pertrauka; 16 atvejis: finalString = finalString+"šešiolika"; pertrauka; 17 atvejis: finalString = finalString+"septyniolika"; pertrauka; 18 atvejis: finalString = finalString+"aštuoniolika"; pertrauka; 19 atvejis: finalString = finalString+"devyniolika"; pertrauka; 20 atvejis: finalString = finalString+"dvidešimt"; pertrauka; 21 atvejis: finalString = finalString+"dvidešimt vienas"; pertrauka; 22 atvejis: finalString = finalString+"dvidešimt du"; pertrauka; 23 atvejis: finalString = finalString+"dvidešimt trys"; pertrauka; 24 atvejis: finalString = finalString+"dvidešimt keturi"; pertrauka; 25 atvejis: finalString = finalString+"dvidešimt penki"; pertrauka; 26 atvejis: finalString = finalString+"dvidešimt šeši"; pertrauka; 27 atvejis: finalString = finalString+"dvidešimt septyni"; pertrauka; 28 atvejis: finalString = finalString+"dvidešimt aštuoni"; pertrauka; 29 atvejis: finalString = finalString+"dvidešimt devyni"; pertrauka; 30 atvejis: finalString = finalString+"trisdešimt"; pertrauka; 31 atvejis: finalString = finalString+"trisdešimt vienas"; pertrauka; 32 atvejis: finalString = finalString+"trisdešimt du"; pertrauka; 33 atvejis: finalString = finalString+"trisdešimt trys"; pertrauka; 34 atvejis: finalString = finalString+"trisdešimt keturi"; pertrauka; 35 atvejis: finalString = finalString+"trisdešimt penki"; pertrauka; 36 atvejis: finalString = finalString+"trisdešimt šeši"; pertrauka; 37 atvejis: finalString = finalString+"trisdešimt septyni"; pertrauka; 38 atvejis: finalString = finalString+"trisdešimt aštuoni"; pertrauka; 39 atvejis: finalString = finalString+"trisdešimt devyni"; pertrauka; 40 atvejis: finalString = finalString+"keturiasdešimt"; pertrauka; 41 atvejis: finalString = finalString+"keturiasdešimt vienas"; pertrauka; 42 atvejis: finalString = finalString+"keturiasdešimt du"; pertrauka; 43 atvejis: finalString = finalString+"keturiasdešimt trys"; pertrauka; 44 atvejis: finalString = finalString+"keturiasdešimt keturi"; pertrauka; 45 atvejis: finalString = finalString+"keturiasdešimt penki"; pertrauka; 46 atvejis: finalString = finalString+"keturiasdešimt šeši"; pertrauka; 47 atvejis: finalString = finalString+"keturiasdešimt septyni"; pertrauka; 48 atvejis: finalString = finalString+"keturiasdešimt aštuoni"; pertrauka; 49 atvejis: finalString = finalString+"keturiasdešimt devyni"; pertrauka; 50 atvejis: finalString = finalString+"penkiasdešimt"; pertrauka; 51 atvejis: finalString = finalString+"penkiasdešimt vienas"; pertrauka; 52 atvejis: finalString = finalString+"penkiasdešimt du"; pertrauka; 53 atvejis: finalString = finalString+"penkiasdešimt trys"; pertrauka; 54 atvejis: finalString = finalString+"penkiasdešimt keturi"; pertrauka; 55 atvejis: finalString = finalString+"penkiasdešimt penki"; pertrauka; 56 atvejis: finalString = finalString+"penkiasdešimt šeši"; pertrauka; 57 atvejis: finalString = finalString+"penkiasdešimt septyni"; pertrauka; 58 atvejis: finalString = finalString+"penkiasdešimt aštuoni"; pertrauka; 59 atvejis: finalString = finalString+"penkiasdešimt devyni"; pertrauka; }
// vidurdienis?
if (hh == 12 && mm == 0) {finalString = finalString+"vidurdienis"; } // vidurnaktis? if (hh == 00 && mm == 0) {finalString = finalString+"vidurnaktis"; }
}
tuštumos kilpa ()
{// gauti laiką iš RTC baitų antra, minutė, valanda, dayOfWeek, dayOfMonth, mėnuo, metai; getDateDs1307 (& sekundė, & minutė, valanda, & savaitės savaitė, & diena mėnesiui, mėnuo ir metai);
// laiką paversti sakinio seka
createTextTime (valanda, minutė);
// dabar siųskite tekstą į DMD
drawText (finalString); }
Eskizas turi įprastas funkcijas, skirtas nustatyti ir gauti laiką iš DS1307/3232 realaus laiko laikrodžio IC, ir, kaip įprasta, naudojant visus mūsų laikrodžius, galite įvesti laiko informaciją į kintamuosius tuščioje sąrankoje (), tada atšaukti komentarą setDateDs1307 (), įkelkite eskizą, iš naujo pakomentuokite setDateDs1307, tada dar kartą įkelkite eskizą. Pakartokite šį procesą, kad iš naujo nustatytumėte laiką, jei nepridėjote jokios aparatinės įrangos vartotojo sąsajos.
3 žingsnis:
Kai laikas gaunamas iš „void loop“(), jis perduodamas funkcijai createTextTime (). Ši funkcija sukuria rodomą teksto eilutę, pradedant „Tai“, ir tada nustato, kuriuos žodžius sekti, atsižvelgiant į dabartinį laiką. Galiausiai funkcija drawText () paverčia tekstą rodančią eilutę į simbolių kintamąjį, kurį galima perduoti DMD.
Rekomenduojamas:
Slinkties teksto ekranas (vadovas nuo A iki Z): 25 žingsniai (su paveikslėliais)
Slinkties teksto rodymas (vadovas nuo A iki Z): Šiame instrukciniame / vaizdo įraše aš jums padėsiu žingsnis po žingsnio instrukcijas, kaip rodyti slinkties tekstą naudojant „Arduino“. Aš neaiškinsiu, kaip sukurti kodą „Arduino“, aš parodysiu, kaip naudoti esamą kodą. Ką ir kur reikia bendradarbiauti
ESP8266 Tinklo laikrodis be jokio RTC - Nodemcu NTP laikrodis Nr. RTC - INTERNETO LAIKRODŽIO PROJEKTAS: 4 žingsniai
ESP8266 Tinklo laikrodis be jokio RTC | Nodemcu NTP laikrodis Nr. RTC | INTERNETO LAIKRODŽIO PROJEKTAS: Projekte bus sukurtas laikrodžio projektas be RTC, užtruks laikas iš interneto naudojant „Wi -Fi“ir jis bus rodomas st7735 ekrane
„Pasidaryk pats“LED taškų matricos slinkties ekranas naudojant „Arduino“: 6 žingsniai
„Pasidaryk pats“LED taškų matricos slinkties ekranas naudojant „Arduino“: Sveiki, instrukcija Tai yra mano pirmasis nurodomas. Šioje instrukcijoje parodysiu, kaip aš sukuriu „pasidaryk pats“LED taškų matricos slinkties ekraną, naudodami „Arduino“kaip MCU. Tokie ekranai rodomi geležinkelio stotyje, autobusų stotyje, gatvėse ir daugelyje kitų vietų. Ten
„Gixie“laikrodis: gražiausias švytėjimo vamzdžio laikrodis: 4 žingsniai
„Gixie Clock“: gražiausias „Glow Tube“laikrodis: „Nixie Tube“man labai patinka, tačiau jis yra per brangus, negaliu to sau leisti. Taigi aš praleidau pusę metų kurdamas šį „Gixie“laikrodį. „Gixie“laikrodis pasiekiamas naudojant apšvietimą „ws2812“, kad būtų akrilo šviesa. Aš darau viską, kad RGB vamzdelis būtų plonesnis
48 X 8 slinkties LED matricos ekranas naudojant „Arduino“ir „Shift“registrus: 6 žingsniai (su paveikslėliais)
48 X 8 slinkties šviesos diodų matricos ekranas naudojant „Arduino“ir „Shift“registrus. Tai buvo mano pirmasis projektas su „Arduino“plėtros lenta. Tai buvo iššūkis m