SIM900 GSM

Buenas, no sé muy bien donde ubicar este post :confused:. Si este no es el lugar, me lo decís y lo coloco en el sitio adecuado.

Lo que os quiero preguntar a usuarios que ya tengáis en funcionamiento una tarjeta GSM/GPRS, qué tipo de SIM me recomendaís para utilizar en mi SIM900 GSM. La SIM que quiero utilizar sería para que recibiera y enviase SMS y si no es muy cara que reciba llamadas, para que al recibir una llamada se desate algún evento.

Un saludo, gracias

El SIM900 es GSM/GPRS o sea 2G/2.5/EDGE. Esa es tu respuesta.

Esto es lo que dice la hoja de datos del SIM900 Specifications for GPRS Data

  • GPRS class 10: max. 85.6 kbps (downlink)
  • PBCCH support
  • Coding schemes CS 1, 2, 3, 4
  • PPP-stack

Y aca que significa cada cosa https://en.wikipedia.org/wiki/Comparison_of_mobile_phone_standards

Mira donde dice Cellular Network compartations. Veras que un SIM900 no es 3G porque dice Compliant to GSM phase 2/2+

  • Class 4 (2 W @850/ 900 MHz)
  • Class 1 (1 W @ 1800/1900MHz)

HOLA BUENAS TARDES, SOY DE ECUADOR.

ESTOY REALIZANDO UN PROYECTO CON UN ARDUINO UNO, UN MODULO GSM SIM900 Y UN MODULO RELÉ DE DOS CANALES.
EL PROYECTO CONSISTE EN ENCENDER Y APAGAR LOS FOCOS DE UNA CASA X MEDIO DE MENSAJES DE TEXTO.

PERO MI PROBLEMA ES QUE LO CONECTE DE LA SIGUIENTE MANERA, Y LE HICE LA PRUEBA DE LLAMAR CONECTADO AL PUERTO SERIE DEL GSM Y DEL ARDUINO UNO, LA PRIMERA VEZ FUNCIONO, DESPUÉS LE CARGUE UN NUEVO CÓDIGO Y ES COMO QUE NO FUNCIONARA EL PUERTO SERIE DEL GSM. ALGUIEN QUE ME GUIÉ X FAVOR.

LA CONEXIÓN LA HICE TAL CUAL ESTA IMAGEN CLARO CON UNA ALIMENTACION EXTERNA: http://hetpro-store.com/TUTORIALES/wp-content/uploads/2015/10/tx_rx.png?c1db43

ESTA ES LA PROGRAMACIÓN QUE LE CARGUE Y DESPUÉS COMO QUE NO FUNCIONO EL PUERTO SERIE DEL GSM.

/*este programa a sido diseñado completamente por el ingeniero edison viveros
pasto colombia 2015
http://www.editronikx.com
si va modificar este codigo nombre al autor
para hacer funcionar el codigo se diseño con un arduino leonardo el cual varia serial con serial1 enviando datos
por el pc o el tx rx del arduino

envie @LEDON y activa un led por el pin 8,
envie @LEDOF Y APAGA EL LED
en otro tutorial anterior ya explique como enviar mensajes
*/

char numero_cell[]="+593997964325";//meter numero de telefono
int pulsador =9;
int led =13;
boolean valor=true;
int i=0;
int j=0;
char DAT;
char DAT_dos;
boolean condicion=true;
char datosSERIAL[10];
//char clave_uno[]= "LEDON"; //OTRA FORMA DE USAR UN ARREGLO
char clave_uno[]={'L','E','D','O','N'};//AQUI CAMBIAMOS TODO EL MENSAJE DE CONTROL
char clave_dos[]={'L','E','D','O','F'};//AQUI CAMBIAMOS TODO EL MENSAJE DE CONTROL
#include <SoftwareSerial.h>
SoftwareSerial SIM900(7,8);
void setup()
{
  pinMode(pulsador,INPUT);
  pinMode(led,OUTPUT);
  pinMode(13,OUTPUT);
  SIM900.begin(19200);
  Serial.begin(19200);
  
  delay(2000);
  configuracion_inicial();
  SIM900.println("ITSO; Jairo Jaramillo");
 
  delay(1000);
}
/////////////////////////
void loop()
{
 
SIM900.println("esperando recibir mensaje...");
while(true)
{
  leer_mensaje(); 
}
 
}
///////////////////////
void configuracion_inicial()//configura los codigos de lectura de mensajes
{
  Serial.println("AT+IPR=9600");//modo texto
  SIM900.println("AT+IPR=9600");//modo texto
  delay(300);
  Serial.println("AT+CMGF=1");//modo texto
  SIM900.println("AT+CMGF=1");//modo texto
  delay(300);
  Serial.println("AT+CMGR=?");//ACTIVAMOS CODIGO PARA RECIBIR MENSAJES
  SIM900.println("AT+CMGR=?");//ACTIVAMOS CODIGO PARA RECIBIR MENSAJES
 delay(300);
  Serial.println("AT+CNMI=2,2,0,0");//ACTIVAMOS PARA VER MENSAJES
  SIM900.println("AT+CNMI=2,2,0,0");//ACTIVAMOS PARA VER MENSAJES
  //Serial1.println("AT+CNMI=3,3,0,0");//ACTIVAMOS PARA VER MENSAJES
  //Serial.println("AT+CNMI=3,3,0,0");//ACTIVAMOS PARA VER MENSAJES
  delay(300);
  SIM900.println("configuracion terminada");
  delay(300);
    
}
///////////////////
void leer_mensaje()
{
  salir:
    if (Serial.available()>0)
    {
     
      char DAT =Serial.read();
      SIM900.println(DAT);
      if(DAT=='@')//el arroba hace detectar el inicio del codigo
      {//If arroba
      digitalWrite(13,HIGH);//led de testeo de mensaje
      SIM900.println("LED UNO ACCCIONADO");//para verificar si lo detecto
      //////////////////////
      while(true)//ingresa en un while para leer solo los codigos futuros que estan por llegar despues de la arroba
      {
          if (Serial.available()>0)
           {//cierre del segundo if
               char DAT_dos =Serial.read();//@LEDON enter
               datosSERIAL[j]= DAT_dos;//almacena en cadena de caracteres, suma de caracteres     
               j++;
               //////////////////////////
               if (DAT_dos=='\n')//cuando termine de entregar todos los datos dara un enter
               //garantizando el final del codigo
                {
                 
                 SIM900.println("Lectura:");//IMPRIME LOS CARACTERES ALMACENADOS PARA VER SI TODO ESTA OK
                 for(int i=0;i<=j;i++)
                  {
                 SIM900.print(datosSERIAL[i]);//IMPRIME TODO EL CODIGO GUARDADO EN EL ARRAY
                  }
                  led_on();//llama a la la funcion y verifica codigo
                  led_off();//llama ala funcion para ver si es de apagar el led
                  delay(500);
                  digitalWrite(13,LOW);
                  
                  for(int i=0;i<=j;i++)
                  {
                 datosSERIAL[i]==0;//borro array
                 DAT_dos=0;
                 DAT=0;
                  }
                  j=0;//borra el puntero o acumulador si no se hace esto no detecta los sigueintes codigos
                  goto salir;//sale de todos los ciclos y va al inicio para volver a leer codigo
                 }//CIERRA AL /N
               ////////////////////////     
            } //cierre del segundo if
          }//while
       }//arroba
    
    }//serial available 
  }  

//////////////////
void led_on()
{
  /////////////////////////
  if(datosSERIAL[0]==clave_uno[0] && datosSERIAL[1]==clave_uno[1] && datosSERIAL[2]==clave_uno[2] && datosSERIAL[3]==clave_uno[3] && datosSERIAL[4]==clave_uno[4])
   {
    digitalWrite(led,HIGH);
    SIM900.println(" LED ON ACTIVADO");
    mensaje_encendido();
   }
                  
   ////////////////////////////
}
//////////////////
void led_off()
{
  /////////////////////////
  if(datosSERIAL[0]==clave_dos[0] && datosSERIAL[1]==clave_dos[1] && datosSERIAL[2]==clave_dos[2] && datosSERIAL[3]==clave_dos[3] && datosSERIAL[4]==clave_dos[4])
   {
    digitalWrite(led,LOW);
    SIM900.println(" LED OFF DESACTIVADO.....");
    mensaje_apagado();
   }
                  
   ////////////////////////////
}

/////////////////////////////ENVIO DE MENSAJES
void mensaje_encendido()
    {
      Serial.println("AT+CMGF=1");//modo texto 
      //Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro
      delay(2000);
      Serial.print("AT+CMGS=");// comando de envio de mensaje 
      //Imprime los datos al puerto serie como texto ASCII
      Serial.print((char)34);//ponemos las comillas ", para que lo tome debe ser char de lo contrario el serial envia caracter por caracter
      Serial.print(numero_cell);//colocamos numero de telefono
      Serial.println((char)34);//volvemos a poner el caracter "
      delay(200);//tiempo para que de respuesta el modulo >
      Serial.print("led uno activo ONN");//mensaje que enviare
      Serial.print((char)26);//ponemos el simbolo ascii 26,que corresponde a CTRL+Z,con lo que el modulo sabe que el sms termino
      
      SIM900.print("led uno activo ONN");//mensaje que enviare
    }
    //////////////////////////
    void mensaje_apagado()
    {
      Serial.println("AT+CMGF=1");//modo texto 
      //Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro
      delay(2000);
      Serial.print("AT+CMGS=");// comando de envio de mensaje 
      //Imprime los datos al puerto serie como texto ASCII
      Serial.print((char)34);//ponemos las comillas ", para que lo tome debe ser char de lo contrario el serial envia caracter por caracter
      Serial.print(numero_cell);//colocamos numero de telefono
      Serial.println((char)34);//volvemos a poner el caracter "
      delay(200);//tiempo para que de respuesta el modulo >
      Serial.print("led uno apagado OFF");//mensaje que enviare
      Serial.print((char)26);//ponemos el simbolo ascii 26,que corresponde a CTRL+Z,con lo que el modulo sabe que el sms termino
      
      SIM900.print("led uno apagado OFF");//mensaje que enviare
    }