Як смснути обігрівачу
Winteriscoming
Winter is coming, панове, а тому треба починати готуватися. Як кажуть, готуй скетч із обігрівачем влітку, а скетч із кондиціонером – взимку.
Наше завдання – зробити розумний обігрівач. Наразі вже існують обігрівачі з термостатами, але нам важлива сама ідея. До того ж не кожен може похвалитися тим, що може запитати свого обігрівача температуру або попросити підігріти кімнату до часу приходу з роботи, навчання.
Підключаємо безлімітний тариф SMS і вперед до прогресу.
Деталі
Для створення нашого пристрою нам знадобляться:
- Власне, обігрівач, найпростіший


- Arduino UNO або Leonardo, або будь-яка інша плата на ваш смак

- Troyka Shield. Аж надто він мені подобається. Всі датчики підключаються легко та невимушено.

- Relay Shield. Будь-яке реле. Знову ж таки – на ваш смак


- З'єднувальні дроти. Тут все трохи складніше. Якщо хочеться зібрати готовий пристрій, то термостат бажано зробити виносним. Для цього потрібно зробити дроти досить довгими, а можна зробити бездротовий термостат. Для навчання бездротового зв'язку я вибрав другий варіант.




Опис пристрою
Термостат
Почнемо, мабуть, із створення термостату. Наше завдання – зчитувати показання температури із DHT11 та передавати їх на центральний пристрій кожен фіксований проміжок часу.
Завдання поставлене - приступаємо до виконання. Зберемо макет термостату.

Для експерименту, зберемо макетцентрального контролера з єдиною функцією – ухвалення повідомлень від термостата. Це вид зверху. Під Troyka Shield знаходяться GPRS Shield та Arduino.
Може виникнути питання - "А чому у приймача чотири піна, хоча використовуються тільки три?" Відповідаю – все просто, пін Data продубльовано.

Тепер подивимося на код передавача.
А ось код для приймача.
Як це працює?
Почнемо з передавача. Arduino Pro MINI вимагає значення температури з DHT11. Отримавши температуру, MINI готує пакет передачі. Для передавача важлива розрядність, тому в коді є дивний запис -uint8_t *
Не потрібно лякатися - це інший і правильніший вид запису типу даних byte або unsigned char.
Ось невелика таблиця такого запису типів даних.
int8_t char від -128 до 127 uint8_t byte, unsigned char від 0 до 255 int16_t int від -32768 до 32767 uint16_t unsigned int, word від 0 до 65532 <4 2147483647 uint32_t unsigned long від 0 до 4294967295
Наведене до необхідного типу даних значення температури починає передаватися на передавач, який, у свою чергу, відсилає повідомлення в ефір.
Приймач відстежує ефір на наявність повідомлень і, якщо повідомлення надійшло, виводить значення температури в Serial Monitor .
Розумний обігрівач
Настав час зайнятися центральним пристроєм. Корпус пристрою та кінцеве виконання залежить тільки від ваших можливостей та фантазії, тому я лише наведу схему, за якою можна зібрати пристрій. Під Troyka Shield також знаходяться GPRS Shield та Arduino.

Якщо хтось не знає, як підключати навантаження до реле – ось схема. Ну і для спільногоосвіти:
- Коричневий провід – це фаза, синій – нуль.
- По-хорошому, треба завжди розмикати фазу, а чи не нуль. Якщо вимикач розмикатиме нуль, то може вдарити струмом, якщо торкнуться фази, а якщо це мережа з великою напругою, то результат може бути летальним. Ви там обережніші.

Запрограмуємо пристрій. Є готова бібліотека для роботи з GPRS Shield, тому надсилання повідомлень стає досить тривіальним. Завантажити бібліотеку можна тут. Один мінус - функція відправки SMS не приймає SMS в String, тому нам потрібно переводити String в char array за допомогою функціїstring.toCharArray(char,number);
А воно як працює?
Після ініціалізації пристрою, він, пристрій відправляє SMS про свою готовність і просить задати необхідну температуру для підтримки та режим роботи. Коли дані отримані, пристрій повідомляє про свою готовність і приступає до підтримки температури.
У цей час пристрій чекає повідомлень від господаря. Якщо надійшло повідомлення про запит статусу, пристрій надсилає нинішнє значення температури і стан реле, якщо прийшло число, то пристрій змінює температуру спрацьовування, якщо надійшло вказівку про зміну режиму - пристрій змінює режим роботи.
Ось невеликий шматок мого спілкування з обігрівачем.

ATкоманди
GPRS Shield також можна керувати за допомогою AT команд. Ось невеликий скетч, який показує, як можна надіслати SMS.
AT команди використовуються, якщо вам бракує функціоналу готових бібліотек. За допомогою AT команд, наприклад, можна використовувати годинник реального часу, вбудований у GPRS Shield.
Якщо хочеться спілкуватися з GPRS Shield у режимі реальногочасу, можна запустити приклад з бібліотеки під назвоюGPRS_AT_Commands.
Щоб дізнатися час у модуля, потрібно надіслати командуAT+CCLK?. Якщо ви включили Shield вперше або вийняли з нього батарейку, а потім увімкнули, то відповіддю буде час, що минув після запуску GPRS Shileld. У мене відповіддю було це.

Для того, щоб встановити час, потрібно використовувати командуAT+CCLK="YY/MM/DD,HH:MM:SS+ZZ"

Не забуваємо, що якщо Shield відключити від живлення та не встановити батарейку, то час скидається.
Для тих, хто хоче залізти глибше, є довідник команд AT. Прочитати та завантажити його можна тут.
Підсумок
Тепер, на "А у нас у квартирі газ" можна з гордістю відповісти - "А у мене обігрівач доцент кафедри обігрівальних наук!"
Звісно, схему обігрівача можна покращити. Можна додати режим, який включає обігрівач за часом, встановити інші датчики і знати вологість і освітленість будинку. Можна на термостат встановити регулятор температури, яку потрібно підтримувати.