06.12.2016, 09:04 | #11 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: GPS треккер для собачек
И еще можно модем уводить в спячку минут на 10 , а данные логировать , потом отправлять данные после просыпания модема одним пакетом
|
06.12.2016, 10:05 | #12 |
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799 |
Re: GPS треккер для собачек
А смысл?Если только GPS модуль загонять при этом в сон. А так это можно решить и фильтрацией данных GPS -есть изменения -передавать - нет и не передавать
|
06.12.2016, 12:07 | #13 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: GPS треккер для собачек
Цитата:
К тому же координаты нужны всегда, их можно сохранить а потом передать |
|
06.12.2016, 12:40 | #14 |
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799 |
Re: GPS треккер для собачек
Ну вот и я о том же - сидит себе координаты принимает, буферизует их. Видимо затем обязательно фильтрация - потому как даже на месте есть броски в стороны(хотя некоторые сайты трекеры сами фильтрацию делают) Есть мысли в некоторых режимах вообще их в память писать, а потом будить GPS и слать пачку точек, например протокол Wialon позволяет в одном пакете несколько сообщений отправить (как они называют этот пакет "Черный ящик" ). В идеале слот микроCD прикрутить или еще есть какие миниатюрные решения для расширения памяти ардуины?
|
06.12.2016, 13:24 | #15 |
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799 |
Re: GPS треккер для собачек
Что касается спячки GPS - команда AT+CFUN по книжке может иметь несколько значений основного параметра
PHP код:
|
01.02.2019, 18:36 | #16 |
Junior Member
Регистрация: 31.01.2019
Сообщений: 2
Вес репутации: 0 |
Спасибо за тему! Как раз хочу собрать маячок для собаки на таком же железе, только акселератор не нужен, так как работа устройства будет упрощена. Его задача - это отправлять, в ответ на звонок, смс сообщение с координатами местоположения, и всё. Всё остальное время , маячок может находиться в энергосберегающем режиме, для экономии заряда аккумулятора.
|
01.02.2019, 20:31 | #17 |
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799 |
Начнем сразу с неприятного - модуль GPS NEO-6 очень плохо ловит спутники в помещениях - я когда с ним экспериментировал -пришлось делать это у окна - иначе спутники не находятся. когда стартанёт уже легче можно глубже в помещение.
|
01.02.2019, 21:12 | #18 |
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799 |
Ну вот на этом скетче я остановился. С чего начнем подключения с GSM или GPS?
Развернуть для просмотраКод:
//Подключение библиотек #include <SoftwareSerial.h> SoftwareSerial SerialGPS(10, 11); // RX, TX #include <AltSoftSerial.h> AltSoftSerial SerialGsm; #include <CyberLib.h>// быстрое управление пинами /**********************Переменные************************/ // Общие String NumberTelefone="+7**********" ;// номер управляющего телефона byte result;// //UART String InputUART = "";// строка для чтения UART модуля GSM //GSM String InputGSM = "";// строка для чтения UART модуля GSM //GPS byte GGA=0; byte VTG=0; byte GLL=0; char buffGPS[82];// строка данных для чтения UART модуля GPS char TimeGPS[10];//170840.00 Время UTC: 17ч. 08м. 40.00 сек. char reliabilityGPS;//A Статус достоверности: A – достоверные данные, V – недостоверные данные char reliabilityGPS2;//Статус определения координат: 0 – позиция не определена, 1 – позиция определена, 2- позиция определена с повышенной точностью (DGPS) int numerGPS;//количество спутников char LatitudeData[11];//5509.68339 Широта: 55 градусов, 09.68339 минут char LatitudeDir;//N N – северная, S – южная char LongitudeData[12];//06125.49498 Долгота: 061 градусов, 25.49498 минут char LongitudeDir;//E E – восточная, W – западная float fracdeg; int altiGPS; String HSpeed2;//0.204 Горизонтальная скорость (км/ч) String Course;//– Направление курса относительно истинного севера (градусы) String DataGPS;//311015 Дата: 31 октября 2015 года //String MyString; void setup() { D12_Out; D12_Low; // пин перезагрузки GSM //открытие портов Serial.begin(38400); settinggsm(); //настройка GSM модуля settingps(); } void loop() { /*_________________________Проверка буферов UART________________________________________*/ if (Serial.available()) { pcread(); }; //если есть данные c компа уходим в подпрограмму чтения if (SerialGPS.available()) { getGPS();}; //если есть данные GPS уходим в подпрограмму чтения if (SerialGsm.available()) {gsmread();}; //если есть данные GSM/GPRS уходим в подпрограмму чтения }; void settingps()// настройка модуля GPS { SerialGPS.begin(9600);delay (1000); while(SerialGPS.available()) { delay(5); SerialGPS.read(); };// очищаем буфер Serial.println("Setting OK"); delay(1000); }; void settinggsm() { Serial.println("Reset GSM"); D12_High; delay(3000); D12_Low;delay(3000);//перезагрузка GSM SerialGsm.end(); delay(1000); SerialGsm.begin(115200); delay(1000); // поднятие соединения //настройка модуля if(CommandGSM("AT\r", "ок", 2000)==0){settinggsm();}; // проверка связи с модемом SerialGsm.println("AT+IPR=38400"); delay(2000); SerialGsm.begin(38400); delay(1000); // перезапуск соединения if(CommandGSM("AT+CMEE=2\r", "ок", 500)==0){settinggsm();}; //режим сообщений ошибок if(CommandGSM("ate0\r", "ок", 300)==0){settinggsm();}; //отключение эха порта if(CommandGSM("AT+CREG?\r", "+CREG: 1", 100)==0){settinggsm();}; //проверка регистрации в сети //CommandGSM("AT+CREG=0", "ок", 100)==0){settinggsm();};// запрет выдачи сообщений о смене регистрации сети //настройка СМС if(CommandGSM("AT+CMGF=1\r", "ок", 100)==0){settinggsm();}; //включение текстового режима СМС if(CommandGSM("AT+CSCS=\"GSM\"\r", "ок", 100)==0){settinggsm();}; //включение режима кодировки СМС if(CommandGSM("AT+CNMI=2,2\r", "ок", 100)==0){settinggsm();}; //включение режима СМС сразу в монитор }; void pcread()//эта функция используется для отладки - сообщения с порта транслирется на соответствующий модуль { //InputUART = ""; while (Serial.available() > 0) { char d = Serial.read(); if (d == '\r') { Serial.print("Polucheno-");Serial.print(InputUART);Serial.println("**");delay(300); if (InputUART.substring(0,3) == "GSM") { InputUART = InputUART.substring(4); Serial.print("Command GSM-"); Serial.println(InputUART);delay(300); SerialGsm.println(InputUART);delay(300); InputUART = ""; } else if (InputUART.substring(0,3) == "SMS"){SmsSend2();} else {InputUART = "";}; } else { InputUART += d;} }; }; void getGPS() { //чтение буфера GPS и присвоение значений переменных GPS while (SerialGPS.available() > 0) {char d = SerialGPS.read();Serial.print(d); // GPGGA if(d=='G') { Serial.println(); d = SerialGPS.read();Serial.println(d); if(d=='G') { d = SerialGPS.read();Serial.println(d); if(d=='A') { Serial.println("GPGGA"); GGA=1; d = SerialGPS.read();// пропускаем запятую int i = 0; int i1=0; memset(&buffGPS[0], 0, sizeof(buffGPS)); while (d != '\n' && d!='*') { d = SerialGPS.read(); buffGPS[i]=d; delay(2); i = i + 1;}; Serial.write(buffGPS, sizeof(buffGPS)); Serial.println(); i = 0; d = buffGPS[i]; while (d != ',') { TimeGPS[i1] = d;i = i + 1;i1 = i1 + 1;d = buffGPS[i];}; i1 = 0; i = i+1; d = buffGPS[i]; while (d != ',') {LatitudeData[i1] = d;i = i + 1; i1 = i1 + 1;d = buffGPS[i]; }; i1 = 0; i = i+1; d = buffGPS[i]; if(d != ',') LatitudeDir=d; i1 = 0; i = i+2; d = buffGPS[i]; while (d != ',') {LongitudeData[i1] = d;i = i + 1;i1 = i1 + 1;d = buffGPS[i];}; i1 = 0; i = i+1; d = buffGPS[i]; if(d != ',')LongitudeDir=d; i = i+2; d = buffGPS[i]; while (d != ',') {i = i + 1;d= buffGPS[i];}; numerGPS=0; i1 = 0; i = i+1; d = buffGPS[i]; if(d != ',') numerGPS=int(d-48)*10+int(buffGPS[i+1]-48); i = i+3; d = buffGPS[i]; while (d != ',') {i = i + 1;d = buffGPS[i];}; altiGPS=0; i = i+1; d = buffGPS[i]; while (d != ','&& d != '.'){ altiGPS=altiGPS*10+int(d-48);i = i+1; d = buffGPS[i];}; memset(&buffGPS[0], 0, sizeof(buffGPS)); }; } } if(GGA==1){GGA=0;}; }; }; void gsmread() { while (SerialGsm.available() > 0) { char c = SerialGsm.read(); if (c == '\n') { Serial.println(InputGSM); if ( InputGSM.indexOf("+CMT") >= 0 ){InputGSM = ""; smsread();} else if ( InputGSM.indexOf("+CREG: 2") >= 0 ){InputGSM = ""; settinggsm();} else {InputGSM = "";}; } else { InputGSM += c;} } }; byte CommandGSM(String S, String S1, int t) { while(SerialGsm.available()) { delay(2); SerialGsm.read(); }// очищаем буфер delay(500); Serial.print (S);delay(500); SerialGsm.println(S);delay(t); // шлем команду for (int x = 0; x < 10; x ++) { while (SerialGsm.available() > 0)//если в буфере что есть -читаем { char c = SerialGsm.read(); if (c == '\n') { break;} else { InputGSM += c;} } if ( InputGSM.indexOf(S1) >= 0 ){result=1; InputGSM = "";Serial.println ("ОК");break; } else {Serial.print ("|");InputGSM = "";}; if (x == 9) { result=0; Serial.println ("-NO");}; delay(t); }; return result; while(SerialGsm.available()) { delay(2); SerialGsm.read(); }// зачищаем буфер }; void smsread() { InputGSM = ""; Serial.println("SMSKA!!!!!!!!"); delay(100); while (SerialGsm.available() > 0) { char c = SerialGsm.read(); if (c == '\n') { Serial.print("Text SMS - "); Serial.print(InputGSM); Serial.println("**"); if (InputGSM.indexOf("fittnes")>= 0 ) {uint8_t buf[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0xE8, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x39}; //SerialGPS.write(buf, sizeof(buf));};} // данные 1 сек //else if(InputGSM.indexOf("beacon")>= 0 ){uint8_t buf[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0x88, 0x13, 0x01, 0x00, 0x01, 0x00, 0xB1, 0x49}; //SerialGPS.write(buf, sizeof( buf));} // данные 5 сек //else if(InputGSM.indexOf("tracker")>= 0){uint8_t buf[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0x60, 0xEA, 0x01, 0x00, 0x01, 0x00, 0x60, 0x8C}; //SerialGPS.write(buf, sizeof( buf));} // данные 60 сек } else if(InputGSM.indexOf("location")>= 0){SmsSend("https://www.google.ru/maps/place/54\°44\'21.7\"N+56\°00\'50.4\"E", NumberTelefone);} // смс с оординатами else if(InputGSM.indexOf("battery")>= 0){SmsSend(String(A3_Read, DEC), NumberTelefone);} // смс с оординатами else if(InputGSM.indexOf("reset")>= 0){settinggsm();} // координаты на сайт else {SmsSend(InputGSM, NumberTelefone);}; } else {InputGSM += c;}; }; }; void SmsSend(String textSMS, String numberSMS){ SerialGsm.println("AT+CMGS=\""+numberSMS+"\""); delay(1000); SerialGsm.print(textSMS); // отправляем текст SerialGsm.println((char)26); // символ завершающий передачу }; void SmsSend2(){ InputUART = InputUART.substring(4); Serial.println("SMSka");delay(300); SerialGsm.println("AT+CMGS=\""+NumberTelefone+"\""); delay(1000); SerialGsm.print(InputUART); // отправляем текст SerialGsm.print((char)26); // символ завершающий передачу Serial.println("OK"); InputUART = ""; }; [свернуть] |
06.02.2019, 21:25 | #19 |
Junior Member
Регистрация: 31.01.2019
Сообщений: 2
Вес репутации: 0 |
Спасибо за скетч!
Последний раз редактировалось kevolech; 09.02.2019 в 17:53. |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|