Inhaltsverzeichnis:

Arduino basierte GSM / SMS-Fernbedienung - Gunook
Arduino basierte GSM / SMS-Fernbedienung - Gunook

Video: Arduino basierte GSM / SMS-Fernbedienung - Gunook

Video: Arduino basierte GSM / SMS-Fernbedienung - Gunook
Video: SMS versand mit einem GSM-Modul [German/Deutsch] 2024, November
Anonim
Arduino-basierte GSM/SMS-Fernbedienung
Arduino-basierte GSM/SMS-Fernbedienung

! ! ! NOTIZ !

Da der lokale Mobilfunkmast in meiner Nähe aufgerüstet wird, kann ich dieses GSM-Modul nicht mehr verwenden. Der neuere Tower unterstützt keine 2G-Geräte mehr. Daher kann ich dieses Projekt nicht mehr unterstützen.

Bei einer so großen Auswahl an GSM-Modulen für den Bastler haben die meisten von uns aufgehört, eines zu kaufen. Ich habe lokal ein SIM800L-Modul gekauft und am Ende mit den verschiedenen Befehlen des Moduls gespielt.

Mit dem Arduino Uno und der Arduino IDE konnte ich meine Ideen in die Realität umsetzen. Dies war nicht einfach, da das EINZIGE GRÖSSTE PROBLEM die Beschränkung von nur 2 KB SRAM war. Nach vielen Recherchen im Internet und verschiedenen Foren konnte ich diese Einschränkung überwinden.

Verschiedene Programmiertechniken, ein viel besseres Verständnis des Arduino-Compilers und die Verwendung der SIM-Karte und des EEPROM für zusätzlichen Speicher haben dieses Projekt gerettet. Nach einigen Änderungen am Code wurde ein stabiler Prototyp gebaut und über einen Zeitraum von einer Woche getestet.

Ein Nachteil des begrenzten SRAM war, dass das Gerät nicht mit einem Display und Benutzertasten ausgestattet werden konnte. Dies führte zu einer kompletten Neufassung des Codes. Ohne Benutzeroberfläche blieb die einzige Möglichkeit, das Projekt fortzusetzen, die Verwendung von SMS-Nachrichten zur Konfiguration des Geräts und der Benutzer.

Dies erwies sich als ein spannendes Projekt, und im Laufe der Entwicklung kamen weitere Futures hinzu.

Mein Hauptziel war es, beim Arduino Uno oder in diesem Fall beim ATMEGA328p zu bleiben und keine SMD-Komponenten zu verwenden. Dadurch wird es für die breite Öffentlichkeit einfacher, die Einheit zu kopieren und zu bauen.

Spezifikation des Geräts:

  • Am Gerät können maximal 250 Benutzer programmiert werden
  • Vier digitale Ausgänge
  • Vier digitale Eingänge
  • Jeder Ausgang kann als PULSE- oder ON/OFF-Ausgang konfiguriert werden
  • Ausgangsimpulsdauer einstellbar zwischen 0,5.. 10 Sekunden
  • Jeder Eingang kann so konfiguriert werden, dass er bei Änderungen von AUS zu EIN ausgelöst wird.
  • Jeder Eingang kann so konfiguriert werden, dass er bei Änderungen von EIN zu AUS ausgelöst wird
  • Jede Eingangsverzögerungszeit kann zwischen 0 Sekunden und 1 Stunde eingestellt werden
  • SMS-Nachrichten für Änderungen an den Eingängen können an 5 verschiedene Benutzer gesendet werden
  • Namen und Statustext für jeden Eingang können vom Benutzer festgelegt werden
  • Namen und Statustext für jeden Ausgang können vom Benutzer eingestellt werden
  • Das Gerät kann so konfiguriert werden, dass es Meldungen zum SIM-Kartensaldo über USSD-Nachrichten empfängt.
  • Alle Benutzer können E/A-Statusaktualisierungen des Geräts anfordern
  • Alle Benutzer können einzelne Ausgänge über SMS-Nachrichten steuern
  • Jeder Benutzer kann einzelne Ausgänge steuern, indem er das Gerät anruft

Sicherheitsvorrichtungen

  • Die Ersteinrichtung des Geräts kann nur am Gerät vorgenommen werden.
  • Die Ersteinrichtung kann nur vom MASTER USER durchgeführt werden
  • Befehle für die Ersteinrichtung werden nach zehn Minuten automatisch deaktiviert.
  • Nur Anrufe und SMS von bekannten Benutzern können das Gerät steuern
  • Benutzer können nur die ihnen vom MASTER USER zugewiesenen Ausgänge bedienen

Andere Eigenschaften

  • Anrufe zu diesem Gerät sind kostenlos, da der Anruf nie beantwortet wird.
  • Wenn das Gerät angerufen wird, wird der Anruf erst nach 2 Sekunden abgebrochen. Dies ist eine Bestätigung für den Anrufer, dass das Gerät auf den Anruf reagiert hat.
  • Wenn der SIM-Karten-Dienstanbieter USSD-Nachrichten unterstützt, können Guthabenabfragen durch den MASTER USER erfolgen. Die USSD-Nachricht mit dem Saldo wird dann an den MASTER USER weitergeleitet.

