Tartalomjegyzék:
Videó: Arduino görgető szöveges óra: 3 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Ennek a projektnek az a célja, hogy felépítsen egy görgethető szöveges órát, amely megjeleníti az időt beszéd közben (például „éjfél van”).
Ez egy gyors projekt - eleget adunk a hardver és a vázlat elindításához, majd továbbviheti igényeinek megfelelően.
1. lépés: Hardver
Három fő elemre lesz szüksége -
- egy Arduino Uno-kompatibilis tábla
- valós idejű óraáramkör vagy modul DS1307 vagy DS3231 IC használatával
- és monokróm P10 stílusú LED kijelző
Lehet, hogy külső tápegységet szeretne, de erre később térünk rá.
Az első lépés az, hogy illeszkedjen a valós idejű órájához. Kattintson ide az oktatóanyagért, ha segítségre van szüksége.
Remélem, most arra gondol, hogy „hogyan állítsa be az időt?”.
Erre a kérdésre két válasz van. Ha a DS3231 készüléket használja, csak állítsa be a vázlatba (lásd alább), mivel a pontosság nagyon jó, a nyári időszámítás érdekében csak évente kétszer kell feltöltenie a vázlatot az új idővel.
Ellenkező esetben adjon hozzá egy egyszerű felhasználói felületet-néhány gomb megteheti. Végül csak a hardvert kell elhelyezni a DMD hátoldalán. Rengeteg lehetőség van a saját igényeinek kielégítésére, egyszerű megoldás lehet a vezérlőpult összehangolása, hogy könnyedén hozzáférhessen az USB -aljzathoz - majd rögzítse néhány Sugru -val.
Ami az óra áramellátását illeti - futtathat ONE LED kijelzőt az Arduino -ból, és jó fényerővel működik beltéri használatra. Ha azt szeretné, hogy a DMD teljes, retina égető fényerővel működjön, akkor külön 5V 4A DC tápegységet kell használnia. Ha két DMD -t használ - ez 8A -ra megy, és így tovább. Egyszerűen csatlakoztassa a külső tápellátást egy DMD terminálhoz (csatlakoztassa a második vagy több DMD -t ezekhez a terminálokhoz).
Ha nem szeretné elvágni a tápkábel végét, használjon egyenáramú aljzatot.
2. lépés: Az Arduino vázlat
Telepítenie kell a következő két Arduino könyvtárat - a TimerOne és a DMD. Ezután töltse fel a vázlatot:
// RTC esetén #tartalmazza a "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // a DS1307 RTC 0x68
// LED kijelzőhöz
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // több DMD is lehet egy sor #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
Karakterlánc finalString; // a DMD -n megjelenítendő utolsó mondat megtartására szolgál
void ScanDMD () // szükséges a DMD -hez
{dmd.scanDisplayBySPI (); }
üres beállítás ()
{// DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (igaz);
// az RTC számára
Wire.begin (); // az I2C busz bájtjának felgyújtása másodperc, perc, óra, dayOfWeek, dayOfMonth, month, year; // módosítsa a változókat, és vegye ki a setDateDs1307 megjegyzését az idő beállításához // majd írja le újra a függvényt, és töltse fel újra a vázlatot second = 0; perc = 13; óra = 23; dayOfWeek = 4; dayOfMonth = 19; hónap = 5; év = 13; // setDateDs1307 (másodperc, perc, óra, nap, hét, nap, hónap, év, hónap); }
// szokásos RTC funkciók
// A normál tizedes számok konvertálása binárisan kódolt decimális bájtra decToBcd (byte val) {return ((val/10*16) + (val%10)); }
// Konvertálja a binárisan kódolt tizedest normál tizedes számokká
bájt bcdToDec (bájt val) {return ((val/16*10) + (val%16)); }
void setDateDs1307 (második bájt, // 0-59
bájt perc, // 0-59 bájt óra, // 1-23 bájt napHét, // 1-7 bájtnapHónap, // 1-28/29/bájt hónap, // 1-12 bájt év) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Vezeték.írás (0); Wire.write (decToBcd (második)); // 0 -tól 7 -es bitig elindítja az órát Wire.write (decToBcd (perc)); Wire.write (decToBcd (óra)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (hónap)); Wire.write (decToBcd (év)); Wire.write (00010000); // 0x10 (hexadecimális) 00010000 (bináris) értéket küld a vezérlőregiszterhez - bekapcsolja a négyzethullámot Wire.endTransmission (); }
// Lekéri a dátumot és az időt a ds1307 -ből
void getDateDs1307 (bájt *másodperc, bájt *perc, bájt *óra, bájt *napOfWeek, bájt *napHónap, bájt *hónap, bájt *év) {// A regisztermutató visszaállítása Wire.beginTransmission (DS1307_I2C_ADDRESS); Vezeték.írás (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Ezek közül néhánynak maszkra van szüksége, mert bizonyos bitek vezérlőbitek
*second = bcdToDec (Wire.read () & 0x7f); *perc = bcdToDec (Wire.read ()); *óra = bcdToDec (Wire.read () & 0x3f); // Ezen változtatni kell, ha 12 óra am/pm *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *hónap = bcdToDec (Wire.read ()); *év = bcdToDec (Wire.read ()); }
void drawText (String oldString)
{dmd.clearScreen (igaz); 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); hosszú kezdés = millis (); hosszú időzítő = indítás; hosszú időzítő2 = indítás; logikai ret = hamis; while (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); időzítő = millis (); }}}
void createTextTime (int ó, int mm)
// ez minden mondatot szöveggé tömörít egy mondatként {finalString = ""; // törölje ki a mondatot különleges esetekben (alább) finalString = finalString+"Ez";
// most add hozzá az órát
if (hh == 1 || hh == 13) {finalString = finalString+"egy"; } if (hh == 2 || hh == 14) {finalString = finalString+"kettő"; } if (hh == 3 || hh == 15) {finalString = finalString+"three"; } if (hh == 4 || hh == 16) {finalString = finalString+"négy"; } if (hh == 5 || hh == 17) {finalString = finalString+"öt"; } if (hh == 6 || hh == 18) {finalString = finalString+"hat"; } if (hh == 7 || hh == 19) {finalString = finalString+"hét"; } if (hh == 8 || hh == 20) {finalString = finalString+"nyolcas"; } if (hh == 9 || hh == 21) {finalString = finalString+"nine"; } if (hh == 10 || hh == 22) {finalString = finalString+"tíz"; } if (hh == 11 || hh == 23) {finalString = finalString+"tizenegy"; }
// most add hozzá a jegyzőkönyvet
kapcsoló (mm) {1. eset: finalString = finalString+"oh one"; szünet; 2. eset: finalString = finalString+"oh two"; szünet; 3. eset: finalString = finalString+"oh three"; szünet; 4. eset: finalString = finalString+"ó négy"; szünet; 5. eset: finalString = finalString+"ó öt"; szünet; 6. eset: finalString = finalString+"oh six"; szünet; 7. eset: finalString = finalString+"oh seven"; szünet; 8. eset: finalString = finalString+"oh eight"; szünet; 9. eset: finalString = finalString+"ó kilenc"; szünet; 10. eset: finalString = finalString+"tíz"; szünet; 11. eset: finalString = finalString+"tizenegy"; szünet; 12. eset: finalString = finalString+"tizenkét"; szünet; 13. eset: finalString = finalString+"thirteen"; szünet; 14. eset: finalString = finalString+"tizennégy"; szünet; 15. eset: finalString = finalString+"tizenöt"; szünet; 16. eset: finalString = finalString+"tizenhat"; szünet; 17. eset: finalString = finalString+"tizenhét"; szünet; 18. eset: finalString = finalString+"tizennyolc"; szünet; 19. eset: finalString = finalString+"tizenkilenc"; szünet; 20. eset: finalString = finalString+"húsz"; szünet; 21. eset: finalString = finalString+"huszonegy"; szünet; 22. eset: finalString = finalString+"huszonkettő"; szünet; 23. eset: finalString = finalString+"huszonhárom"; szünet; 24. eset: finalString = finalString+"huszonnégy"; szünet; 25. eset: finalString = finalString+"huszonöt"; szünet; 26. eset: finalString = finalString+"huszonhat"; szünet; 27. eset: finalString = finalString+"huszonhét"; szünet; 28. eset: finalString = finalString+"huszonnyolc"; szünet; 29. eset: finalString = finalString+"huszonkilenc"; szünet; 30. eset: finalString = finalString+"harminc"; szünet; 31. eset: finalString = finalString+"harmincegy"; szünet; 32. eset: finalString = finalString+"harminckettő"; szünet; 33. eset: finalString = finalString+"harminchárom"; szünet; 34. eset: finalString = finalString+"harmincnégy"; szünet; 35. eset: finalString = finalString+"harmincöt"; szünet; 36. eset: finalString = finalString+"harminchat"; szünet; 37. eset: finalString = finalString+"harminchét"; szünet; 38. eset: finalString = finalString+"harmincnyolc"; szünet; 39. eset: finalString = finalString+"harminckilenc"; szünet; 40. eset: finalString = finalString+"negyven"; szünet; 41. eset: finalString = finalString+"negyvenegy"; szünet; 42. eset: finalString = finalString+"negyvenkettő"; szünet; 43. eset: finalString = finalString+"negyvenhárom"; szünet; 44. eset: finalString = finalString+"negyvennégy"; szünet; 45. eset: finalString = finalString+"negyvenöt"; szünet; 46. eset: finalString = finalString+"negyvenhat"; szünet; 47. eset: finalString = finalString+"negyvenhét"; szünet; 48. eset: finalString = finalString+"negyvennyolc"; szünet; 49. eset: finalString = finalString+"negyvenkilenc"; szünet; 50. eset: finalString = finalString+"ötven"; szünet; 51. eset: finalString = finalString+"ötvenegy"; szünet; 52. eset: finalString = finalString+"ötvenkettő"; szünet; 53. eset: finalString = finalString+"ötvenhárom"; szünet; 54. eset: finalString = finalString+"ötvennégy"; szünet; 55. eset: finalString = finalString+"ötvenöt"; szünet; 56. eset: finalString = finalString+"ötvenhat"; szünet; 57. eset: finalString = finalString+"ötvenhét"; szünet; 58. eset: finalString = finalString+"ötvennyolc"; szünet; 59. eset: finalString = finalString+"ötvenkilenc"; szünet; }
// délben?
if (óó == 12 && mm == 0) {finalString = finalString+"dél"; } // éjfél? if (óó == 00 && mm == 0) {finalString = finalString+"éjfél"; }
}
üres hurok ()
{// az idő lekérése az RTC bájtból másodperc, perc, óra, dayOfWeek, dayOfMonth, hónap, év; getDateDs1307 (& másodperc, & perc, & óra, & dayOfWeek, & dayOfMonth, & hónap, & év);
// konvertálja az időt egy mondat karakterlánccá
createTextTime (óra, perc);
// most küldje el a szöveget a DMD -nek
drawText (finalString); }
A vázlat a szokásos funkciókkal rendelkezik az idő beállításához és lekéréséhez a DS1307/3232 valós idejű óra IC-kből, és szokás szerint minden órajelünkkel megadhatja az időinformációt a void setup (), majd a setDateDs1307 (), töltse fel a vázlatot, és írja be újra a setDateDs1307 megjegyzést, majd töltse fel még egyszer a vázlatot. Ismételje meg ezt a folyamatot az idő újbóli beállításához, ha nem adott hozzá hardver alapú felhasználói felületet.
3. lépés:
Miután az időt lekérte a void loop () -ban, azt a createTextTime () függvénynek adják át. Ez a funkció létrehozza a megjelenítendő szöveges karakterláncot az „Ez” betűvel kezdődően, majd az aktuális idő függvényében meghatározza, hogy mely szavakat kell követni. Végül a drawText () függvény a szöveget tartalmazó karakterláncot karakterváltozóvá alakítja, amelyet át lehet adni a DMD -nek.
Ajánlott:
Szivárgásérzékelő szöveges üzenet értesítéssel: 7 lépés
Szivárgásérzékelő szöveges üzenet értesítéssel: Ez az útmutató bemutatja, hogyan lehet szivárgásérzékelőt létrehozni, amely szöveges üzeneteket küld. Riasztást küld, ha a csőtörésből vagy a tartalék lefolyóból származó vizet érzékel. Az útmutató azoknak szól, akik érdeklődnek a Python 3, a Raspberry Pi és a Secure Shell iránt
ESP8266 Hálózati óra RTC nélkül - Nodemcu NTP óra Nem RTC - INTERNET ÓRA PROJEKT: 4 lépés
ESP8266 Hálózati óra RTC nélkül | Nodemcu NTP óra Nem RTC | INTERNET ÓRA PROJEKT: A projektben óra projektet készítenek RTC nélkül, időbe telik az internet az wifi használatával, és megjeleníti az st7735 kijelzőn
DIY LED Dot Matrix görgető kijelző Arduino használatával: 6 lépés
DIY LED Dot Matrix görgető kijelző Arduino használatával: Hello InstruEz az első utasítható. Ebben az utasításban megmutatom, hogyan készítek egy DIY LED pontmátrix görgető kijelzőt az Arduino használatával MCU -ként. Ez a fajta kijelző a vasútállomáson, a buszpályaudvaron, az utcákon és még sok más helyen található. Ott
Halloween projekt koponyával, Arduino -val, villogó LED -ekkel és görgető szemekkel - Maker, MakerED, MakerSpaces: 4 lépés
Halloween projekt koponyával, Arduino -val, villogó LED -ekkel és görgető szemekkel | Maker, MakerED, MakerSpaces: Halloween projekt koponyával, Arduino -val, villogó LED -ekkel és Scroll EyesSoon Halloween, így készítsünk ijesztő projektet a kódolás és a barkácsolás közben (egy kis barkácsolás …). Az oktatóanyag azoknak készült, akik nem rendelkeznek 3D nyomtatóval, 21 cm-es plazmát használunk
Arduino ajtó riasztás szöveges riasztásokkal: 14 lépés (képekkel)
Arduino ajtó riasztás szöveges riasztásokkal: Ez egy Arduino alapú ajtóriasztó, amely mágneses nádkapcsolóval határozza meg az ajtó állapotát, és hangos riasztással és szöveges üzenet alapú riasztással rendelkezik. Részek listája Arduino UnoArduino Uno Ethernet pajzs