Extensión para placa de identificación electrónica

En mi último Blog en he presentado una placa con el nombre con Scroll propio al texto, un empleo posible es un letrero de castas de carta. Sin embargo encuentro que nuestro display con un anuncio del nombre y Scroll sólo del texto como letrero de castas de carta algo subexige en las posibilidades es. ¿Cómo esto sería, por eso, si nuestro display indicaría también si de las castas de carta era abierto antes por el cartero? Así podemos mirar por así decir directamente „a una mirada“ si esto es rentable abrir a las castas de carta o no.

Con eso tenemos que ampliar nuestro código sólo algo y efectuar un cambio pequeño y respectivamente una ampliación en el circuito. Además necesitamos un microinterruptor como portero.

Principio funcional:

Añadimos Microtaster que es demasiado oprimido por la válvula de castas de carta en el estado normal „“ y cierra por lo tanto el contacto. Si la válvula de castas de carta es abierta ahora, se abre brevemente también de Drucktaster y da un telún impulso a nuestro microcontroller, él esta señal „como Esto una carta era interpretada de modo roto“.

Dibujo castas de carta con el interruptor

En el display este símbolo de carta es indicado después para 12 horas:

Símbolo de la carta

Mediante este símbolo se puede reconocer enseguida si una carta era rota.

El circuito debe ser ampliado con eso en Taster (portero).


Aquí el plan de cambio necesario y respectivamente ampliado:

Plan de cambio ampliado

Cargamos en lo alto el código folgendne en nuestro Arduino:

 

#include <LiquidCrystal.h>
#include <avr/sleep.h>

//port 10 porteros

//Constants & Definitions
const float Warnvoltage = 4.0;
const float Sleepvoltage = 3.2;
const int Scrollspeed = 700;
const long interval = 1000;    //Definición of a Second en Milliseconds

//const el byte de VoltTestPin = 0;//la prueba la entrada análoga 0
const byte VoltTestPin = 2; //Productivamente Alalogeingang 2

//Realmente Time Clock
long previousMillis = 0;       //ve molesta leía time que measured
byte seconds = 0;
byte minuto = 0;
byte hour = 0;

//Bramante Defitions
Bramante LetterBoxOwner = " Tobias Kuch";  //¡Por favor, en el nombre propio cambian!
Bramante StandardScolltext = "No rompen, por favor, ninguna publicidad y ningunos periódicos gratuitos. ¡Gracias! -";
Bramante LetterArrivedScolltext = "Muchas gracias para la entrega del envío postal. El receptor es avisado.";
Bramante BattInfo;

//Propesar logic
byte CharPointers[200];
float value;
int Voltage;
boolean BatteryEmpty = false;
boolean IsSensorActive = false; //¡En Reset High reconocido la señal (Geöffnneter el interruptor no se hace de modo no hecho caso), si ningún interruptor desde el principio! exisiert (Mucho tiempo HighPegel)
byte Moda de display = 0;
byte oldDisplaymode = 0;
boolean MailAlreadyDelivered = false;
int Switchstate = 1;
byte DispLATextOneTime = 0;
byte DispLATextOneTimeWASDisp = 0;
int cmpMsgWith = 0;
int MAMsgDC = 0;
byte MatC = 0;     //12 horas de anuncio de los símbolos "la nueva noticia"

byte newChar[8] = {   0b11111,   0b10011,   0b10101,   0b11001,   0b11001,   0b10101,   0b10011,   0b11111
};

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

void InitLcdScreen ()
{   lcd.clear();   lcd.cursor de juego(0, 0);   lcd.print("Letterbox");   lcd.cursor de juego(0, 1);   lcd.print("tobias.kuch at");   delay(2000);   lcd.cursor de juego(0, 0);   lcd.print(LetterBoxOwner);   lcd.cursor de juego(0, 1);   lcd.print("googlemail.com");   delay(3000);
}

void Setup()
{   for (int a = 0; a < 200; a++)   {     CharPointers[a] = a;   }   lcd.createChar(0, newChar);   lcd.begin(16, 2);              //salida the library   pinMode(10, INPUT_PULLUP);             //for new el mail arrival el Detection LOW: Válvula a HIGH: funciona abiertamente   Switchstate = digitalRead(10);   InitLcdScreen();   analogReference(DEFAULT);   if (!Switchstate) {     IsSensorActive = true;   }
}



void NormalScrolltext ()
{   int cmpMsgWith = StandardScolltext.length() - 2;   Moda de display = 0;   delay (Scrollspeed);   lcd.cursor de juego(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 = "- ¡la estima! Tensión de pila:" + Bramante(Voltage * 3) + " El voltio. Cargan, por favor, el acumulador. -" + StandardScolltext + "  ";   int cmpMsgWith = BattInfo.length() - 2;   Moda de display = 2;   delay (Scrollspeed / 2 );   lcd.cursor de juego(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 LetterArrScrolltext ()
{   int cmpMsgWith = LetterArrivedScolltext.length() - 2;   Moda de display = 3;   delay (Scrollspeed - 50 );   lcd.cursor de juego(0, 1);   for (int a = 0; a < 17; a++)   {     lcd.print(LetterArrivedScolltext[CharPointers[a]]);   }   for (int a = 0; a < cmpMsgWith; a++)   {     CharPointers[a] = CharPointers[a] + 1;     if (CharPointers[a] > cmpMsgWith)     {       CharPointers[a] = 0;       DispLATextOneTimeWASDisp = 1;     }   }
}

void Powerdown ()  //Toggle Powerdown, if critical Voltage is reached.
{   lcd.cursor de juego(0, 1);   lcd.print("                  ");   lcd.cursor de juego(0, 1);   lcd.print("Sys en SleepMode");   set_sleep_mode(SLEEP_MODE_PWR_DOWN);   cli();   sleep_enable();   fue();   sleep_cpu();   //tipo de resto
}

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

void runrealTimeClock()
{   //Realmente Time Clock & cuenta atrás   unsigned long currentMillis = millis();   if (currentMillis - previousMillis > interval)   {     previousMillis = currentMillis;     //Cuenta atrás     //Countup 24 San Hr.     seconds = seconds + 1;     if (seconds > 59)     {       seconds = 0;       minuto = minuto + 1;       BatteryEmpty = BattWarning ();       if (minuto > 59)       {         minuto = 0;         if (MatC > 1) {           MatC --; //Anuncio de la noticia del símbolo         }         hour = hour + 1;       }       if (hour > 23)       {         hour = 0;       }     }   }
}

void ChangeDisplayMode()
{   if ( Moda de display > oldDisplaymode )   {     oldDisplaymode = Moda de display;     for (int a = 0; a < 200; a++)     {       CharPointers[a] = a;     }   }   if ( Moda de display < oldDisplaymode )   {     oldDisplaymode = Moda de display;     for (int a = 0; a < 200; a++)     {       CharPointers[a] = a;     }   }
}

void DisplayMailArrivedSig(boolean trzstat)
{   byte custHeartChar = 0;   if (trzstat)   {     lcd.cursor de juego(15, 0);     lcd.write(custHeartChar);   } else   {     lcd.cursor de juego(15, 0);     lcd.write(" ");   }
}

void NewLetterArrivedCheck()
{   int inPin = 10;   Switchstate = digitalRead(inPin);   //¡if (Switchstate &&! MailAlreadyDelivered)   if (Switchstate == true )   {     MailAlreadyDelivered = true;     DisplayMailArrivedSig(true);     MatC = 11;  //Mail Arrived el indicador de tiempo (citación)     //MAMsgDC = LetterArrivedScolltext.length ();     DispLATextOneTime = 1;   }   if (MatC == 1)   {     DisplayMailArrivedSig(false);     MailAlreadyDelivered = false;     MatC = 0;     DispLATextOneTime = 0;     DispLATextOneTimeWASDisp = 0;   }
}

void loop()
{   runrealTimeClock();   if (!BatteryEmpty)   {     if ( DispLATextOneTime == 1 && DispLATextOneTimeWASDisp == 0)     {       LetterArrScrolltext ();     }     else     {       NormalScrolltext ();     }   }   if (BatteryEmpty)   {     BatteryWarningScrolltext ();   }   ChangeDisplayMode();   if  (IsSensorActive) {     NewLetterArrivedCheck();  //prueba if a new letter que arrived if así, marco//it en el display for next 12 Hours   }
}


 

De estos y otros proyectos de mí encuentras también en mis nuevos GitHub Lado.

Mucha diversión copiando y hasta la vez cercana.

DisplaysFür arduinoProjekte für fortgeschrittene

3 comentarios

KoPP

KoPP

Nette Menschen könnten auch noch ein “Danke lieber Briefträger” ausgeben.

Flo

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

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”.

Deja un comentario

Todos los comentarios son moderados antes de ser publicados