SMS control cu Arduino via PC

Proiectul face parte din categoria “Smart-Home” sau “Home-Automation” si va prezinta o solutie simpla si ieftina de a controla la distanta deschiderea/inchiderea usilor casei dvs, aprinderea/stingerea luminilor, in general controlul oricarui fel de dispozitive, la cerere, cu ajutorul telefonului mobiul personal.
Intregul sistem este compus din:
– Un PC
– Un microcontroller (de exemplu Arduino)
– Un telefon mobil cu suport de modem (majoritatea terminalelor actuale corespund)
– O cartela/abonament valabil intr-o retea GSM (pentru a putea primi/trimite mesaje SMS)

Mod de functionare

Telefonul mobil se va conecta la PC in modul modem/dial-up si reprezinta sistemul de comanda. La conectarea la calculator, modemului i se va atribui automat – de catre sistemul de operare – a un port serial virtual (COMx) care poate fi folosit pentru initierea conexiunii/ transmiterea de comenzi. Setul de instructiuni acceptate este cunoscut ca set de comenzi AT (compatibil Hayes). Detalii aici.

Softul pentru PC in principiu va ‘asculta’ primirea de SMS-uri cu ajutorul telefonului. Interogarea se poate face in bucla/pooling – la intervale de timp (pop),sau printr-un sistem de evenimente (push). Pentru a testa capabilitatile modemului/telefonului, acesta se poate testa prin crearea unei conexiuni seriale cu ajutorul unui client ce permite acest lucru (precum PuTTY sau HyperTerminal in Windows). De exemplu, trimiterea
instructiunii “ATI” pe un device Sony Ericsson k310 va avea ca raspuns un text de identificare a modelului, tipului, reviziei telefonului. Setul de instructiuni AT poate fi gasit aici.

Prin rutarea mesajelor sosite direct catre terminal (AT+CNMI), ele vor putea fi parsate/interpretate direct. Atentie insa ca mesajul nu este in cleartext, ci se prezinta codificat in formatul PDU, continand, pe langa informatia utila si un header pentru metadate precum centrul de servicii al retelei GSM, stampa de timp, expeditor etc. De asemenea, reprezentarea caracterelor se poate face pe 7, 8 sau 16 biti (mesajele SMS clasice sunt de obicei reprezentate pe caractere de 7 biti, mesajele EMS – imagini sau sunete prin SMS – pe 8 biti, iar mesajele cu caractere internationale, pe 16 biti). Mai multe despre formatul PDU, aici.

Scenariul clasic de utilizare a sistemului de control este urmatorul: posesorul/persoana avizata in sistem detine un telefon mobil pe care compune un mesaj scurt SMS, continand o comanda simpla, pre-stabilita in sistem (de exemplu: “Aprinde lumina”). Mesajul il va trimite catre numarul de telefon asociat cartelei SIM existente in modemul sistemului. Conectat la PC, telefonul/modemul se asigura de rutarea mesajului catre terminal (sau va fi citit in bucla de catre programul instalat pe PC). In continuare, programul va decodifica mesajul din format PDU in cleartext si va extrage informatia utila, anume textul mesajului si expeditorul. Textul mesajului reprezinta comanda in sine iar de expeditor avem nevoie pentru a permite blocarea expeditorilor falsi sau fraudulosi. Avand o mica baza de date cu lista de comenzi permise si actiunile asociate, programul va efectua in continuare o cerere catre microcontrollerul conectat.

Sistemul de actiune este reprezentat de un microcontroller (in cazul de fata Arduino), care, pe baza unor comenzi este capabil sa execute anumite actiuni (care se reduc la actionarea LOW/HIGH a anumitor iesiri). Asadar, dupa primirea si interpretarea mesajului SMS, programul instalat pe PC trimite mai departe catre Arduino o anumita cerere (care in memoria microcontrollerului are o anumita semnificatie, in speta actionarea anumitor iesiri). Detalii despre Arduino si modalitati de comunicare seriala cu acesta se gasesc pe pagina sa oficiala.

 

7 comments for “SMS control cu Arduino via PC

  1. Arsene Daniel
    October 29, 2012 at 00:38

    Foarte bine, eu lucrez la un proiect cu GPS. Momentan citesc NMEA dintr-un BT-GPS prin serial cu un mac, trimit comenzi AT prin serial catre un T230. Urmeaza sa inlocuiesc laptopul cu un Arduino care sa citeasca NMEA, sa extraga latitudine si longitudine, sa transforme in PDU, dupa care sa trimita sms . Am mult de sapat, pentru ca bajbai la programare. Tine-o tot asa, ma bucur cand vad romani cu posturi de genul! Felicitari!

    • vladprogrammer
      October 29, 2012 at 08:59

      @Arsene Daniel: Si eu vad ca plan de imbunatatire ptr sistem eliminarea pc-ului si inlocuirea completa cu Arduino si un modul GSM de tip shield. E interesant si proiectul tau, l-ai putea pastra chiar in forma asta (cu pc-ul interconectat) si adauga alte feature-uri pe care nu le poti obtine cu Arduino (sau le poti obtine, dar mai greu). De exemplu sa citesti datele GPS, si cu un API cum e cel de la google maps, preiei numele zonei ce corespunde coordonatelor tale, si transmiti toate informatiile astea prin SMS. Idei sunt multe, vointa sa fie. Merci de incurajari, bafta si tie!

    • October 10, 2015 at 21:03

      Hello Flaviu!I might be able to help you, but I need to know what kind of sensors you have. Is it a cenibmod temperature, humidity and pressure sensor or are they separate? You need to find the part/model numbers. My temperature sensor is a DS18S20 digital temperature sensor.

  2. Sandu
    January 17, 2014 at 13:28

    In ce-ai facut programul din PC, in Visual Basic cumva?

  3. October 10, 2015 at 20:49

    Hello Adrian,This is my firs Arduino and I also want to make exactly the same thing as you did but i have stbmuled across a serios of problems because some of the code that I am using in my arduino is writen in romanian and I don’t know exactly what to change in my code.Could you please help me ? The thing is that my arduino has Temperature, Humidity, Pressure and light sensor and there is a lot of code I must go through.Kind Regards,Flaviu Vlaicu

Leave a Reply