Мобільний телефон - революційний винахід століття. Перш за все, він був розроблений для здійснення та отримання дзвінків і текстових повідомлень, але він став цілим світом після появи смарт-телефону. У цьому проекті ми будуємо систему домашньої автоматизації, де можна керувати побутовою технікою, використовуючи простий телефон на базі GSM, просто надсилаючи SMS через його телефон. У цьому проекті не потрібен смарт-телефон, а лише старий телефон GSM працюватиме, щоб увімкнути та вимкнути будь-яку побутову електронну техніку з будь-якого місця. Ви також можете перевірити ще кілька проектів бездротової автоматизації будинку тут: ІЧ-дистанційне керування домашньою автоматизацією за допомогою Arduino, Bluetooth-контрольована домашня автоматизація разом з DTMF-домашньою автоматизацією, ПК-контрольована домашня автоматизація за допомогою Arduino.
Робоче пояснення
У цьому проекті Arduino використовується для контролю всього процесу. Тут ми використовували бездротовий зв’язок GSM для управління побутовою технікою. Ми надсилаємо деякі команди, такі як “# A.light on *”, “# A.light off *” тощо для управління побутовою технікою змінного струму. Після отримання команд Arduino через GSM, Arduino надсилає сигнал на реле, щоб увімкнути або вимкнути побутову техніку за допомогою драйвера реле.
Компоненти схеми:
- Arduino UNO
- Модуль GSM
- ULN2003
- Реле 5 вольт
- Лампочка з тримачем
- Підключення проводів
- Хлібна дошка
- РК-дисплей 16x2
- Блок живлення
- Мобільний телефон
Тут ми використовували префікс у командному рядку, який є "#A.". Цей префікс використовується, щоб визначити, що головна команда знаходиться поруч із нею, а * в кінці рядка вказує, що повідомлення закінчилось.
Коли ми відправляємо SMS на модуль GSM через Mobile, тоді GSM отримує це SMS і відправляє його Arduino. Тепер Arduino читає це SMS і витягує головну команду з отриманого рядка і зберігає у змінній. Після цього Arduino порівнює цей рядок із заздалегідь визначеним рядком. Якщо збіг стався, Arduino надсилає сигнал на реле через драйвер реле для ввімкнення та вимкнення побутової техніки. І відносний результат також друкується на РК-дисплеї 16x2 за допомогою відповідних команд.
У цьому проекті ми використали лампочку 3 нульової вати для демонстрації, яка вказує на вентилятор, світло та телевізор.
Нижче наведено список повідомлень, які ми надсилаємо за допомогою SMS, щоб увімкнути та вимкнути вентилятор, світло та телевізор:
С. |
повідомлення |
Операція |
1 |
# A.fan на * |
Вентилятор увімкнено |
2 |
# A.fan вимкнено * |
Вентилятор вимкнений |
3 |
# A.світло на * |
Світло увімкнено |
4 |
# A.вимкнути * |
Світло вимкнено |
5 |
# A.tv на * |
Телевізор увімкнено |
6 |
# A.tv вимкнено * |
Телевізор вимкнено |
7 |
# A.всі на * |
Все ввімкнено |
8 |
# A.все вимкнено * |
Все вимкнено |
Модуль GSM:
Модуль GSM використовується в багатьох комунікаційних пристроях, що базуються на технології GSM (Глобальна система мобільного зв'язку). Він використовується для взаємодії з мережею GSM за допомогою комп’ютера. Модуль GSM розуміє лише команди AT і може відповідати відповідним чином. Найбільш основною командою є “AT”, якщо GSM відповідає нормально, тоді вона працює добре, інакше вона відповідає “ERROR”. Існують різні AT-команди, такі як ATA для відповіді на дзвінок, ATD для набору дзвінка, AT + CMGR для читання повідомлення, AT + CMGS для надсилання смс тощо.), наприклад “AT + CMGS \ r”. Ми можемо використовувати GSM-модуль, використовуючи такі команди:
ATE0 - для відлуння
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Мобільний номер"
>> Тепер ми можемо написати своє повідомлення
>> Після написання повідомлення
Ctrl + Z Команда надсилання повідомлення (26 у десяткових кодах).
ENTER = 0x0d у шістнадцятковій формі
SIM900 є повним трьохдіапазонним / GPRS, GSM модуль, який забезпечує GSM / GPRS 850/900/1800 / 1900MHz продуктивності для передачі голосу, SMS і даних з низьким енергоспоживанням.
Опис ланцюга
Підключення цієї схеми домашньої автоматизації на базі GSM досить просте, тут рідкокристалічний дисплей використовується для відображення стану побутової техніки, яка безпосередньо підключена до arduino в 4-бітному режимі. Висновки даних РК-дисплея, а саме RS, EN, D4, D5, D6, D7, підключені до цифрового виводу Arduino No 6, 7, 8, 9, 10, 11. А висновок Rx і Tx модуля GSM безпосередньо підключений до Tx і Rx шпилька Arduino відповідно. А живлення модуля GSM здійснюється за допомогою 12-вольтового адаптера. 5-вольтові реле SPDT 3 використовуються для управління СВІТЛОМ, ВЕНТИЛЯТОРОМ і телевізором. А реле підключаються до виводів номер 3, 4 і 5 Arduino через драйвер реле ULN2003 для управління СВІТЛОМ, ВЕНТИЛЯТОРОМ і телевізором відповідно.
Код Опис
У програмувальній частині цього проекту, насамперед у програмуванні, ми включаємо бібліотеку для рідкокристалічного дисплея, а потім визначаємо дані та керуючі штифти для РК та побутової техніки.
#включати
Після цього послідовний зв’язок ініціалізується зі швидкістю 9600 біт / с і дає напрямок використаному контакту.
void setup () {lcd.begin (16,2); Serial.begin (9600); pinMode (led, OUTPUT); pinMode (вентилятор, ВИХІД); pinMode (Світло, ВИХІД); pinMode (телевізор, ВИХІД);
Для послідовного отримання даних ми використовували дві функції: одна - Serial.available, яка перевіряє, чи надходять якісь послідовні дані, а інша - Serial.read, яка зчитує дані, що надходять послідовно.
while (Serial.available ()) {char inChar = Serial.read ();
Отримавши дані послідовно, ми зберегли їх у рядку, а потім чекаємо Enter.
void serialEvent () {while (Serial.available ()) {if (Serial.find ("# A.")) {digitalWrite (led, HIGH); затримка (1000); digitalWrite (led, LOW); while (Serial.available ()) {char inChar = Serial.read (); str = inChar; if (inChar == '*') {temp = 1; повернення; }
Коли приходить Enter, програма запускає порівняння отриманого рядка з уже визначеним рядком, і якщо рядок збігається, то виконується відносна операція за допомогою відповідної команди, заданої в коді.
void check () {if (! (strncmp (str, "tv on", 5))) {digitalWrite (TV, HIGH); lcd.setCursor (13,1); lcd.print ("ON"); затримка (200); } інакше if (! (strncmp (str, "tv off", 6))) {digitalWrite (TV, LOW); lcd.setCursor (13,1); lcd.print ("OFF"); затримка (200); }