Schritt 1: Stromversorgung

Energieversorgung
Energieversorgung

Damit das Gerät an Standard-Sicherheitssysteme (Alarmanlagen, elektrische Garagentore, elektrische Tormotoren) angeschlossen werden kann, wird das Gerät mit 12 V DC gespeist, die normalerweise bei solchen Systemen zur Verfügung stehen.

Die Stromversorgung erfolgt an den Klemmen 12V IN und 0V und ist durch eine 1A-Sicherung geschützt. Zusätzliche 12V OUT-Anschlüsse sind verfügbar und werden ebenfalls durch die Sicherung geschützt.

Die Diode D1 schützt das Gerät gegen Verpolung von Anschlüssen auf den 12V-Leitungen.

Die Kondensatoren C1 und C2 filtern jegliches Rauschen auf den 12-V-Versorgungsleitungen heraus. Die 12-V-Versorgung wird verwendet, um die Relais des Geräts zu versorgen.

Die 5V-Versorgung besteht aus einem LM7805L-Spannungsregler und gibt stabile +5V aus, die für das SIM800L GSM-Modul sowie den Mikroprozessor benötigt werden. Die Kondensatoren C3 und C4 filtern jegliches Rauschen heraus, das auf der +5V-Versorgungsleitung vorhanden sein könnte. Es wurden relativ große Elektrolytkondensatoren verwendet, da das SIM800L GSM-Modul beim Senden ziemlich viel Strom verbraucht.

Am Spannungsregler ist kein Kühlkörper erforderlich.

Schritt 2: Digitale Eingänge

Digitale Eingänge
Digitale Eingänge
Digitale Eingänge
Digitale Eingänge

Die digitalen Eingangssignale sind alle 12V und müssen mit dem 5V-Mikrocontroller verbunden werden. Dazu werden Optokoppler verwendet, um die 12V-Signale vom 5V-System zu trennen.

Der 1K Eingangswiderstand begrenzt den Eingangsstrom zum Optokoppler auf ca. 10mA.

Aus Platzgründen war auf der Platine kein Platz für 5V Pullup-Widerstände vorhanden. Der Mikrocontroller ist so eingerichtet, dass er schwache Pullups der Eingangspins ermöglicht.

Ohne Signal am Eingang (LOW) des Optokopplers fließt kein Strom durch die Optokoppler-LED. Damit ist der Optokoppler-Transistor ausgeschaltet. Der schwache Pull-Up des Mikrocontrollers zieht den Kollektor auf fast 5 V und wird vom Mikrocontroller als logisches HIGH angesehen.

Wenn 12 V (HIGH) an den Eingang des Optokopplers angelegt werden, fließen etwa 10 mA durch die Optokoppler-LED. Somit wird der Optokopplertransistor eingeschaltet. Dadurch wird der Kollektor auf fast 0 V heruntergezogen und vom Mikrocontroller als logisch LOW betrachtet.

Beachten Sie, dass der vom Mikrocontroller gesehene Eingang im Vergleich zum 12-V-Eingang invertiert ist.

Normaler Code zum Lesen des Eingangspins sieht wie folgt aus:

boolescher Input = digitalRead (Eingangspin);

Um das invertierte Signal zu korrigieren, verwenden Sie den folgenden Code:

boolescher Input = !digitalRead(inputpin); // Beachten Sie das ! vor dem lesen

Jetzt entspricht der vom Mikrocontroller gesehene Eingang dem Eingang am 12-V-Eingang.

Der letzte Eingangskreis besteht aus 4 digitalen Eingängen. Jeder Eingang ist mit Klemmen auf der Leiterplatte verbunden.

Schritt 3: Digitale Ausgänge

Digitale Ausgänge
Digitale Ausgänge
Digitale Ausgänge
Digitale Ausgänge
Digitale Ausgänge
Digitale Ausgänge

Normalerweise ist es bei einer Schaltung, die nur eine minimale Anzahl von Relais ansteuert, am besten, eine Transistortreiberschaltung wie gezeigt zu verwenden. Es ist einfach, kostengünstig und effektiv.

Die Widerstände bieten Pull-Down auf Masse und eine Begrenzung des Transistorbasisstroms. Der Transistor wird verwendet, um den Strom zu erhöhen, der zum Ansteuern eines Relais verfügbar ist. Mit nur 1 mA vom Mikrocontroller-Pin kann der Transistor eine Last von 100 mA schalten. Mehr als genug für die meisten Relaistypen. Die Diode ist eine Rücklaufdiode, die den Stromkreis während des Relaisschaltens vor Hochspannungsspitzen schützt. Der zusätzliche Vorteil dieser Schaltung besteht darin, dass die Betriebsspannung des Relais von der Spannung des Mikrocontrollers abweichen kann. Anstelle eines 5V-Relais kann man also jede Gleichspannung von bis zu 48V verwenden.

