Il telefono cellulare è un'invenzione rivoluzionaria del secolo. È stato progettato principalmente per effettuare e ricevere chiamate e messaggi di testo, ma è diventato il mondo intero dopo che lo smartphone è entrato in scena. In questo progetto stiamo realizzando un sistema di automazione domestica, dove si possono controllare gli elettrodomestici, utilizzando il semplice telefono basato su GSM, semplicemente inviando SMS tramite il proprio telefono. In questo progetto, non è necessario alcuno smartphone, solo il vecchio telefono GSM funzionerà per accendere e spegnere qualsiasi apparecchio elettronico domestico, da qualsiasi luogo. Puoi anche controllare altri progetti di automazione domestica wireless qui: automazione domestica controllata da IR utilizzando Arduino, automazione domestica controllata da Bluetooth insieme a automazione domestica basata su DTMF, automazione domestica controllata da PC utilizzando Arduino.
Spiegazione di lavoro
In questo progetto, Arduino viene utilizzato per controllare l'intero processo. Qui abbiamo utilizzato la comunicazione wireless GSM per il controllo degli elettrodomestici. Inviamo alcuni comandi come "# A.light on *", "# A.light off *" e così via per il controllo degli elettrodomestici AC. Dopo aver ricevuto i comandi dati da Arduino tramite GSM, Arduino invia il segnale ai relè, per accendere o spegnere gli elettrodomestici utilizzando un driver relè.
Componenti del circuito:
- Arduino UNO
- Modulo GSM
- ULN2003
- Relè 5 volt
- Lampadina con supporto
- Cavi di collegamento
- Tagliere per il pane
- LCD 16x2
- Alimentazione elettrica
- Cellulare
Qui abbiamo usato un prefisso nella stringa di comando che è "#A.". Questo prefisso viene utilizzato per identificare che il comando principale sta arrivando accanto ad esso e * alla fine della stringa indica che il messaggio è stato terminato.
Quando inviamo SMS al modulo GSM tramite cellulare, il GSM riceve quell'SMS e lo invia ad Arduino. Ora Arduino legge questo SMS ed estrae il comando principale dalla stringa ricevuta e lo memorizza in una variabile. Dopodiché, Arduino confronta questa stringa con una stringa predefinita. Se si verifica una corrispondenza, Arduino invia il segnale al relè tramite il driver del relè per accendere e spegnere gli elettrodomestici. E il risultato relativo viene stampato anche su LCD 16x2 utilizzando i comandi appropriati.
Qui in questo progetto abbiamo utilizzato 3 lampadine da zero watt per la dimostrazione che indica ventola, luce e TV.
Di seguito è riportato l'elenco dei messaggi che inviamo tramite SMS, per accendere e spegnere ventola, luce e TV:
S.no. |
Messaggio |
Operazione |
1 |
# A. fan su * |
Ventilatore acceso |
2 |
# A. fan spento * |
Ventilatore spento |
3 |
# A.Luce accesa * |
Accendi |
4 |
# A. luce spenta * |
Luci spente |
5 |
# A.tv su * |
TV accesa |
6 |
# A.tv off * |
TV spenta |
7 |
# A tutto su * |
Tutto acceso |
8 |
# A tutto spento * |
Tutto spento |
Modulo GSM:
Il modulo GSM è utilizzato in molti dispositivi di comunicazione basati sulla tecnologia GSM (Global System for Mobile Communications). Viene utilizzato per interagire con la rete GSM utilizzando un computer. Il modulo GSM comprende solo i comandi AT e può rispondere di conseguenza. Il comando più semplice è "AT", se il GSM risponde bene allora funziona bene altrimenti risponde con "ERRORE". Ci sono vari comandi AT come ATA per rispondere a una chiamata, ATD per comporre una chiamata, AT + CMGR per leggere il messaggio, AT + CMGS per inviare l'sms, ecc. I comandi AT dovrebbero essere seguiti da Carriage return ie \ r (0D in esadecimale), come "AT + CMGS \ r". Possiamo utilizzare il modulo GSM utilizzando questi comandi:
ATE0 - Per l'eco disattivato
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Numero di cellulare"
>> Ora possiamo scrivere il nostro messaggio
>> Dopo aver scritto il messaggio
Ctrl + Z invia il comando del messaggio (26 in decimale).
INVIO = 0x0d in HEX
Il SIM900 è un modulo GSM / GPRS quad-band completo che fornisce prestazioni GSM / GPRS 850/900/1800/1900 MHz per voce, SMS e dati con un basso consumo energetico.
Descrizione del circuito
I collegamenti di questo circuito domotico basato su GSM sono abbastanza semplici, qui viene utilizzato un display a cristalli liquidi per visualizzare lo stato degli elettrodomestici che è direttamente collegato ad arduino in modalità 4 bit. I pin dati dell'LCD, ovvero RS, EN, D4, D5, D6, D7, sono collegati ai pin digitali arduino numero 6, 7, 8, 9, 10, 11. E i pin Rx e Tx del modulo GSM sono collegati direttamente a Tx e Rx pin di Arduino rispettivamente. E il modulo GSM è alimentato utilizzando un adattatore da 12 volt. I relè SPDT 3 da 5 volt sono usati per controllare LUCE, VENTOLA e TV. E i relè sono collegati al pin arduino numero 3, 4 e 5 tramite il driver del relè ULN2003 per il controllo rispettivamente di LUCE, VENTOLA e TV.
Descrizione del codice
Nella programmazione parte di questo progetto, prima di tutto nella programmazione includiamo libreria per display a cristalli liquidi e poi definiamo dati e pin di controllo per LCD ed elettrodomestici.
#includere
Dopo questa comunicazione seriale viene inizializzata a 9600 bps e fornisce la direzione al pin utilizzato.
void setup () {lcd.begin (16,2); Serial.begin (9600); pinMode (led, OUTPUT); pinMode (Fan, OUTPUT); pinMode (Light, OUTPUT); pinMode (TV, OUTPUT);
Per ricevere i dati in modo seriale abbiamo utilizzato due funzioni una è Serial.available che controlla se sono in arrivo dati seriali e l'altra è Serial.read che legge i dati che arrivano in modo seriale.
while (Serial.available ()) {char inChar = Serial.read ();
Dopo aver ricevuto i dati in modo seriale, li abbiamo memorizzati in una stringa e quindi in attesa di Invio.
void serialEvent () {while (Serial.available ()) {if (Serial.find ("# A.")) {digitalWrite (led, HIGH); ritardo (1000); digitalWrite (led, LOW); while (Serial.available ()) {char inChar = Serial.read (); str = inChar; if (inChar == '*') {temp = 1; ritorno; }
Quando arriva Enter, il programma inizia a confrontare la stringa ricevuta con la stringa già definita e se la stringa corrisponde, viene eseguita un'operazione relativa utilizzando il comando appropriato fornito nel codice.
void check () {if (! (strncmp (str, "tv on", 5))) {digitalWrite (TV, HIGH); lcd.setCursor (13,1); lcd.print ("ON"); ritardo (200); } else if (! (strncmp (str, "tv off", 6))) {digitalWrite (TV, LOW); lcd.setCursor (13,1); lcd.print ("OFF"); ritardo (200); }