In mijn laatste Blog waarin ik heb een naambordje met zijn eigen Tekst gepresenteerd wordt een eventuele aanvraag voor een brievenbus plaat. Ik vind echter dat we onze Weergave gesprekken voor een weergave van de Naam en de tekst alleen als een letter box teken iets in de opties. Hoe zou het worden, dus als het Display zou er ook op wijzen als de letter box aangeboden door de Brief voordat het werd geopend? Zoals we kunnen zien, om zo te spreken, direct "in een oogopslag", of het is de moeite waard de brievenbus open is of niet.
Om dit te doen, moeten we breiden onze Code slechts een kleine en een kleine wijziging of een uitbreiding in de kring. Daarnaast moeten we een micro-schakelaar normaal open.
Principe van de functie:
We voegen een micro-switch toe te voegen aan via de brievenbus klep in de normale toestand "te" naar beneden wordt gedrukt en zo het contact sluit. Nu moet u de mailbox opent de deur wordt geopend, wordt de drukknop kort en geven een impuls aan onze Microcontroller, die interpreteert dit Signaal: 'Het was gegooid in een brief".
Het Scherm wordt dan voor 12 uur dit is een brief pictogram:
met dit Pictogram kunt u direct te herkennen als een letter wordt gegooid, dat was het.
Het circuit is uitgebreid met een druk op de knop (normaal open) op.
Hier worden de vereiste en geavanceerde switching plan:
We laden de volgende Code op onze Arduino, hoog:
#include <LiquidCrystal.h> #include <avr/slaap.h> // de haven-10 N. O. //Constanten en Definities const float Warnvoltage = 4.0; const float slaap spanning = 3.2; const int Scrollspeed = 700; , const lange interval = 1000; // Definitie van een Tweede in Milliseconden //const byte VoltTestPin = 0; // Test analoge ingang 0 const byte VoltTestPin = 2; // Productieve Alalogeingang 2 //Real-Time Klok lang vorige Millis = 0; // slaan de laatste tijd wat wordt gemeten byte seconden = 0; , byte minuten, = 0; byte uur = 0; // String Defitions String brievenbus eigenaar = " Tobias Kuch "; // in eigen naam veranderen ! String StandardScolltext = "Alsjeblieft, geen reclame en geen gratis Kranten en gooi het in. Dank u ! - "; String LetterArrivedScolltext = "Veel dank voor de levering van de mailpiece. De ontvanger krijgt. "; String BattInfo; //Programma-logica byte , char pointer,[200]; float waarde,; int Spanning; boolean batterij leeg = valse; boolean IsSensorActive = false; // Wanneer een Reset wordt gedetecteerd Hoog Signaal (Geöffnneter schakeloptie wordt Genegeerd), als er geen schakelaar van de start ! bestaan (Permanent hoog niveau) byte Displaymode = 0; byte oldDisplaymode = 0; boolean - mail als het reeds geleverde = valse; int schakelaar staat = 1; byte DispLATextOneTime = 0; byte DispLATextOneTimeWASDisp = 0; int cmpMsgWith = 0; int MAMsgDC = 0; byte MatC = 0; // 12 uur weergave van de pictogrammen op "Nieuw bericht" byte newChar[8] = { 0b11111, 0b10011, 0b10101, 0b11001, 0b11001, 0b10101, 0b10011, 0b11111 }; // LiquidCrystal(rs, inschakelen, d4, d5, d6, d7); Liquid crystal lcd -(8, 9, 4, 5, 6, 7); void init LCDscreen () { lcd -.duidelijk(); lcd -.setCursor(0, 0); lcd -.print("++ Brievenbus ++ "); lcd -.setCursor(0, 1); lcd -.print(" tobias.kuch bij"); vertraging(2000); lcd.setCursor(0, 0); lcd -.print(brievenbus eigenaar); lcd.setCursor(0, 1); lcd -.print(" googlemail.com "); vertraging(3000); } void setup() { voor (int een = 0; een < 200; een++) { char pointer[een] = een; } lcd -.maken char(0, newChar); lcd -.beginnen(16, 2); // start de bibliotheek pinMode(10, INPUT_PULLUP); // nieuwe e-Mail aankomst Detectie LAAG: flap-naar-HOOG: deur open schakelaar staat = digitaal lezen(10); init LCDscreen(); analoge referentie(STANDAARD); als (!schakelaar staat) { IsSensorActive = ware; } } leegte normale scrolling tekst () { int cmpMsgWith = StandardScolltext.lengte() - 2; Displaymode = 0; vertraging, (scroll-snelheid); lcd.setCursor(0, 1); voor (int een = 0; een < 17; een++) { lcd -.print(StandardScolltext[char pointer[een]]); } voor (int een = 0; een < cmpMsgWith; een++) { char pointer[a,] = char pointer[een] + 1; als (char pointer[een] > cmpMsgWith) { char wijzers[van een] = 0; } } } nietig batterij waarschuwing, scrollende tekst () { BattInfo = "- Achtung! Batteriespannung: " + String(Spanning * 3) + " Volt. Please Akku aufladen. - " + StandardScolltext + " "; int cmpMsgWith = BattInfo.lengte() - 2; Displaymode = 2; vertraging (Scrollspeed / 2 ); lcd.setCursor(0, 1); voor (int een = 0; een < 17; een++) { lcd -.print(BattInfo[CharPointers[een]]); } voor (int een = 0; een < cmpMsgWith; een++) { CharPointers[een] = CharPointers[een] + 1; als (CharPointers[een] > cmpMsgWith) { CharPointers[een] = 0; } } } ongeldig LetterArrScrolltext () { int cmpMsgWith = LetterArrivedScolltext.lengte() - 2; Displaymode = 3; vertraging (Scrollspeed - 50 ); lcd.setCursor(0, 1); voor (int een = 0; een < 17; een++) { lcd -.print(LetterArrivedScolltext[CharPointers[een]]); } voor (int een = 0; een < cmpMsgWith; een++) { CharPointers[een] = CharPointers[een] + 1; als (CharPointers[een] > cmpMsgWith) { CharPointers[een] = 0; DispLATextOneTimeWASDisp = 1; } } } void Powerdown () // Toggle Ingreep, als kritische Spanning is bereikt. { 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(); //start } boolean BattWarning () { waarde = analogRead(VoltTestPin); // lees de input pin - waarde = waarde * 0.00488; als (waarde <= Sleepvoltage) { Spanning = waarde; Powerdown(); } als (waarde <= Warnvoltage) { Spanning = value; return true; } { return false; } } void runrealTimeClock() { // Real Time Clock & Aftellen unsigned long currentMillis = millis(); als (currentMillis - previousMillis > interval) { previousMillis = currentMillis; // Countdown // Countup 24 St Hr. seconden = seconden + 1; als (seconden > 59) { seconds = 0; minute = minuut + 1; BatteryEmpty = BattWarning (); indien (minuten > 59) { minuten = 0; als (MatC > 1) { MatC --; //Anzeige der des Nachricht Symbolen } uur = uur per dag + 1; } als (uur > 23) { uur = 0; } } } } void ChangeDisplayMode() { als ( Displaymode > oldDisplaymode ) { oldDisplaymode = Displaymode; voor (int een = 0; een < 200; een++) { CharPointers[een] = een; } } als ( Displaymode < oldDisplaymode ) { oldDisplaymode = Displaymode; voor (int een = 0; een < 200; een++) { CharPointers[een] = een; } } } ongeldig DisplayMailArrivedSig(boolean trzstat) { byte custHeartChar = 0; als (trzstat) { lcd.setCursor(15, 0); lcd.schrijven(custHeartChar); } anders { lcd -.setCursor(15, 0); lcd.schrijven(" "); } } void NewLetterArrivedCheck() { int inPin = 10; Switchstate = digitalRead(inPin); // if (Switchstate && !MailAlreadyDelivered) als (Switchstate == ware ) { MailAlreadyDelivered = ware; DisplayMailArrivedSig(ware); MatC = 11; // Mail Aangekomen Zeitanzeiger (Vorladung) // MAMsgDC = LetterArrivedScolltext.lengte(); DispLATextOneTime = 1; } als (MatC == 1) { DisplayMailArrivedSig(valse); MailAlreadyDelivered = valse; MatC = 0; DispLATextOneTime = 0; DispLATextOneTimeWASDisp = 0; } } void loop() { runrealTimeClock(); als (!BatteryEmpty) { als ( DispLATextOneTime == 1 && DispLATextOneTimeWASDisp == 0) { LetterArrScrolltext (); } anders { NormalScrolltext (); } } als (BatteryEmpty) { BatteryWarningScrolltext (); } ChangeDisplayMode(); als (IsSensorActive) { NewLetterArrivedCheck(); // test of een nieuwe brief was aangekomen als dat zo is, mark //in het Display voor de volgende 12 Uur } }
Dieses und andere Projekte von mir vinden zult du auch auf meiner neuen GitHub Pagina.
Viel Spaß beim Nachbauen und bis zum nächsten Mal.
3 Reacties
KoPP
Nette Menschen könnten auch noch ein “Danke lieber Briefträger” ausgeben.
Flo
Gute Idee, aber ich werde das noch etwas erweitern:
Wenn wir noch einen zweiten Mikroschalter einsetzen um die “Entnahmeklappe/Briefkastentür” zu überwachen, kann man damit das Briefsymbol wieder löschen und es öffnen nicht alle Bewohner den Kasten, wenn sie nach Hause kommen. Wir vermeiden so die “Enttäuschung” der zweiten und dritten Heimkehrer…
Viele Grüße Flo
Arnold Schommer
Den Brief einfach fix für 12 Stunden anzuzeigen ist eine pragmatische, einfache und damit wenig fehlerträchtige Lösung.
Ich hätte vielleicht einen Taster eingeplant, mit dem die Anzeige dann gelöscht wird. Sei es, dass man den zweiten Taster beim Entnehmen des Briefes drückt oder dass er – wenn das “baulich” geht – das Öffnen des Briefkastens “erkennt”. Aber dabei kann halt einiges “schief gehen”.