Relais mit SMS schalten

Ein Kunde aus Frankreich hat uns heute auf ein interessantes Projekt aufmerksam gemacht. Wir hatten bereits Beiträge die sich mit SmartHome beschäftigen, so z.b. die SmartHome Zentrale von Gerald Lechner oder auch OpenHAB welches wir schon mit Ihnen zur Vorbereitung installiert haben. Heute stellen wir ein simples Stand-allone Projekt für Ihr SmartHome vor. Wir schalten ein Relais per SMS ON/OFF. 

Wir brauchen:

UnoR3 /MEGA
SIM900 GSM-Shield
Relais-Modul
externe Stromversorgung
SIM-Karte (aktiviert und ohne PIN)

Zuerst nehmen wir unser GSM-Shield Inbetrieb, d.h. Stiftleisten einlöten, Antenne anstecken, SIM-Karte einlegen. Im Lieferumfang unseres Shields sind Adapterkarten für die unterschiedlichen SIM-Formate enthalten :-)

Sind die Stiftleisten eingelötet stecken Sie Ihr Shield bündig auf Ihren Arduino, wie im Bild zu sehen:

Zum Probebetrieb bietet es sich an nach unserem E-Book zu arbeiten, um sicherzustellen das alles so funktioniert wie es soll. Die beiden Jumper stecken wir um, damit das Shield über Software Serial arbeitet und unser Hardware Serial frei für den Seriellen Monitor der ArduinoIDE bleibt.

Bitte beachten Sie auch das Sie für unser Shield eine externe Stromversorgung benötigen da dieses bis zu 2A ziehen kann.

Um das Shield einzuschalten müssen Sie die mit PWR gekennzeichnete Taste drücken, bin auf der gegenüberliegenden Seite beide LED leuchten. Das Shield bucht sich dann ins Netz ein.
Die Pin-Belegung ist schnell erklärt, Pin 6-9 sind durch das Shield belegt, die anderen Pins des UnoR3 werden durchgeroutet. So auch Pin12 für unser High-Level Relais-Modul. 

Hier unser Code:

 

// Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8);

// Variable to store text message
String textMessage;

// Create a variable to store Relais state
String lampState = "HIGH";

// relais connected to pin 12
const int relais = 12;

void setup() {
  // Automatically turn on the shield
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(3000);
  
  // Set relais as OUTPUT
  pinMode(relais, OUTPUT);

  // By default the relais is off
  digitalWrite(relais, LOW);
  
  // Initializing serial commmunication
  Serial.begin(9600); 
  SIM900.begin(2400);

  // Give time to your GSM shield log on to network
  delay(20000);
  Serial.print("SIM900 ready...");
  delay(100);

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);
  // Set module to send SMS data to serial out upon receipt 
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop(){
  if(SIM900.available()>0){
    textMessage = SIM900.readString();
    Serial.print(textMessage);    
    delay(10);
  } 
  if(textMessage.indexOf("ON")>=0){
    // Turn on relais and save current state
    digitalWrite(relais, HIGH);
    lampState = "on";
    Serial.println("relais set to ON");  
    textMessage = "";   
  }
  if(textMessage.indexOf("OFF")>=0){
    // Turn off relais and save current state
    digitalWrite(relais, LOW);
    lampState = "off"; 
    Serial.println("relais set to OFF");
    textMessage = ""; 
  }
  if(textMessage.indexOf("STATE")>=0){
    String message = "Relais is " + lampState;
    sendSMS(message);
    Serial.println("Relais resquest");
    textMessage = "";
  }
}  

// Function that sends SMS
void sendSMS(String message){
  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);

  // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS +49 is Germany
  SIM900.println("AT + CMGS = \"+49XXXXXXXX\""); 
  delay(100);
  // Send the SMS
  SIM900.println(message); 
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  // Give module time to send SMS
  delay(5000);  
}

 

Bedingt das Deutschland das EU-Land mit den höchsten Mobilfunkgebühren ist, ist diese Lösung nicht als Allheilmittel gedacht, da je nach Vertrag eine SMS mit bis zu 10ct Ihr Konto belastet. Für meine Gartenpumpe im Kleingarten im nächsten Dorf ist die Lösung jedoch Ideal, falls ich es einmal zeitlich nicht schaffe zum gießen zu fahren.

Viel Spaß beim Basteln ;-)

Letzter Artikel USB-Adapter erweitern mit Flash Jumper und Reset Taster

Kommentar

Maik - Oktober 4, 2018

Interessant Wäre ja noch den Status im EPROM zu speichern falls stom mal aus ist oder ein Resett ausgelöst wird !

Thomas - Juli 23, 2018

Klasse. Besten Dank für die Veröffentlichung

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe