Sisukord:
Video: Arduino keritav tekstikell: 3 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Selle projekti eesmärk on luua keriv tekstikell, mis kuvab kõne ajal kellaaega (näiteks „on kesköö”).
See on kiire projekt - me anname teile piisavalt riistvara ja visandiga alustamiseks ning seejärel saate seda vastavalt oma vajadustele edasi viia.
Samm: riistvara
Te vajate kolme peamist asja -
- Arduino Uno-ühildumatu plaat
- reaalajas kellaahel või moodul, mis kasutab kas DS1307 või DS3231 IC
- ja ühevärviline P10-stiilis LED-ekraan
Võib -olla soovite välist toiteallikat, kuid me jõuame selleni hiljem.
Esimene etapp on teie reaalajas kella sobitamine. Juhendi saamiseks klõpsake siin, kui vajate selles osas abi.
Nüüdseks loodan, et mõtlete: "kuidas te aega seadistate?".
Sellele küsimusele on kaks vastust. Kui kasutate DS3231 -d, määrake see lihtsalt visandisse (vt allpool), kuna täpsus on väga hea, peate eskiisi uue ajaga üles laadima ainult kaks korda aastas, et katta suveaeg.
Vastasel korral lisage lihtne kasutajaliides-paar nuppu saab sellega hakkama. Lõpuks peate lihtsalt riistvara DMD tagaküljele panema. Teie vajaduste rahuldamiseks on palju võimalusi, lihtne lahendus võib olla juhtpaneeli joondamine, nii et pääsete hõlpsalt juurde USB -pesale - ja seejärel kleepige see mõne Sugruga alla.
Seoses kella sisselülitamisega - saate Arduino'st käivitada ÜHE LED -ekraani ja see töötab siseruumides hea heledusega. Kui soovite, et DMD töötaks täieliku, võrkkesta põletava heledusega, peate kasutama eraldi 5V 4A alalisvoolu toiteallikat. Kui kasutate kahte DMD -d - see läheb 8A -ni jne. Lihtsalt ühendage väline toide ühe DMD klemmiga (ühendage teine või mitu DMD -d nende klemmidega).
Kui te ei soovi toitekaabli otsa tükeldada, kasutage alalisvoolu pistikupesa.
Samm: Arduino visand
Peate installima järgmised kaks Arduino raamatukogu - TimerOne ja DMD. Seejärel laadige üles visand:
// RTC jaoks #lisage "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // DS1307 RTC on 0x68
// LED -ekraani jaoks
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // teil võib olla rohkem kui üks DMD rida #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
String finalString; // kasutatakse DMD -s kuvamiseks viimase lause hoidmiseks
void ScanDMD () // DMD jaoks vajalik
{dmd.scanDisplayBySPI (); }
tühine seadistus ()
{// DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (tõene);
// RTC jaoks
Wire.begin (); // käivitada I2C bussi bait sekund, minut, tund, dayOfWeek, dayOfMonth, kuu, aasta; // muutujate muutmine ja kellaaja määramiseks setDateDs1307 kommentaaride tühistamine // seejärel funktsiooni uuesti kommenteerimine ja visandi uuesti üleslaadimine second = 0; minut = 13; tund = 23; nädala nädal = 4; dayOfMonth = 19; kuu = 5; aasta = 13; // setDateDs1307 (teine, minut, tund, päev, nädal, päev, kuu, aasta); }
// tavalised RTC funktsioonid
// Teisenda tavalised kümnendnumbrid kahekomponentseteks kümnendbaitideks decToBcd (bait val) {return ((val/10*16) + (val%10)); }
// Teisenda binaarselt kodeeritud kümnendarv tavalisteks kümnendarvudeks
bait bcdToDec (bait val) {return ((val/16*10) + (val%16)); }
void setDateDs1307 (bait sekund, // 0-59
bait minut, // 0-59 bait tund, // 1-23 bait dayOfWeek, // 1-7 bait dayOfMonth, // 1-28/29/byte month, // 1-12 byte year) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (teine)); // 0 kuni bitti 7 käivitab kella Wire.write (decToBcd (minut)); Wire.write (decToBcd (tund)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (kuu)); Wire.write (decToBcd (aasta)); Wire.write (00010000); // saadab 0x10 (hex) 00010000 (binaar) registrile - lülitab sisse ruutlaine Wire.endTransmission (); }
// Leiab kuupäeva ja kellaaja ds1307 -st
void getDateDs1307 (bait *sekund, bait *minut, bait *tund, bait *dayOfWeek, bait *dayOfMonth, bait *kuu, bait *aasta) {// lähtestage registri osuti Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Mõned neist vajavad maske, sest teatud bitid on juhtbittid
*teine = bcdToDec (Wire.read () & 0x7f); *minut = bcdToDec (Wire.read ()); *tund = bcdToDec (Wire.read () & 0x3f); // Seda on vaja muuta, kui kell 12:00/pm *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *kuu = bcdToDec (Wire.read ()); *aasta = bcdToDec (Wire.read ()); }
void drawText (String oldString)
{dmd.clearScreen (tõsi); 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); pikk algus = millis (); pikk taimer = algus; pikk taimer2 = algus; boolean ret = vale; while (! ret) {if ((taimer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); taimer = millis (); }}}
void createTextTime (int hh, int mm)
// see koondab kogu aja andmed üheks lauseks tekstiks {finalString = ""; // pühi lause välja erijuhtudel (allpool) finalString = finalString+"See";
// lisage nüüd tund
if (hh == 1 || hh == 13) {finalString = finalString+"üks"; } kui (hh == 2 || hh == 14) {finalString = finalString+"kaks"; } kui (hh == 3 || hh == 15) {finalString = finalString+"kolm"; } kui (hh == 4 || hh == 16) {finalString = finalString+"neli"; } kui (hh == 5 || hh == 17) {finalString = finalString+"viis"; } kui (hh == 6 || hh == 18) {finalString = finalString+"kuus"; } kui (hh == 7 || hh == 19) {finalString = finalString+"seitse"; } kui (hh == 8 || hh == 20) {finalString = finalString+"kaheksa"; } kui (hh == 9 || hh == 21) {finalString = finalString+"üheksa"; } kui (hh == 10 || hh == 22) {finalString = finalString+"kümme"; } kui (hh == 11 || hh == 23) {finalString = finalString+"üksteist"; }
// lisage nüüd minutid
lüliti (mm) {juhtum 1: finalString = finalString+"oh one"; murda; juhtum 2: finalString = finalString+"oh two"; murda; juhtum 3: finalString = finalString+"oh three"; murda; juhtum 4: finalString = finalString+"oh four"; murda; juhtum 5: finalString = finalString+"oh five"; murda; juhtum 6: finalString = finalString+"oh six"; murda; juhtum 7: finalString = finalString+"oh seitse"; murda; juhtum 8: finalString = finalString+"oh kaheksa"; murda; juhtum 9: finalString = finalString+"oh nine"; murda; juhtum 10: finalString = finalString+"kümme"; murda; juhtum 11: finalString = finalString+"üksteist"; murda; juhtum 12: finalString = finalString+"kaksteist"; murda; juhtum 13: finalString = finalString+"kolmteist"; murda; juhtum 14: finalString = finalString+"neliteist"; murda; juhtum 15: finalString = finalString+"viisteist"; murda; juhtum 16: finalString = finalString+"kuusteist"; murda; juhtum 17: finalString = finalString+"seitseteist"; murda; juhtum 18: finalString = finalString+"kaheksateist"; murda; juhtum 19: finalString = finalString+"üheksateist"; murda; juhtum 20: finalString = finalString+"kakskümmend"; murda; juhtum 21: finalString = finalString+"kakskümmend üks"; murda; juhtum 22: finalString = finalString+"kakskümmend kaks"; murda; juhtum 23: finalString = finalString+"kakskümmend kolm"; murda; juhtum 24: finalString = finalString+"kakskümmend neli"; murda; juhtum 25: finalString = finalString+"kakskümmend viis"; murda; juhtum 26: finalString = finalString+"kakskümmend kuus"; murda; juhtum 27: finalString = finalString+"kakskümmend seitse"; murda; juhtum 28: finalString = finalString+"kakskümmend kaheksa"; murda; juhtum 29: finalString = finalString+"kakskümmend üheksa"; murda; juhtum 30: finalString = finalString+"kolmkümmend"; murda; juhtum 31: finalString = finalString+"kolmkümmend üks"; murda; juhtum 32: finalString = finalString+"kolmkümmend kaks"; murda; juhtum 33: finalString = finalString+"kolmkümmend kolm"; murda; juhtum 34: finalString = finalString+"kolmkümmend neli"; murda; juhtum 35: finalString = finalString+"kolmkümmend viis"; murda; juhtum 36: finalString = finalString+"kolmkümmend kuus"; murda; juhtum 37: finalString = finalString+"kolmkümmend seitse"; murda; juhtum 38: finalString = finalString+"kolmkümmend kaheksa"; murda; juhtum 39: finalString = finalString+"kolmkümmend üheksa"; murda; juhtum 40: finalString = finalString+"nelikümmend"; murda; juhtum 41: finalString = finalString+"nelikümmend üks"; murda; juhtum 42: finalString = finalString+"nelikümmend kaks"; murda; juhtum 43: finalString = finalString+"nelikümmend kolm"; murda; juhtum 44: finalString = finalString+"nelikümmend neli"; murda; juhtum 45: finalString = finalString+"nelikümmend viis"; murda; juhtum 46: finalString = finalString+"nelikümmend kuus"; murda; juhtum 47: finalString = finalString+"nelikümmend seitse"; murda; juhtum 48: finalString = finalString+"nelikümmend kaheksa"; murda; juhtum 49: finalString = finalString+"nelikümmend üheksa"; murda; juhtum 50: finalString = finalString+"viiskümmend"; murda; juhtum 51: finalString = finalString+"viiskümmend üks"; murda; juhtum 52: finalString = finalString+"viiskümmend kaks"; murda; juhtum 53: finalString = finalString+"viiskümmend kolm"; murda; juhtum 54: finalString = finalString+"viiskümmend neli"; murda; juhtum 55: finalString = finalString+"viiskümmend viis"; murda; juhtum 56: finalString = finalString+"viiskümmend kuus"; murda; juhtum 57: finalString = finalString+"viiskümmend seitse"; murda; juhtum 58: finalString = finalString+"viiskümmend kaheksa"; murda; juhtum 59: finalString = finalString+"viiskümmend üheksa"; murda; }
// keskpäeval?
if (hh == 12 && mm == 0) {finalString = finalString+"keskpäev"; } // kesköö? if (hh == 00 && mm == 0) {finalString = finalString+"kesköö"; }
}
tühine tsükkel ()
{// saada aega RTC baidist sekund, minut, tund, dayOfWeek, dayOfMonth, kuu, aasta; getDateDs1307 (& sekund, & minut, & tund, & dayOfWeek, & dayOfMonth, & kuu, & aasta);
// teisendada aeg lausetringiks
createTextTime (tund, minut);
// saatke tekst nüüd DMD -le
drawText (finalString); }
Visandil on tavapärased funktsioonid aja seadmiseks ja toomiseks reaalajas kella IC-delt DS1307/3232 ning nagu tavaliselt kõigi meie kellade puhul, saate sisestada ajateabe muutujatesse tühjas seadistuses (), seejärel uncomment setDateDs1307 (), laadige eskiis üles, kommenteerige uuesti setDateDs1307, seejärel laadige visand uuesti üles. Kui te ei lisanud ühtegi riistvarapõhist kasutajaliidest, korrake seda protsessi aja seadmiseks.
3. samm:
Kui aeg on void loopist () alla laaditud, edastatakse see funktsioonile createTextTime (). See funktsioon loob kuvatava tekstistringi, alustades sõnaga „See“, ja seejärel määrab olenevalt kellaajast, milliseid sõnu järgida. Lõpuks teisendab funktsioon drawText () teksti hoidva stringi kuvamiseks tähemärgimuutujaks, mille saab edastada DMD -le.
Soovitan:
Keritav tekstikuva (A -Z juhend): 25 sammu (piltidega)
Teksti kerimise kuvamine (juhend A -st Z -ni): selles juhendatavas videos juhendan teid samm -sammult juhistega, kuidas Arduino abil keritavat teksti kuvada. Ma ei selgita, kuidas Arduino jaoks koodi teha, vaid näitan teile, kuidas olemasolevat koodi kasutada. Mida ja kus peate tegema
Akustiline levitatsioon Arduino Unoga samm-sammult (8 sammu): 8 sammu
Akustiline levitatsioon Arduino Uno abil samm-sammult (8 sammu): ultraheliheli muundurid L298N DC-naissoost adapteri toiteallikas isase alalisvoolupistikuga Arduino UNOBreadboard ja analoogpordid koodi teisendamiseks (C ++)
16x64 P10 keritav LED -ekraan PIC16F877 mikrokontrolleri abil: 5 sammu (piltidega)
16x64 P10 keritav LED -ekraan PIC16F877 mikrokontrolleri abil: selles juhendis kirjeldatakse, kuidas liidestada 16 x 64 (p10) LED -maatriksekraani PICI6F877A mikrokontrolleriga. Andmed saadetakse mikrokontrollerile UART kaudu, mis on salvestatud EEPROM -i ja andmed kuvatakse LED -maatriksekraanil. See
Täisekraanil keritav teleprompter: 10 sammu
Täisekraanil keritav teleprompter: mul oli vaja teleprompterit, mis aitaks mul oma veebisaidile puiduplokiga printimise osas paremaid videoid teha, nii et ehitasin selle, kasutades ainult mõnda puidu- ja klaasijäätmeid ning tasuta tarkvara. Videote salvestamisel , Avastasin, et ma olen
Twitteris keritav pildiraam: 3 sammu
Twitteris keritav pildiraam: see juhend annab teile teada, kuidas teha Twitteris keritavat pildiraami. Te vajate: 1. #twatch ethernet LCD seljakott ja 4*20 tähemärgiga LCD -ekraan. LCD -ekraanile sobiv pildiraam. Meie mõõtmed on 7,5 x 11 cm (3 tolli x 4,5 tolli). Tükk plasti