Telefon komórkowy to rewolucyjny wynalazek stulecia. Został zaprojektowany przede wszystkim do wykonywania i odbierania połączeń i wiadomości tekstowych, ale stał się całym światem po pojawieniu się smartfona. W ramach tego projektu budujemy system automatyki domowej, w którym można sterować sprzętem domowym za pomocą prostego telefonu GSM, wysyłając SMS przez jego telefon. W tym projekcie nie jest potrzebny żaden inteligentny telefon, tylko stary telefon GSM będzie działał, aby włączać i wyłączać wszelkie domowe urządzenia elektroniczne z dowolnego miejsca. Możesz również sprawdzić więcej projektów bezprzewodowej automatyki domowej tutaj: zdalnie sterowana automatyka domowa na podczerwień za pomocą Arduino, automatyka domowa sterowana przez Bluetooth wraz z automatyką domową opartą na DTMF, automatyka domowa sterowana komputerowo za pomocą Arduino.
Wyjaśnienie robocze
W tym projekcie Arduino służy do sterowania całym procesem. Tutaj wykorzystaliśmy komunikację bezprzewodową GSM do sterowania urządzeniami domowymi. Wysyłamy polecenia, takie jak „# A.light on *”, „# A.light off *” i tak dalej do sterowania urządzeniami gospodarstwa domowego AC. Po odebraniu poleceń przez Arduino poprzez GSM, Arduino wysyła sygnał do przekaźników, aby włączyć lub wyłączyć urządzenia domowe za pomocą sterownika przekaźnika.
Elementy obwodu:
- Arduino UNO
- Moduł GSM
- ULN2003
- Przekaźnik 5 wolt
- Żarówka z uchwytem
- Przewody łączące
- Deska do chleba
- Wyświetlacz LCD 16x2
- Zasilacz
- Komórka
Tutaj użyliśmy przedrostka w ciągu poleceń, czyli „#A.”. Ten przedrostek jest używany do zidentyfikowania, że polecenie główne znajduje się obok niego, a * na końcu łańcucha oznacza, że wiadomość została zakończona.
Kiedy wysyłamy SMS do modułu GSM przez Mobile, to GSM odbiera ten SMS i wysyła go do Arduino. Teraz Arduino odczytuje ten SMS i wyodrębnia główne polecenie z otrzymanego ciągu i przechowuje w zmiennej. Następnie Arduino porównuje ten ciąg z predefiniowanym ciągiem. Jeśli doszło do dopasowania, Arduino wysyła sygnał do przekaźnika przez sterownik przekaźnika w celu włączenia i wyłączenia urządzeń domowych. Względny wynik jest również drukowany na wyświetlaczu LCD 16x2 za pomocą odpowiednich poleceń.
Tutaj, w tym projekcie, użyliśmy 3 zero watowych żarówek do demonstracji, co oznacza wentylator, światło i telewizor.
Poniżej znajduje się lista wiadomości, które wysyłamy SMS-em, aby włączyć i wyłączyć wentylator, światło i telewizor:
S.no. |
Wiadomość |
Operacja |
1 |
# A. fan włączony * |
Wentylator włączony |
2 |
# A. wentylator wyłączony * |
Wentylator wyłączony |
3 |
# A. światło włączone * |
Światło włączone |
4 |
# A. wyłączone * |
Światło wyłączone |
5 |
# A.tv on * |
TV ON |
6 |
# A.tv wyłączone * |
TV wyłączony |
7 |
# A. wszyscy na * |
Wszystko włączone |
8 |
# A. wszystko wyłączone * |
Wszystko wyłączone |
Moduł GSM:
Moduł GSM jest stosowany w wielu urządzeniach komunikacyjnych opartych na technologii GSM (Global System for Mobile Communications). Służy do interakcji z siecią GSM za pomocą komputera. Moduł GSM rozumie tylko polecenia AT i może odpowiednio reagować. Najbardziej podstawowym poleceniem jest „AT”, jeśli GSM odpowiada OK, to działa dobrze, w przeciwnym razie odpowiada „ERROR”. Istnieją różne polecenia AT, takie jak ATA do odbierania połączeń, ATD do wybierania połączenia, AT + CMGR do odczytywania wiadomości, AT + CMGS do wysyłania smsów itp. Po poleceniach AT powinien następować powrót karetki tj. \ R (0D w zapisie szesnastkowym), na przykład „AT + CMGS \ r”. Możemy skorzystać z modułu GSM za pomocą następujących poleceń:
ATE0 - dla wyłączenia echa
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Numer telefonu komórkowego”
>> Teraz możemy napisać naszą wiadomość
>> Po napisaniu wiadomości
Ctrl + Z polecenie wysłania wiadomości (26 dziesiętnie).
ENTER = 0x0d w formacie HEX
SIM900 jest kompletnym Quad-band moduł GSM / GPRS, który dostarcza GSM / GPRS 850/900/1800 / 1900MHz wydajność głosowe, SMS i transmisji danych przy niskim zużyciu energii.
Opis obwodu
Połączenia tego obwodu automatyki domowej opartej na GSM są dość proste, tutaj wyświetlacz ciekłokrystaliczny służy do wyświetlania stanu urządzeń domowych, który jest bezpośrednio podłączony do arduino w trybie 4-bitowym. Piny danych LCD, a mianowicie RS, EN, D4, D5, D6, D7 są podłączone do cyfrowego pinu arduino o numerze 6, 7, 8, 9, 10, 11. A pin Rx i Tx modułu GSM jest bezpośrednio podłączony do Tx i Rx odpowiednio pin Arduino. Moduł GSM jest zasilany za pomocą adaptera 12 V. Przekaźniki 5 V SPDT 3 służą do sterowania OŚWIETLENIEM, WENTYLATOREM i TV. Przekaźniki są podłączone do pinów arduino o numerach 3, 4 i 5 poprzez sterownik przekaźnika ULN2003 do sterowania odpowiednio ŚWIATŁEM, WENTYLATOREM i telewizorem.
Kod Opis
W części programistycznej tego projektu, przede wszystkim w programowaniu włączamy bibliotekę do wyświetlacza ciekłokrystalicznego, a następnie definiujemy dane i piny sterujące LCD i AGD.
#zawierać
Po zainicjowaniu komunikacji szeregowej przy 9600 b / si podaje kierunek używanego pinu.
void setup () {lcd.begin (16,2); Serial.begin (9600); pinMode (led, WYJŚCIE); pinMode (wentylator, wyjście); pinMode (światło, wyjście); pinMode (TV, OUTPUT);
Do seryjnego odbierania danych wykorzystaliśmy dwie funkcje, jedną jest Serial.available, która sprawdza, czy nadchodzą jakiekolwiek dane szeregowe, a drugą jest Serial.read, która czyta dane przychodzące szeregowo.
while (Serial.available ()) {char inChar = Serial.read ();
Po seryjnym otrzymaniu danych zapisaliśmy je w łańcuchu i czekaliśmy na Enter.
void serialEvent () {while (Serial.available ()) {if (Serial.find ("# A.")) {digitalWrite (led, HIGH); opóźnienie (1000); digitalWrite (led, LOW); while (Serial.available ()) {char inChar = Serial.read (); str = inChar; if (inChar == '*') {temp = 1; powrót; }
Gdy nadejdzie Enter program zacznie porównywać otrzymany ciąg z już zdefiniowanym łańcuchem i jeśli łańcuch zostanie dopasowany, to wykonywana jest operacja względna za pomocą odpowiedniego polecenia podanego w kodzie.
void check () {if (! (strncmp (str, "tv on", 5))) {digitalWrite (TV, HIGH); lcd.setCursor (13,1); lcd.print ("WŁ."); opóźnienie (200); } else if (! (strncmp (str, "tv off", 6))) {digitalWrite (TV, LOW); lcd.setCursor (13,1); lcd.print ("WYŁ."); opóźnienie (200); }