Una targhetta elettronica con il proprio testo di scorrimento

Ciao, oggi vorrei presentare un progetto da costruire rapidamente. Oggi costruiamo una targhetta elettronica con un modulo LCD 16x2 carattere e retroilluminazione. Per fare questo, abbiamo bisogno di un chiaro numero di parti dal Maker-Bastelkiste:

Parti:

Nel passo successivo, colleghiamo i componenti su una scheda di pane come segue, o assemblamo il circuito direttamente su una scheda a griglia fori:

Costruzione Fritzing

 

Ora colleghiamo il display e l'intero circuito. Il display deve essere leggermente staccato dal circuito effettivo per garantire un uso flessibile.

Possiamo usare la targhetta elettronica in molti modi. Che ne dici, ad esempio, di un segno di nome di tabella speciale alla prossima formazione aziendale? O forse come un nuovo cartello d'ufficio all'ingresso dell'ufficio? Come targhetta al discorso di un oratore? Ma forse anche come tag nome sulla cassetta delle lettere? Ad esempio, nello slot letterbox dietro lo slot del nome:

Esempio nella cassetta delle lettere

 

Tuttavia, al momento dell'installazione devono essere presi in considerazione i seguenti punti speciali:

  1. Tutte le parti che trasportano o generano tensione devono essere completamente impermeabili. L'umidità può altrimenti distruggere o corrodere il nostro circuito, che può causare guasti o, peggio, cortocircuiti.

  2. Il display deve includere l'apertura e la chiusura del coperchio della scatola nel disegno in-one mostrato sopra. Ciò significa che è necessario prendere in considerazione la posa accurata e adatta dei cavi e la selezione dei cavi adatti. Il cavo tra il display e Arduino deve prendere in modo permanente i movimenti del lembo della scatola postale. E 'meglio installarlo in luoghi inamovibili come il corpus posta postale.

  3. In qualsiasi momento è possibile utilizzare solo bassa tensione protettiva non pericolosa.

  4. In caso di interruzione dell'alimentazione, si spegne anche il display. Al fine di essere ancora chiaro in questo caso in cui l'ufficio postale dovrebbe andare, si consiglia comunque di mettere su una targa di sostituzione 😊

  5. L'alimentatore deve essere fissato con un fusibile adatto.

Molti punti, quindi, che rendono difficile l'installazione nella cassetta delle lettere e dovrebbero quindi essere lasciati ad un installatore elettrico. Quindi forse meglio usare come una targhetta 😉

 

#include <LiquidoCristallo.H>
#include <Avr/Dormire.H>
 
Costanti e definizioni
Const Galleggiante Tensione di avviso = 4.0;
Const Galleggiante Tensione del sonno = 3.2;
Const Int Velocità di scorrimento = 500;
Const Lungo Intervallo = 1000;    Definizione di un secondo in millisecondi

byte const VoltTestPin : 0;  Test ingresso analogico 0
Const Byte VoltTestPin = 2; Ingresso analogico produttivo 2

Orologio in tempo reale 
Lungo previousMillis = 0;       memorizzerà l'ultima volta è stato misurato
Byte Secondi = 0; 
Byte minuto = 0;
Byte Ora = 0;

Defizioni di stringhe
Stringa LetterBoxProprietario = " Tobias Kuch ";  Si prega di cambiare a tuo nome !
Stringa TestoStandard = "Inserire il proprio testo qui, che viene visualizzato come testo di scorrimento."; 
String StandardScolltext - "A bi o non essere – questa è la domanda !"; Esempio
Stringa BattInfo;

Logica del programma
Byte CharPointers[200];
Galleggiante Valore;
Int Tensione;
Boolean BatteriaVuota = False;
Byte Displaymode = 0;
Byte oldDisplaymode (modalità visualizzato) = 0;
Int Stato di commutazione = 1;
Byte DispLATextOneTime = 0;
Byte DispLATextOneTimeTIMEWASDisp = 0;
Int cmpMsgWith = 0;
Int MAMsgDC (MAMsgDC) = 0;
Byte MatC = 0; 

LiquidCrystal(rs, enable, d4, d5, d6, d7);
LiquidoCristallo Lcd(8, 9, 4, 5, 6, 7);

Vuoto InitLcdSchermo ()
{
Lcd.Chiaro();
Lcd.Stampare(LetterBoxProprietario);
Lcd.Setcursor(0,1);
Lcd.Setcursor(0,0);
Ritardo(1000);
}

Vuoto Installazione()       {      Per (Int Un=0; Un <200;Un++)      {      CharPointers[Un] = Un;       }      Lcd.Iniziare(16, 2);              avviare la libreria      InitLcdSchermo();      analogicoReference(Predefinito);
}

