Pull to refresh

Контролируем температуру по SMS (Arduino Nano + Neoway M660)

Reading time3 min
Views51K
По-моему, SMS – отличный способ что-нибудь включить/выключить на расстоянии.
Особенно обогреватель.
Тем более зимой.
Когда так хочется поскорее в тепло!

Итак, наши действующие лица:

  • плата Arduino Nano
  • отладочная плата с GSM-модулем Neoway M660
  • температурный датчик LM35
  • источник питания 12 В
  • реле твердотельное
  • провода, дискретные компоненты

В качестве GSM-модема использовалась отладочная плата GSM-модуля Neoway M660.

Это путь наименьшего сопротивления, так как не нужно думать о подключении антенны и SIM-карты, а стоит она недорого.

Вообще Neoway M660 примечателен тем, что имеет мало выводов, расположенных по краям (корпус типа «почтовая марка») на большом расстоянии друг от друга, так что для макетирования – самое то.
Модуль управляется по UART с помощью AT-команд (описание AT-команд M660).

Питание Arduino Nano


Arduino Nano будем запитывать от небольшого блока питания 12 В через контакт Vin.


Питание 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 в текстовом режиме нам нужно:
  1. AT+CMGS=\«80123456789\»\r – ввести команду с номером телефона (80123456789 в данном примере).
  2. После этого модуль должен вывести приглашение «>» ввести текст SMS, что мы и должны сделать.
  3. Ввод текста должен заканчиваться байтом 0x1A.
  4. Neoway M660 отвечает OK — сообщение отправлено!!!


Прием SMS сообщений


Для приема SMS в текстовом режиме нам нужно:
  1. AT+CMGF=1\r – включить текстовый режим, если есть сомнения, что он включен.
  2. Определиться, нужно ли нам сохранять SMS на SIM-карте или в памяти модуля или достаточно просто пересылать их на UART. Для этого имеется команда AT+CNMI. Так как мы не хотели сохранять SMS в памяти, то использовали эту команду с такими параметрами: AT+CNMI=3,2,2,0,1\r

Когда принятая SMS пересылается на UART в текстовом режиме, она состоит из двух строчек:

  1. +CMT: «70123456789»\r\n – в первой строчке содержится номер отправителя
  2. 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 градуса ниже, чем на столе.

Как это выглядит


В разложенном виде всё это выглядит примерно так:

В простом варианте можно посылать SMS-команды на включение/выключение обогрева, получать отчеты о состоянии обогревателя (вкл/выкл) и измеренной температуре.



Кстати, хотя на реле написано, что оно начинает срабатывать при напряжении на входе 3В, от пяти вольт оно срабатывало ненадежно (могло не сразу сработать, отключаться и снова включаться). Поэтому питание реле было переделано от входного источника 12В – в этом случае проблем замечено не было.

Что ещё можно сделать?


  • можно запрограммировать, например, отправку сообщений при аномальном повышении или понижении температуры или подозрительной скорости её изменения
  • можно соединяться по GPRS с каким-нибудь сервером, который будет хранить данные об изменении температуры за последние 20 лет, строить красивые графики и выявлять скрытые закономерности
  • наконец, для деревенских домов с дровяными печками рекомендуется подключить устройство к роботу, подбрасывающему дрова в печь
  • жду ваших вариантов)
Tags:
Hubs:
+4
Comments0

Articles