An electronic name plate with its own scroll text

hi, today I would like to have a very quick to pitch the project. We build us today a electronic name tag with a 16x2 character LCD module and backlight. To do this, we need a clear number of Parts from the Maker-junk box:

parts list:

In the next step we will connect the components on a Breadboard as follows, or to build the circuit on a breadboard together:

Fritzing structure

 

The Display, as well as the entire circuit, we will connect now. The Display should be deducted from the actual circuit is a little to flexible use.

The electronic name tag we can use versatile. How about B with a particular table name tag at the next company training? Or maybe as a new office sign at the entrance of the office? As a name tag at a lecture as a speaker? But possibly also as a name plate on the letter box? For example in the mailbox slot behind the name slot:

example, at the letter-box

 

The installation of this, however, the following special points to pay attention to:

  1. All current-carrying or voltage-generating parts need to be completely waterproof can be mounted. Moisture can otherwise be our circuit is destroyed, or corrode, what failures, or worse, may cause short-circuits to follow.

  2. The Display must, in the above installation, the Opening and closing of the box lid way a part of it. To ensure this, the means here in particular the careful and appropriate cable routing and appropriate cable choice. The cable between the Display and the Arduino needs to permanently join the movement of the Flaps of the post-box flap. Better to have a built-in immobile Bodies, such as B in the post-box body.

  3. It may be used at any point only harmless protective low voltage.

  4. In the case of a power failure extinguishes the display. So still in this case, it is clear where the Post is, it is a good idea for a replacement name plate to install 😊

  5. The power supply with an appropriate fuse to secure.

Many of the points so that should make the installation in the letter box difficult and for that reason a skilled electrical installer left. So maybe better as a table name tag to use 😉

 

#include <LiquidCrystal.h>
#include <avr/sleep.h>
 
//Constants & Definitions
const float Warnvoltage = 4.0;
const float sleep voltage = 3.2;
const int Scrollspeed = 500;
, const long interval = 1000;    // Definition of a Second in Milliseconds

//const byte VoltTestPin = 0; // Test analog input 0
const byte VoltTestPin = 2; // Productive analog input 2,

//Real Time Clock 
long previous Millis = 0;       // will store last time what is measured
byte seconds = 0; 
, byte minute, = 0;
byte hour, = 0;

// String Defitions
String letterbox owner = " Tobias Kuch ";  // in its own name change !
String StandardScolltext = "Here is the Text of your own, enter the scrolling text appears."; 
//String StandardScolltext = "To bi or not to be – that is the Question !"; // Example text
String BattInfo;

//Program logic
byte , char pointer,[200];
float value,;
int Voltage;
boolean battery empty = false;
byte Displaymode = 0;
byte oldDisplaymode = 0;
int switch state = 1;
byte DispLATextOneTime = 0;
byte DispLATextOneTimeWASDisp = 0;
int cmpMsgWith = 0;
int MAMsgDC = 0;
byte MatC = 0; 

// LiquidCrystal(rs, enable, d4, d5, d6, d7);
Liquid crystal lcd(8, 9, 4, 5, 6, 7);

void init LCDscreen ()
{
lcd.clear();
lcd.print(letterbox owner);
lcd.setCursor(0,1);
lcd.setCursor(0,0);
delay(1000);
}

void setup()       {      for (int a=0; a <200;a++)      {      char pointer[a] = a;       }      lcd.begin(16, 2);              // start the library      init LCDscreen();      analog reference(DEFAULT);
}

void normal scrolling text ()
{
 int cmpMsgWith = StandardScolltext.length()- 2;
 Displaymode = 0;
 delay, (scroll speed);
 lcd.setCursor(0,1);
 for (int a=0; a <17;a++)      {      lcd.print(StandardScolltext[char pointer[a]]);      }      for (int a=0; a <cmpMsgWith;a++)      {      char pointer[a,] = char pointer[a] + 1;       if (char pointer[a] > cmpMsgWith) {CharPointers[a] = 0; }      }   }

void BatteryWarningScrolltext ()
{
 BattInfo = "- Achtung! Spannung eingebrochen auf:  " + String(Voltage * 3) + " Volt. - " + StandardScolltext + "  ";
 int cmpMsgWith = BattInfo.length()- 2;
 Displaymode = 2;
 delay (Scrollspeed /2 );
 lcd.setCursor(0,1);
 for (int a=0; a <17;a++)      {      lcd.print(BattInfo[CharPointers[a]]);      }      for (int a=0; a <cmpMsgWith;a++)      {      CharPointers[a] = CharPointers[a] + 1;       if (CharPointers[a] > cmpMsgWith) {CharPointers[a] = 0; }      }   }

void Powerdown ()  // Toggle Powerdown, if critical Voltage is reached.
{
 lcd.setCursor(0,1);
 lcd.print("                  ");
 lcd.setCursor(0,1);
 lcd.print("Sys in SleepMode ");
 set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 cli();
 sleep_enable();
 sei();
 sleep_cpu();
 //restart
}

boolean BattWarning ()
{     value = analogRead(VoltTestPin);    // read the input pin   value = value  * 0.00488;    if (value <= Sleepvoltage) {   Voltage = value;   Powerdown();   }    if (value <= Warnvoltage) {   Voltage = value;     return true;    }    {   return false;   }   }

void runrealTimeClock()
{   // Real Time Clock & Countdown
unsigned long currentMillis = millis();   if(currentMillis - previousMillis > interval)   {      previousMillis = currentMillis;
// Countdown    
// Countup 24 St Hr.      seconds = seconds+1;      if (seconds > 59)       {           seconds = 0;           minute=minute+1;                    BatteryEmpty = BattWarning ();           if (minute > 59)           {            minute =0;            if (MatC > 1) { MatC --;} //Anzeige der des Nachricht Symbols             hour=hour + 1;                     }            if (hour > 23)           {            hour = 0;           }       }       }
}

void ChangeDisplayMode()
{   if ( Displaymode > oldDisplaymode )   {     oldDisplaymode = Displaymode;      for (int a=0; a <200;a++)      {      CharPointers[a] = a;       }   }     if ( Displaymode < oldDisplaymode )   {     oldDisplaymode = Displaymode;      for (int a=0; a <200;a++)      {      CharPointers[a] = a;       }   }
}    void loop()
{
runrealTimeClock();
if (!BatteryEmpty)
{
 NormalScrolltext (); 
 }
if (BatteryEmpty)
{
 BatteryWarningScrolltext ();
}
ChangeDisplayMode();
}

 

 

Wir laden folgenden Code auf unseren Arduino hoch:Nach Hochladen des Codes fängt unser Display direkt an, in der ersten Zeile den Namen zu zeigen und in der zweiten den vorgegebenen Scroll Text der im Code in der Zeile

String StandardScolltext = "Hier den eigenen Text eintragen, der als Scrolltext angezeigt wird.";

definiert wurde, anzuzeigen. Zusätzlich dazu wird die Versorgungsspannung über den Pin A2 überwacht und bei unterschreiten eines bestimmten Spannungslevels die Warnung: „Achtung! Spannung eingebrochen auf: x Volt.“ im Display als Scrolltext Erweiterung ausgegeben. Dies soll in einem möglichen Szenario mit Batteriebetrieb auf eine schwache Batterie hinweisen. Wenn sich die Batterie dann noch weiter entlädt, geht der Prozessor in diesem Fall dauerhaft in einen Schlafmodus und die Meldung: „Sys in SleepMode“ wird angezeigt. Da das Display aber noch aktiv ist, entlädt sich die Batterie aber dennoch weiterhin. Dies ist also kein Schutz vor einer Tiefentladung, sondern nur ein Hinweis.

Falls die Schaltung ohne Batterie betrieben wird, kann der Code Teil ohne weitere Beeinträchtigung der Funktion auch entfernt werden.

 

Viel Spaß beim Nachbauen und bis zum nächsten Mal.

DisplaysFor arduinoProjects for beginners

13 comments

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.

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. Install ESP32 now from the board manager
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP programming via WLAN