Cambiar relé con SMS

Un cliente de Francia nos hizo conocer un proyecto interesante hoy. Ya teníamos artículos relacionados con SmartHome, p. la sede de SmartHome de Gerald Lechner u OpenHAB que ya hemos instalado con usted en preparación. Hoy presentamos un proyecto simple e independiente para su SmartHome. Cambiamos un relé a través de SMS ON / OFF.

Necesitamos:

UnoR3 / MEGA
Escudo SIM900 GSM
Módulo de relé
fuente de alimentación externa
Tarjeta SIM (activada y sin PIN)

Primero ponemos en funcionamiento nuestro GSM-Shield, es decir Soldar los cabezales de los pines, conectar la antena, insertar la tarjeta SIM. Nuestro escudo viene con tarjetas adaptadoras para los diferentes formatos de SIM :-)

Una vez que los encabezados de los pines están soldados en su lugar, su escudo está al ras de su Arduino como se muestra en la imagen:

Para la operación de prueba, se ofrece de acuerdo con la nuestra. E-book  trabajar para asegurarse de que todo funcione como debería. Cambiamos los dos puentes para que el escudo funcione a través de Software Serial y nuestro Hardware Serial permanezca libre para el monitor en serie del ArduinoIDE.

Tenga en cuenta también que necesita una fuente de alimentación externa para nuestro escudo, ya que puede alcanzar hasta 2A.

Para encender el escudo, debe presionar el botón marcado PWR, en el lado opuesto se iluminan ambos LED. El escudo luego inicia sesión en la red.
La asignación de pines se explica rápidamente, los pines 6-9 están ocupados por el escudo, los otros pines del UnoR3 se enrutan. Así también Pin12 para nuestro módulo de relé de alto nivel.

Aquí está nuestro código:

 

// Incluye una biblioteca serial de software para comunicarse con GSM
#include <Software Serial.h>

// Configurar el puerto serie del software
Software Serial SIM900(7, 8);

// Variable para almacenar mensaje de texto
Cadena mensaje de texto;

// Crear una variable para almacenar el estado del relé
Cadena lampState = "ALTO";

// relé conectado al pin 12
const int retransmitir = 12;

nulo configuración() {   // Enciende automáticamente el escudo   digitalWrite(9, ALTO);   retrasar(1000);   digitalWrite(9, BAJA);   retrasar(3000);      // Establecer relés como SALIDA   pinMode(retransmitir, SALIDA);   // Por defecto, el relé está apagado   digitalWrite(retransmitir, BAJA);      // Inicializando la comunicación serial   De serie.comenzar(9600);    SIM900.comenzar(2400);   // Dale tiempo a tu escudo GSM para iniciar sesión en la red   retrasar(20000);   De serie.imprimir("SIM900 listo ...");   retrasar(100);   // comando AT para configurar SIM900 en modo SMS   SIM900.imprimir("AT + CMGF = 1 \ r");    retrasar(100);   // Configure el módulo para enviar datos SMS a la salida serial al recibirlos    SIM900.imprimir("AT + CNMI = 2,2,0,0,0 \ r");   retrasar(100);
}

