Neoway m590
Первая мысль - сделать управление через транзистор, но по заявлению разрабов из поднебесной, модуль прожорливый и хочет 2 Ампера в пике. Дежурное питание, как правило, как раз 2А плюс-минус 0.5А, зауниверсалить не получится. Придется задействовать внешний блок питания, дополнительные гальванические связи в БП ПК нам не нужны, управление будем делать через реле.
Не будем привязываться к номеру телефона, вдруг он сядет или потеряется в бездонных карманах. Обратная связь нужна так же, как напильник балерине, от нее тоже отказываемся (а о чем сообщать? Что ПК включился? Это и так будет понятно, через TeamViewer будет видно)
Итак, какое-никакое ТЗ состряпано: работает от внешнего источника, параллельно кнопке включается реле, команды принимает с любого номера, обратная связь отсутствует, нужно 3 команды: включить, выключить и хард-офф. Приступаем к разработке!
Если вы захотите повторить проект, знайте, что скорость на модуле по стоку не 9600! Нужно перебором вычислить скорость и через АТ команды поменять ее на 9600.
За основу возьму код, который когда-то для чего-то делал, но он так и не пригодился.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
byte Relay = 12;
byte Relay_inv = 11;
void setup()
{
pinMode(Relay, OUTPUT);
pinMode(Relay_inv, OUTPUT);
digitalWrite(Relay_inv, HIGH);
delay(30000);
mySerial.begin(9600);
mySerial.println("AT+CMGF=1");
delay(300);
mySerial.println("AT+CSCS=\"GSM\"");
delay(300);
mySerial.println("AT+CNMI=2,2,0,0,0");
delay(300);
mySerial.println("AT+CMGD=1,4");
delay(300);
}
void loop()
{
if (mySerial.available())
{
char ch = ' ';
String val = "";
while (mySerial.available()) {
ch = mySerial.read();
val += char(ch);
delay(3);
}
if (val.indexOf("+CMT") > -1)
{
if (val.indexOf("1234-on") > -1 || val.indexOf("1234-off") > -1) // Команда на включение или выключение
{
digitalWrite(Relay, HIGH);
digitalWrite(Relay_inv, LOW);
delay(700);
digitalWrite(Relay, LOW);
digitalWrite(Relay_inv, HIGH);
}
if (val.indexOf("1234-hard-off") > -1) // Команда на хард-офф
{
digitalWrite(Relay, HIGH);
digitalWrite(Relay_inv, LOW);
delay(6000);
digitalWrite(Relay, LOW);
digitalWrite(Relay_inv, HIGH);
}
}
}
}
Схема подключения модуля GSM к Arduino:
"+5V" ----> 5V
"GND " ----> GND
"T" ----> 2
"R" ----> 3
выводы "K" и "G" замкнуть между собой
В даташите написано,что можно конденсатор поставить по питанию, и 2А не потребуется. Поставил 1000мкФ, но это не помогло, теряет связь и сходит с ума при низком токе источника.
Простого реле у меня не оказалось почему-то, пришлось задействовать модуль. Для этого добавил функцию инверсии, т.е. 12 выход прямой, а 11 - инверсный.
Нет комментариев