Arduino + SIM900

En el mundo de Arduino en ocasiones es importante mantener la comunicación con nuestra placa y nuestro proyecto, existen distintas maneras de maneras para mantener esa comunicación, puede ser con un modulo WiFi, Bluetooth, Ethernet, o como en este caso vía GSM.

En el siguiente proyecto, vamos a utilizar el módulo SIM900, que es fabricado por SIMCom empresa que nos presenta un ultra compacto y estable modulo inalambrico. Es un modulo completo de Cuatro bandas GSM/GPRS tipo SMT diseñado con un poderoso procesador integrado, AMR926EJ-S, excelente para pequeños proyectos y a un muy bajo costo.

SIM900

Con una interfaz estándar, el SIM900 ofrece un rendimiento GSM / GPRS en las bandas 850/900/1800/1900MHz para voz, SMS, datos y fax con un muy bajo consumo de energía. Con una tamaño de 24 mm x 24 mm x 3 mm, SIM900 puede adaptarse a casi todos los requisitos de espacio en sus aplicaciones M2M, especialmente para demandas de diseño delgadas y compactas.

El fabricante nos brinda las siguientes características:

  • Quad-Band 850/900/1800/1900 MHz
  • GPRS multi-slot class 10/8
  • GPRS mobile station class B
  • Compliant to GSM phase 2/2+
    • Class 4 (2 W @850/ 900 MHz)
    • Class 1 (1 W @ 1800/1900MHz)
  • SAIC (Single Antenna Interference Cancellation) support
  • Dimensions: 24 x 24 x 3 mm
  • Weight: 3.4g
  • Control via AT commands (GSM 07.07 ,07.05 and SIMCOM enhanced AT Commands)
  • SIM application toolkit
  • Supply voltage range : 3.2 … 4.8V
  • Low power consumption: 1.0mA (sleep mode&BS-PA-MFRMS=9)
  • Operation temperature: -40°C to +85 °C

Para mayor información podemos visitar la página de fabricante aquí

En este caso vamos a utilizar una placa compatible con Arduino, la cual se comunica mediante comandos AT, la placa cuenta con entrada de alimentación externa, switch de encendido primario y un botón secundario de encendido, también cuenta con jacks de entrada y salida de audio, para conectar micrófono y audífonos. Los headers facilitan la conexión entre la placa y nuestro Arduino, también cuenta con pines de configuración para mantener una comunicación serial por hardware o software, el cual analizaremos mas adelante.
Esta placa la podemos encontrar en el mercado por alrededor de $20 USD

SIM900
Partes mas importantes de la placa SIM900

Indicadores LED:
De encendido: El LED va conectado a la linea de alimentación de energía, indica cuando la placa está recibiendo energía.
De estado: Cuando la placa está realizando alguna función o tarea, el LED se mantiene encendido.
De Red: Indica el estado de la Red Celular, tiene varios estados:
– Apagado: la placa no está funcionando
– Encendido 64ms y apagado 800ms: El chip SIM900 está funcionando pero no se ha registrado en la red celular.
– Encendido 64ms y apagado 3 segundos: El chip SIM900 está registrado en la red celular y puede enviar y recibir llamadas y SMS
– Encendido 64ms y apagado 300ms: La conexión de datos GPRS es activa.

Fuente de alimentación:
La placa SIM900 soporta alimentación externa de 5V a 9V, lo cual es preferible que utilicemos para tener una mayor estabilidad en el funcionamiento.

Puerto de alimentación 5V a 9V

Comunicación UART:
UART, son las siglas en inglés de Universal Asynchronous Receiver-Transmitter, en español: Transmisor-Receptor Asíncrono Universal.
Nuestra placa SIM900 soporta velocidades que van desde las 1200bps a 115200bps con función de detección de velocidad Auto-Baud.

Con la ayuda de los pines de “Selector de puerto serial” configuramos la placa SIM900 para trabajar por Software o Hardware Serial, en nuestro caso vamos a configurar para operar en SOFTWARE Serial, conectando los pines D8(Rx) con el PIN central y el D7(Tx) con el PIN central, como se muestra en la siguiente imagen:

Configuración Software y Hardware Serial


Conexión con Arduino:
Como habíamos dicho anteriormente la placa SIM900 se comunica por medio del puerto serial, por lo cual vamos a colocar la configuración del Selector de puerto serial el modo “Software Serial” es decir con los pines D8 y D7 y posteriormente conectaremos

  • El pin D7(Tx) de la placa SIM900 al pin 7 de Arduino
  • El pin D8(Rx) de la placa SIM900 al pin 8 de Arduino
SIM900 – Arduino

Posteriormente conectaremos la placa SIM900 a la fuente de alimentación directa. En mi caso estoy utilizando una fuente de 9v a 650mA.
Para encender la placa SIM900 debemos dejar presionado por 2 segundos el botón de encendido.

Boton de encendido presionado por 2 segundos aproximadamente

Ahora solo nos queda conectar nuestro Arduino al puerto USB y cargar el siguiente Sketch…

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); //Seleccionamos los pines 7 como Rx y 8 como Tx

