Отправка температуры через SMS (GSM) и Arduino.
Сегодня расскажу как удаленно получать данные о температуры с помощью SMS сообщениям, а так же управлять нагрузкой. В примере используем GSM модуля SIM800L, два датчика температуры DS18B20, двух канальное реле и плат Arduino UNO.
Отправка температуры через SMS сообщения (GSM) и Arduino.
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Модуль GSM, GPRS на чипе SIM800L x 1 шт.
► Модуль реле 2-о канальный x 1 шт.
► Датчик температуры DS18B20 x 1 шт.
► Преобразователь напряжения LM2596 x 1 шт.
► Провод DuPont x 1 шт.
Подключение:
В прошлой статье рассказывал о «Управление нагрузкой через SMS (GSM) и Arduino«, по сути это доработанный пример, в который добавил датчики температуры.
Первым делом необходимо позаботится о стабильном питания модуля SIM800L, для этого воспользуемся преобразователем напряжения LM2596 с настроенным выходным напряжением 4.3 В.
Обычно модуль SIM800L поставляется не спаянным, берем паяльник и припаиваем контакты и антенну. Теперь подключаем вывод Tx на модуле к выводу 3 на Arduino. Вывод Rx нельзя подключать напрямую, так как цифровой вывод Arduino UNO использует 5В, а модуль SIM800L использует 3,3В. Необходимо сигнал Tx, поступающий от Arduino UNO, понизить до 3,3В, чтобы не спалить модуль SIM800L. Самый простой способ, это воспользоватся делителем напряжения на резисторах. Подключаем резистор на 10 кОм между выводом Rx (SIM800L) и выводом 2 (Arduino) и второй резистор на 10 кОм между выводом Rx (SIM800L) и GND.
Теперь подключаем датчики температуры DS18B20, вывод GND (DS18B20) подключаем к GND (Arduino), вывод Vdd (DS18B20) подключаем в к выводу 5В (Arduino), а вывод DQ (DS18B20) подключаем к выводу D4 (Arduino), так же между DQ и 5В необходимо установить резистор 4.7 кОм.
Теперь осталось подключить двухканальное реле, вывод IN1 и IN2 к выводам A0 и A1, затем необходимо подключить питание VCC и GND к плате ARDUINO.
Так же надо не забывать, что необходимо объединить GND модуля SIM800L и Arduino, чтобы сделать их общими. для нашего удобства, приведу пример схему подключения.
Программа:
Для работы скетча необходимо три библиотеки «SoftwareSerial», «OneWire«, «DallasTempature«, первая входит в среду разработки, а вот последние две необходимо дополнительно скачать и установить.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
/* Тестировалось на Arduino IDE 1.8.5 Дата тестирования 24.10.2020г. */ #include <SoftwareSerial.h> // Подключаем библиотеку SoftwareSerial #include <OneWire.h> // Подключаем библиотеку OneWire #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature SoftwareSerial mySerial(3, 2); // Выводы SIM800L Tx & Rx подключены к выводам Arduino 3 и 2 char incomingByte; String inputString; int relay_1 = A0; // Вывод управления реле 1 int relay_2 = A1; // Вывод управления реле 2 #define ONE_WIRE_BUS A2 // Указываем, к какому выводу подключена DQ OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { pinMode(relay_1, OUTPUT); // Установим вывод как выход digitalWrite(relay_1, HIGH); // Устанавливаем высокий уровень pinMode(relay_2, OUTPUT); // Установим вывод как выход digitalWrite(relay_2, HIGH); // Устанавливаем высокий уровень Serial.begin(9600); mySerial.begin(9600); while(!mySerial.available()){ // Зацикливаем и ждем инициализацию SIM800L mySerial.println("AT"); // Отправка команды AT delay(1000); // Пауза Serial.println("Connecting…"); // Печатаем текст } Serial.println("Connected!"); // Печатаем текст mySerial.println("AT+CMGF=1"); // Отправка команды AT+CMGF=1 delay(1000); // Пауза mySerial.println("AT+CNMI=1,2,0,0,0"); // Отправка команды AT+CNMI=1,2,0,0,0 delay(1000); // Пауза mySerial.println("AT+CMGL=\"REC UNREAD\""); } void loop() { if(mySerial.available()){ // Проверяем, если есть доступные данные delay(100); // Пауза while(mySerial.available()){ // Проверяем, есть ли еще данные. incomingByte = mySerial.read(); // Считываем байт и записываем в переменную incomingByte inputString += incomingByte; // Записываем считанный байт в массив inputString } delay(10); // Пауза Serial.println(inputString); // Отправка в "Мониторинг порта" считанные данные inputString.toUpperCase(); // Меняем все буквы на заглавные if (inputString.indexOf("ON_1") > -1){ // Проверяем полученные данные, если ON_1 включаем реле 1 digitalWrite(relay_1, LOW); sms(String("Relay 1 - ON"), String("+7xxxxxxxxxx")); delay(50);} if (inputString.indexOf("OFF_1") > -1){ // Проверяем полученные данные, если OFF_1 выклюем реле 1 digitalWrite(relay_1, HIGH); sms(String("Relay 1 - OFF"), String("+7xxxxxxxxxx")); // Отправка SMS delay(50);} if (inputString.indexOf("ON_2") > -1){ // Проверяем полученные данные, если ON_2 включаем реле 2 digitalWrite(relay_2, LOW); sms(String("Relay 2 - ON"), String("+7xxxxxxxxxx")); // Отправка SMS delay(50);} if (inputString.indexOf("OFF_2") > -1){ // Проверяем полученные данные, если OFF_2 выключаем реле 2 digitalWrite(relay_2, HIGH); sms(String("Relay 2 - OFF"), String("+7xxxxxxxxxx")); // Отправка SMS delay(50);} if (inputString.indexOf("TEMP_1") > -1){ // Проверка полученные данные, если TEMP_1 отправляем температуру sensors.requestTemperatures(); float temp = sensors.getTempCByIndex(0); Serial.print(sensors.getTempCByIndex(0)); sms(String(temp), String("+7xxxxxxxxxx")); // Отправка SMS delay(50);} if (inputString.indexOf("TEMP_2") > -1){ // Проверка полученные данные, если TEMP_2 отправляем температуру sensors.requestTemperatures(); float temp2 = sensors.getTempCByIndex(1); Serial.print(sensors.getTempCByIndex(1)); sms(String(temp2), String("+7xxxxxxxxxx")); // Отправка SMS delay(50);} if (inputString.indexOf("OK") == -1){ mySerial.println("AT+CMGDA=\"DEL ALL\""); delay(1000);} inputString = "";} } void sms(String text, String phone) // Процедура Отправка SMS { Serial.println("SMS send started"); mySerial.println("AT+CMGS=\"" + phone + "\""); delay(500); mySerial.print(text); delay(500); mySerial.print((char)26); delay(500); Serial.println("SMS send complete"); delay(2000); } |
Загружаем данную скетч в контроллер Arduino и открываем «Мониторинг порта» При отправки SMS с любого телефона ON_1 (ON_2) первое или второе реле включиться или OFF_1 (OFF_2) отключиться, в ответ приходит сообщение о состоянии. Так же при отправки TEMP_1 (TEMP_2) получим сообщение с температурой.
Ссылки
Документация к DS18B20+
Скачать библиотеку DallasTemperature
Скачать библиотеку OneWire v.2.2
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Модуль GSM, GPRS на чипе SIM800L
Преобразователь напряжения LM2596
Преобразователь напряжения LM2596 с вольтметром
Модуль реле 2-х канальный
Датчик температуры DS18b20
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Модуль GSM, GPRS на чипе SIM800L
Понижающий преобразователь напряжения LM2596
Понижающий преобразователь напряжения LM2596 с вольтметром
Модуль реле 2-х канальный
Датчик температуры DS18b20
Сергей добрый день, подскажите как с Вами связаться? Возможно ли заказать у Вас этот девайс-«Отправка температуры через SMS (GSM) и Arduino».
Здравствуйте, пишите на почту info@robotchip.ru
Повторил. Идея конечно классная, НО как только приходит смс с любым другим содержанием-штуковина умирает….
а как доработать скетч что бы влючать 2 канала сразу по реле — например управлять 2 тенами на эл котле
Здравствуйте, Сергей! Спасибо за материал. Опыта мало, но все получилось! У меня просьба — подскажите как организовать контроль напряжения аккумулятора тоже по смс ? Сенсор добавить удалось, а вот с напряжением — никак. Спасибо.
а где Temp_2 и на схеме не видно надо додумать?
#define ONE_WIRE_BUS A2 // Указываем, к какому выводу подключена DQ_1
#define ONE_WIRE_BUS A3 // Указываем, к какому выводу подключена DQ_2
к выводу А3 подключаете желтый провод второго датчика температуры. Всё просто.
Добрый день, Сергей! Может у вас есть что-то похожее к котлу отопления с отправкой температуры через СМС ?
можно и это решение использовать. Если вам интересно как напишите пожалуйста на tofandima111111@gmail.com
Ардуина не запускается без монитора порта что делать? Помогите пожалуйста