Controllare un relè con Arduino GSM Shield 2 tramite SMS
Usiamo Arduino Uno e GSM Shield 2 per ricevere comandi via SMS e attivare o disattivare un relè da remoto con semplici messaggi di testo.
on oppure off, cambia lo stato del relè.Come funziona il progetto
La GSM Shield 2 permette ad Arduino di utilizzare una SIM per comunicare sulla rete mobile. In questo progetto sfruttiamo la ricezione degli SMS per comandare un’uscita digitale collegata a un relè.
Quando la shield si registra correttamente sulla rete, il LED verde collegato ad Arduino si accende. Da quel momento il sistema è pronto a ricevere i comandi.
Arduino Uno con GSM Shield 2 e scheda SIM installata.
Materiale necessario
🧰 Kit Arduino consigliato
Un kit completo è utile per avere già a disposizione LED, resistenze, breadboard, relè e cavetti per molti progetti Arduino.
👉 Guarda il kit Arduino consigliatoLink 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.
👉 Scopri i miei libri su ArduinoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema del circuito
Schema del circuito con GSM Shield 2 e relè collegato al pin D10.
Collegamenti principali
| Elemento | Pin Arduino |
|---|---|
| Ingresso relè | D10 |
| LED verde | D12 |
| GSM Shield 2 | Montata su Arduino Uno |
Codice Arduino commentato
La versione seguente mantiene la stessa logica del progetto ma gestisce il testo ricevuto in modo più ordinato: termina correttamente la stringa, rimuove spazi e converte il comando in minuscolo prima del confronto.
#include <GSM.h>
// Oggetti per accesso GSM e gestione SMS
GSM gsmAccess;
GSM_SMS sms;
// Pin utilizzati
const int rele = 10;
const int ledVerde = 12;
// Comandi SMS
String accendi = "on";
String spegni = "off";
// Buffer per il messaggio ricevuto
char ricevuto[20];
void setup() {
pinMode(rele, OUTPUT);
pinMode(ledVerde, OUTPUT);
// Stato iniziale
digitalWrite(rele, LOW);
digitalWrite(ledVerde, LOW);
Serial.begin(9600);
// Avvia la connessione GSM
bool connesso = false;
while (!connesso) {
if (gsmAccess.begin() == GSM_READY) {
connesso = true;
}
}
// GSM registrato sulla rete
digitalWrite(ledVerde, HIGH);
}
void loop() {
if (sms.available()) {
int i = 0;
// Legge il contenuto dell'SMS
while (sms.available() && i < 19) {
char c = sms.read();
ricevuto[i] = c;
i++;
}
// Termina correttamente la stringa
ricevuto[i] = '\0';
String comando = String(ricevuto);
comando.trim();
comando.toLowerCase();
if (comando == accendi) {
digitalWrite(rele, HIGH);
}
if (comando == spegni) {
digitalWrite(rele, LOW);
}
// Cancella il messaggio dalla memoria del modem
sms.flush();
}
delay(500);
}
Come funziona il codice
1. Avvio della GSM Shield
Nel setup() Arduino prova ad avviare la connessione GSM finché gsmAccess.begin() restituisce lo stato GSM_READY.
2. Indicazione di rete pronta
Quando la shield è registrata sulla rete, il LED verde sul pin D12 viene acceso.
3. Lettura degli SMS
Nel loop() il programma verifica se sono disponibili nuovi messaggi. Il testo viene letto nel buffer ricevuto e trasformato in una stringa.
4. Comando ON
Se il messaggio ricevuto è on, Arduino porta D10 a HIGH e attiva il relè.
5. Comando OFF
Se il messaggio è off, D10 viene portato a LOW e il relè viene disattivato.
Inviare i comandi
Dopo che la shield si è registrata sulla rete, invia un SMS al numero della SIM inserita nella GSM Shield:
| SMS | Azione |
|---|---|
on | Attiva il relè |
off | Disattiva il relè |
Esempio di utilizzo dei comandi SMS per il controllo remoto.
Personalizzare i comandi SMS
Le parole possono essere cambiate direttamente nel codice:
String accendi = "on";
String spegni = "off";
Per esempio puoi sostituire on con apri e off con chiudi, oppure utilizzare parole più specifiche per il dispositivo collegato.
Variante: impulso temporizzato sul relè
Per alcune applicazioni, come simulare la pressione di un pulsante o comandare un ingresso impulsivo, il relè non deve rimanere acceso. Può essere attivato per un breve intervallo e poi spento automaticamente.
Sezione del codice dedicata all’attivazione del relè.
Esempio della modifica per generare un impulso temporizzato.
if (comando == "on") {
digitalWrite(rele, HIGH);
// Mantiene il relè attivo per mezzo secondo
delay(500);
digitalWrite(rele, LOW);
}
Con delay(500) il relè resta attivo per mezzo secondo e poi torna automaticamente allo stato LOW.
Applicazioni possibili
- apertura di un cancello tramite impulso;
- accensione o spegnimento di un dispositivo remoto;
- attivazione di un sistema di allarme;
- comando di un contatto pulito;
- gestione remota di piccoli sistemi in assenza di Wi-Fi.
Scarica lo sketch
Debug rapido
- verifica che la SIM sia attiva;
- controlla l’eventuale PIN della SIM;
- attendi la registrazione della GSM Shield sulla rete;
- verifica che il LED verde si accenda;
- controlla il relè sul pin D10;
- invia esattamente i comandi previsti;
- se il relè lavora al contrario, verifica se il modulo è active LOW;
- controlla alimentazione e assorbimento della GSM Shield.
Varianti del progetto
- accettare comandi soltanto da numeri autorizzati;
- inviare un SMS di conferma dopo ogni comando;
- gestire più relè;
- aggiungere un sensore e richiedere il suo stato via SMS;
- usare comandi come
stato,apri,chiudi; - aggiungere un timeout automatico del relè.
Cosa devi ricordare
- La GSM Shield riceve gli SMS attraverso la SIM.
- Il relè è collegato al pin D10.
- Il LED verde su D12 indica che la connessione GSM è pronta.
onattiva il relè eofflo disattiva.- Il relè può anche essere usato in modalità impulso temporizzato.
Domande frequenti
Perché la GSM Shield non si registra sulla rete?
Controlla SIM, copertura, alimentazione e compatibilità della rete mobile con la shield utilizzata.
Posso cambiare le parole ON e OFF?
Sì. Basta modificare le stringhe accendi e spegni nel codice.
Posso usare il progetto per aprire un cancello?
Sì, se il cancello dispone di un ingresso a contatto adatto. In quel caso è generalmente più utile la variante a impulso breve del relè.
Il relè rimane acceso dopo il comando ON?
Nella modalità standard sì. Se vuoi soltanto un impulso, usa la variante con attivazione, ritardo e successivo spegnimento.