Vorstellung des ULN2803

Je mehr Relais ein Projekt benötigt, desto höher ist die Komponentenanzahl. Dies erschwert das PCB-Design und kann wertvollen PCB-Platz verbrauchen. Die Verwendung eines Transistor-Arrays wie des ULN2803 wird jedoch definitiv dazu beitragen, die PCB-Größe klein zu halten. Der ULN2803 ist ideal geeignet für 3,3-V- und 5-V-Eingänge von einem Mikrocontroller und kann Relais bis zu 48 V DC ansteuern. Dieser ULN2803 verfügt über 8 einzelne Transistorschaltungen, wobei jede Schaltung mit allen Komponenten ausgestattet ist, die zum Schalten eines Relais erforderlich sind.

Der letzte Ausgangskreis besteht aus einem ULN3803, der 4 12-V-DC-Ausgangsrelais ansteuert. Jeder Kontakt des Relais ist an den Anschlüssen der Platine verfügbar.

Schritt 4: Mikrocontroller-Oszillator

Mikrocontroller-Oszillator
Mikrocontroller-Oszillator
Mikrocontroller-Oszillator
Mikrocontroller-Oszillator
Mikrocontroller-Oszillator
Mikrocontroller-Oszillator

Oszillatorschaltung

Der Mikrocontroller benötigt einen Oszillator, um richtig zu funktionieren. Um das Arduino Uno-Design beizubehalten, verwendet die Schaltung den standardmäßigen 16-MHz-Oszillator. Zwei Optionen stehen zur Verfügung:

Kristall

Diese Methode verwendet einen Quarz, der mit zwei Ladekondensatoren verbunden ist. Dies ist die häufigste Option.

Resonator

Ein Resonator besteht im Wesentlichen aus einem Quarz und zwei Ladekondensatoren in einem einzigen 3-Pin-Gehäuse. Dies reduziert die Anzahl der Komponenten und erhöht den verfügbaren Platz auf der PC-Platine.

Um die Komponentenanzahl so gering wie möglich zu halten, habe ich mich für einen 16MHz-Resonator entschieden.

Schritt 5: Anzeige-LEDs

Anzeige-LEDs
Anzeige-LEDs
Anzeige-LEDs
Anzeige-LEDs

Was wäre eine Schaltung ohne LEDs? Auf der Platine wurden 3mm LEDs vorgesehen.

1K-Widerstände werden verwendet, um den Strom durch die LED auf weniger als 5 mA zu begrenzen. Bei Verwendung von 3 mm High-Bright-LEDs ist die Helligkeit hervorragend.

Zur einfachen Interpretation der Status-LEDs werden zwei Farben verwendet. Durch die Kombination der beiden LEDs mit blinkenden Anzeigen können aus nur zwei LEDs viele Informationen gewonnen werden.

Rote LED

Die rote LED wird verwendet, um Fehlerzustände, lange Verzögerungen und eventuelle falsche Befehle anzuzeigen.

Grüne LED

Die grüne LED wird verwendet, um fehlerfreie und/oder korrekte Eingaben und Befehle anzuzeigen.

Schritt 6: Mikroprozessor-Reset-Schaltung

Mikroprozessor-Reset-Schaltung
Mikroprozessor-Reset-Schaltung

Aus Sicherheitsgründen stehen einige Funktionen des Gerätes nur in den ersten 10 Minuten nach dem Einschalten des Gerätes zur Verfügung.

Mit einer Reset-Taste muss die Stromversorgung des Geräts nicht ausgeschaltet werden, um das Gerät zurückzusetzen.

Wie es funktioniert

Der 10K-Widerstand hält die RESET-Leitung nahe bei 5V. Wenn die Taste gedrückt wird, wird die RESET-Leitung auf 0 V gezogen, wodurch der Mikrocontroller im Reset gehalten wird. Wenn die Taste losgelassen wird, kehrt die RESET-Leitung zu %v zurück, wodurch der Mikrocontroller zurückgesetzt wird.

Schritt 7: SIM800L-Modul

SIM800L-Modul
SIM800L-Modul
SIM800L-Modul
SIM800L-Modul
SIM800L-Modul
SIM800L-Modul

Herzstück des Gerätes ist das GSM-Modul SIM800L. Dieses Modul verwendet nur 3 I/O-Pins am Mikrocontroller.

Das Modul ist über eine standardmäßige serielle Schnittstelle mit dem Mikrocontroller verbunden.

  • Alle Befehle an das Gerät werden über die serielle Schnittstelle mit Standard-AT-Befehlen gesendet.
  • Bei einem eingehenden Anruf oder beim Empfang einer SMS werden die Informationen über die serielle Schnittstelle als ASCII-Text an den Mikrocontroller gesendet.

Aus Platzgründen wird das GSM-Modul über einen 7-poligen Header mit dem PC Board verbunden. Dies erleichtert das Entfernen des GSM-Moduls. Dies ermöglicht dem Benutzer auch, die SIM-Karte an der Unterseite des Moduls einfach einzulegen/zu entnehmen.

