A mobiltelefon az évszázad forradalmi találmánya. Elsősorban hívások és szöveges üzenetek fogadására és fogadására tervezték, de az egész világgá vált, miután az okostelefon képbe került. Ebben a projektben építünk egy otthoni automatizálási rendszert, ahol az egyszerű GSM alapú telefon használatával vezérelhetjük a háztartási készülékeket, csak SMS-t küldhetünk a telefonján keresztül. Ebben a projektben nincs szükség okostelefonra, csupán a régi GSM telefon működik, amely be- és kikapcsolja a háztartási elektronikai készülékeket bárhonnan. Itt ellenőrizhet még néhány vezeték nélküli otthoni automatizálási projektet: IR távirányítású otthoni automatizálás az Arduino segítségével, a Bluetooth által vezérelt otthoni automatizálás és a DTMF alapú otthoni automatizálás, valamint a PC által vezérelt otthoni automatizálás az Arduino segítségével.
Munka magyarázat
Ebben a projektben az Arduino- t használják az egész folyamat vezérlésére. Itt a GSM vezeték nélküli kommunikációt használtuk a háztartási gépek vezérléséhez. Küldünk néhány olyan parancsot, mint a „# A.fény be *”, „# A.világítás ki *” és így tovább a váltakozó áramú háztartási készülékek vezérléséhez. Miután az Arduino megkapta az adott parancsokat a GSM-en keresztül, az Arduino jelet küld a reléknek, hogy a háztartási készülékeket relé-illesztőprogram segítségével kapcsolják be vagy ki.
Áramköri alkatrészek:
- Arduino UNO
- GSM modul
- ULN2003
- 5 voltos relé
- Izzó tartóval
- Csatlakozó vezetékek
- Kenyérlap
- 16x2 LCD
- Tápegység
- Mobiltelefon
Itt a parancssorban egy előtagot használtunk, amely „#A”. Ez az előtag arra szolgál, hogy azonosítsa, hogy a fő parancs jön mellette, és a * a karakterlánc végén azt jelzi, hogy az üzenet befejeződött.
Amikor mobilon küldünk SMS-t a GSM modulba, akkor a GSM megkapja az SMS-t és elküldi az Arduinónak. Az Arduino elolvassa ezt az SMS-t, és kivonja a fő parancsot a kapott karakterláncból, és egy változóban tárolja. Ezek után az Arduino összehasonlítja ezt a karakterláncot előre definiált karakterlánccal. Ha egyezés történt, az Arduino jelet küld a relének a relé meghajtóján keresztül a háztartási gépek be- és kikapcsolásához. És a relatív eredmény megfelelő parancsok segítségével 16x2 LCD-re is kinyomtatható.
Ebben a projektben 3 nulla wattos izzót használtunk bemutatóként, amely a ventilátort, a fényt és a tévét jelzi.
Az alábbiakban felsoroljuk azokat az üzeneteket, amelyeket SMS-ben küldünk a ventilátor, a fény és a TV be- és kikapcsolásához:
S. sz. |
Üzenet |
Művelet |
1 |
# A.fan on * |
Ventilátor BE |
2 |
# A.ventilátor ki * |
Ventilátor KI |
3 |
# A. világít * |
Világítani |
4 |
# A.világítás ki * |
Nem világít |
5. |
# A.tv on * |
A TV BE |
6. |
# A.tv kikapcsolva * |
TV kikapcsolva |
7 |
# A.minden * |
Minden BE |
8. |
# A.mindig * |
Minden KI |
GSM modul:
A GSM modult számos kommunikációs eszközben használják, amelyek a GSM (Globális Mobil Kommunikációs Rendszer) technológián alapulnak. Arra használják, hogy számítógéppel kommunikáljanak a GSM hálózattal. A GSM modul csak az AT parancsokat érti, és ennek megfelelően tud válaszolni. A legalapvetőbb parancs az „AT”, ha a GSM rendben van, akkor jól működik, különben „ERROR” -val válaszol. Különböző AT parancsok léteznek, például ATA a hívás fogadásához, ATD hívás tárcsázásához, AT + CMGR az üzenet elolvasásához, AT + CMGS az sms küldéséhez stb. Az AT parancsokat a Carriage return követi, azaz \ r (0D hexán), például „AT + CMGS \ r”. A GSM modult a következő parancsok segítségével használhatjuk:
ATE0 - A visszhang kikapcsolására
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Mobilszám”
>> Most megírhatjuk az üzenetünket
>> Üzenet írása után
Ctrl + Z üzenetküldés parancs (26 tizedesjegyben).
ENTER = 0x0d a HEX-ben
A SIM900 egy teljes négysávú GSM / GPRS modul, amely GSM / GPRS 850/900/1800 / 1900MHz teljesítményt nyújt alacsony energiafogyasztású hang-, SMS- és adatátvitelhez.
Áramkör leírása
Ennek a GSM alapú otthoni automatizálási áramkörnek a csatlakoztatása meglehetősen egyszerű, itt egy folyadékkristályos kijelzőt használnak a háztartási gépek állapotának megjelenítésére, amely 4 bites módban közvetlenül kapcsolódik az arduino-hoz. Az LCD adatcsapjai, nevezetesen az RS, EN, D4, D5, D6, D7 csatlakoznak az Arduino 6, 7, 8, 9, 10, 11 számú digitális tűhöz. És a GSM modul Rx és Tx tűje közvetlenül csatlakozik Tx és Rx tű Arduino ill. A GSM-modult pedig 12 V-os adapter segítségével táplálják. 5 voltos SPDT 3 relét használnak a LIGHT, FAN és a TV vezérléséhez. A relék pedig az ULN2003 relé meghajtón keresztül csatlakoznak a 3., 4. és 5. arduino tűhöz a LIGHT, a FAN és a TV vezérléséhez.
Kód Leírás
A projekt egy részének programozásában mindenekelőtt a programozásba belefoglaljuk a folyadékkristályos kijelző könyvtárat, majd meghatározzuk az LCD és a háztartási gépek adat- és vezérlőcsapjait.
#include
Ezt követően a soros kommunikáció 9600 bps sebességgel inicializálódik, és irányt ad a használt tűnek.
void setup () {lcd.begin (16,2); Serial.begin (9600); pinMode (led, OUTPUT); pinMode (ventilátor, OUTPUT); pinMode (Fény, OUTPUT); pinMode (TV, OUTPUT);
Az adatok soros fogadásához két funkciót használtunk, az egyik a Serial.available, amely ellenőrzi, hogy érkeznek-e soros adatok, a másik pedig a Serial.read, amely a soros adatokat olvassa.
while (Soros.elérhető ()) {char inChar = Soros.olvasott ();
Az adatok soros fogadása után egy karakterláncban tároltuk, majd vártuk az Enter billentyűt.
void serialEvent () {while (Serial.available ()) {if (Serial.find ("# A.")) {digitalWrite (led, HIGH); késés (1000); digitalWrite (led, LOW); while (Soros.elérhető ()) {char inChar = Soros.olvasott (); str = inChar; if (inChar == '*') {temp = 1; Visszatérés; }
Amikor az Enter jön, a program elkezdi összehasonlítani a fogadott karakterláncot a már definiált karakterlánccal, és ha a karakterlánc egyezik, akkor egy relatív műveletet hajtanak végre a kódban megadott megfelelő parancs használatával.
void check () {if (! (strncmp (str, "tv on", 5))) {digitalWrite (TV, HIGH); lcd.setCursor (13,1); lcd.print ("BE"); késés (200); } else if (! (strncmp (str, "tv off", 6))) {digitalWrite (TV, LOW); lcd.setCursor (13,1); lcd.print ("OFF"); késés (200); }