void setup()
{
  SIM900.begin(9600);  // Iniciamos puerto serial virtual
  Serial.begin(9600);  // Iniciamos puerto serial
  delay(1000);         // Retrasamos 1 segundo
  Serial.println("Iniciado...");
}

void loop()
{
  comunicadatos();
}

void comunicadatos() {
  // Envíamos y recibimos datos
  if (Serial.available() > 0)
    SIM900.write(Serial.read());
  if (SIM900.available() > 0)
    Serial.write(SIM900.read());
}

Funcionamiento:
Para comprobar que todo funciona bien abrimos la terminal en nuestro IDE de Arduino mediante la combinación de teclas CTRL+SHIFT+M.
En la ventana de Monitor Serial nos aseguramos de seleccionar la velocidad de UART a 9600 baudio y que el tipo de comunicación se encuentre seleccionado Ambos NL & CR.
Ahora enviamos el siguiente comando AT para verificar que todo funcione correctamente: AT
Debemos recibir un simple “OK

Enviamos el comando AT y recibimos OK.
Verificando que la velocidad se encuentre seleccionada en 9600 baudio y el canal de comunicación en Ambos NL &CR.

Existe una manera de encender la placa SIM900 mediante software, solo que se debe agregar un cable extra y soldar los pines R3 de la placa SIM900

Se agrega un cable (Amarillo)
Se tiene que soldar los pines R3 (En color rojo)

Posteriormente tendremos que agregar al siguiente función para encender la placa SIM900 mediante software y hacerla llamar al inicio del Sketch.

void encenderSIM900()
{
  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
  delay(1000);
  digitalWrite(9, HIGH);
  delay(2000);
  digitalWrite(9, LOW);
  delay(3000);
}

Y el código completo sería el siguiente:

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); //Seleccionamos los pines 7 como Rx y 8 como Tx

void setup()
{
  encenderSIM900();
  SIM900.begin(9600);  // Iniciamos puerto serial virtual
  Serial.begin(9600);  // Iniciamos puerto serial
  delay(1000);         // Retrasamos 1 segundo
  Serial.println("Iniciado...");
}

void loop()
{
  comunicadatos();
}

void comunicadatos() {
  // Envíamos y recibimos datos
  if (Serial.available() > 0)
    SIM900.write(Serial.read());
  if (SIM900.available() > 0)
    Serial.write(SIM900.read());
}

void encenderSIM900()
{
  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
  delay(1000);
  digitalWrite(9, HIGH);
  delay(2000);
  digitalWrite(9, LOW);
  delay(3000);
}

Si queremos conocer todos los códigos AT podemos visitar la página del fabricante en el siguiente link

About: Pablo


    7 thoughts on “Arduino + SIM900”

    1. MUCHAS GRACIAS PABLO, contenido muy útil e importante, escasea contenido de este tipo que de verdad funciona. reitero gracias bro.

    2. Pablo ,,buenas noches …te agradezco este sketch …funciona muy bien….
      antes estube tratando de usar el que te envio a continuacion… en forma separada lo trate de usar..pero algun bugs tiene
      porque no me funciono… este sketch lo integrare a otro sketch el cual seria el parte del proyecto que me ocupa…
      te abradezco, si es posible me ayudes a encontrar la razon del porque no funciona… mi email es .. magaza52@gmail,com
      gracias de antemano.

      #include
      #include
      SoftwareSerial SIM900(7, 8); // Configura el puerto serial para el SIM GSM
      LiquidCrystal_I2C lcd(0x27, 20, 4);
      String inputString = “”;
      bool stringComplete = false;
      //******************************
      void setup() {
      SIM900.begin(9600); //Configura velocidad serial para el SIM
      Serial.begin(9600);
      SIM900.println(“AT+CMGF=1\r”);// comando AT para configurar el SIM900 en modo texto
      delay(200);
      SIM900.print(“AT+CNMI=2,2,0,0,0\r”);//Configuramos el módulo para que muestre los SMS por el puerto serie.
      delay(200);
      lcd.backlight();
      lcd.clear();
      lcd.init();//inicia la LCD
      Serial.println(“OK”); //saliendo del setup !!!!!!!.
      inputString.reserve(200);
      }
      //*************************************
      void loop() {
      if (stringComplete) {
      Serial.print (inputString); //
      inputString = “”; //clear the string
      stringComplete = false;
      serialEvent();
      }
      }
      void serialEvent() {
      while (SIM900.available()) {
      char inChar = SIM900.read();
      Serial.print (inChar); Serial.println (” SIM900 enviado desde MONITOR”);
      inputString += inChar;
      if (inChar == ‘\n’) {
      stringComplete = true;
      }
      }

      1. Hola Manuel, disculpa que haya tardado tanto en responder, con la migración de mi servidor y página web, no me di cuenta que tenía desactivadas las notificaciones a mi email cuando tengo nuevos comentarios.

        Si aún tienes el fallo y decides que lo revisemos, dime ¿que error te muestra?

        ¡Saludos!

    3. buenas tardes, mi arduino esta conectado bien al modulo y todo, copie bien el codigo y lo conecte a los mismos 5 voltios del arduino el shield, pero cuando escribo el “AT” no me aparece el ok, ya intente con otros codigos para ver lo de las llamadas y sms pero no me hagarran

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    Share via
    Copy link