По-моему, SMS – отличный способ что-нибудь включить/выключить на расстоянии.
Особенно обогреватель.
Тем более зимой.
Когда так хочется поскорее в тепло!
Итак, наши действующие лица:
В качестве GSM-модема использовалась отладочная плата GSM-модуля Neoway M660.
![](https://habrastorage.org/r/w780q1/files/c5b/662/9fb/c5b6629fbb7240458d4029a94ffa3059.jpg)
Это путь наименьшего сопротивления, так как не нужно думать о подключении антенны и SIM-карты, а стоит она недорого.
![](https://habrastorage.org/r/w780q1/files/70c/7f9/8ac/70c7f98acc0249eea4c45b7c4502bd9b.jpg)
Вообще Neoway M660 примечателен тем, что имеет мало выводов, расположенных по краям (корпус типа «почтовая марка») на большом расстоянии друг от друга, так что для макетирования – самое то.
Модуль управляется по UART с помощью AT-команд (описание AT-команд M660).
Arduino Nano будем запитывать от небольшого блока питания 12 В через контакт Vin.
![](https://habrastorage.org/r/w780q1/files/14a/f57/fc8/14af57fc87634bbe9db5ea4a88dbcfad.jpg)
После некоторых раздумий решено было запитать плату GSM от платы Nano через USB-разъем.
В мануале Neoway_M660_Module_Hardware_User_Guide сказано, что при наличии в цепи питания конденсатора емкостью 1000 мкФ требование к источнику питания по току – 0,6А (при напряжении 3,9 В).
На отладочной плате M660 и её USB-хвостике в сумме стоит 940 мкФ. Микросхема AMS1117 на плате Arduino Nano отдает на выход 5 В и 1 А, потребление платы Nano со всеми потрохами и подключенным температурным датчиком при Vin равном 12В – около 24 мА. Так что считаем, что с питанием схемы всё ОК.
Уровень сигналов Nano – 5 В, интерфейс UART M660 – 2,8 В (напряжение не должно превышать 3,1 В). Для согласования уровней используем схему из этой статьи.
Вывод 13 (счастливое число!) модуля – выход 2,8 В (максимальный ток 5 мА), специально предназначен для питания согласователей уровней. Просто припаиваемся к контакту 13 модуля, другой конец – к схеме преобразователя уровней.
Для отправки SMS в текстовом режиме нам нужно:
Для приема SMS в текстовом режиме нам нужно:
Когда принятая SMS пересылается на UART в текстовом режиме, она состоит из двух строчек:
Сначала смотрим, с какого номера пришло сообщение, потом – что именно пришло. Удобно.
Для измерения температуры использовался датчик LM35. Датчик выдаёт напряжение, пропорциональное градусам Цельсия, 10мВ/ºC. Просто и удобно. Напряжение питания сенсора – от 4 до 30 В.
Если в Arduino включить внутренний источник опорного напряжения 1,1 В (для этого в setup() нужно прописать analogReference(INTERNAL);), то градусы Цельсия можно рассчитать по простой формуле:
ГРАДУСЫ ЦЕЛЬСИЯ = СЧИТАННОЕ ЗНАЧЕНИЕ х 0,107.
Считанное значение – то, которое получаем из функции analogRead():
val = analogRead(analogPin);
Англоязычные рассуждения на тему LM35 и Arduino: http://playground.arduino.cc/Main/LM35HigherResolution
В начале тестирования датчик температуры был размещен на длинных ногах над платой Arduino и показывал 28 – 29 °С при температуре окружающего воздуха 25 °С. Я уже начал паниковать, что сделал что-то не так, но как только датчик был вынесен подальше от платы – показания стали соответствовать действительности.
Кстати, как выяснилось, около пола температура воздуха на 1,5 – 2 градуса ниже, чем на столе.
В разложенном виде всё это выглядит примерно так:
![](https://habrastorage.org/r/w780q1/files/9fa/0f7/de2/9fa0f7de2b764d0e84a7da6d8d9400a2.jpg)
В простом варианте можно посылать SMS-команды на включение/выключение обогрева, получать отчеты о состоянии обогревателя (вкл/выкл) и измеренной температуре.
![](https://habrastorage.org/files/8b8/950/16b/8b895016be094450b58eadf50416813e.JPG)
Кстати, хотя на реле написано, что оно начинает срабатывать при напряжении на входе 3В, от пяти вольт оно срабатывало ненадежно (могло не сразу сработать, отключаться и снова включаться). Поэтому питание реле было переделано от входного источника 12В – в этом случае проблем замечено не было.
Особенно обогреватель.
Тем более зимой.
Когда так хочется поскорее в тепло!
Итак, наши действующие лица:
- плата Arduino Nano
- отладочная плата с GSM-модулем Neoway M660
- температурный датчик LM35
- источник питания 12 В
- реле твердотельное
- провода, дискретные компоненты
В качестве GSM-модема использовалась отладочная плата GSM-модуля Neoway M660.
![](https://habrastorage.org/files/c5b/662/9fb/c5b6629fbb7240458d4029a94ffa3059.jpg)
Это путь наименьшего сопротивления, так как не нужно думать о подключении антенны и SIM-карты, а стоит она недорого.
![](https://habrastorage.org/files/70c/7f9/8ac/70c7f98acc0249eea4c45b7c4502bd9b.jpg)
Вообще Neoway M660 примечателен тем, что имеет мало выводов, расположенных по краям (корпус типа «почтовая марка») на большом расстоянии друг от друга, так что для макетирования – самое то.
Модуль управляется по UART с помощью AT-команд (описание AT-команд M660).
Питание Arduino Nano
Arduino Nano будем запитывать от небольшого блока питания 12 В через контакт Vin.
![](https://habrastorage.org/files/14a/f57/fc8/14af57fc87634bbe9db5ea4a88dbcfad.jpg)
Питание GSM-модуля
После некоторых раздумий решено было запитать плату GSM от платы Nano через USB-разъем.
В мануале Neoway_M660_Module_Hardware_User_Guide сказано, что при наличии в цепи питания конденсатора емкостью 1000 мкФ требование к источнику питания по току – 0,6А (при напряжении 3,9 В).
На отладочной плате M660 и её USB-хвостике в сумме стоит 940 мкФ. Микросхема AMS1117 на плате Arduino Nano отдает на выход 5 В и 1 А, потребление платы Nano со всеми потрохами и подключенным температурным датчиком при Vin равном 12В – около 24 мА. Так что считаем, что с питанием схемы всё ОК.
Согласование уровней UART
Уровень сигналов Nano – 5 В, интерфейс UART M660 – 2,8 В (напряжение не должно превышать 3,1 В). Для согласования уровней используем схему из этой статьи.
Вывод 13 (счастливое число!) модуля – выход 2,8 В (максимальный ток 5 мА), специально предназначен для питания согласователей уровней. Просто припаиваемся к контакту 13 модуля, другой конец – к схеме преобразователя уровней.
Отправка SMS сообщений
Для отправки SMS в текстовом режиме нам нужно:
- AT+CMGS=\«80123456789\»\r – ввести команду с номером телефона (80123456789 в данном примере).
- После этого модуль должен вывести приглашение «>» ввести текст SMS, что мы и должны сделать.
- Ввод текста должен заканчиваться байтом 0x1A.
- Neoway M660 отвечает OK — сообщение отправлено!!!
Прием SMS сообщений
Для приема SMS в текстовом режиме нам нужно:
- AT+CMGF=1\r – включить текстовый режим, если есть сомнения, что он включен.
- Определиться, нужно ли нам сохранять SMS на SIM-карте или в памяти модуля или достаточно просто пересылать их на UART. Для этого имеется команда AT+CNMI. Так как мы не хотели сохранять SMS в памяти, то использовали эту команду с такими параметрами: AT+CNMI=3,2,2,0,1\r
Когда принятая SMS пересылается на UART в текстовом режиме, она состоит из двух строчек:
- +CMT: «70123456789»\r\n – в первой строчке содержится номер отправителя
- Text of the message\r\n – во второй – текст сообщения.
Сначала смотрим, с какого номера пришло сообщение, потом – что именно пришло. Удобно.
Измерение температуры
Для измерения температуры использовался датчик LM35. Датчик выдаёт напряжение, пропорциональное градусам Цельсия, 10мВ/ºC. Просто и удобно. Напряжение питания сенсора – от 4 до 30 В.
Если в Arduino включить внутренний источник опорного напряжения 1,1 В (для этого в setup() нужно прописать analogReference(INTERNAL);), то градусы Цельсия можно рассчитать по простой формуле:
ГРАДУСЫ ЦЕЛЬСИЯ = СЧИТАННОЕ ЗНАЧЕНИЕ х 0,107.
Считанное значение – то, которое получаем из функции analogRead():
val = analogRead(analogPin);
Англоязычные рассуждения на тему LM35 и Arduino: http://playground.arduino.cc/Main/LM35HigherResolution
В начале тестирования датчик температуры был размещен на длинных ногах над платой Arduino и показывал 28 – 29 °С при температуре окружающего воздуха 25 °С. Я уже начал паниковать, что сделал что-то не так, но как только датчик был вынесен подальше от платы – показания стали соответствовать действительности.
Кстати, как выяснилось, около пола температура воздуха на 1,5 – 2 градуса ниже, чем на столе.
Как это выглядит
В разложенном виде всё это выглядит примерно так:
![](https://habrastorage.org/files/9fa/0f7/de2/9fa0f7de2b764d0e84a7da6d8d9400a2.jpg)
В простом варианте можно посылать SMS-команды на включение/выключение обогрева, получать отчеты о состоянии обогревателя (вкл/выкл) и измеренной температуре.
Кстати, хотя на реле написано, что оно начинает срабатывать при напряжении на входе 3В, от пяти вольт оно срабатывало ненадежно (могло не сразу сработать, отключаться и снова включаться). Поэтому питание реле было переделано от входного источника 12В – в этом случае проблем замечено не было.
Что ещё можно сделать?
- можно запрограммировать, например, отправку сообщений при аномальном повышении или понижении температуры или подозрительной скорости её изменения
- можно соединяться по GPRS с каким-нибудь сервером, который будет хранить данные об изменении температуры за последние 20 лет, строить красивые графики и выявлять скрытые закономерности
- наконец, для деревенских домов с дровяными печками рекомендуется подключить устройство к роботу, подбрасывающему дрова в печь
- жду ваших вариантов)