[RISOLTO] Power On GSM Shield

Salve a tutti ragazzi bentrovati.
Nuovo progetto ed ho un piccolo problema. :o

Arduino UNO con scheda GSM SIM900… provo ad accendere LED con SMS.

Funziona tutto perfettamente se accendo la scheda GSM SIM900 agendo sul pulsantino integrato in essa.
Io però vorrei accendere la scheda direttamente da Arduino, altrimenti ogni volta che dovesse andare via la corrente, non funzionerebbe.
Ho trovato in rete tante “soluzioni” (come porre il pin 9 in HIGH per 1 secondo) ma non mi funzionano.

Vi viene qualche idea ?

La scheda GSM che utilizzo è questa:
http://www.ebay.it/itm/NEW-SIMCOM-SIM900-Quad-band-GSM-GPRS-Shield-for-Arduino-with-micro-SD-card-slot-/151121095914

Questa è la libreria:
www.brescianet.com/appunti/Elettronica/Arduino/corso/supporto/BETA_GSM_GPRS_GPS_IDE100_v304.zip

Allego anche lo sketch:

/* -----------------------------------------------------------------------------------
 NB: Premere PWRKEY sulla shield GSM
 Accende e spegne un LED a secondo dell'SMS inviato:
 ON  => Accende il LED
 OFF => Spegne il LED
 STATUS => Mostra stato LED
 Altro => Messaggio di errore sul Serial Monitor
 ---------------------------------------------------------------------------------- */
#include "SIM900.h"
#include <SoftwareSerial.h> // necessaria alla libreria gsm.h richiamata in sms.h
// #include "inetGSM.h"     // necessaria per l'uso di HTTP
#include "sms.h"            // Libreria per la gestione degli SMS

SMSGSM sms;
int led = 13; // Il Pin 13 è quello connesso al LED
int numdata;
boolean started=false;
char smsbuffer[160];
char Mittente[20];

void setup() 
{
  Serial.begin(9600);
  Serial.println("ESEMPIO INVIO/RICEZIONE SMS");
  pinMode(led, OUTPUT);   // imposta il pin 13 come pin di OUTPUT.
  digitalWrite(led, LOW); // spegne inizialmente il led
  // Inizializzo la connessione GSM impostando il baudrate
  // Per l'utilizzo di HTTP è opportuno usare 4800 baud o meno
  if ( gsm.begin(2400) )
  {
     Serial.println("STATUS Modulo GSM = PRONTO");
     started=true;  
  }
  else 
     Serial.println("STATUS Modulo GSM = INATTIVO");
};

// legge una stringa dal Serial Monitor
//   Questa procedura serve solo nella fase di TEST ovvero 
//   quando provo a simulare i comandi SMS tramite il SERIAL MONITOR
boolean SerialRead(char s[])
{
  int i=0;
  if (Serial.available() > 0)
  {            
    while (Serial.available() > 0) 
    {
      s[i]=Serial.read();
      delay(10);
      i++;      
    }
  }
  s[i]='\0'; // Metto il terminatore di stringa
  return (i!=0);
}
// legge una stringa dal Serial Monitor
//    Questa è la versione proposta da Arduino Lab
// int readSerial(char result[])
// {
//    int i = 0;
//    while(1)
//    {
//       while (Serial.available() > 0)
//       {
//          char inChar = Serial.read();
//          if (inChar == '\n') // Line Feed
//          {
//             result[i] = '\0';
//             Serial.flush();
//             return 0;
//           }
//           if(inChar!='\r') // Scarta i Carriage Return
//           {
//              result[i] = inChar;
//              i++;
//            }
//       }
//    }
//  }


void loop() 
{
  char inSerial[50];
  char position;
  if (started)
  {
     // -- Righe commentate poichè utilizzate per nei test
     // strcpy(Mittente,"3380000000");
     // if (SerialRead(smsbuffer))
     // ------------------------------------------------------
    // Legge se ci sono messaggi disponibili sulla SIM Card
    // e li visualizza sul Serial Monitor.
    position = sms.IsSMSPresent(SMS_ALL); // Valore da 1..20
    if (position) 
    {
      // Leggo il messaggio SMS e stabilisco chi sia il mittente
      sms.GetSMS(position, Mittente, smsbuffer, 160);
      Serial.print("Comando Ricevuto [tel. "+String(Mittente)+String("]: ") + String(smsbuffer));
      if (strcmp(smsbuffer,"ON")==0)
      {
         digitalWrite(led, HIGH);   // Accende il LED impostando il voltaggio a HIGH
         Serial.println(" => Accendo il LED");
      }
      else if (strcmp(smsbuffer,"OFF")==0)
      {
         digitalWrite(led, LOW);    // Spengo il LED impostando il voltaggio a LOW
         Serial.println(" => Spengo il LED");
      }
      else if (strcmp(smsbuffer,"STATUS")==0)
      {
          if (digitalRead(led)==HIGH)
          {
             sms.SendSMS(Mittente, "STATUS: LED Acceso"); // restituisce true se invia l'SMS
             Serial.println(" => il LED e' Acceso");
          }
          else
          {
             sms.SendSMS(Mittente, "STATUS: LED Spento"); // restituisce true se invia l'SMS
             Serial.println(" => il LED e' Spento");
          }
      }
      else
         Serial.println(" => non riconosciuto!");
      sms.DeleteSMS(position); // Elimina l'SMS appena analizzato
    }
    delay(1000);
  }
};

Hai lo schema o il manuale di questa shield?

Non mi dire che hai comprato senza documentazione...

Ciao Cyber,
ecco il link con tutta la documentazione ed anche il data sheet.
Dicono di mandare alto il D7, ma io il D7 non lo trovo!

http://wiki.epalsite.com/index.php?title=SIM900_Quad-Band_GPRS_shield_with_Micro_SD_card_slot#Hardware_Connection

SIM900-shield-v1.1-1.pdf.pdf (75.4 KB)

ma la piazzola SJ1, sul lato inferiore della scheda, in prossimita' del pin D4 di Arduino, e' cortocircuitata ?

Come non c'è: è il pin 7 di Arduino!

Normalmente LOW, quando è HIGH è come se premessi il tasto POWERKEY.

Naturalmente devi rispettare il timing di questo segnale:

digitalWrite(7, HIGH);
delay(1500); // > 1 secondo
digitalWrite(7, LOW);
delay(2500); // > 2.2 secondi

la sequenza per lo spegnimento è simile:

digitalWrite(7, HIGH);
delay(1500); // > 1 secondo
digitalWrite(7, LOW);
delay(2000); // > 1.7 secondi

Assicurati che il ponticello SJ1 sul retro della scheda sia cortocircuitato (piste integre): è quello che abilita il pin 7 per questa funzione.

@Cyberhs, hai invertito LOW con HIGH

Brunello, il pin 7 è collegato alla base di un transistor NPN in configurazione ad emettitore comune il cui collettore è collegato al pulsante POWERKEY.

vero, non avevo guardato lo schema

Grazie Cyber.... sempre impeccabile!
Ho risolto come hai detto tu!
Cercavo sulla schedina e leggevo di tutto d0,d1,d2,d3 ed ovviamente il d7 era il reale pin di arduino.

Il ponticello era perfettamente saldato.

Quindi, qualora serva ad altri sintetizzerei che:

Generalmente le schedine GSM si attivano sul pin 9 (da qui la numerosa bibliografia con questo dato).... invece in questo caso si attivano sul pin 7 (come da istruzioni precedentemente allegate).

Aggiungo "risolto".

Grazie