Innholdsfortegnelse:
Video: Arduino rullende tekstklokke: 3 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Formålet med dette prosjektet er å bygge en rullende tekstklokke som viser tiden mens den snakkes (for eksempel "det er midnatt").
Dette er et raskt prosjekt - vi gir deg nok til å komme i gang med maskinvaren og skissen, og så kan du ta det videre for å passe dine behov.
Trinn 1: Maskinvare
Du trenger tre hovedartikler -
- et Arduino Uno-kompatibelt brett
- en sanntidsklokke eller modul ved bruk av enten en DS1307 eller DS3231 IC
- og en monokrom P10-stil LED-skjerm
Du vil kanskje ha en ekstern strømforsyning, men vi kommer til det senere.
Den første fasen er å passe klokken din i sanntid. Klikk her for opplæringen hvis du trenger hjelp til det.
Nå håper jeg at du tenker "hvordan bestemmer du tiden?".
Det er to svar på det spørsmålet. Hvis du bruker DS3231, må du bare sette den inn i skissen (se nedenfor) ettersom nøyaktigheten er veldig god, du trenger bare å laste opp skissen med den nye tiden to ganger i året for å dekke sommertid.
Ellers kan du legge til et enkelt brukergrensesnitt-et par knapper kan gjøre det. Til slutt trenger du bare å sette maskinvaren på baksiden av DMD. Det er rikelig med muligheter for å dekke dine egne behov. En enkel løsning kan være å justere kontrollkortet slik at du enkelt får tilgang til USB -kontakten - og deretter stikke det ned med litt Sugru.
Når det gjelder å drive klokken - kan du kjøre EN LED -skjerm fra Arduino, og den kjører med god lysstyrke for innendørs bruk. Hvis du vil at DMD skal kjøre for fullt, lyshinne-brennende lysstyrke, må du bruke en separat 5V 4A DC strømforsyning. Hvis du bruker to DMDer - det går til 8A, og så videre. Bare koble den eksterne strømmen til en DMD -terminaler (koble den andre eller flere DMD -ene til disse terminalene).
Hvis du ikke har lyst til å kutte enden av strømforsyningskabelen, kan du bruke en likestrømuttak.
Trinn 2: Arduino -skissen
Du må installere følgende to Arduino -biblioteker - TimerOne og DMD. Last deretter opp skissen:
// for RTC #inkluderer "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // DS1307 RTC er 0x68
// for LED -display
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // you could have more than one DMD in a rad #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
String finalString; // brukes til å holde siste setning for å vises på DMD
void ScanDMD () // påkrevd for DMD
{dmd.scanDisplayBySPI (); }
ugyldig oppsett ()
{// for DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (true);
// for RTC
Wire.begin (); // fyr opp I2C bussbyte sekund, minutt, time, dayOfWeek, dayOfMonth, måned, år; // endre variablene og ikke kommenter setDateDs1307 for å angi tiden // kommenter deretter ut funksjonen og last opp skissen igjen sekund = 0; minutt = 13; time = 23; dayOfWeek = 4; dayOfMonth = 19; måned = 5; år = 13; // setDateDs1307 (sekund, minutt, time, dayOfWeek, dayOfMonth, måned, år); }
// vanlige RTC -funksjoner
// Konverter normale desimaltall til binært kodet desimal byte decToBcd (byte val) {return ((val/10*16) + (val%10)); }
// Konverter binær kodet desimal til normale desimaltall
byte bcdToDec (byte val) {return ((val/16*10) + (val%16)); }
void setDateDs1307 (byte sekund, // 0-59
byte minutt, // 0-59 byte time, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/byte måned, // 1-12 byte år) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (andre)); // 0 til bit 7 starter klokken Wire.write (decToBcd (minutt)); Wire.write (decToBcd (time)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (måned)); Wire.write (decToBcd (år)); Wire.write (00010000); // sender 0x10 (hex) 00010000 (binær) til kontrollregister - slår på firkantbølge Wire.endTransmission (); }
// Henter dato og klokkeslett fra ds1307
void getDateDs1307 (byte *sekund, byte *minutt, byte *time, byte *dayOfWeek, byte *dayOfMonth, byte *måned, byte *år) {// Tilbakestill registerpekeren Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Noen av disse trenger masker fordi visse biter er kontrollbiter
*second = bcdToDec (Wire.read () & 0x7f); *minutt = bcdToDec (Wire.read ()); *time = bcdToDec (Wire.read () & 0x3f); // Må endre dette hvis 12 timer am/pm *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *måned = bcdToDec (Wire.read ()); *år = 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); lang start = millis (); lang tidtaker = start; lang timer2 = start; boolsk ret = false; mens (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); timer = millis (); }}}
void createTextTime (int hh, int mm)
// dette slår alle dataene sammen til tekst som en setning {finalString = ""; // tørk ut setningen for spesielle tilfeller (nedenfor) finalString = finalString+"It's";
// legg nå til timen
hvis (hh == 1 || hh == 13) {finalString = finalString+"en"; } hvis (hh == 2 || hh == 14) {finalString = finalString+"to"; } hvis (hh == 3 || hh == 15) {finalString = finalString+"tre"; } hvis (hh == 4 || hh == 16) {finalString = finalString+"fire"; } hvis (hh == 5 || hh == 17) {finalString = finalString+"fem"; } hvis (hh == 6 || hh == 18) {finalString = finalString+"seks"; } hvis (hh == 7 || hh == 19) {finalString = finalString+"syv"; } hvis (hh == 8 || hh == 20) {finalString = finalString+"åtte"; } hvis (hh == 9 || hh == 21) {finalString = finalString+"ni"; } hvis (hh == 10 || hh == 22) {finalString = finalString+"ti"; } hvis (hh == 11 || hh == 23) {finalString = finalString+"elleve"; }
// legg nå til referatet
bryter (mm) {case 1: finalString = finalString+"oh one"; gå i stykker; case 2: finalString = finalString+"oh two"; gå i stykker; case 3: finalString = finalString+"oh three"; gå i stykker; case 4: finalString = finalString+"oh four"; gå i stykker; case 5: finalString = finalString+"oh five"; gå i stykker; case 6: finalString = finalString+"oh six"; gå i stykker; case 7: finalString = finalString+"oh seven"; gå i stykker; case 8: finalString = finalString+"oh eight"; gå i stykker; sak 9: finalString = finalString+"oh ni"; gå i stykker; sak 10: finalString = finalString+"ti"; gå i stykker; sak 11: finalString = finalString+"elleve"; gå i stykker; sak 12: finalString = finalString+"tolv"; gå i stykker; sak 13: finalString = finalString+"tretten"; gå i stykker; sak 14: finalString = finalString+"fjorten"; gå i stykker; sak 15: finalString = finalString+"femten"; gå i stykker; sak 16: finalString = finalString+"seksten"; gå i stykker; sak 17: finalString = finalString+"sytten"; gå i stykker; sak 18: finalString = finalString+"atten"; gå i stykker; sak 19: finalString = finalString+"nineteen"; gå i stykker; sak 20: finalString = finalString+"tjue"; gå i stykker; case 21: finalString = finalString+"tjueen"; gå i stykker; sak 22: finalString = finalString+"tjue to"; gå i stykker; sak 23: finalString = finalString+"tjue tre"; gå i stykker; sak 24: finalString = finalString+"tjuefire"; gå i stykker; sak 25: finalString = finalString+"tjue fem"; gå i stykker; sak 26: finalString = finalString+"tjue seks"; gå i stykker; sak 27: finalString = finalString+"tjue syv"; gå i stykker; sak 28: finalString = finalString+"tjueåtte"; gå i stykker; sak 29: finalString = finalString+"tjue ni"; gå i stykker; sak 30: finalString = finalString+"tretti"; gå i stykker; sak 31: finalString = finalString+"tretti en"; gå i stykker; sak 32: finalString = finalString+"tretti to"; gå i stykker; sak 33: finalString = finalString+"tretti tre"; gå i stykker; sak 34: finalString = finalString+"tretti fire"; gå i stykker; sak 35: finalString = finalString+"trettifem"; gå i stykker; sak 36: finalString = finalString+"trettiseks"; gå i stykker; sak 37: finalString = finalString+"tretti syv"; gå i stykker; sak 38: finalString = finalString+"trettiåtte"; gå i stykker; sak 39: finalString = finalString+"tretti ni"; gå i stykker; sak 40: finalString = finalString+"førti"; gå i stykker; sak 41: finalString = finalString+"førti en"; gå i stykker; sak 42: finalString = finalString+"førti to"; gå i stykker; sak 43: finalString = finalString+"førti tre"; gå i stykker; sak 44: finalString = finalString+"førti fire"; gå i stykker; sak 45: finalString = finalString+"førti fem"; gå i stykker; sak 46: finalString = finalString+"førti seks"; gå i stykker; sak 47: finalString = finalString+"førti syv"; gå i stykker; sak 48: finalString = finalString+"førtiåtte"; gå i stykker; sak 49: finalString = finalString+"førti ni"; gå i stykker; sak 50: finalString = finalString+"femti"; gå i stykker; sak 51: finalString = finalString+"femti en"; gå i stykker; sak 52: finalString = finalString+"femti to"; gå i stykker; sak 53: finalString = finalString+"femti tre"; gå i stykker; sak 54: finalString = finalString+"femtifire"; gå i stykker; sak 55: finalString = finalString+"femtifem"; gå i stykker; sak 56: finalString = finalString+"femtiseks"; gå i stykker; sak 57: finalString = finalString+"femtisju"; gå i stykker; sak 58: finalString = finalString+"femtiåtte"; gå i stykker; sak 59: finalString = finalString+"femti ni"; gå i stykker; }
// middag?
hvis (hh == 12 && mm == 0) {finalString = finalString+"midday"; } // midnatt? hvis (hh == 00 && mm == 0) {finalString = finalString+"midnatt"; }
}
hulrom ()
{// få tiden fra RTC -byte sekund, minutt, time, dayOfWeek, dayOfMonth, måned, år; getDateDs1307 (& sekund, & minutt, & time, & dayOfWeek, & dayOfMonth, & month, & year);
// konverter tiden til en setningsstreng
createTextTime (time, minutt);
// send nå teksten til DMD
drawText (finalString); }
Skissen har de vanlige funksjonene for å angi og hente tiden fra DS1307/3232 sanntidsklokke-ICer, og som vanlig med alle våre klokker kan du legge inn tidsinformasjonen i variablene i ugyldig oppsett (), deretter uncommentment setDateDs1307 (), last opp skissen, kommenter setDateDs1307 på nytt, og last deretter opp skissen en gang til. Gjenta denne prosessen for å angi tiden på nytt hvis du ikke har lagt til noe maskinvarebasert brukergrensesnitt.
Trinn 3:
Når tiden er hentet inn i void loop (), sendes den til funksjonen createTextTime (). Denne funksjonen oppretter tekststrengen som skal vises ved å starte med "It's", og bestemmer deretter hvilke ord som skal følges avhengig av gjeldende tid. Til slutt konverterer funksjonen drawText () strengen som holder teksten til å vises til en tegnvariabel som kan sendes til DMD.
Anbefalt:
Arduino bilvarslingssystem for omvendt parkering - Trinn for trinn: 4 trinn
Arduino Car Reverse Parking Alert System | Trinn for trinn: I dette prosjektet skal jeg designe en enkel Arduino Car Reverse Parking Sensor Circuit ved hjelp av Arduino UNO og HC-SR04 Ultrasonic Sensor. Dette Arduino -baserte bilreverseringssystemet kan brukes til autonom navigasjon, robotavstand og andre områder
Rullende robot med ESP32 -ting og TB6612FNG -driver, kontrollert av Android over BLE: 11 trinn
Rolling Robot With ESP32 Thing and TB6612FNG Driver, Controlled by Android Over BLE: Hello everyoneThis is my first instructable. En rullende robot (kallenavnet Raidho - fra runen som er assosiert med bevegelse) basert på ESP32 Thing, TB6612 FNG og BLE. En del som kan virke sære er at bildene ikke er fra prosessen
48 X 8 rullende LED -matrisedisplay ved hjelp av Arduino- og skiftregistre .: 6 trinn (med bilder)
48 X 8 Scrolling LED Matrix Display Using Arduino and Shift Registers .: Hei alle sammen! Dette er min første instruerbare, og det handler om å lage en 48 x 8 programmerbar rullende LED -matrise ved hjelp av en Arduino Uno og 74HC595 skiftregistre. Dette var mitt første prosjekt med et Arduino utviklingstavle. Det var en utfordring som ble gitt til m
16x64 P10 rullende LED -skjerm ved bruk av PIC16F877 mikrokontroller: 5 trinn (med bilder)
16x64 P10 rullende LED -skjerm ved bruk av PIC16F877 mikrokontroller: I denne instruksjonsboken beskriver du hvordan du grensesnitter 16 x 64 (p10) LED -matrisedisplay med PICI6F877A mikrokontroller. En data sendes til mikrokontrolleren via UART som er lagret i EEPROM, og dataene vil ha blitt vist på LED -matrisedisplayet. Det
Fullskjerm-rullende teleprompter: 10 trinn
Full-screen Scrolling Teleprompter: Jeg trengte en teleprompter for å hjelpe meg med å lage bedre videoer for nettstedet mitt om treblokkutskrift, så jeg bygde denne, med bare noen få biter av tre og glass, og bare gratis programvare. , Jeg oppdaget at jeg er