Kazalo:
Video: Arduino pomikajoča se besedilna ura: 3 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
Namen tega projekta je izdelati drsno besedilno uro, ki prikazuje čas, ko se govori (na primer »polnoč je«).
To je hiter projekt - damo vam dovolj, da nadaljujete s strojno opremo in skico, nato pa lahko nadaljujete, da ustreza vašim potrebam.
1. korak: Strojna oprema
Potrebovali boste tri glavne predmete -
- plošča, združljiva z Arduino Uno
- vezje ali modul ure v realnem času z uporabo DS1307 ali DS3231 IC
- in enobarvni LED zaslon v slogu P10
Morda boste želeli zunanji napajalnik, vendar bomo k temu prišli pozneje.
Prva stopnja je, da prilagodite svojo uro v realnem času. Če potrebujete pomoč pri tem, kliknite tukaj za vadnico.
Do sedaj upam, da razmišljate "kako nastavite čas?".
Na to vprašanje obstajata dva odgovora. Če uporabljate DS3231, ga samo nastavite na skici (glejte spodaj), ker je natančnost zelo dobra, morate skico z novim časom naložiti le dvakrat letno, da pokrijete poletni čas.
V nasprotnem primeru dodajte preprost uporabniški vmesnik-nekaj gumbov bi to lahko storilo. Nazadnje morate le postaviti strojno opremo na zadnjo stran DMD. Obstaja veliko možnosti za zadovoljitev lastnih potreb, preprosta rešitev je lahko, da nadzorno ploščo poravnate tako, da boste z lahkoto dostopali do vtičnice USB - in jo nato prilepite z nekaj Sugruja.
Kar zadeva napajanje ure - iz Arduina lahko zaženete EN LED zaslon, ki deluje pri dobri svetlosti za notranjo uporabo. Če želite, da DMD deluje pri polni svetlosti, ki gori na mrežnici, morate uporabiti ločeno 5V 4A enosmerno napajanje. Če uporabljate dva DMD -ja - to gre za 8A itd. Enostavno priključite zunanje napajanje na enega priključka DMD (drugi ali več DMD priključite na te priključke).
Če vam ni všeč, da bi odrezali konec napajalnega kabla, uporabite prekinitev enosmerne vtičnice.
2. korak: Skica Arduino
Namestiti morate naslednji dve knjižnici Arduino - TimerOne in DMD. Nato naložite skico:
// za RTC #vključite "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // RTC DS1307 je 0x68
// za LED zaslon
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // lahko imate več kot en DMD v vrstica #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
String finalString; // uporablja se za zadrževanje zadnjega stavka za prikaz na DMD
void ScanDMD () // potrebno za DMD
{dmd.scanDisplayBySPI (); }
void setup ()
{// za DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (res);
// za RTC
Wire.begin (); // sproži bajt vodila I2C sekunda, minuta, ura, danOfWeek, dayOfMonth, mesec, leto; // spremenite spremenljivke in razkomentirajte setDateDs1307, da nastavite čas // nato ponovno komentirajte funkcijo in znova naložite skico second = 0; minuta = 13; ura = 23; dayOfWeek = 4; dayOfMonth = 19; mesec = 5; leto = 13; // setDateDs1307 (druga, minuta, ura, dayOfWeek, dayOfMonth, mesec, leto); }
// običajne funkcije RTC
// Pretvorimo običajna decimalna števila v binarno kodiran decimalni bajt decToBcd (byte val) {return ((val/10*16) + (val%10)); }
// Pretvorimo binarno kodirano decimalko v običajna decimalna števila
bajt bcdToDec (bajt val) {return ((val/16*10) + (val%16)); }
void setDateDs1307 (sekunda bajtov, // 0-59
bajtna minuta, // 0-59 bajtna ura, // 1-23 bajtni danOfWeek, // 1-7 bajtni danOfMonth, // 1-28/29/bajtni mesec, // 1-12 bajtno leto) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (drugi)); // od 0 do bita 7 zažene uro Wire.write (decToBcd (minuta)); Wire.write (decToBcd (ura)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (mesec)); Wire.write (decToBcd (leto)); Wire.write (00010000); // pošilja 0x10 (šestnajstiško) 00010000 (binarno) v krmilni register - vklopi kvadratni val Wire.endTransmission (); }
// Dobi datum in čas iz ds1307
void getDateDs1307 (bajt *sekunda, bajt *minuta, bajt *ura, bajt *dayOfWeek, bajt *dayOfMonth, bajt *mesec, bajt *leto) {// Ponastavi kazalec registra Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Nekaj teh potrebuje maske, ker so določeni bitovi kontrolni
*drugi = bcdToDec (Wire.read () & 0x7f); *minuta = bcdToDec (Wire.read ()); *ura = bcdToDec (Wire.read () & 0x3f); // To je treba spremeniti, če je 12 ur/popoldne *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *mesec = bcdToDec (Wire.read ()); *leto = bcdToDec (Wire.read ()); }
void drawText (String oldString)
{dmd.clearScreen (true); 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); dolg začetek = millis (); dolg časovnik = začetek; dolg časovnik2 = zagon; boolean ret = false; while (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); timer = millis (); }}}
void createTextTime (int hh, int mm)
// to ves čas združi podatke v besedilo kot en stavek {finalString = ""; // izbrisati stavek za posebne primere (spodaj) finalString = finalString+"To je";
// zdaj dodamo uro
if (hh == 1 || hh == 13) {finalString = finalString+"ena"; } if (hh == 2 || hh == 14) {finalString = finalString+"dva"; } if (hh == 3 || hh == 15) {finalString = finalString+"tri"; } if (hh == 4 || hh == 16) {finalString = finalString+"štiri"; } if (hh == 5 || hh == 17) {finalString = finalString+"pet"; } if (hh == 6 || hh == 18) {finalString = finalString+"šest"; } if (hh == 7 || hh == 19) {finalString = finalString+"sedem"; } if (hh == 8 || hh == 20) {finalString = finalString+"osem"; } if (hh == 9 || hh == 21) {finalString = finalString+"devet"; } if (hh == 10 || hh == 22) {finalString = finalString+"deset"; } if (hh == 11 || hh == 23) {finalString = finalString+"enajst"; }
// zdaj dodajte minute
stikalo (mm) {primer 1: finalString = finalString+"oh ena"; zlom; primer 2: finalString = finalString+"oh dva"; zlom; primer 3: finalString = finalString+"oh tri"; zlom; primer 4: finalString = finalString+"oh štiri"; zlom; primer 5: finalString = finalString+"oh pet"; zlom; primer 6: finalString = finalString+"oh šest"; zlom; primer 7: finalString = finalString+"oh sedem"; zlom; primer 8: finalString = finalString+"oh osem"; zlom; primer 9: finalString = finalString+"oh devet"; zlom; primer 10: finalString = finalString+"deset"; zlom; primer 11: finalString = finalString+"enajst"; zlom; primer 12: finalString = finalString+"dvanajst"; zlom; primer 13: finalString = finalString+"trinajst"; zlom; primer 14: finalString = finalString+"štirinajst"; zlom; primer 15: finalString = finalString+"petnajst"; zlom; primer 16: finalString = finalString+"šestnajst"; zlom; primer 17: finalString = finalString+"sedemnajst"; zlom; primer 18: finalString = finalString+"osemnajst"; zlom; primer 19: finalString = finalString+"devetnajst"; zlom; primer 20: finalString = finalString+"dvajset"; zlom; primer 21: finalString = finalString+"enaindvajset"; zlom; primer 22: finalString = finalString+"dvaindvajset"; zlom; primer 23: finalString = finalString+"triindvajset"; zlom; primer 24: finalString = finalString+"štiriindvajset"; zlom; primer 25: finalString = finalString+"petindvajset"; zlom; primer 26: finalString = finalString+"šestindvajset"; zlom; primer 27: finalString = finalString+"sedemindvajset"; zlom; primer 28: finalString = finalString+"osemindvajset"; zlom; primer 29: finalString = finalString+"devetindvajset"; zlom; primer 30: finalString = finalString+"trideset"; zlom; primer 31: finalString = finalString+"enaindvajset"; zlom; primer 32: finalString = finalString+"dvaintrideset"; zlom; primer 33: finalString = finalString+"trideset tri"; zlom; primer 34: finalString = finalString+"štiriintrideset"; zlom; primer 35: finalString = finalString+"petintrideset"; zlom; primer 36: finalString = finalString+"šestintrideset"; zlom; primer 37: finalString = finalString+"sedemintrideset"; zlom; primer 38: finalString = finalString+"osemintrideset"; zlom; primer 39: finalString = finalString+"devetintrideset"; zlom; primer 40: finalString = finalString+"štirideset"; zlom; primer 41: finalString = finalString+"enainštirideset"; zlom; primer 42: finalString = finalString+"dvainštirideset"; zlom; primer 43: finalString = finalString+"triinštirideset"; zlom; primer 44: finalString = finalString+"štiriinštirideset"; zlom; primer 45: finalString = finalString+"petinštirideset"; zlom; primer 46: finalString = finalString+"šestinštirideset"; zlom; primer 47: finalString = finalString+"sedeminštirideset"; zlom; primer 48: finalString = finalString+"oseminštirideset"; zlom; primer 49: finalString = finalString+"devetindevetdeset"; zlom; primer 50: finalString = finalString+"petdeset"; zlom; primer 51: finalString = finalString+"enainpetdeset"; zlom; primer 52: finalString = finalString+"dvainpetdeset"; zlom; primer 53: finalString = finalString+"triinpetdeset"; zlom; primer 54: finalString = finalString+"štiriinpetdeset"; zlom; primer 55: finalString = finalString+"petinpetdeset"; zlom; primer 56: finalString = finalString+"petinpetdeset"; zlom; primer 57: finalString = finalString+"sedeminpetdeset"; zlom; primer 58: finalString = finalString+"oseminpetdeset"; zlom; primer 59: finalString = finalString+"devetindevetdeset"; zlom; }
// opoldne?
if (hh == 12 && mm == 0) {finalString = finalString+"opoldne"; } // polnoč? if (hh == 00 && mm == 0) {finalString = finalString+"polnoč"; }
}
void loop ()
{// dobite čas iz bajta RTC sekunda, minuta, ura, danOfWeek, dayOfMonth, mesec, leto; getDateDs1307 (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year);
// pretvorimo čas v stavčni niz
createTextTime (ura, minuta);
// zdaj pošljite besedilo v DMD
drawText (finalString); }
Skica ima običajne funkcije za nastavitev in pridobivanje časa iz IC-jev ure realnega časa DS1307/3232, in kot običajno z vsemi našimi urami lahko vnesete informacije o času v spremenljivke v void setup (), nato odkomentirajte setDateDs1307 (), naložite skico, znova komentirajte setDateDs1307 in nato še enkrat naložite skico. Ponovite ta postopek, da znova nastavite čas, če niste dodali nobenega uporabniškega vmesnika, ki temelji na strojni opremi.
3. korak:
Ko je čas pridobljen v void loop (), se posreduje funkciji createTextTime (). Ta funkcija ustvari besedilni niz za prikaz tako, da se začne z »To je«, nato pa določi, katerim besedam je treba slediti, odvisno od trenutnega časa. Na koncu funkcija drawText () pretvori niz, ki vsebuje besedilo, za prikaz v spremenljivko znakov, ki jo je mogoče poslati v DMD.
Priporočena:
Ura za upokojitev / štetje navzgor / ura Dn: 4 koraki (s slikami)
Ura za upokojitev / Odštevanje / Ura Dn: Nekaj teh 8-palčnih LED matričnih zaslonov 8x8 sem imel v predalu in razmišljal, kaj bi z njimi. Navdihnjen z drugimi navodili sem dobil idejo, da bi sestavil zaslon za odštevanje/navzgor za odštevanje do prihodnjega datuma/časa in če je ciljni čas p
Reši mojega otroka: pametni sedež, ki pošilja besedilna sporočila, če pozabite otroka v avtu: 8 korakov
Reši mojega otroka: pametni sedež, ki pošilja besedilna sporočila, če pozabite otroka v avtu: nameščen je v avtomobilih in zahvaljujoč detektorju, nameščenemu na otroškem sedežu, nas opozori - prek SMS -a ali telefonskega klica - če dobimo stran, ne da bi otroka pripeljali s seboj
Kako poslati besedilna sporočila SMS iz vašega projekta Arduino ESP: 6 korakov
Kako pošiljati besedilna sporočila SMS iz vašega projekta Arduino ESP: Ta navodilo prikazuje, kako pošiljati besedilna sporočila SMS iz vašega projekta arduino z napravo ESP8266 in povezavo WiFi. Zakaj uporabljati SMS?* Sporočila SMS so veliko hitrejša in zanesljivejša od obvestil aplikacije sporočila. * Sporočila SMS lahko tudi
ESP8266 Omrežna ura brez RTC - Nodemcu NTP Ura brez RTC - PROJEKT INTERNETNE URE: 4 koraki
ESP8266 Omrežna ura brez RTC | Nodemcu NTP Ura brez RTC | PROJEKT INTERNETNE URE: V projektu bo izdelan projekt ure brez RTC, vzelo si bo čas za internet z uporabo WiFi in ga bo prikazal na zaslonu st7735
Micro: Bit Puppet "Besedilna sporočila"!: 5 korakov (s slikami)
Micro: Bit Puppet "Text Messaging" !: Skoraj vsa naša brezžična komunikacija poteka z radijskimi valovi*, vključno s telefonskimi klici, besedilnimi sporočili in WiFi. Mikrokrmilnik Micro: Bit z vgrajenimi radijskimi oddajniki in sprejemniki olajša izdelavo najrazličnejših projektov