Eine aktive SIM-Karte ist erforderlich und die SIM-Karte muss in der Lage sein, SMS-Nachrichten zu senden und zu empfangen.

Aufbau des SIM800L GSM-Moduls

Beim Einschalten des Geräts wird der Reset-Pin des GSM-Moduls für eine Sekunde auf Low gezogen. Dadurch wird sichergestellt, dass das GSM-Modul erst nach Stabilisierung der Spannungsversorgung anläuft. Der Neustart des GSM-Moduls dauert einige Sekunden. Warten Sie also 5 Sekunden, bevor Sie AT-Befehle an das Modul senden.

Um sicherzustellen, dass das GSM-Modul für die korrekte Kommunikation mit dem Mikrocontroller konfiguriert ist, werden beim Start die folgenden AT-Befehle verwendet:

BEI

verwendet, um festzustellen, ob ein GSM-Modul verfügbar ist

AT+CREG?

Abfrage dieses Befehls, bis das GSM-Modul im Mobilfunknetz registriert ist

AT+CMGF=1

Stellen Sie den SMS-Nachrichtenmodus auf ASCII ein

AT+CNMI=1, 2, 0, 0, 0

Wenn SMS verfügbar ist, senden Sie die SMS-Details an die serielle Schnittstelle des GSM-Moduls

AT+CMGD=1, 4

Löschen Sie alle auf der SIM-Karte gespeicherten SMS

AT+CPBS=\"SM

Setzen Sie das Telefonbuch des GSM-Moduls auf die SIM-Karte

AT+COPS=2, dann AT+CLTS=1, dann AT+COPS=0

Stellen Sie die Uhrzeit des GSM-Moduls auf die Uhrzeit des Mobilfunknetzes ein

Warten Sie 5 Sekunden, bis die Zeit eingestellt ist

AT+CUSD=1

Aktivieren Sie die USSD-Messaging-Funktion

Schritt 8: Der Mikrocontroller

Der Mikrocontroller
Der Mikrocontroller
Der Mikrocontroller
Der Mikrocontroller
Der Mikrocontroller
Der Mikrocontroller

Der Mikrocontroller ist ein Standard AtMega328p, der gleiche wie beim Arduino Uno. Der Code ist somit mit beiden vergleichbar. Um eine einfache On-Board-Programmierung zu ermöglichen, ist auf der Platine ein 6-poliger Programmier-Header verfügbar.

Die verschiedenen Abschnitte des Geräts sind mit dem Mikroprozessor verbunden und umfassen Folgendes:

  • Vier digitale Eingänge
  • Vier digitale Ausgänge
  • Der Oszillator
  • Zwei Anzeige-LEDs
  • Rücksetzschaltung
  • SIM800L GSM-Modul

Die gesamte Kommunikation zum und vom GSM-Modul erfolgt mit der Funktion SoftwareSerial(). Diese Methode wurde verwendet, um den seriellen Hauptport für die Arduino-IDE während der Entwicklungsphase freizugeben.

Mit nur 2 KB SRAM und 1 KB EEPROM reicht der Speicher nicht aus, um mehr als ein paar Benutzer zu speichern, die mit dem Gerät verbunden werden können. Um den SRAM freizugeben, werden alle Benutzerinformationen auf der SIM-Karte des GSM-Moduls gespeichert. Mit dieser Anordnung kann das Gerät bis zu 250 verschiedene Benutzer bedienen.

Konfigurationsdaten des Geräts werden im EEPROM gespeichert, wodurch Benutzerdaten und Systemdaten voneinander getrennt werden.

Es stehen noch mehrere freie I/O-Pins zur Verfügung. Die Möglichkeit, ein LCD-Display und/oder eine Tastatur hinzuzufügen, war jedoch aufgrund der großen Menge an SRAM, die von den Empfangs- und Sendepuffern der SoftWareSerial() verwendet wird, nicht möglich.

Da das Gerät keine Benutzeroberfläche besitzt, werden alle Einstellungen und Benutzer mit SMS-Nachrichten programmiert.

Schritt 9: SRAM-Speicher optimieren

Optimierung des SRAM-Speichers
Optimierung des SRAM-Speichers

Schon früh in der Entwicklungsphase meldete die Arduino-IDE beim Kompilieren des Codes einen geringen SRAM-Speicher. Um dies zu überwinden, wurden verschiedene Methoden verwendet.

Begrenzen Sie die über die serielle Schnittstelle empfangenen Daten

Das GSM-Modul meldet alle Nachrichten an den Mikrocontroller über die serielle Schnittstelle. Beim Empfang einiger SMS-Nachrichten kann die Gesamtlänge der empfangenen Nachricht 200 Zeichen überschreiten. Dies kann schnell den gesamten auf dem AtMega-Chip verfügbaren SRAM verbrauchen und führt zu Stabilitätsproblemen.