Vuoto Testo a scorrimento normale ()
{
 Int cmpMsgWith = TestoStandard.Lunghezza()- 2;
 Displaymode = 0;
 Ritardo (Velocità di scorrimento);
 Lcd.Setcursor(0,1);
 Per (Int Un=0; Un <17;Un++)      {      Lcd.Stampare(TestoStandard[CharPointers[Un]]);      }      Per (Int Un=0; Un <cmpMsgWith;Un++)      {      CharPointers[Un] = CharPointers[Un] + 1;       Se (CharPointers[Un] > cmpMsgWith) {CharPointers[Un] = 0; }      }   }

Vuoto Testo BatteriaAvvisoScroll ()
{
 BattInfo = "- Attenzione! La tensione crollò: " + Stringa(Tensione * 3) + " Volt. - " + TestoStandard + "  ";
 Int cmpMsgWith = BattInfo.Lunghezza()- 2;
 Displaymode = 2;
 Ritardo (Velocità di scorrimento /2 );
 Lcd.Setcursor(0,1);
 Per (Int Un=0; Un <17;Un++)      {      Lcd.Stampare(BattInfo[CharPointers[Un]]);      }      Per (Int Un=0; Un <cmpMsgWith;Un++)      {      CharPointers[Un] = CharPointers[Un] + 1;       Se (CharPointers[Un] > cmpMsgWith) {CharPointers[Un] = 0; }      }   }

Vuoto Powerdown ()  Attiva/disattiva accensioni, se si raggiunge Tensione critica.
{
 Lcd.Setcursor(0,1);
 Lcd.Stampare("                  ");
 Lcd.Setcursor(0,1);
 Lcd.Stampare("Sys in SleepMode");
 set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 Cli();
 sleep_enable();
 Può essere();
 sleep_cpu();
 Riavviare
}

Boolean BattWarning ()
{     Valore = analogicOLettura(VoltTestPin);    leggere il pin di input   Valore = Valore  * 0.00488;    Se (Valore <= Tensione del sonno) {   Tensione = Valore;   Powerdown();   }    Se (Valore <= Tensione di avviso) {   Tensione = Valore;     Ritorno Vero;    }    {   Ritorno False;   }   }

