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

    По-моему, 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 лет, строить красивые графики и выявлять скрытые закономерности
    • наконец, для деревенских домов с дровяными печками рекомендуется подключить устройство к роботу, подбрасывающему дрова в печь
    • жду ваших вариантов)
    Поделиться публикацией
    Похожие публикации
    Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

    Зачем оно вам?
    Реклама
    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.