Hallo, heute möchte ich ein schnell aufzubauendes Projekt vorstellen. Wir bauen uns heute ein elektronisches Namensschild mit einem 16x2 Zeichen LCD Modul und Hintergrundbeleuchtung. Dazu brauchen wir eine übersichtliche Anzahl an Teilen aus der Maker-Bastelkiste:
Teileliste:
- 1 x 16x2 LCD Display in blau oder LCD Display in grün
- 1 x Arduino UNO kompatibles Board
- 1x Widerstand 4,7 KΩ für Display Kontrast oder Potentiometer 10 KOhm
- 1x Widerstand 150 Ω für Displaybeleuchtung
Im nächsten Schritt verbinden wir die Komponenten auf einem Breadboard wie folgt, oder bauen die Schaltung direkt auf einer Lochrasterplatine zusammen:
Das Display sowie die gesamte Schaltung verbinden wir nun. Das Display sollte dabei von der eigentlichen Schaltung etwas abgesetzt werden um eine flexible Verwendung zu gewährleisten.
Das elektronische Namensschild können wir vielseitig verwenden. Wie wäre es z.B mit einem besonderen Tischnamensschild bei der nächsten betrieblichen Schulung? Oder vielleicht auch als neues Büroschild am Eingang des Büros? Als Namensschild bei einem Vortrag als Redner? Möglicherweise aber auch als Namensschild am Briefkasten? Etwa im Briefkastenschlitz hinter dem Namensschlitz:
Beim Einbau hierbei ist jedoch folgende besonderen Punkte zu achten:
-
Alle spannungsführenden oder spannungserzeugenden Teile müssen komplett wasserdicht verbaut werden. Durch Feuchtigkeit kann ansonsten unsere Schaltung zerstört werden bzw. korrodieren, was Ausfälle oder schlimmer, Kurzschlüsse zu Folge haben kann.
-
Das Display muss in der oben gezeigten Einbauweise die Öffnung und Schließung des Kastendeckels mitmachen. Dies bedeutet das hier insbesondere auf sorgfältige und geeignete Kabelverlegung und geeignete Kabelwahl zu achten ist. Das Kabel zwischen Display und Arduino muss dauerhaft die Klappenbewegungen der Postkastenklappe mitmachen. Besser ist ein Einbau an unbeweglichen Stellen wie z.B im Postkastenkorpus.
-
Es darf an jeder Stelle nur ungefährliche Schutzkleinspannung verwendet werden.
-
Bei einem Stromausfall erlischt auch die Anzeige. Damit trotzdem noch in diesem Fall klar ist wo die Post hin soll, empfiehlt es sich noch ein Ersatznamensschild anzubringen 😊
-
Die Stromversorgung ist unbedingt mit einer passenden Sicherung abzusichern.
Viele Punkte also, die den Einbau im Briefkasten schwierig machen und deshalb einem Elektrofachinstallateur überlassen werden sollten. Also vielleicht doch besser als Tischnamensschild verwenden 😉
#include <LiquidCrystal.h> #include <avr/sleep.h> //Constants & Definitions const float Warnvoltage = 4.0; const float Sleepvoltage = 3.2; const int Scrollspeed = 500; const long interval = 1000; // Definition of a Second in Milliseconds //const byte VoltTestPin = 0; // Test Analogeingang 0 const byte VoltTestPin = 2; // Produktiv Analogeingang 2 //Real Time Clock long previousMillis = 0; // will store last time was measured byte seconds = 0; byte minute = 0; byte hour = 0; // String Defitions String LetterBoxOwner = " Tobias Kuch "; // Bitte in eigenen Namen ändern ! String StandardScolltext = "Hier den eigenen Text eintragen, der als Scrolltext angezeigt wird."; //String StandardScolltext = "To bi or not to be – that is the Question !"; // Beispieltext String BattInfo; //Program logic byte CharPointers[200]; float value; int Voltage; boolean BatteryEmpty = false; byte Displaymode = 0; byte oldDisplaymode = 0; int Switchstate = 1; byte DispLATextOneTime = 0; byte DispLATextOneTimeWASDisp = 0; int cmpMsgWith = 0; int MAMsgDC = 0; byte MatC = 0; // LiquidCrystal(rs, enable, d4, d5, d6, d7); LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void InitLcdScreen () { lcd.clear(); lcd.print(LetterBoxOwner); lcd.setCursor(0,1); lcd.setCursor(0,0); delay(1000); } void setup() { for (int a=0; a <200;a++) { CharPointers[a] = a; } lcd.begin(16, 2); // start the library InitLcdScreen(); analogReference(DEFAULT); } void NormalScrolltext () { int cmpMsgWith = StandardScolltext.length()- 2; Displaymode = 0; delay (Scrollspeed); lcd.setCursor(0,1); for (int a=0; a <17;a++) { lcd.print(StandardScolltext[CharPointers[a]]); } for (int a=0; a <cmpMsgWith;a++) { CharPointers[a] = CharPointers[a] + 1; if (CharPointers[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.
15 comments
Andreas Wolter
Wir haben den Fritzing Schaltplan erneuert und dabei das Poti eingesetzt.
Ich hoffe, es ist jetzt besser zu erkennen.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Sebastian
Bitte das Wiring korrigieren. Ich habe hier auch Probleme, wie manch andere auch schon geschrieben.
Die Überlappung der Farben bei den beiden Widerständen ist unklar!
Und das bei einem Anfangertutorial… :(
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
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
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
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
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
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
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
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
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
Das Ganze noch mit einem E-Ink Display und wir kommen einem Deal verdammt nahe. ;-)
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
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
Warum nicht mit e-paper ? Mit einem ESP32 mit e-paper-Display ist das doch einfacher.