Vuoto runrealTimeClock()
{   Orologio in tempo reale & Conto alla rovescia
Unsigned Lungo currentMillis = millis();   Se(currentMillis - previousMillis > Intervallo)   {      previousMillis = currentMillis;
Conto alla rovescia    
Conto alla rovescia 24 St Hr.      Secondi = Secondi+1;      Se (Secondi > 59)       {           Secondi = 0;           minuto=minuto+1;                    BatteriaVuota = BattWarning ();           Se (minuto > 59)           {            minuto =0;            Se (MatC > 1) { MatC --;} Visualizzazione dell'icona del messaggio             Ora=Ora + 1;                     }            Se (Ora > 23)           {            Ora = 0;           }       }       }
}

Vuoto ChangeDisplayMode (Modalità di visualizzazione)()
{   Se ( Displaymode > oldDisplaymode (modalità visualizzato) )   {     oldDisplaymode (modalità visualizzato) = Displaymode;      Per (Int Un=0; Un <200;Un++)      {      CharPointers[Un] = Un;       }   }     Se ( Displaymode < oldDisplaymode (modalità visualizzato) )   {     oldDisplaymode (modalità visualizzato) = Displaymode;      Per (Int Un=0; Un <200;Un++)      {      CharPointers[Un] = Un;       }   }
}    Vuoto Ciclo()
{
runrealTimeClock();
Se (!BatteriaVuota)
{
 Testo a scorrimento normale (); 
 }
Se (BatteriaVuota)
{
 Testo BatteriaAvvisoScroll ();
}
ChangeDisplayMode (Modalità di visualizzazione)();
}

 

 

Carichiamo il seguente codice al nostro Arduino:Dopo aver caricato il codice, il nostro display inizia a mostrare il nome nella prima riga e nel secondo il testo di scorrimento predefinito del codice nella riga

Stringa StandardScolltext - "Inserire il proprio testo qui, che viene visualizzato come testo di scorrimento.";

definito per la visualizzazione. Inoltre, la tensione di alimentazione viene monitorata tramite il pin A2 e se un certo livello di tensione è al di sotto di un certo livello di tensione, l'avvertimento è: "Attenzione! La tensione è crollata su: x Volt." nell'output del display come estensione scrolltext. Questo dovrebbe indicare una batteria debole in un possibile scenario con il funzionamento della batteria. Se la batteria si scarica ulteriormente, il processore entrerà in modo permanente in una modalità di sospensione e verrà visualizzato il messaggio "Sys in SleepMode". Tuttavia, poiché il display è ancora attivo, la batteria si scarica ancora. Non si tratta quindi di una protezione contro lo scarico profondo, ma solo di un indizio.

Se il circuito è azionato senza batteria, la parte di codice può anche essere rimossa senza ulteriore compromissione della funzione.

 

Divertiti a ricostruire e fino alla prossima volta.

DisplaysFür arduinoProjekte für anfänger

13 Kommentare

Wolf

Wolf

Ein kleines Schaltbild wäre oft hilfreich zusätzlich zur Fritzing-Dastellung und würde Unklarheiten eventuell sofort ausräumen.
Nett wäre es auch, die Blogs als vielleicht *.pdf Datei archivierbar zu machen.
So entstände dann mit der Zeit eine tolle kleine Bibliothek mit vielen Anregungen.

Heinz

Heinz

Habe die Lösung schon gefunden: Gleiche Pinbelegung beim Nano wie beim Uno: A2, D4 bis D9. Ein Potentiometer 10k statt des festen Widerstands 4,7k ist sehr empfehlenswert.
Gruß Heinz

Heinz

Heinz

Wie sähe die Pinbelegung eines Nano V3 aus. Der läßt sich besser in der Jackentasche verstauen, wenn das Display als Namensschild am Anzug dient.
Dank und Gruß
Heinz

Heinz Andersen

Heinz Andersen

Auch ich bin darüber gefallen: Die Verdrahtung ist nicht ganz klar, Farben werden teilweise überdeckt.
Die Farben der Widerstände sind nicht eindeutig zu erkennen.
Auch finde ich auch nicht " avr/sleep.h " , als zip Version. Dieses wäre am einfachsten zur Installation in
die Bibliothek. Meine programmier Kenntnissen sind nicht besonders groß.

Ich werde demnächst einen Paketbriefkasten installieren, dieses Projekt kommt mir sehr entgegen !
MfG Heinz

Mike

Mike

Hallo Tobias,
Danke für Deine Antwort aber meine Frage war auf das Briefkasten"schild" bezogen mit den I2C Dispaly ;-) Mit dem von Dir Vorgeschlagenen kann ich leider nichts anfangen :-/ Schade.
Gruss
Mike

Jürgen

Jürgen

Hi,
die Idee ist an sich schon cool. Allerdings: wenn ich das im Briefkasten montiere, wie Temperatur-Beständig ist denn das Display? Wird der Scroll-Text dann immer noch flüssig angezeigt? Ich hätte hier sechs Briefkästen, wie günstig ist die vorgestellte Bauweise und geht es noch günstiger (ja, ich weiß, ich könnte auch selbst recherchieren. Kenn mich jedoch zu wenig aus)? Kann man die Schaltung erweitern um eine Funkmeldung, wenn Post im Kasten ist, zB. direkt an eine eMail-Adresse (zB über HomeAssistant, iobroker, oder so)?
Nur so meine Gedanken dazu!!

Frank C

Frank C

Hallo!

Ich habe Probleme mit dem Wiring… da geht Schwarz in Rot über… hmmm…
Und die oder die Widerstände gehen die von türkis nach schwarz und über rot nach schwarz? Sorry, bin nicht gerade Neuling, aber diese Grafik überfordert mich ein wenig… Einzig die oberen 6 Drähte sind klar/eindeutig.

Ist schwarz (2mal vom Uno) einmal “nur” überdeckt? Ok, vllt. wird’s dann klarer…

Und wie sind dann die beiden roten mit dem Widerstand gekoppelt?

mfg
Frank C aus D

Tobias

Tobias

Hallo Claus,
Leider ist eine Anbindung eines e-Paper Displays an einen Microcontroller – im Gegenteil -wesentlich komplexer statt einfacher , da hier u.a . Fonts seitens den uC geladen werden müssen.
Da der ESP 32 ist für diese Projektaufgabe schlicht komplett unterfordert ist , nutze ich einen der Aufgabe angepassteren uC.

Tobias

Tobias

Hallo Mike,

dein Display hat einen I2C Bus Anschluss. Du kannst es ohne Anpassung des Codes so nicht mit dem Code verwenden. Hier ist ein Projekt für dein Display: https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/i2c-scanner-mit-lc-display?ls=de

Viele Grüße

JoergSn

JoergSn

Das Ganze noch mit einem E-Ink Display und wir kommen einem Deal verdammt nahe. ;-)

Mike

Mike

Coole Idee!!!
Aber was mach ich wenn ich nen 16×2 LCD hab wo hinten ne Platine drauf ist und nur 4 Anschlussmöglchkeiten vorhanden sind (GND, VCC, SDA, SCL)?
Sorry, bin noch neu in der Materie :D

Calade

Calade

Hello,
Nice idea ! It would be wise to add a proximity sensor to lit the display only when someone is near the letterbox and a photosensor to adjust LCD intensity to ambiant light ?
Regards,

Claus

Claus

Warum nicht mit e-paper ? Mit einem ESP32 mit e-paper-Display ist das doch einfacher.

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert