Управление 12V лампой через SMS с помощью Arduino
В этом руководстве мы покажем вам, как можно управлять 12V лампой через SMS, используя Arduino UNO, модуль реле и GSM-шилд SIM900.
Перед тем как приступить к этому руководству, мы рекомендуем ознакомиться со следующими ресурсами:
Сначала посмотрите видео-демонстрацию
Обзор проекта
В этом проекте используется GSM-шилд SIM900 для приема и отправки SMS с Arduino. Цели проекта:
включить 12V лампу, когда вы отправляете SMS на Arduino с текстом «ON»
выключить 12V лампу, когда вы отправляете SMS на Arduino с текстом «OFF»
вы можете запросить состояние лампы, отправив SMS на Arduino с текстом «STATE», Arduino должен ответить сообщением «lamp is on» или «lamp is off»
Необходимые компоненты
В этом проекте вам нужно подключить Arduino к GSM-шилду и к модулю реле, подключенному к 12V лампе. Вот полный список необходимых компонентов для этого проекта (нажмите на ссылки ниже, чтобы найти лучшую цену на Maker Advisor):
Arduino UNO – читайте Лучшие стартовые наборы Arduino
12V лампа
Патрон для 12V лампы
Вы можете использовать приведенные выше ссылки или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Подготовка GSM-шилда
Для использования GSM-шилда SIM900:
1) Вам нужна активная SIM-карта. Мы рекомендуем использовать SIM-карту с предоплаченным тарифом для целей тестирования.
2) Вам необходимо отключить блокировку PIN-кода SIM-карты. Вставьте SIM-карту в ваш смартфон и отключите блокировку PIN-кода в настройках безопасности телефона.
3) GSM-шилд должен питаться от внешнего блока питания 5V, способного обеспечить 2A, или 9V 1A, или 12V 1A.
4) Мы будем использовать программный последовательный порт для связи с шилдом. Поэтому на переключателе выбора последовательного порта убедитесь, что перемычка подключена, как показано на рисунке ниже, для использования программного последовательного порта.
5) Вы можете включить/выключить шилд, нажав кнопку питания, или вы можете включить его автоматически с Arduino через пин D9. Для автоматического включения и выключения шилда вам нужно припаять соединения R13, как показано на рисунке ниже.
6) Если вы впервые работаете с GSM-шилдом, мы рекомендуем прочитать раздел «Предварительные шаги» в нашем руководстве по GSM-шилду здесь.
7) Вставьте SIM-карту в держатель SIM-карты.
8) Наконец, подключите GSM-шилд SIM900 к Arduino по следующей схеме.
9) Вы должны подать питание на GSM-шилд SIM900 от внешнего блока питания 5V. Убедитесь, что вы выбрали внешний источник питания с помощью переключателя рядом с разъемом DC.
Примечание
Вы можете проверить, правильно ли работает шилд, отправляя AT-команды из Arduino IDE с помощью FTDI-программатора – смотрите руководство по GSM GPRS шилду SIM900 с Arduino.
Подключение модуля реле
В этом проекте мы управляем 12V лампой. Однако этот проект может быть легко адаптирован для управления напряжением сети или другими электронными приборами. Ознакомьтесь с нашим руководством по модулю реле с Arduino, чтобы узнать, как управлять сетевым напряжением с помощью реле.
Мы используем следующую 12V лампу и соответствующий патрон для лампы.
Добавьте модуль реле и патрон лампы к предыдущей схеме.
В целях безопасности мы размещаем наше реле внутри пластикового корпуса.
Код
Ниже вы можете найти код для этого проекта. Убедитесь, что вы отредактировали код, указав номер телефона, на который Arduino должен отвечать. Мы рекомендуем прочитать объяснение кода перед загрузкой.
/*
* Complete Project Details https://randomnerdtutorials.com
*/
// Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>
// Configure software serial port
SoftwareSerial SIM900(7, 8);
// Variable to store text message
String textMessage;
// Create a variable to store Lamp state
String lampState = "HIGH";
// Relay connected to pin 12
const int relay = 12;
void setup() {
// Automatically turn on the shield
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);
// Set relay as OUTPUT
pinMode(relay, OUTPUT);
// By default the relay is off
digitalWrite(relay, HIGH);
// Initializing serial commmunication
Serial.begin(19200);
SIM900.begin(19200);
// Give time to your GSM shield log on to network
delay(20000);
Serial.print("SIM900 ready...");
// AT command to set SIM900 to SMS mode
SIM900.print("AT+CMGF=1\r");
delay(100);
// Set module to send SMS data to serial out upon receipt
SIM900.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
}
void loop(){
if(SIM900.available()>0){
textMessage = SIM900.readString();
Serial.print(textMessage);
delay(10);
}
if(textMessage.indexOf("ON")>=0){
// Turn on relay and save current state
digitalWrite(relay, LOW);
lampState = "on";
Serial.println("Relay set to ON");
textMessage = "";
}
if(textMessage.indexOf("OFF")>=0){
// Turn off relay and save current state
digitalWrite(relay, HIGH);
lampState = "off";
Serial.println("Relay set to OFF");
textMessage = "";
}
if(textMessage.indexOf("STATE")>=0){
String message = "Lamp is " + lampState;
sendSMS(message);
Serial.println("Lamp state resquest");
textMessage = "";
}
}
// Function that sends SMS
void sendSMS(String message){
// AT command to set SIM900 to SMS mode
SIM900.print("AT+CMGF=1\r");
delay(100);
// REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
// USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
SIM900.println("AT + CMGS = \"XXXXXXXXXX\"");
delay(100);
// Send the SMS
SIM900.println(message);
delay(100);
// End AT command with a ^Z, ASCII code 26
SIM900.println((char)26);
delay(100);
SIM900.println();
// Give module time to send SMS
delay(5000);
}
Код довольно прост для понимания. Продолжайте читать, чтобы понять, что делает каждый раздел кода.
Подключение библиотеки
Arduino взаимодействует с шилдом через программный последовательный порт. Поэтому вы начинаете с подключения библиотеки SoftwareSerial.h.
// Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>
Программный последовательный порт
Затем вы создаете программный последовательный порт на пинах 7 и 8 (пин 7 установлен как RX, а 8 как TX).
// Configure software serial port
SoftwareSerial SIM900(7, 8);
Создание переменных
Вы создаете переменную textMessage, которая будет хранить текстовое сообщение, полученное Arduino; и другую переменную для хранения текущего состояния лампы (состояния реле), называемую lampState. Переменная lampState по умолчанию установлена в HIGH, потому что мы хотим, чтобы реле было выключено по умолчанию. Реле работает с инвертированной логикой, поэтому вам нужно установить его в HIGH, чтобы выключить его.
// Variable to store text message
String textMessage;
// Create a variable to store Lamp state
String lampState = "HIGH";
Вы также назначаете номер пина, к которому подключено реле, пин 12.
// Relay connected to pin 12
const int relay = 12;
setup()
В функции setup() вы начинаете с включения GSM-шилда. Следующие строки эквивалентны нажатию кнопки питания шилда.
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);
Реле устанавливается как выход, и его состояние по умолчанию – выключено.
// Set relay as OUTPUT
pinMode(relay, OUTPUT);
// By default the relay is off
digitalWrite(relay, HIGH);
Затем вы инициализируете последовательную связь с шилдом и даете ему некоторое время для подключения к сети.
// Initializing serial commmunication
Serial.begin(19200);
SIM900.begin(19200);
// Give time to your GSM shield log on to network
delay(20000);
Serial.print("SIM900 ready...");
Шилд переводится в режим SMS с помощью следующего:
// AT command to set SIM900 to SMS mode
SIM900.print("AT+CMGF=1\r");
delay(100);
// Set module to send SMS data to serial out upon receipt
SIM900.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
loop()
В функции loop() вы читаете входящие сообщения и сравниваете, содержат ли эти сообщения текст ON, OFF или STATE. В соответствии с содержимым сообщения Arduino будет выполнять различные задачи.
Итак, вы начинаете с проверки, есть ли сообщения для чтения. Если есть, сообщение будет сохранено в переменной textMessage. Для целей отладки сообщение отображается в мониторе последовательного порта.
if(SIM900.available() >0) {
textMessage = SIM900.readString();
Serial.print(textMessage);
delay(10);
}
Включение лампы
Если полученное сообщение содержит текст «ON», реле будет включено, что включит лампу. Затем вы сохраняете текущее состояние лампы в переменной lampState. Наконец, вы очищаете переменную textMessage, чтобы она была пустой для приема новых SMS.
if (textMessage.indexOf("ON") >= 0){
// Turn on relay and save current state
digitalWrite(relay, LOW);
lampState = "on";
Serial.println("Relay set to ON");
textMessage = "";
Выключение лампы
С другой стороны, если полученное SMS содержит текст «OFF», реле будет выключено, новое состояние будет сохранено, и textMessage будет очищена.
if (textMessage.indexOf("OFF") >= 0){
// Turn off relay and save current state
digitalWrite(relay, HIGH);
lampState = "off";
Serial.println("Relay set to OFF");
textMessage = "";
Возврат состояния лампы
Наконец, если входящее SMS содержит текст «STATE», Arduino должен отправить сообщение на заранее определенный номер телефона, сообщая, включена или выключена лампа в данный момент.
if (textMessage.indexOf("STATE") >= 0){
String message = "Lamp is " + lampState;
sendSMS(message);
Serial.println("Lamp state resquest");
textMessage = "";
Сообщение отправляется с помощью функции sendSMS(), определенной в конце кода.
Отправка SMS
Функция sendSMS(), созданная в конце кода, принимает строку в качестве аргумента. Эта строка должна быть сообщением, которое нужно отправить.
Номер, на который Arduino отвечает, задается в следующей строке:
SIM900.println("AT + CMGS = \"XXXXXXXXXXXX\"");
Замените XXXXXXXXXXXX на номер телефона получателя.
Примечание
Вы должны добавить номер в соответствии с международным форматом телефонных номеров. Например, в Португалии номеру предшествует +351XXXXXXXXX.
После добавления номера телефона, на который Arduino должен отвечать, вы можете скопировать полный код в Arduino IDE и загрузить его на плату Arduino.
Заключение
В этом проекте мы показали вам, как можно использовать GSM-шилд SIM900 для управления 12V лампой и для запроса данных (состояния лампы) у Arduino.
Концепции, изученные в этом проекте, могут быть применены для управления любыми электронными приборами по вашему выбору. Вы также можете использовать то, что вы здесь узнали, для запроса у Arduino данных датчиков – например, запроса последних показаний вашей метеостанции.
Вы также можете создать систему наблюдения, используя PIR-датчик движения и GSM-шилд, который отправляет вам SMS при обнаружении неожиданного движения.
Мы надеемся, что этот проект оказался вам полезен. Если вам понравился этот проект, обязательно ознакомьтесь с нашим курсом Arduino: Arduino Step-by-step Projects с 25 проектами.
Спасибо за чтение.