Я думаю что лучше всего GSM модем. Но тоже иногда бывают проблемы со связью
Вид для печати
Я думаю что лучше всего GSM модем. Но тоже иногда бывают проблемы со связью
Обратная связь. Посылаешь команду ON", а он тебе в ответ "Выполнено"
А что нужно купить для всего этого? Arduino uno, gsm модуль, плату с реле (сколько реле понадобится?), и возможно ли без особых знаний это сделать.? Я готов уделить на это много времени, которого нет :D
P.S. у тебя может есть Viber или whatsapp? неужели ничего вообще нет? :D (извиняюсь за назойливость, но проблема в том, что мне кровь из носу нужно сделать себе этот проект за месяц.)
Без знаний можно собрать, но код кто Вам напишет?Цитата:
А что нужно купить для всего этого? Arduino uno, gsm модуль, плату с реле (сколько реле понадобится?), и возможно ли без особых знаний это сделать.? Я готов уделить на это много времени, которого нет :D
Как я уже писал GSM модем.
Любой контроллер ардуино, какой Вам нравится больше, зависит от Ваших предпочтений, размера, числа пинов, запаса на будущее и т.д.
По поводу реле модулей, какой ток нужно коммутировать? И сколько источников коммутации будет?
Я даже на своем авто не знаю какой ток :)Цитата:
Какой ток я не знаю, а как вы думаете?
Нужно измерять. Или смотреть схему
Решил купить компоненты, и вот что я купил: Arduino uno ; GSM/GPRS SIM800L V2.0 ; 8 кональный реле модуль.
Сейчас только нужно разобраться как это всё подключить :D
Вложение 19365Вложение 19366Вложение 19367
Модем к ардуино подключается так:
5В модуля на 5В ардуино
GND на GND ардуино
TXD на любой Dx вывод ардуино
RXD на любой Dx вывод ардуино
Как я понимаю, этот гсм модуль имеет уже встроенный делитель напряжения, верно? Потому что я в интернете нашел что сам SIM800L работает в диапазоне 3,5 - 4,4 вольт. Вложение 19369
Так если я подключусь вот так: Вложение 19368
То все будет правильно?
Все верноЦитата:
Так если я подключусь вот так:
То все будет правильно?
Так как у меня 8 канал. реле, схему пришлось переделать: Вложение 19371
Вложение 19370
И вот что у меня получилось. Всё ли сделал правильно?
Не все. Питание реле и модема не стоит брать с +5В
Нужен отдельный стабилизатор питания например такой https://duino.ru/product_info.php/in...yazheniem.html
Я бы и ардуину в автомобиле запитал бы от него
Да. Запитать все от него
Только сначала настрой его на 5В , а потом подключай, иначе все спалишь
Порылся немного в интернете и нашел вот этот код, только под 4 канальное реле. И хочу спросить нормальный ли код и много ли работы, что бы переделать код под 8 канальное реле?
Код:#include
#include
#define TIMEOUT 5000
#define ACTIVE LOW
#define OFF HIGH
byte Relay[] = {A0,A1,A2,A3};
byte StatRelay[4];
char buffNumber[20];
char currentLine[500] = "";
int currentLineIndex = 0;
bool nextLineIsMessage = false;
String replyNumber = "089510863958";
GPRS gprs;
void setup() {
for(int i=0; i < 4; i++) {
pinMode (Relay[i] , OUTPUT);
digitalWrite (Relay[i], MATI);
StatRelay[i] = MATI;
}
Serial.begin(9600);
while (!Serial);
Serial.println("Activate SIM800L V2 >>> Automatically Read SMS");
gprs.preInit();
delay(1000);
while (0 != gprs.init()) {
delay(1000);
Serial.print("init errorrn");
}
// Manage message to mode ASCII
if (0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1rn", "OK", TIMEOUT)) {
ERROR("ERROR:CNMI");
return;
}
// Read Incoming SMS
if (0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0rn", "OK", TIMEOUT)) {
ERROR("ERROR:CNMI");
return;
}
int pjg = replyNumber.length() + 1;
buffNumber[pjg];
replyNumber.toCharArray(buffNumber,pjg);
Serial.print("Send reply to number = > ");
Serial.println(buffNumber);
Serial.println("Initialization Done");
Serial.println("=============================================================");
}
void loop() {
// Change status Relay ON / OFF
for(int i=0; i < 4; i++) {
digitalWrite(Relay[i], StatRelay[i]);
}
// If there is input data from SIM800
if (gprs.serialSIM800.available()) {
char lastCharRead = gprs.serialSIM800.read();
// Save all data on lastCharRead, then if there is r or n, as a final signal of incoming message
if (lastCharRead == 'r' || lastCharRead == 'n') {
String lastLine = String(currentLine);
// If the last message +CMT indicates new message arrive
if (lastLine.startsWith("+CMT:")) {
Serial.println(lastLine);
nextLineIsMessage = true;
} else if (lastLine.length() > 0) {
if (nextLineIsMessage) {
Serial.println(lastLine);
// ================================================================>> Function of Relay Controller
//Relay 1 Controller
if (lastLine.indexOf("Relay 1 ON") >= 0) {
StatRelay[0] = AKTIF;
Serial.print("Reply====>>>> ");
Serial.println("Relay 1 Status Active");
gprs.sendSMS (buffNumber, "Relay 1 Status Active");
}
else if (lastLine.indexOf("Relay 1 OFF") >= 0) {
StatRelay[0] = MATI;
Serial.print("Reply====>>>> ");
Serial.println("Relay 1 Status Off");
gprs.sendSMS (buffNumber, "Relay 1 Status Off");
}
//Relay 2 Controller
if (lastLine.indexOf("Relay 2 ON") >= 0) {
StatRelay[1] = AKTIF;
Serial.print("Reply====>>>> ");
Serial.println("Relay 2 Status Active");
gprs.sendSMS (buffNumber, "Relay 2 Status Active");
}
else if (lastLine.indexOf("Relay 2 OFF") >= 0) {
StatRelay[1] = MATI;
Serial.print("Reply====>>>> ");
Serial.println("Relay 2 Status Off");
gprs.sendSMS (buffNumber, "Relay 2 Status Off");
}
//Relay 3 Controller
if (lastLine.indexOf("Relay 3 ON") >= 0) {
StatRelay[2] = AKTIF;
Serial.print("Reply====>>>> ");
Serial.println("Relay 3 Status Active");
gprs.sendSMS (buffNumber, "Relay 3 Status Active");
}
else if (lastLine.indexOf("Relay 3 OFF") >= 0) {
StatRelay[2] = MATI;
Serial.print("Reply====>>>> ");
Serial.println("Relay 3 Status Off");
gprs.sendSMS (buffNumber, "Relay 3 Status Off");
}
//Relay 4 Controller
if (lastLine.indexOf("Relay 4 ON") >= 0) {
StatRelay[3] = AKTIF;
Serial.print("Reply====>>>> ");
Serial.println("Relay 4 Status Active");
gprs.sendSMS (buffNumber, "Relay 1 Status Active");
}
else if (lastLine.indexOf("Relay 4 OFF") >= 0) {
StatRelay[3] = MATI;
Serial.print("Reply====>>>> ");
Serial.println("Relay 4 Status Off");
gprs.sendSMS (buffNumber, "Relay 4 Status Off");
}
nextLineIsMessage = false;
}
// ==================================================================>>
}
//Clear char array for next line of read
for ( int i = 0; i < sizeof(currentLine); ++i ) {
currentLine[i] = (char)0;
}
currentLineIndex = 0;
}
else {
currentLine[currentLineIndex++] = lastCharRead;
}
}
}
Я думаю что проще попробовать, чем рыться в чужом коде
Еще вопрос по подключению, вот я составил схему: Вложение 19372
так ли?
От стабилизатора нужно на +5В подавать
так? Вложение 19373
Что-то мне кажется, что я тут начертил какой-то бред :хх
Вложение 19374
А если так, то как запитать реле и гсм модули?
А покудо в тестовом режиме, можно ли просто без стабилизатора всё запитать от компа, через УСБ, что бы пробовать тестить код?
Все от стабилизатора, а стабилизатор к 12 ВЦитата:
А если так, то как запитать реле и гсм модули?
Цитата:
А покудо в тестовом режиме, можно ли просто без стабилизатора всё запитать от компа, через УСБ, что бы пробовать тестить код?
Можно, но USB может в пике и не потянуть
Наконец подключил всё по этой схеме: Вложение 19375
Вставил сим карту, подкоректировал код:Код:#include <gprs.h>
#include <SoftwareSerial.h>
#define TIMEOUT 5000
#define ACTIVE LOW
#define OFF HIGH
byte Relay[] = {A0,A1,A2,A3};
byte StatRelay[4];
char buffNumber[20];
char currentLine[500] = "";
int currentLineIndex = 0;
bool nextLineIsMessage = false;
String replyNumber = "мой номер телефона";
GPRS gprs;
void setup() {
for(int i=0; i < 4; i++) {
pinMode (Relay[i] , OUTPUT);
digitalWrite (Relay[i], OFF);
StatRelay[i] = OFF;
}
Serial.begin(9600);
while (!Serial);
Serial.println("Activate SIM800L V2 >>> Automatically Read SMS");
gprs.preInit();
delay(1000);
while (0 != gprs.init()) {
delay(1000);
Serial.print("init errorrn");
}
// Manage message to mode ASCII
if (0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1rn", "OK", TIMEOUT)) {
ERROR("ERROR:CNMI");
return;
}
// Read Incoming SMS
if (0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0rn", "OK", TIMEOUT)) {
ERROR("ERROR:CNMI");
return;
}
int pjg = replyNumber.length() + 1;
buffNumber[pjg];
replyNumber.toCharArray(buffNumber,pjg);
Serial.print("Send reply to number = > ");
Serial.println(buffNumber);
Serial.println("Initialization Done");
Serial.println("=============================================================");
}
void loop() {
// Change status Relay ON / OFF
for(int i=0; i < 4; i++) {
digitalWrite(Relay[i], StatRelay[i]);
}
// If there is input data from SIM800
if (gprs.serialSIM800.available()) {
char lastCharRead = gprs.serialSIM800.read();
// Save all data on lastCharRead, then if there is r or n, as a final signal of incoming message
if (lastCharRead == 'r' || lastCharRead == 'n') {
String lastLine = String(currentLine);
// If the last message +CMT indicates new message arrive
if (lastLine.startsWith("+CMT:")) {
Serial.println(lastLine);
nextLineIsMessage = true;
} else if (lastLine.length() > 0) {
if (nextLineIsMessage) {
Serial.println(lastLine);
// ================================================================>> Function of Relay Controller
//Relay 1 Controller
if (lastLine.indexOf("Relay 1 ON") >= 0) {
StatRelay[0] = ACTIVE;
Serial.print("Reply====>>>> ");
Serial.println("Relay 1 Status Active");
gprs.sendSMS (buffNumber, "Relay 1 Status Active");
}
else if (lastLine.indexOf("Relay 1 OFF") >= 0) {
StatRelay[0] = OFF;
Serial.print("Reply====>>>> ");
Serial.println("Relay 1 Status Off");
gprs.sendSMS (buffNumber, "Relay 1 Status Off");
}
//Relay 2 Controller
if (lastLine.indexOf("Relay 2 ON") >= 0) {
StatRelay[1] = ACTIVE;
Serial.print("Reply====>>>> ");
Serial.println("Relay 2 Status Active");
gprs.sendSMS (buffNumber, "Relay 2 Status Active");
}
else if (lastLine.indexOf("Relay 2 OFF") >= 0) {
StatRelay[1] = OFF;
Serial.print("Reply====>>>> ");
Serial.println("Relay 2 Status Off");
gprs.sendSMS (buffNumber, "Relay 2 Status Off");
}
//Relay 3 Controller
if (lastLine.indexOf("Relay 3 ON") >= 0) {
StatRelay[2] = ACTIVE;
Serial.print("Reply====>>>> ");
Serial.println("Relay 3 Status Active");
gprs.sendSMS (buffNumber, "Relay 3 Status Active");
}
else if (lastLine.indexOf("Relay 3 OFF") >= 0) {
StatRelay[2] = OFF;
Serial.print("Reply====>>>> ");
Serial.println("Relay 3 Status Off");
gprs.sendSMS (buffNumber, "Relay 3 Status Off");
}
//Relay 4 Controller
if (lastLine.indexOf("Relay 4 ON") >= 0) {
StatRelay[3] = ACTIVE;
Serial.print("Reply====>>>> ");
Serial.println("Relay 4 Status Active");
gprs.sendSMS (buffNumber, "Relay 1 Status Active");
}
else if (lastLine.indexOf("Relay 4 OFF") >= 0) {
StatRelay[3] = OFF;
Serial.print("Reply====>>>> ");
Serial.println("Relay 4 Status Off");
gprs.sendSMS (buffNumber, "Relay 4 Status Off");
}
nextLineIsMessage = false;
}
// ==================================================================>>
}
//Clear char array for next line of read
for ( int i = 0; i < sizeof(currentLine); ++i ) {
currentLine[i] = (char)0;
}
currentLineIndex = 0;
}
else {
currentLine[currentLineIndex++] = lastCharRead;
}
}
}
и столкнулся с такой проблемой, GSM модем не читает данную литовскую SIM карту (SIM карта "LABAS"). В Serial monitor пусто, на ввод АТ команд не реагирует. что делать?
Вижу #include <SoftwareSerial.h>
а где его инициализация?
попробовал с тестовым скетчем, на введение АТ команд не реагирует (((
Вложение 19381
Я в коде не вижу отправки АТ команд, код начинается с ожидания ответа от модема. а нужно ожидать ввод с сериал порта от РС