Taula de continguts:
Vídeo: Rellotge de text de desplaçament Arduino: 3 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
L’objectiu d’aquest projecte és crear un rellotge de text desplaçable que mostri l’hora a mesura que es parla (per exemple, “és mitjanit”).
Aquest és un projecte ràpid: us donem prou per començar amb el maquinari i l’esbós i, a continuació, el podeu portar més enllà segons les vostres necessitats.
Pas 1: maquinari
Necessitareu tres elements principals:
- una placa compatible amb Arduino Uno
- un circuit o mòdul de rellotge en temps real que utilitza un IC DS1307 o DS3231
- i una pantalla LED monocroma a l'estil P10
És possible que vulgueu una font d’alimentació externa, però hi arribarem més endavant.
La primera etapa és adaptar-se al rellotge en temps real. Feu clic aquí per obtenir el tutorial si necessiteu ajuda.
A hores d'ara espero que estigueu pensant "com fixeu el temps?".
Hi ha dues respostes a aquesta pregunta. Si utilitzeu el DS3231, simplement configureu-lo a l’esbós (vegeu més avall), ja que la precisió és molt bona, només heu de penjar l’esbós amb la nova hora dues vegades a l’any per cobrir l’estiu.
En cas contrari, afegiu una interfície d’usuari senzilla: podrien fer-ho un parell de botons. Finalment, només cal posar el maquinari a la part posterior del DMD. Hi ha un ampli abast per satisfer les vostres pròpies necessitats; una solució senzilla pot ser alinear la placa de control perquè pugueu accedir fàcilment a la presa USB i, després, enganxar-la amb una mica de Sugru.
Pel que fa a l’encesa del rellotge: podeu executar una pantalla LED ONE des de l’Arduino i funciona amb una bona brillantor per a ús interior. Si voleu que el DMD funcioni al màxim amb la brillantor que crema la retina, heu d’utilitzar una font d’alimentació de 5V 4A CC separada. Si feu servir dos DMD, això passa a 8A, etc. Simplement connecteu l’alimentació externa als terminals d’un DMD (connecteu el segon o més DMD a aquests terminals).
Si no us ve de gust picar l’extrem del cable de la font d’alimentació, utilitzeu una presa de corrent continu.
Pas 2: l'esbós d'Arduino
Haureu d’instal·lar les dues biblioteques Arduino següents: TimerOne i DMD. A continuació, pengeu l'esbós:
// per a RTC # inclou "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // el DS1307 RTC és 0x68
// per a pantalla LED
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // podríeu tenir més d'un DMD en un fila #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
String finalString; // solia contenir la frase final per mostrar-la a DMD
void ScanDMD () // necessari per a DMD
{dmd.scanDisplayBySPI (); }
configuració nul·la ()
{// per DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (true);
// per a RTC
Wire.begin (); // activar el byte del bus I2C segon, minut, hora, dayOfWeek, dayOfMonth, mes, any; // canvieu les variables i descommenteu setDateDs1307 per definir l'hora //, a continuació, torneu a comentar la funció i torneu a carregar l'esbós segon = 0; minut = 13; hora = 23; dayOfWeek = 4; dayOfMonth = 19; mes = 5; any = 13; // setDateDs1307 (segon, minut, hora, dayOfWeek, dayOfMonth, mes, any); }
// funcions RTC habituals
// Converteix els nombres decimals normals en bytes decimals codificats binaris decToBcd (byte val) {return ((val / 10 * 16) + (val% 10)); }
// Converteix decimal codificat binari en nombres decimals normals
byte bcdToDec (byte val) {return ((val / 16 * 10) + (val% 16)); }
void setDateDs1307 (segon de byte, // 0-59
minut de byte, // 0-59 hora de byte, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28 / 29 / byte mes, // 1-12 byte any) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (segon)); // 0 al bit 7 inicia el rellotge Wire.write (decToBcd (minut)); Wire.write (decToBcd (hora)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (mes)); Wire.write (decToBcd (any)); Wire.write (00010000); // envia 0x10 (hex) 00010000 (binari) al registre de control: activa l'ona quadrada Wire.endTransmission (); }
// Obté la data i l'hora des del ds1307
void getDateDs1307 (byte * segon, byte * minut, byte * hora, byte * dayOfWeek, byte * dayOfMonth, byte * mes, byte * any) {// Restableix el punter del registre Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Alguns d'aquests necessiten màscares perquè certs bits són bits de control
* segon = bcdToDec (Wire.read () & 0x7f); * minut = bcdToDec (Wire.read ()); * hora = bcdToDec (Wire.read () & 0x3f); // Cal canviar-ho si a les 12 hores del matí / a la tarda * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * mes = bcdToDec (Wire.read ()); * any = 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); inici llarg = millis (); temporitzador llarg = inici; temporitzador llarg2 = inici; ret booleà = fals; while (! ret) {if ((temporitzador + 20) <millis ()) {ret = dmd.stepMarquee (-1, 0); temporitzador = millis (); }}}
void createTextTime (int hh, int mm)
// això combina totes les dades de temps en text com una frase {finalString = ""; // esborreu la frase per a casos especials (a sota) finalString = finalString + "És";
// ara afegiu l’hora
if (hh == 1 || hh == 13) {finalString = finalString + "one"; } if (hh == 2 || hh == 14) {finalString = finalString + "dos"; } if (hh == 3 || hh == 15) {finalString = finalString + "three"; } if (hh == 4 || hh == 16) {finalString = finalString + "quatre"; } if (hh == 5 || hh == 17) {finalString = finalString + "cinc"; } if (hh == 6 || hh == 18) {finalString = finalString + "sis"; } if (hh == 7 || hh == 19) {finalString = finalString + "seven"; } if (hh == 8 || hh == 20) {finalString = finalString + "vuit"; } if (hh == 9 || hh == 21) {finalString = finalString + "nou"; } if (hh == 10 || hh == 22) {finalString = finalString + "deu"; } if (hh == 11 || hh == 23) {finalString = finalString + "onze"; }
// ara afegiu els minuts
commutador (mm) {cas 1: finalString = finalString + "oh one"; trencar; cas 2: finalString = finalString + "oh dos"; trencar; cas 3: finalString = finalString + "oh tres"; trencar; cas 4: finalString = finalString + "oh quatre"; trencar; cas 5: finalString = finalString + "oh five"; trencar; cas 6: finalString = finalString + "oh sis"; trencar; cas 7: finalString = finalString + "oh set"; trencar; cas 8: finalString = finalString + "oh vuit"; trencar; cas 9: finalString = finalString + "oh nou"; trencar; cas 10: finalString = finalString + "deu"; trencar; cas 11: finalString = finalString + "onze"; trencar; cas 12: finalString = finalString + "dotze"; trencar; cas 13: finalString = finalString + "tretze"; trencar; cas 14: finalString = finalString + "catorze"; trencar; cas 15: finalString = finalString + "quinze"; trencar; cas 16: finalString = finalString + "setze"; trencar; cas 17: finalString = finalString + "disset"; trencar; cas 18: finalString = finalString + "divuit"; trencar; cas 19: finalString = finalString + "dinou"; trencar; cas 20: finalString = finalString + "vint"; trencar; cas 21: finalString = finalString + "vint-i-un"; trencar; cas 22: finalString = finalString + "vint-i-dos"; trencar; cas 23: finalString = finalString + "vint-i-tres"; trencar; cas 24: finalString = finalString + "vint-i-quatre"; trencar; cas 25: finalString = finalString + "vint-i-cinc"; trencar; cas 26: finalString = finalString + "vint-i-sis"; trencar; cas 27: finalString = finalString + "vint set"; trencar; cas 28: finalString = finalString + "vint-i-vuit"; trencar; cas 29: finalString = finalString + "vint-i-nou"; trencar; cas 30: finalString = finalString + "trenta"; trencar; cas 31: finalString = finalString + "trenta-un"; trencar; cas 32: finalString = finalString + "trenta-dos"; trencar; cas 33: finalString = finalString + "trenta-tres"; trencar; cas 34: finalString = finalString + "trenta-quatre"; trencar; cas 35: finalString = finalString + "trenta-cinc"; trencar; cas 36: finalString = finalString + "trenta-sis"; trencar; cas 37: finalString = finalString + "trenta set"; trencar; cas 38: finalString = finalString + "trenta-vuit"; trencar; cas 39: finalString = finalString + "trenta-nou"; trencar; cas 40: finalString = finalString + "quaranta"; trencar; cas 41: finalString = finalString + "quaranta-un"; trencar; cas 42: finalString = finalString + "quaranta dos"; trencar; cas 43: finalString = finalString + "quaranta-tres"; trencar; cas 44: finalString = finalString + "quaranta-quatre"; trencar; cas 45: finalString = finalString + "quaranta cinc"; trencar; cas 46: finalString = finalString + "quaranta-sis"; trencar; cas 47: finalString = finalString + "quaranta set"; trencar; cas 48: finalString = finalString + "quaranta vuit"; trencar; cas 49: finalString = finalString + "quaranta nou"; trencar; cas 50: finalString = finalString + "cinquanta"; trencar; cas 51: finalString = finalString + "cinquanta un"; trencar; cas 52: finalString = finalString + "cinquanta dos"; trencar; cas 53: finalString = finalString + "cinquanta-tres"; trencar; cas 54: finalString = finalString + "cinquanta quatre"; trencar; cas 55: finalString = finalString + "cinquanta cinc"; trencar; cas 56: finalString = finalString + "cinquanta-sis"; trencar; cas 57: finalString = finalString + "cinquanta set"; trencar; cas 58: finalString = finalString + "cinquanta vuit"; trencar; cas 59: finalString = finalString + "cinquanta nou"; trencar; }
// migdia?
if (hh == 12 && mm == 0) {finalString = finalString + "midday"; } // mitjanit? if (hh == 00 && mm == 0) {finalString = finalString + "midnight"; }
}
bucle buit ()
{// obtenir el temps del byte RTC segon, minut, hora, dayOfWeek, dayOfMonth, mes, any; getDateDs1307 (& segon, & minut, & hora, & dayOfWeek, & dayOfMonth, & mes, & any);
// converteix l’hora en una cadena de frases
createTextTime (hora, minut);
// ara envieu el text al DMD
drawText (finalString); }
L’esbós té les funcions habituals per configurar i recuperar l’hora dels circuits de rellotge en temps real DS1307 / 3232 i, com és habitual amb tots els nostres rellotges, podeu introduir la informació horària a les variables de la configuració nul·la () i, a continuació, descommentar setDateDs1307 (), carregueu l'esbós, torneu a comentar setDateDs1307 i, a continuació, torneu a carregar l'esbós. Repetiu aquest procés per restablir l'hora si no heu afegit cap interfície d'usuari basada en maquinari.
Pas 3:
Un cop recuperada l'hora en void loop (), es passa a la funció createTextTime (). Aquesta funció crea la cadena de text que es mostra començant per "És" i, a continuació, determina quines paraules cal seguir en funció de l'hora actual. Finalment, la funció drawText () converteix la cadena que conté el text per mostrar-la en una variable de caràcters que es pot passar al DMD.
Recomanat:
Com fer un rellotge analògic i un rellotge digital amb tira LED mitjançant Arduino: 3 passos
Com es fabrica un rellotge analògic i un rellotge digital amb tira LED mitjançant Arduino: avui fabricarem un rellotge analògic i un amp; Rellotge digital amb Led Strip i mòdul MAX7219 Dot amb Arduino. Corregirà l’hora amb la zona horària local. El rellotge analògic pot utilitzar una tira LED més llarga, de manera que es pot penjar a la paret per convertir-se en un artista
ESP8266 Ventilador POV amb rellotge i actualització de text de la pàgina web: 8 passos (amb imatges)
ESP8266 Ventilador POV amb rellotge i actualització de text de la pàgina web: es tracta d’una velocitat variable, POV (persistència de la visió), ventilador que mostra de manera intermitent l’hora i dos missatges de text que es poden actualitzar "al vol." també és un servidor web d'una sola pàgina que us permet canviar els dos missatges de text
Programació d'un Arduino Utilitzant un altre Arduino per mostrar un text de desplaçament sense biblioteca: 5 passos
Programar un Arduino Utilitzant un altre Arduino per mostrar un text de desplaçament sense biblioteca: Sony Spresense o Arduino Uno no són tan cars i no requereixen molta energia. Tot i això, si el vostre projecte té una limitació de potència, espai o fins i tot pressupost, us recomanem que utilitzeu Arduino Pro Mini. A diferència d’Arduino Pro Micro, Arduino Pro Mi
Rellotge basat en Arduino mitjançant el mòdul Rellotge en temps real (RTC) DS1307 i 0,96: 5 passos
Rellotge basat en Arduino mitjançant el mòdul DS1307 de rellotge en temps real (RTC) i 0,96: Hola, nois en aquest tutorial, veurem com fer un rellotge de treball mitjançant un mòdul de rellotge en temps real DS1307 & Pantalles OLED, així que llegirem l’hora del mòdul de rellotge DS1307. I imprimiu-lo a la pantalla OLED
El molest eliminador de rodes de desplaçament (desplaçament suau): 5 passos
El molest eliminador de clic de la roda de desplaçament (desplaçament suau): us molesta el so de la roda de desplaçament? doncs aquí teniu l'oportunitat de treure aquest clic d'aquest rotlle. si et trenques el ratolí, no és culpa meva. Estic fent aquest mod amb un ratolí logitech. No estic segur que funcionarà amb altres ratolins b