Telefonul mobil este o invenție revoluționară a secolului. A fost conceput în primul rând pentru efectuarea și primirea de apeluri și mesaje text, dar a devenit întreaga lume după ce telefonul inteligent a intrat în imagine. În acest proiect construim un sistem de automatizare a locuinței, în care se poate controla aparatele electrocasnice, folosind telefonul simplu bazat pe GSM, doar prin trimiterea de SMS-uri prin telefonul său. În acest proiect, nu este nevoie de niciun telefon inteligent, doar vechiul telefon GSM va funcționa pentru a porni și opri orice aparat electronic de uz casnic, de oriunde. Puteți verifica, de asemenea, câteva proiecte de automatizare casnică fără fir aici: automatizare casnică controlată de la distanță IR utilizând Arduino, casetă automatizată casnică controlată prin Bluetooth, împreună cu casă automatizată bazată pe DTMF, casă casată controlată de computer folosind Arduino.
Explicație de lucru
În acest proiect, Arduino este utilizat pentru controlul întregului proces. Aici am folosit comunicația fără fir GSM pentru controlul aparatelor de uz casnic. Trimitem câteva comenzi cum ar fi „# A.light on *”, „# A.light off *” și așa mai departe pentru controlul aparatelor electrocasnice de curent alternativ. După ce a primit comenzile date de Arduino prin GSM, Arduino trimite semnal către relee, pentru a porni sau opri aparatele electrocasnice folosind un driver de releu.
Componente circuit:
- Arduino UNO
- Modul GSM
- ULN2003
- Releu 5 volți
- Bec cu suport
- Conectarea firelor
- Placă de pâine
- 16x2 LCD
- Alimentare electrică
- Telefon mobil
Aici am folosit un prefix în șirul de comandă care este „#A”. Acest prefix este folosit pentru a identifica că comanda principală vine lângă ea și * la sfârșitul șirului indică faptul că mesajul a fost încheiat.
Când trimitem SMS către modulul GSM prin mobil, atunci GSM primește acel SMS și îl trimite la Arduino. Acum Arduino citește acest SMS și extrage comanda principală din șirul primit și stochează într-o variabilă. După aceasta, Arduino compară acest șir cu șirul predefinit. Dacă s-a produs meciul, Arduino trimite semnal către releu prin driverul de releu pentru pornirea și oprirea aparatelor electrocasnice. Și rezultatul relativ se tipărește și pe ecranul LCD 16x2 utilizând comenzi adecvate.
Aici, în acest proiect, am folosit un bec de 3 wați zero pentru demonstrație, care indică ventilator, lumină și televizor.
Mai jos este lista mesajelor pe care le trimitem prin SMS, pentru a porni și opri ventilatorul, lumina și televizorul:
S. nr. |
Mesaj |
Operațiune |
1 |
# A.fan pe * |
Ventilator PORNIT |
2 |
# A.fan off * |
Ventilator OPRIT |
3 |
# A. lumina aprinsă * |
Lumina pe |
4 |
# A. lumina stinsă * |
Lumina stinsa |
5 |
# A.tv pe * |
TV PORNIT |
6 |
# A.tv dezactivat * |
TV oprit |
7 |
# A.tot pe * |
Totul pe |
8 |
# A.tot off * |
Toate oprite |
Modul GSM:
Modulul GSM este utilizat în multe dispozitive de comunicații care se bazează pe tehnologia GSM (Global System for Mobile Communications). Este folosit pentru a interacționa cu rețeaua GSM utilizând un computer. Modulul GSM înțelege numai comenzile AT și poate răspunde corespunzător. Cea mai de bază comandă este „AT”, dacă GSM răspunde OK, atunci funcționează bine, altfel răspunde cu „EROARE”. Există diverse comenzi AT, cum ar fi ATA pentru a răspunde la un apel, ATD pentru a forma un apel, AT + CMGR pentru a citi mesajul, AT + CMGS pentru a trimite sms etc. Comenzile AT ar trebui să fie urmate de Carriage return ie \ r (0D în hex), cum ar fi „AT + CMGS \ r”. Putem folosi modulul GSM folosind aceste comenzi:
ATE0 - Pentru ecou
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Număr mobil”
>> Acum putem scrie mesajul nostru
>> După scrierea mesajului
Comanda Ctrl + Z trimite mesaj (26 în zecimal).
ENTER = 0x0d în HEX
SIM900 este un sistem complet Quad-band Modul GSM / GPRS, care oferă GSM / GPRS 850/900 / 1800 / 1900MHz de performanță pentru serviciile de voce, SMS și date cu un consum redus de energie.
Descrierea circuitului
Conexiunile acestui circuit de automatizare casnică bazat pe GSM sunt destul de simple, aici este utilizat un afișaj cu cristale lichide pentru afișarea stării aparatelor electrocasnice care este conectat direct la arduino în modul 4 biți. Pinii de date ai ecranului LCD și anume RS, EN, D4, D5, D6, D7 sunt conectați la pinul digital arduino numărul 6, 7, 8, 9, 10, 11. Și pinii Rx și Tx ai modulului GSM sunt conectați direct la Tx și Rx pinul Arduino respectiv. Iar modulul GSM este alimentat folosind un adaptor de 12 volți. Releele SPDT 3 de 5 volți sunt utilizate pentru controlul LIGHT, FAN și TV. Și relele sunt conectate la pinul arduino numărul 3, 4 și 5 prin driverul de releu ULN2003 pentru controlul LIGHT, FAN și TV respectiv.
Cod Descriere
În programarea unei părți a acestui proiect, în primul rând în programare includem o bibliotecă pentru afișarea cristalelor lichide și apoi definim date și pini de control pentru LCD și aparate de uz casnic.
#include
După această comunicare serială este inițializată la 9600 bps și dă direcția pinului folosit.
void setup () {lcd.begin (16,2); Serial.begin (9600); pinMode (led, OUTPUT); pinMode (Fan, OUTPUT); pinMode (Light, OUTPUT); pinMode (TV, OUTPUT);
Pentru a primi date în serie am folosit două funcții, una este Serial.available, care verifică dacă apar date seriale, iar alta este Serial.read, care citește datele care vin în serie.
while (Serial.available ()) {char inChar = Serial.read ();
După ce am primit datele în serie, le-am stocat într-un șir și apoi așteptăm Enter.
void serialEvent () {while (Serial.available ()) {if (Serial.find ("# A.")) {digitalWrite (led, HIGH); întârziere (1000); digitalWrite (led, LOW); while (Serial.available ()) {char inChar = Serial.read (); str = inChar; if (inChar == '*') {temp = 1; întoarcere; }
Când intră programul Enter, începeți să comparați șirul primit cu șirul deja definit și dacă șirul se potrivește, atunci se efectuează o operație relativă utilizând comanda corespunzătoare care este dată în cod.
void check () {if (! (strncmp (str, "tv on", 5))) {digitalWrite (TV, HIGH); lcd.setCursor (13,1); lcd.print („ACTIVAT”); întârziere (200); } else if (! (strncmp (str, "tv off", 6))) {digitalWrite (TV, LOW); lcd.setCursor (13,1); lcd.print ("OPRIT"); întârziere (200); }