nulo bucle(){   si(SIM900.disponible()>0){     mensaje de texto = SIM900.readString();     De serie.imprimir(mensaje de texto);         retrasar(10);   }    si(mensaje de texto.indexOf("ENCENDIDO")>=0){     // Enciende el relé y guarda el estado actual     digitalWrite(retransmitir, ALTO);     lampState = "en";     De serie.println("relé configurado en ON");       mensaje de texto = "";      }   si(mensaje de texto.indexOf("APAGADO")>=0){     // Apaga el relé y guarda el estado actual     digitalWrite(retransmitir, BAJA);     lampState = "apagado";      De serie.println("relé configurado en OFF");     mensaje de texto = "";    }   si(mensaje de texto.indexOf("ESTADO")>=0){     Cadena mensaje = "El relé es" + lampState;     sendSMS(mensaje);     De serie.println("Solicitud de retransmisión");     mensaje de texto = "";   }
}   // Función que envía SMS
nulo sendSMS(Cadena mensaje){   // comando AT para configurar SIM900 en modo SMS   SIM900.imprimir("AT + CMGF = 1 \ r");    retrasar(100);   // REEMPLAZA LAS X CON EL NÚMERO MÓVIL DEL RECEPTOR   // USE EL CÓDIGO DE FORMATO INTERNACIONAL PARA NÚMEROS MÓVILES +49 es Alemania   SIM900.println("AT + CMGS = \" + 49XXXXXXXX \ "");    retrasar(100);   // Enviar el SMS   SIM900.println(mensaje);    retrasar(100);   // Finaliza el comando AT con un ^ Z, código ASCII 26   SIM900.println((char)26);    retrasar(100);   SIM900.println();   // Dale tiempo al módulo para enviar SMS   retrasar(5000);   }

 

Debido al hecho de que Alemania es el país de la UE con los mayores cargos de telefonía móvil, esta solución no pretende ser una panacea, ya que, según el contrato, un SMS con hasta 10ct carga su cuenta. Para la bomba de mi jardín en el jardín de asignación en el próximo pueblo, la solución es ideal, en caso de que no pueda llegar al agua.

Diviértete elaborando ;-)

Para arduinoProyectos para principiantesCasa inteligente

10 comentarios

HansiEdi

HansiEdi

Noch eine kleine info, haltet euch bitte immer an das Datenblatt, das gilt auch für die Spannungsversorgung.
Wenn Ihr das Modul mit einem Akku betreibt ist ein Kondensator mit 100µF empfehlenswert, wenn Ihr aber stattdessen eine andere geregelte Spannungsquelle verwendet, verwendet doch wie im Datenblatt empfohlen einen Low ESR 1000µF Elko, damit gibt es keine Probleme mit Spannungseinbrüchen die einen ungewollten Reset des Moduls auslösen.
Ich habe meinen 1000µF Kondensator direkt an das Modul gelötet und mit einem Oszilloskop überprüft.

LG

HansiEdi

HansiEdi

Guten Tag,

ich finde es sehr schade dass der Autor den Programmcode mit Fehler anbietet.
1. der Charakter String muss auf GSM gesetzt werden.
SIM900.println(“AT+CSCS=\”GSM\"");
delay(100);

der Befehl wird nach (“AT+CMGF=1\r”) übermittelt

2. wie bereits schon Ernst geschrieben hat müssen beim übergeben der Empfängernummer die Leerzeichen aus dem Code entfernt werden.
SIM900.println(“AT+CMGS=\”+43XXXXXXXXXX\"");

Ich habe zudem alle Timings erhöht, erst mal für Probezwecke.

Nun funktioniert der Programmcode mit meinem Neoway M590E Modul.

Lg Hans

michael

michael

Hallo
Habe die Schaltung mit SIM800 nachgebaut, funktioniert soweit gut, sendet aber keine SMS. Vielleicht gibts doch kleine Unterschiede und könnte mir dabei helfen.

Ernst

Ernst

Vielen Dank, hat mir sehr geholfen!
Das Senden der SMS hat bei mir aber erst funktioniert, nachdem ich die Leerzeichen aus dem String herausgenommen habe:
Also statt
SIM900.println(“AT + CMGS = \”49XXXXXXXX\"");
Jetzt
SIM900.println("ATCMGS=\“+49XXXXXXXX\”");

Viele Grüße

Horst

Horst

Hallo,

vielen Dank für den Hinweis und die gute Beschreibung. Leider ist das PDF nicht mehr verfügbar (https://bibliothek.az-delivery.de/wp-content/uploads/2018/01/16-AZ-Delivery_GPRS-Shield_Startertutorial-deutsch.pdf). Hat jemand zu das noch zufällig?

Beste Grüße

Christos

Christos

Guten Morgen zusammen!
Ich würde gerne um Euren Support bzw Eure Meinung bitten.
Ich würde gerne das obere Projekt nachbauen allerdings müsste ich 8 Schaltkreise per SMS einzeln Ein-, bzw Ausschalten. Die Schaltkreise werden zur Ohm Messung zwecks Fehlersuche in Kunststoff-Mantel-Rohre gebraucht.
Würde mich über Eure Antworten freuen!

Mit freundlichem Gruß
Chris

Christian Zittier

Christian Zittier

Super Sache funktioniert eigentlich ohne Probleme,
aber ich musste die delay von 100 auf 1000 erhöhen vorher ging es nicht und der on pin (9) schaltet sich zwar auf high aber Sim900 startet nicht der reset pin (6) funktioniert.

Es sollte sich bei Stromausfall durch die Konfiguration mit pin 9 doch auf on gehen ?
Ist dieses Problem bekannt? Oder bin ich nur zu Blöd?

Wolfgang Noel

Wolfgang Noel

Eine Frage an die Spezialisten: Wenn ich den Arduino Uno mit SIM900 laut E-Book https://bibliothek.az-delivery.de/wp-content/uploads/2018/01/16-AZ-Delivery_GPRS-Shield_Startertutorial-deutsch.pdf in Betrieb nehme, funktioniert alles super. Wenn ich den obigen Code nehme (natürlich mit geänderter Rufnummer), läuft das Programm ohne Fehlermeldung durch, es wird aber keine SMS gesendet bzw. empfangen. Natürlich tut sich beim Relais auch nichts. Muss hierfür eine andere Bibliothek verwendet werden. Ich nutze die https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield
SIM900 und Uno sind laut E-Book verbunden. Über einen Tip wäre ich dankbar. VG Wolfgang

Maik

Maik

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

Thomas

Thomas

Klasse. Besten Dank für die Veröffentlichung

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas