Ringer

Hierbei handelt es sich um ein Zutrittskontrollsystem im weitesten Sinne mit den Funktionen Ein- und Ausschalten der Alarmanlage, sowie abbilden der Klingel Funktion.
 

Zum Einsatz kommt ein Arduino Nano. Dieser ist mit enem NFC Shied über I2C verbunde. Die Anzeige verschiedener Informationen geschieht über ein 8x8 LED Shield (MAX7219), welches über ein SPI ähnliches protokoll kommuniziert. 

Leider waren am Installationsort nur 2 Anschlussadern vorhanden (5V, Masse). Daher erfolgt die Kommunikation mit der "restlichen" Haussteuerung über ein WLAN Modul --ESP8266-- (ist auf dem Bild nicht zu sehen, da LED Modul verdeckt). Da dieses Modul mit 3,3V arbeitet, ist auch noch ein diesbezüglicher größerer Spannungswandler notwendig (300mA Strom notwendig). Die Kühlfahne ist zwischen LED Modul und NFC Shield ansatzweis zu sehen.

Leider war es so das die im Internet vorhandenen Libraries für das LED Modul nicht benutzbar war. Die mir zur Verfügung stehende Library hatte einen viel zu hohen Speicherverbrauch (RAM). Durch definitionen wie int8_t  matrix[8][8]  sind gleich mal 64 Byte belegt, wird das dann auch noch einer Funktion übergeben (nicht per Referenz), so werden diese auch noch mal auf den Stapel gelegt.
Als Konsequenz daraus habe ich eine vollkommen neue Library geschieben (RAM ca. 15Byte). Bei dieser Gelegenheit habe ich auch noch Funktionen, wie:  Scrollen, Rotation und Zeichensatz im EPROM ablegen implementiert.

void setRotation(uint8_t grad);   //0...0,1...90,2...180,3...270
void setNumber(int8_t num);
void put(char c, uint8_t offset=0);
void print(char *msg);
void shift(uint8_t offset);

Library ESP8266

Auch bei der Library des WLAN Moduls habe ich einige Optimierungen vorgenommen (vor allem wegen des Speicherbedarfs). So wird in der original Lib, sehr sorglos mit den STRING Objecten umgegangen. Ich habe das lles auch char[] umgestellt. Ausserdem musste ich den Funktionsumfang für meine Zwecke kürzen.

void Reset();
void BeginWifiStation(...);
void BeginTcpServer();
void SendUDP(uint8_t mux, uint32_t port,char *msg);
void SendTCP(uint8_t mux, char *msg);
void Close(uint8_t mux);
uint16_t Receive(...);
int8_t GetWiFiSnr();

Wichtig beim Einsatz des ESP8266  an einer SoftSerial Schnittstelle ist, dass diese scheinbar nicht stabil mit 115200Baud umgehen kann!
Ich habe daher das Modul auf 9600 umgestellt und die Schnittstelle antürlich ebenfalls so betrieben.

 

Hardware

Beim Betrieb des NFC Shields an I2C stellte sich heraus, dass es manchmal nach einem Neustart des Arduino (Reset) zu Situationen kommt, wo das Shield "hängt". Diese Situation tritt immer dann auf, wenn das Reset wärend einer aktiven I2C Kommunikation stattfindet. Da das Shild von dem Reset nichts mitbekommt, fällt die Kommunikation auseinander".
Als Lösung dafür habe ich eine seperate Leitung von einem Arduino PIN an den Reset "Fuß" des HCOM Interfaces (oberes Bild linke Lötleiste ganz oben) "gezogen". Durch einen kurzen (50ms) Low-Impuls in der Setup Routine, wird das Modul in den Ausgangszustand versetzt. In der Folge traten solche "Hänger" nicht mehr auf.

   
© ALLROUNDER