Um dies zu verhindern, werden nur die ersten 200 Zeichen JEDER vom GSM-Modul empfangene Nachricht verwendet. Das folgende Beispiel zeigt, wie dies durch das Zählen der empfangenen Zeichen in der Variablen Counter geschieht.

// nach Daten von der seriellen Schnittstelle der Software suchen

//---------------------------------------------------------- RxString = ""; Zähler = 0; Während (SSerial.available ()) { Verzögerung (1); // kurze Verzögerung, um Zeit zu geben, um neue Daten in den Puffer zu legen // Neues Zeichen abrufen RxChar = char(SSerial.read()); // die ersten 200 Zeichen zum String hinzufügen if (Counter < 200) { RxString.concat (RxChar); Zähler = Zähler + 1; } }

Reduzieren des Serial.print()-Codes

Obwohl der Arduino Serial Monitor während der Entwicklung praktisch ist, kann er viel SRAM verbrauchen. Der Code wurde mit möglichst wenig Serial.print()-Code entwickelt. Nachdem ein Codeabschnitt auf Funktion getestet wurde, wurde der gesamte Serial.print()-Code aus diesem Teil des Codes entfernt.

Mit Serial.print (F((""))-Code

Viele Informationen, die normalerweise auf dem Arduino Serial Monitor angezeigt werden, sind sinnvoller, wenn Beschreibungen hinzugefügt werden. Nehmen Sie das folgende Beispiel:

Serial.println ("Warten auf bestimmte Aktionen");

Die Zeichenfolge "Warten auf bestimmte Aktionen" ist festgelegt und kann nicht geändert werden.

Während der Kompilierung des Codes wird der Compiler die Zeichenfolge "Warten auf bestimmte Aktionen" in den FLASH-Speicher aufnehmen.

Außerdem erkennt der Compiler, dass die Zeichenfolge eine Konstante ist, die von der Anweisung "Serial.print" oder "Serial.println" verwendet wird. Beim Hochfahren des Mikros wird diese Konstante auch im SRAM-Speicher abgelegt.

Durch die Verwendung des "F"-Präfixes in Serial.print()-Funktionen teilt es dem Compiler mit, dass dieser String nur im FLASH-Speicher verfügbar ist. In diesem Beispiel enthält die Zeichenfolge 28 Zeichen. Dies sind 28 Bytes, die im SRAM freigegeben werden können.

Serial.println (F ("Warten auf bestimmte Aktionen"));

Diese Methode gilt auch für die SoftwareSerial.print()-Befehle. Da das GSM-Modul mit AT-Befehlen arbeitet, enthält der Code zahlreiche SoftwareSerial.print("xxxx")-Befehle. Mit dem Präfix "F" wurden fast 300 Byte SRAM freigegeben.

Verwenden Sie nicht den seriellen Hardware-Port

Nach dem Code-Debugging wurde der serielle Hardware-Port deaktiviert, indem ALLE Serial.print()-Befehle entfernt wurden. Dadurch wurden einige zusätzliche Bytes an SRAM freigegeben.

Ohne irgendwelche Serial.print()-Befehle im Code wurden zusätzliche 128 Byte SRAM zur Verfügung gestellt. Dazu wurde der serielle Hardware-Port aus dem Code entfernt. Dadurch wurden die 64-Byte-Sende- und 64-Byte-Empfangspuffer aufgefüllt.

// Serial.begin (9600); // serieller Hardware-Port deaktiviert

EEPROM für Strings verwenden

Für jeden Ein- und Ausgang mussten drei Strings gespeichert werden. Dies sind der Kanalname, die Zeichenfolge, wenn der Kanal eingeschaltet ist, und die Zeichenfolge, wenn der Kanal ausgeschaltet ist.

Mit insgesamt 8 I/O-Kanälen werden ihre

  • 8 Strings mit den Kanalnamen, jeweils 10 Zeichen lang
  • 8 Strings mit der Beschreibung des Kanals On, jeweils 10 Zeichen lang
  • 8 Strings mit der Beschreibung des Kanals Off, jeweils 10 Zeichen lang

Dies zeigt bis zu 240 Byte SRAM an. Anstatt diese Strings im SRAM zu speichern, werden sie im EEPROM gespeichert. Dadurch wurden zusätzliche 240 Byte SRAM frei.

String mit den richtigen Längen deklarieren

Variablen werden normalerweise am Anfang des Codes deklariert. Ein häufiger Fehler beim Deklarieren einer String-Variablen besteht darin, dass wir den String nicht mit der richtigen Anzahl von Zeichen deklarieren.

String GSM_Nr = "";

String GSM_Name = ""; String GSM_Msg = "";

Während des Startvorgangs weist der Mikrocontroller diesen Variablen keinen Speicher im SRAM zu. Dies kann später zu Instabilität führen, wenn diese Zeichenfolgen verwendet werden.

Um dies zu verhindern, deklarieren Sie die Strings mit der richtigen Anzahl von Zeichen, die der String in der Software verwendet.

String GSM_Nr = "1000000000";

Zeichenfolge GSM_Name = "2000000000"; String GSM_Msg = "3000000000";

Beachten Sie, dass ich die Strings nicht mit denselben Zeichen deklariert habe. Wenn Sie diese Strings alle mit "1234567890" deklarieren, sieht der Compiler den gleichen String in den drei Variablen und weist nur einem der Strings genügend Speicher im SRAM zu.

Schritt 10: Größe des seriellen Softwarepuffers

Größe des seriellen Softwarepuffers
Größe des seriellen Softwarepuffers

Im folgenden Code werden Sie feststellen, dass bis zu 200 Zeichen von der seriellen Schnittstelle der Software gelesen werden können.

// nach Daten von der seriellen Schnittstelle der Software suchen

//---------------------------------------------------------- RxString = ""; Zähler = 0; Während (SSerial.available ()) { Verzögerung (1); // kurze Verzögerung, um Zeit zu geben, um neue Daten in den Puffer zu legen // Neues Zeichen abrufen RxChar = char(SSerial.read()); // die ersten 200 Zeichen zum String hinzufügen if (Counter < 200) { RxString.concat (RxChar); Zähler = Zähler + 1; } }

Dies erfordert auch einen Puffer von mindestens 200 Byte für die serielle Softwareschnittstelle. Standardmäßig ist der Puffer des seriellen Software-Ports nur 64 Byte groß. Um diesen Puffer zu vergrößern, suchen Sie nach der folgenden Datei:

SoftwareSerial.h

Öffnen Sie die Datei mit einem Texteditor und ändern Sie die Puffergröße auf 200.

/******************************************************************************

* Definitionen ************************************************ *****************************/ #ifndef _SS_MAX_RX_BUFF #define _SS_MAX_RX_BUFF 200 // RX-Puffergröße #endif

Schritt 11: Herstellung der PC-Platine

Herstellung der PC-Platine
Herstellung der PC-Platine

Das PC-Board wurde mit der Freeware-Version von Cadsoft Eagle entwickelt (ich glaube, der Name hat sich geändert).

  • PC Board ist ein einseitiges Design.
  • Es werden keine oberflächenmontierten Komponenten verwendet.
  • Alle Komponenten sind auf der Leiterplatte montiert, einschließlich des SIM800L-Moduls.
  • Es sind keine externen Komponenten oder Anschlüsse erforderlich
  • Drahtbrücken sind unter den Komponenten versteckt, um ein saubereres Aussehen zu erzielen.

Ich verwende die folgende Methode, um PC-Boards zu machen:

  • Das Bild der Leiterplatte wird auf Press-n-Peel mit einem Laserdrucker gedruckt.
  • Das Press-n-Peel wird dann auf ein sauberes Stück PC-Platine gelegt und mit etwas Klebeband befestigt.
  • Das Leiterplattenbild wird dann vom Press-n-Peel auf die leere Leiterplatte übertragen, indem die Leiterplatte durch einen Laminator geführt wird. Für mich funktionieren 10 Durchgänge am besten.
  • Nachdem die Leiterplatte auf Raumtemperatur abgekühlt ist, wird das Press-n-Peel langsam von der Leiterplatte abgehoben.
  • Die Leiterplatte wird dann mit in heißem Wasser gelösten Ammoniumpersulfat-Kristallen geätzt.
  • Nach dem Ätzen werden der blaue Press-n-Peel und der schwarze Toner entfernt, indem die geätzte Leiterplatte mit etwas Aceton gereinigt wird.
  • Das Brett wird dann mit einem Dremel. zugeschnitten
  • Löcher für alle Durchgangslochkomponenten werden mit einem 1-mm-Bohrer gebohrt.
  • Die Schraubanschlüsse werden mit einem 1,2-mm-Bohrer gebohrt.

Schritt 12: Montage der PC-Platine

Montage der PC-Platine
Montage der PC-Platine
Montage der PC-Platine
Montage der PC-Platine
Montage der PC-Platine
Montage der PC-Platine
Montage der PC-Platine
Montage der PC-Platine

Die Montage erfolgt, indem zuerst die kleinsten Komponenten hinzugefügt und dann zu den größten Komponenten vorgearbeitet werden.

Alle in diesem Instructable verwendeten Komponenten, mit Ausnahme des SIM800-Moduls, wurden von meinem lokalen Lieferanten bezogen. Denkt an sie dafür, dass sie immer auf Lager sind. Bitte werfen Sie einen Blick auf ihre südafrikanische Websie:

www.shop.rabtron.co.za/catalog/index.php

HINWEIS! Zuerst die beiden Jumper unter dem ATMEGA328p IC verlöten

Die Reihenfolge ist wie folgt:

  • Widerstände und Diode
  • Reset-Knopf
  • IC-Sockel
  • Spannungsregler
  • Kopfstifte
  • Kleine Kondensatoren
  • LEDs
  • Sicherungshalter
  • Klemmenblöcke
  • Relais
  • Elektrolytkondensator

Vor dem Einsetzen der ICs das Gerät an 12V anschließen und alle Spannungen auf Richtigkeit prüfen.

Bedecken Sie abschließend die Kupferseite der Leiterplatte mit etwas Klarlack, um sie vor Witterungseinflüssen zu schützen.

Wenn der Lack getrocknet ist, setzen Sie die ICs ein, aber lassen Sie das GSM-Modul, bis der AtMega programmiert ist.

Schritt 13: Programmierung des AtMega328p

Programmierung des AtMega328p
Programmierung des AtMega328p
Programmierung des AtMega328p
Programmierung des AtMega328p
Programmierung des AtMega328p
Programmierung des AtMega328p

# # Firmware-Upgrade auf Version 3.02 # #

SMS-Versand an MASTER USER aktiviert, wenn das Gerät wieder mit Strom versorgt wird

Ich verwende ein Arduino Uno mit einem Programmierschild, um das Gerät zu programmieren. Weitere Informationen zur Verwendung eines Arduino Uno als Programmierer finden Sie in diesem Instructable:

Arduino UNO als AtMega328P-Programmierer

Das GSM-Modul muss von der Platine entfernt werden, um Zugriff auf den Programmierkopf zu erhalten. Achten Sie beim Entfernen des GSM-Moduls darauf, das Antennenkabel nicht zu beschädigen.

Verbinden Sie das Programmierkabel zwischen dem Programmiergerät und dem Gerät mit dem Programmierkopf auf der Platine und laden Sie die Skizze auf das Gerät hoch.

Die externe 12-V-Versorgung wird zum Programmieren des Geräts nicht benötigt. Die PC-Platine wird über das Programmierkabel vom Arduino mit Strom versorgt.

Öffnen Sie die angehängte Datei in der Arduino IDE und programmieren Sie sie auf das Gerät.

Entfernen Sie nach der Programmierung das Programmierkabel und stecken Sie das GSM-Modul ein.

Das Gerät ist jetzt einsatzbereit.

Schritt 14: Anschließen des Geräts

Anschließen des Geräts
Anschließen des Geräts
Anschließen des Geräts
Anschließen des Geräts
Anschließen des Geräts
Anschließen des Geräts

Alle Anschlüsse an das Gerät erfolgen über die Schraubklemmen.

Stromversorgung des Geräts

Stellen Sie sicher, dass Sie eine registrierte SIM-Karte in das GSM-Modul eingelegt haben und dass die SIM-Karte SMS senden und empfangen kann.

Schließen Sie ein 12-V-DC-Netzteil an den 12V-Eingang und einen der 0-V-Anschlüsse an. Nach dem Einschalten leuchtet die rote LED auf der PC-Platine. In etwa einer Minute sollte sich das GSM-Modul mit dem Mobilfunknetz verbunden haben. Die rote LED erlischt und eine rote LED am GSM-Modul blinkt schnell.

Sobald diese Stufe erreicht ist, kann das Gerät konfiguriert werden.

Eingangsanschlüsse

Die digitalen Eingänge arbeiten mit 12V. Um einen Eingang einzuschalten, müssen 12 V an den Eingang angelegt werden. Das Entfernen der 12V schaltet den Eingang aus.

Ausgangsanschlüsse

Jeder Ausgang besteht aus einem Wechslerkontakt. Verdrahten Sie jeden Kontakt nach Bedarf.

Schritt 15: Ersteinrichtung

Ersteinrichtung
Ersteinrichtung

Die Ersteinrichtung des Geräts muss durchgeführt werden, um sicherzustellen, dass alle Parameter auf die Werkseinstellungen zurückgesetzt und die SIM-Karte so konfiguriert ist, dass sie Benutzerinformationen im richtigen Format akzeptiert.

Da alle Befehle SMS-basiert sind, benötigen Sie ein weiteres Telefon, um die Einrichtung durchzuführen.

Für die Ersteinrichtung müssen Sie sich am Gerät befinden.

Stellen Sie die MASTER USER-Telefonnummer ein

Da nur der MASTER USER das Gerät konfigurieren kann, muss dieser Schritt zuerst durchgeführt werden.

  • Das Gerät muss mit Strom versorgt werden.
  • Drücken Sie die Reset-Taste und lassen Sie sie wieder los und warten Sie, bis die rote LED auf der Platine erlischt.
  • Die NET-LED am GSM-Modul blinkt schnell.
  • Das Gerät ist nun bereit, die anfänglichen Setup-Befehle zu akzeptieren. Dies muss innerhalb von 10 Minuten erfolgen.
  • Senden Sie eine SMS-Nachricht mit MASTER, Beschreibung an die Telefonnummer des Geräts.
  • Bei Empfang blinkt die grüne LED auf der Platine zweimal.
  • Der MASTER USER ist nun programmiert.

Setzen Sie das Gerät auf die Werkseinstellungen zurück

Nachdem der MASTER USER programmiert wurde, müssen die Einstellungen des Geräts auf die Werkseinstellungen zurückgesetzt werden.

  • Senden Sie eine SMS-Nachricht nur mit CLEARALL an die Telefonnummer des Geräts.
  • Bei Empfang blinken die grüne und rote LED auf der Platine abwechselnd einmal pro Sekunde. Das Gerät wurde mit den werkseitigen Standardeinstellungen wiederhergestellt.
  • Alle Einstellungen wurden auf die Werkseinstellungen zurückgesetzt.
  • Drücken Sie die Reset-Taste und lassen Sie sie wieder los, um das Gerät neu zu starten.

Formatieren der SIM-Karte

Der letzte Schritt besteht darin, alle auf der SIM-Karte gespeicherten Informationen zu löschen und sie für die Verwendung in diesem Gerät zu konfigurieren.

  • Drücken Sie die Reset-Taste und lassen Sie sie wieder los und warten Sie, bis die rote LED auf der Platine erlischt.
  • Die NET-LED am GSM-Modul blinkt schnell.
  • Das Gerät ist nun bereit, die anfänglichen Setup-Befehle zu akzeptieren. Dies muss innerhalb von 10 Minuten erfolgen.
  • Senden Sie eine SMS-Nachricht nur mit ERASESIM an die Telefonnummer des Geräts.
  • Bei Empfang blinkt die grüne LED auf der Platine dreimal.

Das Gerät ist nun konfiguriert und betriebsbereit.

Schritt 16: SMS-Befehle

SMS-Befehle
SMS-Befehle

Es gibt drei verschiedene Arten von Befehlen, die vom Gerät verwendet werden. Alle Befehle werden per SMS gesendet und haben alle das folgende Format:

BEFEHL,,,,,

  • Bei allen Befehlen außer den NORMAL USER-Befehlen muss die Groß-/Kleinschreibung beachtet werden.
  • Bei Parametern wird die Groß-/Kleinschreibung nicht beachtet.

Befehle für die Ersteinrichtung

MEISTER, Name

Als MASTER USER-Rufnummer wird die Telefonnummer des SMS-Absenders verwendet. Hier kann eine Beschreibung für die Einheit hinzugefügt werden.

ALLES LÖSCHEN

Setzen Sie das Gerät auf die Werkseinstellungen zurück

CLEARSIM

Alle Daten von der SIM-Karte löschen

ZURÜCKSETZEN

Starten Sie das Gerät neu

MASTER USER Befehle zum Konfigurieren des Geräts

AUSSENMODUS, c, m, t HINWEIS ! ! ! NOCH NICHT IMPLEMENTIERT

Stellen Sie bestimmte Kanäle so ein, dass sie PULSED-, TIMED- oder LATCHING-Ausgänge haben. t ist die Zeitdauer in Minuten für TIMED-Ausgaben

IMPULS, cccc

Stellen Sie bestimmte Kanäle auf PULSED-Ausgänge ein. Wenn nicht gesetzt, werden die Kanäle als LATCHING-Ausgänge eingestellt.

PULSETIME, tStellt die Impulsausgabedauer in Sekunden ein (0.. 10s)

EINGABE, cccc

Stellen Sie Kanäle ein, die ausgelöst werden müssen, und senden Sie eine SMS-Nachricht, wenn sich der Status von AUS auf EIN ändert

EINGANG, cccc

Stellen Sie Kanäle ein, die ausgelöst werden müssen, und senden Sie eine SMS-Nachricht, wenn sich der Status von EIN auf AUS ändert

INTIME, c, t

Legt die Eingangsverzögerungszeit für die Erkennung von Statusänderungen in Sekunden fest

INTEXT, ch, name, an, aus

Legen Sie den Namen jedes Eingangskanals fest, Text ein und aus.

OUTTEXT, ch, Name, an, aus

Legen Sie den Namen jedes Ausgangskanals fest, Text ein und aus.

Hinzufügen, Standort, Nummer, Calloutputs, SMSoutputs, Inputs

Benutzer zur SIM-Karte am Speicherort hinzufügen, wobei dem Benutzer die Ausgangs- und Eingangskanäle zugewiesen sind

Entf, Standort

Benutzer aus SIM-Kartenspeicher 'Standort' löschen

Kanal Name

Impulsausgabe mit dem Namen ChannelName

ChannelName, onText oder ChannelName, offText

Schaltet den Ausgang mit dem Namen von ChannelName und onText/offText. ein/aus

Normale Benutzerbefehle zur Steuerung des Geräts

????E/A-Statusaktualisierung anfordern. Status-SMS wird an den Absender gesendet.

Kanal Name

Impulsausgabe mit dem Namen ChannelName

Kanalname, onText

Schaltet den Ausgang mit dem Namen von ChannelName und dem Statustext onText ein

ChannelName, offText Schaltet die Ausgabe mit dem Namen von ChannelName und dem Statustext offText aus

Eine genauere Beschreibung der Befehle finden Sie im beigefügten PDF-Dokument.

Empfohlen: