Innholdsfortegnelse:

Arduino rullende tekstklokke: 3 trinn
Arduino rullende tekstklokke: 3 trinn

Video: Arduino rullende tekstklokke: 3 trinn

Video: Arduino rullende tekstklokke: 3 trinn
Video: Makeblock Untimate Robot Kit Part 1 : Step by Step Assembly Robot of Aram Tank 2024, November
Anonim
Arduino rullende tekstklokke
Arduino rullende tekstklokke

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

Maskinvare
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: