📲 Arduino • SIM900 • SMS

Arduino SIM900: controllare un relè tramite SMS

Usiamo Arduino Uno e un modulo GSM SIM900 per ricevere comandi SMS, accendere o spegnere un relè sul pin 12 e richiederne lo stato da remoto.

ModuloSIM900
UscitaRelè D12
ComandiON • OFF • STATO
In poche parole: invii un SMS alla SIM installata nel modulo SIM900. Arduino legge il testo e, in base al comando ricevuto, attiva il relè, lo disattiva oppure invia un SMS di risposta con lo stato dell’uscita.

Il modulo GSM SIM900

SIM900 consente ad Arduino di utilizzare la rete cellulare per funzioni come SMS e comunicazione dati. In questo progetto utilizziamo soltanto la gestione dei messaggi di testo.

Cosa può fare il sistema

SMSFunzione
ONAttiva il relè collegato al pin D12
OFFDisattiva il relè
STATOInvia al mittente un SMS con lo stato del relè

Materiale necessario

🔌 Arduino Uno
📡 GSM Shield / modulo SIM900
⚡ Modulo relè
📱 SIM compatibile
🔗 Cavetti di collegamento
🧩 Breadboard

🧰 Kit Arduino consigliato

Un kit completo è utile per avere breadboard, cavetti, resistenze, LED e molti componenti di base per sperimentare con Arduino.

👉 Guarda il kit Arduino consigliato

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

📘 Vuoi imparare Arduino passo dopo passo?

Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.

👉 Scopri i miei libri su Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Schema del circuito

Schema Arduino SIM900 SMS relè

Schema del controllo remoto del relè tramite SIM900. L’immagine mantiene una larghezza massima di 443 px.

Collegamento del relè

Nel programma il relè è associato al pin digitale D12:

Pin del relè
const int rele = 12;

Il pin Arduino deve comandare l’ingresso di un modulo relè adatto, non direttamente la bobina di un relè privo di circuito di pilotaggio.

Modulo active LOW: alcuni moduli relè si attivano con LOW anziché HIGH. Se il comportamento risulta invertito, adatta la logica dello sketch al modulo utilizzato.

Installare la libreria GSM per SIM900

Questo sketch utilizza le librerie SIM900.h, SoftwareSerial.h e sms.h. È quindi necessario installare la libreria dedicata prima della compilazione.

⬇️ Scarica la libreria GSM SIM900

Compatibilità: questa libreria utilizza API specifiche per SIM900. Se utilizzi una libreria differente o una versione molto più recente dell’IDE, potresti dover adattare alcune chiamate.

Codice Arduino commentato

SIM900 – relè controllato tramite SMS
/*
  ARDUINO + SIM900: CONTROLLO DI UN RELÈ TRAMITE SMS

  Comandi:
  ON     -> attiva il relè
  OFF    -> disattiva il relè
  STATO  -> invia un SMS con lo stato del relè

  Relè -> D12
*/

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"

SMSGSM sms;

// Pin collegato al relè
const int rele = 12;

// Buffer per testo SMS e numero mittente
char smsbuffer[160];
char mittente[20];

bool started = false;

void setup() {

  Serial.begin(9600);

  pinMode(rele, OUTPUT);

  // All'avvio il relè resta spento
  digitalWrite(rele, LOW);

  Serial.println("Avvio modulo GSM SIM900...");

  // Inizializzazione GSM
  if (gsm.begin(2400)) {
    Serial.println("Modulo GSM pronto");
    started = true;
  } else {
    Serial.println("Modulo GSM non disponibile");
  }
}

void loop() {

  if (!started) {
    return;
  }

  // Cerca un SMS presente sulla SIM
  char posizione = sms.IsSMSPresent(SMS_ALL);

  if (posizione) {

    // Legge mittente e contenuto del messaggio
    sms.GetSMS(posizione, mittente, smsbuffer, 160);

    // Converte il testo in String per semplificare il confronto
    String comando = String(smsbuffer);

    comando.trim();
    comando.toUpperCase();

    Serial.print("SMS da ");
    Serial.print(mittente);
    Serial.print(": ");
    Serial.println(comando);

    // ------------------------------------------------------
    // COMANDO ON
    // ------------------------------------------------------
    if (comando == "ON") {

      digitalWrite(rele, HIGH);
      Serial.println("Relè acceso");
    }

    // ------------------------------------------------------
    // COMANDO OFF
    // ------------------------------------------------------
    else if (comando == "OFF") {

      digitalWrite(rele, LOW);
      Serial.println("Relè spento");
    }

    // ------------------------------------------------------
    // COMANDO STATO
    // ------------------------------------------------------
    else if (comando == "STATO") {

      if (digitalRead(rele) == HIGH) {

        sms.SendSMS(mittente, "STATUS: RELE Acceso");
        Serial.println("Stato inviato: relè acceso");
      }
      else {

        sms.SendSMS(mittente, "STATUS: RELE Spento");
        Serial.println("Stato inviato: relè spento");
      }
    }

    // ------------------------------------------------------
    // COMANDO NON RICONOSCIUTO
    // ------------------------------------------------------
    else {

      Serial.println("Comando SMS non riconosciuto");
    }

    // Elimina l'SMS appena elaborato
    sms.DeleteSMS(posizione);
  }

  delay(1000);
}

Come funziona lo sketch

1. Avvio del modulo GSM

Nel setup() Arduino inizializza la comunicazione seriale e prova ad avviare il modulo con gsm.begin(2400). Se l’operazione riesce, il sistema entra nello stato operativo.

2. Ricerca degli SMS

sms.IsSMSPresent(SMS_ALL) controlla se sulla SIM è presente un messaggio. Se ne trova uno, restituisce la posizione in memoria.

3. Lettura del mittente e del testo

Con sms.GetSMS() vengono recuperati il numero telefonico del mittente e il contenuto del messaggio.

4. Comandi ON e OFF

Il comando ON porta D12 a HIGH, mentre OFF lo porta a LOW.

5. Comando STATO

Quando arriva STATO, Arduino legge l’uscita D12 e risponde allo stesso numero telefonico con un SMS che indica se il relè è acceso oppure spento.

6. Eliminazione del messaggio

Dopo aver elaborato il comando, lo sketch elimina l’SMS dalla memoria del modem per evitare di processarlo nuovamente.

Personalizzare i comandi

Puoi sostituire le parole ON, OFF e STATO con comandi differenti. Per esempio potresti usare LUCE ON, LUCE OFF oppure parole più adatte alla funzione controllata.

Personalizzare i comandi SMS Arduino SIM900

Esempio di modifica delle stringhe utilizzate come comandi SMS.

Alimentazione del SIM900

Il modem GSM può richiedere picchi di corrente importanti durante la registrazione alla rete e la trasmissione radio. Un’alimentazione insufficiente può causare riavvii, perdita della rete o SMS non inviati.

Importante: utilizza un’alimentazione adeguata al modulo SIM900 che possiedi e segui le specifiche della relativa scheda. Non dare per scontato che la sola alimentazione USB di Arduino sia sufficiente.

Verificare la rete cellulare

Prima di concentrarti sul codice assicurati che la SIM e il modulo riescano realmente a registrarsi sulla rete disponibile nella tua zona. SIM900 è un modem GSM/GPRS e la possibilità di utilizzarlo dipende dalla disponibilità di una rete cellulare compatibile con il modulo.

Scarica i file

⬇️ Scarica sms_sim900_ok.ino ⬇️ Scarica libreria GSM

Debug rapido

  • verifica che SIM900 completi la registrazione alla rete;
  • controlla che la SIM possa ricevere e inviare SMS;
  • verifica l’alimentazione del modem;
  • controlla che il relè sia realmente collegato a D12;
  • invia esattamente ON, OFF o STATO;
  • usa il Monitor Seriale a 9600 baud per leggere i messaggi di debug;
  • se il relè lavora al contrario, controlla se il modulo è active LOW.

Varianti del progetto

  • controllare più relè;
  • autorizzare soltanto uno o più numeri telefonici;
  • inviare una conferma anche dopo ON e OFF;
  • leggere sensori e restituire i valori tramite SMS;
  • creare un allarme che invia automaticamente un messaggio;
  • salvare lo stato del relè in EEPROM;
  • utilizzare un modem cellulare più recente se la rete GSM non è disponibile.

Cosa devi ricordare

  • SIM900 riceve i comandi tramite SMS.
  • Il relè viene comandato dal pin D12.
  • ON attiva l’uscita e OFF la disattiva.
  • STATO restituisce un SMS al mittente.
  • La libreria SIM900 deve essere installata nell’IDE.
  • L’alimentazione del modem GSM è fondamentale per un funzionamento stabile.

Domande frequenti

Posso cambiare il pin del relè?

Sì. Modifica la costante rele e collega il modulo relè al nuovo pin scelto.

Posso usare parole diverse da ON e OFF?

Sì. Modifica le stringhe confrontate nello sketch mantenendo identico il testo che invierai tramite SMS.

Perché SIM900 si riavvia quando cerca la rete?

Una causa frequente è un’alimentazione incapace di sostenere i picchi di corrente del modem. Verifica alimentatore, cablaggio e tensione prevista dalla tua scheda SIM900.

Il progetto funziona con qualsiasi rete mobile?

No. Il modem SIM900 richiede una rete cellulare compatibile con la tecnologia supportata dal modulo. Verifica la disponibilità del servizio nella tua zona prima di realizzare il circuito.