GY-NEO6M을 기반으로 한 DIY GPS 추적기는 쉽습니다. Arduino GPS 추적기 Hatire Arduino 설정 창에 대한 간략한 설명

Arduino로 여러 번 실험한 후 GPRS를 통해 서버로 좌표가 전송되는 간단하고 그리 비싸지 않은 GPS 추적기를 만들기로 결정했습니다.
중고 Arduino Mega 2560( 아두이노 우노), SIM900 - GSM/GPRS 모듈(서버에 정보 전송용), GPS 수신기 SKM53 GPS.

모든 것은 ebay.com에서 총 약 1500루블(arduino의 경우 약 500루블, GSM 모듈의 경우 조금 더 적음, GPS의 경우 조금 더 높음)에 구입되었습니다.

GPS 수신기

먼저 GPS를 사용하는 방법을 이해해야 합니다. 선택한 모듈은 가장 저렴하고 간단한 모듈 중 하나입니다. 그러나 제조업체는 위성 데이터를 저장하기 위해 배터리를 약속합니다. 데이터시트에 따르면 콜드 스타트에는 36초가 소요된다고 나와 있는데, 내 조건(창틀에서 10층, 근처에 건물이 없음)에서는 무려 20분이나 걸렸습니다. 그러나 다음 시작 시간은 이미 2분입니다.

Arduino에 연결된 장치의 중요한 매개 변수는 전력 소비입니다. Arduino 변환기에 과부하가 걸리면 소손될 수 있습니다. 사용된 수신기의 최대 전력 소비는 45mA @ 3.3v입니다. 왜 사양에 필요한 전압(5V)이 아닌 다른 전압에서의 전류 강도를 표시해야 하는지 궁금합니다. 그러나 Arduino 변환기는 45mA를 견딜 수 있습니다.

연결
RX 핀이 있지만 GPS는 제어되지 않습니다. 어떤 목적으로 사용되었는지는 알 수 없습니다. 이 수신기로 할 수 있는 주요 작업은 TX 핀에서 NMEA 프로토콜을 통해 데이터를 읽는 것입니다. 레벨 - 5V, Arduino 전용, 속도 - 9600 보드. VIN을 아두이노의 VCC에, GND를 GND에, TX를 해당 시리얼의 RX에 연결합니다. 먼저 데이터를 수동으로 읽은 다음 TinyGPS 라이브러리를 사용했습니다. 놀랍게도 모든 것을 읽을 수 있습니다. Uno로 전환한 후 SoftwareSerial을 사용해야 했는데 문제가 발생했습니다. 메시지 문자 중 일부가 손실되었습니다. TinyGPS가 유효하지 않은 메시지를 차단하므로 이는 그다지 중요하지 않지만 매우 불쾌합니다. 1Hz 주파수를 잊어버릴 수 있습니다.

SoftwareSerial에 대한 간단한 참고 사항: Uno에는 하드웨어 포트(USB 직렬에 연결된 포트 제외)가 없으므로 소프트웨어를 사용해야 합니다. 따라서 보드가 인터럽트를 지원하는 핀에서만 데이터를 수신할 수 있습니다. Uno의 경우 2번과 3번입니다. 게다가 이러한 포트는 한 번에 하나의 포트만 데이터를 수신할 수 있습니다.

이것이 "테스트 벤치"의 모습입니다.

GSM 수신기/송신기


이제 더 흥미로운 부분이 나옵니다. GSM 모듈 - SIM900. GSM과 GPRS를 지원합니다. EDGE나 특히 3G는 모두 지원되지 않습니다. 좌표 데이터 전송의 경우 이는 아마도 좋을 것입니다. 모드 간 전환 시 지연이나 문제가 없으며 GPRS는 이제 거의 모든 곳에서 사용할 수 있습니다. 그러나 좀 더 복잡한 애플리케이션의 경우에는 이것만으로는 충분하지 않을 수 있습니다.

연결
모듈은 또한 동일한 레벨(5V)의 직렬 포트를 통해 제어됩니다. 여기서는 RX와 TX가 모두 필요합니다. 모듈은 쉴드입니다. 즉, Arduino에 설치됩니다. 게다가 메가, 우노 모두 호환됩니다. 기본 속도는 115200입니다.

우리는 그것을 Mega에서 조립했는데 여기서 첫 번째 불쾌한 놀라움이 우리를 기다리고 있습니다. 모듈의 TX 핀이 Mega의 7번째 핀에 떨어집니다. 메가의 7번 핀에서는 인터럽트를 사용할 수 없습니다. 즉, 7번 핀을 6번 핀에 연결해야 인터럽트가 가능합니다. 따라서 Arduino 핀 하나를 낭비하게 됩니다. 글쎄, 메가의 경우 그다지 무섭지 않습니다. 결국 핀이 충분합니다. 그러나 Uno의 경우 이는 이미 더 복잡합니다(인터럽트를 지원하는 핀은 2개(2와 3)뿐이라는 점을 상기시켜 드립니다). 이 문제에 대한 해결책으로 Arduino에 모듈을 설치하지 않고 전선으로 연결하는 것이 좋습니다. 그런 다음 Serial1을 사용할 수 있습니다.

연결한 후 모듈과 "대화"를 시도합니다(모듈을 켜는 것을 잊지 마세요). 포트 속도 - 115200을 선택하고 모든 내장 직렬 포트(메가의 경우 4개, 우노의 경우 1개)와 모든 소프트웨어 포트가 동일한 속도로 작동하는 것이 좋습니다. 이렇게 하면 보다 안정적인 데이터 전송을 얻을 수 있습니다. 추측할 수는 있지만 이유는 모르겠습니다.

그래서 우리는 직렬 포트 간에 데이터를 전달하기 위한 기본 코드를 작성하고 Atz를 보내고 응답으로 침묵을 받습니다. 무슨 일이 일어났나요? 아, 대소문자를 구분합니다. ATZ, 괜찮아요. 만세, 모듈이 우리의 말을 들을 수 있습니다. 호기심에 전화해 볼까요? ATD +7499... 유선 전화가 울리고 Arduino에서 연기가 나고 노트북이 꺼집니다. Arduino 변환기가 소손되었습니다. 6~20V에서 작동할 수 있다고 적혀 있지만 19V를 공급하는 것은 나쁜 생각이었고 7~12V를 권장합니다. GSM 모듈의 데이터 시트에는 부하시 전력 소비에 대한 언급이 없습니다. 음, 메가는 예비 부품 창고로 갑니다. 숨을 죽이고 USB에서 +5V 라인을 통해 +19V를 받은 노트북을 켰다. 작동하고 USB도 다 타지 않았습니다. 우리를 보호해 준 Lenovo에게 감사드립니다.

컨버터가 소진된 후 전류 소모량을 찾아보았습니다. 따라서 피크 - 2A, 일반 - 0.5A입니다. 이는 분명히 Arduino 변환기의 기능을 넘어서는 것입니다. 별도의 음식이 필요합니다.

프로그램 작성
이 모듈은 광범위한 데이터 전송 기능을 제공합니다. 음성 통화 및 SMS에서 시작하여 GPRS 자체로 끝납니다. 또한 후자의 경우 수행이 가능합니다. HTTP 요청 AT 명령을 사용합니다. 여러 개를 보내야 하지만 그만한 가치가 있습니다. 실제로 수동으로 요청을 생성하고 싶지는 않습니다. GPRS를 통해 데이터 전송 채널을 열 때 몇 가지 미묘한 차이가 있습니다. 기존 AT+CGDCONT=1, “IP”, “apn”을 기억하시나요? 따라서 여기에도 동일한 것이 필요하지만 조금 더 교활합니다.

특정 URL의 페이지를 가져오려면 다음 명령을 보내야 합니다.
AT+SAPBR=1,1 //오픈 캐리어(캐리어) AT+SAPBR=3,1,"CONTYPE","GPRS" //연결 유형 - GPRS AT+SAPBR=3,1,"APN","인터넷" //APN, for Megafon - internet AT+HTTPINIT //HTTP 초기화 AT+HTTPPARA="CID",1 //사용할 캐리어 ID입니다. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //좌표가 AT+HTTPACTION=0인 sprintf 이후의 실제 URL // GET 메소드를 사용하여 데이터 요청 //응답 대기 AT+HTTPTERM //HTTP 중지

결과적으로 연결이 있으면 서버로부터 응답을 받게 됩니다. 즉, 사실 우리는 서버가 GET을 통해 좌표 데이터를 수신하는 경우 좌표 데이터를 보내는 방법을 이미 알고 있습니다.

영양물 섭취
Arduino 변환기에서 GSM 모듈에 전원을 공급하는 것은 나쁜 생각이기 때문에 동일한 eBay에서 12v->5v, 3A 변환기를 구입하기로 결정했습니다. 그러나 모듈은 5V 전원 공급 장치를 좋아하지 않습니다. 해킹하러 갑시다. Arduino에서 5V가 나오는 핀에 5V를 연결하세요. 그러면 모듈에 내장된 변환기(Arduino 변환기인 MIC 29302WU보다 훨씬 강력함)가 모듈에 필요한 것을 5V로 만들어줍니다.

섬기는 사람

서버는 Yandex.maps에 좌표를 저장하고 그리는 기본 서버를 작성했습니다. 향후에는 많은 사용자 지원, '무장/비무장' 상태, 차량 시스템 상태(점화 장치, 헤드라이트 등), 심지어 차량 시스템 제어까지 포함한 다양한 기능을 추가하는 것이 가능합니다. 물론 추적기에 대한 적절한 지원을 통해 본격적인 경보 시스템으로 원활하게 전환됩니다.

현장 테스트

케이스 없이 조립된 장치의 모습은 다음과 같습니다.

전력 변환기를 설치하고 죽은 DSL 모뎀의 케이스에 넣은 후 시스템은 다음과 같습니다.

전선을 납땜하고 Arduino 블록에서 여러 접점을 제거했습니다. 그것들은 다음과 같습니다:

나는 차에 12V를 연결하고 모스크바를 돌아다니며 트랙을 얻었습니다.


트랙 포인트가 서로 꽤 멀리 떨어져 있습니다. 그 이유는 GPRS를 통해 데이터를 전송하는 데 비교적 오랜 시간이 걸리고 이 시간 동안 좌표를 읽지 못하기 때문입니다. 이는 분명히 프로그래밍 오류입니다. 첫째, 시간이 지남에 따라 좌표 패킷을 즉시 전송하고 둘째, GPRS 모듈과 비동기식으로 작업하여 처리됩니다.

자동차 조수석에서 위성을 검색하는 데 걸리는 시간은 몇 분입니다.

결론

사소한 작업은 아니지만 Arduino에서 자신의 손으로 GPS 추적기를 만드는 것이 가능합니다. 이제 주요 질문은 유해 요인(물, 온도)에 노출되지 않고, 금속으로 덮이지 않고(GPS 및 GPRS가 보호됨) 특별히 눈에 띄지 않도록 자동차에서 장치를 숨기는 방법입니다. 지금은 단지 객실에 놓여 있고 시가 라이터 소켓에 연결됩니다.

추적기가 이미 주요 작업을 수행하고 있지만 더 부드러운 추적을 위해 코드를 수정해야 합니다.

중고 기기

  • 아두이노 메가 2560
  • 아두이노 우노
  • GPS 스카이랩 SKM53
  • SIM900 기반 GSM/GPRS 실드
  • DC-DC 12v->5v 3A 변환기

개인용 GPS 송신기

오늘날에는 이전에 부피가 크고 비싸며 고도로 전문화되었던 장치가 빠르게 크기, 무게, 가격을 잃어가고 있지만 많은 새로운 기능이 추가될 정도로 발전이 진행되고 있습니다.

이것이 GPS 기술을 기반으로 한 장치가 포켓 장치에 도달하여 그곳에 단단히 고정되어 사람들에게 새로운 기회를 제공하는 방법입니다. 특히 개별 GPS 송신기를 강조할 가치가 있습니다.

기본적으로 이들은 동일한 GPS 추적기로 차량이 아닌 일상 생활에서 사람이 사용하도록 설계되었습니다.

모델에 따라 여러 가지 다양한 장치. 가장 단순한 형태로는 디스플레이가 없는 작은 상자일 뿐입니다. 어린이, 동물 또는 기타 물체의 움직임을 제어할 수 있습니다., 고정되어 있습니다.

내부에 위치하고 있어요 GPS 모듈지상의 좌표를 결정하는 , 정보를 전송하고 제어 명령을 수신하는 GSM/GPRS 모듈, 장기간 자율 작동을 보장하는 전원이 있습니다.

GPS 송신기의 기능

기능이 증가함에 따라 장치의 다음 기능이 나타납니다.


GPS 송신기 옵션

구성에 따라 트랜스미터 하우징이 크게 다를 수 있습니다. 다양한 모델형태로 처형을 가한다 휴대폰, 클래식 네비게이터 또는 손목시계까지.

특별 버전의 다채로운 디자인과 유용한 추가 기능을 통해 아이들은 이러한 장치를 "부모 스파이"가 아닌 세련되고 실용적인 장치로 취급할 수 있습니다.

장점으로, 많은 버전의 장치가 없이도 작동할 수 있다는 사실을 언급할 가치가 있습니다. 구독료전문 운영자의 서비스를 위해 필요한 모든 정보가 인터넷이나 SMS 메시지를 통해 고객에게 직접 전송되므로 해당 장비의 유지 관리 비용이 크게 절약됩니다.

GPS 추적기에 관한 기사

이 기사에서는 sim800L을 예로 들어 Arduino에서 GSM 모듈을 사용하는 방법을 보여 드리겠습니다. 동일한 지침은 sim900 등과 같은 다른 gsm 모듈을 사용하는 데 매우 적합합니다. 모든 모듈이 거의 동일한 방식으로 작동하기 때문입니다. 이는 포트를 통한 AT 명령 교환입니다.

SMS 명령을 통해 장치를 원격으로 제어하는 ​​데 사용할 수 있는 SMS 릴레이의 예를 사용하여 Arduino와 함께 모듈을 사용하는 방법을 보여 드리겠습니다. 자동차 경보기 등과 함께 사용할 수 있습니다.

모듈은 Arduino nano의 2개 및 3개 디지털 핀에서 작동하는 소프트웨어 직렬 포트의 UART 인터페이스를 통해 Arduino에 연결됩니다.

GSM 모듈을 사용한 Arduino 작업

모듈에 전원을 공급하려면 3.6V ~ 4.2V 범위의 전압이 필요합니다. 즉, Arduino에는 모듈에 전원을 공급하는 데 적합하지 않은 3.3V 안정기가 설치되어 있으므로 추가 전압 안정기를 사용해야 함을 의미합니다. , 추가 안정 장치를 설치하는 두 번째 이유는 GSM 모듈에 다음을 제공하는 송신기가 약하기 때문에 부하가 심하기 때문입니다. 안정적인 연결셀룰러 스테이션으로. Arduino nano의 전원은 VIN 핀에 공급됩니다. 이는 모듈이 넓은 전압 범위(6-10V)에서 작동하도록 보장하는 Arduino에 내장된 안정기입니다. 릴레이 모듈은 주어진 프로그램 텍스트에 따라 Arduino nano의 핀 10에 연결되며 디지털 출력으로 작동하는 다른 모듈로 쉽게 변경할 수 있습니다.

작동 방식은 다음과 같습니다. GSM 모듈에 SIM 카드를 설치하고 전원을 켠 다음 "1"이라는 텍스트가 포함된 SMS를 해당 번호로 보냅니다. SIM 카드릴레이를 켜려면, 끄려면 "0"이라는 텍스트가 포함된 SMS를 보냅니다.

#포함하다
SoftwareSerial gprsSerial(2, 3); // 소프트웨어 포트에 핀 2와 3을 설정합니다.
int LedPin = 10; // 릴레이용

무효 설정()
{
gprsSerial.begin(4800);
pinMode(LedPin, OUTPUT);

// 메시지 수신 설정

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
지연(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
지연(500); // 명령 처리 지연
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
지연(700);
}

문자열 currStr = "";
// 이 줄이 메시지이면 변수는 True 값을 갖습니다.
부울 isStringMessage = false;

무효 루프()
{
if (!gprsSerial.available())
반품;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if(isStringMessage)(
// 현재 줄이 메시지라면...
if (!currStr.compareTo("1")) (
digitalWrite(LedPin, HIGH);
) else if (!currStr.compareTo("0")) (
digitalWrite(LedPin, LOW);
}
isStringMessage = 거짓;
) 또 다른 (
if (currStr.startsWith("+CMT")) (
// 현재 줄이 "+CMT"로 시작하면 다음 메시지
isStringMessage = 사실;
}
}
currStr = "";
) else if ('\n' != currSymb) (
currStr += String(currSymb);
}
}

기사의 비디오 버전:

태그: #아두이노, #SIM800L

당신의 점수:

이 글에 사용된 제품:

← Arduino의 GPS 로거 | COM 포트를 통한 릴레이 제어 →

RTL-SDR의 GSM 스캐너

| | 영어 | 개발 | 자주 묻는 질문 |

스캐너의 주요 특징

GSM 스캐너는 GSM 다운링크 채널을 스캔하고 세 주요 통신업체 중 하나의 신호 강도 및 채널 소유권에 대한 정보를 표시합니다. 셀룰러 통신 MTS, Beeline 및 Megafon. 작업 결과에 따라 스캐너를 사용하면 식별자 목록을 저장할 수 있습니다. 기지국스캔된 모든 채널에 대한 MCC, MNC, LAC 및 CI.
GSM 스캐너는 GSM 신호 레벨을 평가하고 신호 품질을 비교하는 데 사용할 수 있습니다. 다른 연산자, 무선 범위 평가, 셀룰러 신호 증폭기 설치 결정 및 매개변수 조정, 교육 목적 등
스캐너는 Windows에서 실행되며 간단하고 저렴한 수신기인 RTL-SDR을 사용합니다. 다음에서 RTL-SDR에 대해 읽을 수 있습니다.
RTL-SDR(RTL2832U) 및 소프트웨어 정의 라디오 뉴스 및 프로젝트,
RTL-SDR – 오즈모SDR,
러시아어로 된 RTL-SDR.
RTL-SDR 매개변수는 스캐너의 주요 특성을 결정합니다. 물론 GSM 스캐너는 일반 측정 장비를 대체할 수 없습니다.
스캐너는 사용 제한 없이 무료로 배포됩니다.
현재 버전 GSM 900 대역은 지원하고 GSM 1800은 지원하지 않습니다. 이는 R820T 튜너가 있는 RTL-SDR의 작동 주파수가 1760MHz로 제한된다는 사실에 의해 결정됩니다. 실험적인 RTL-SDR 드라이버를 사용하면 적어도 1800MHz 범위의 일부에서 작동할 수 있을 것으로 기대됩니다.

스캐너 시작

최신 버전의 스캐너는 이 링크에서 다운로드할 수 있습니다. 편리한 위치에 파일의 압축을 풀고 gsmscan.exe를 실행하세요.
이전 버전스캐너, 개발과 관련된 소스 및 기타 정보가 있는 저장소에 대한 링크가 개발 페이지에 있습니다.
스캐너가 작동하려면 RTL-SDR 드라이버를 설치해야 하며, 아직 설치하지 않은 경우 Zadig 프로그램을 사용하여 설치 절차를 설명하면 편리하게 설치할 수 있습니다.

스캐너 사용

아래는 스캐너 프로그램 창의 모습입니다.

가로 축은 ARFCN 또는 MHz 형식으로 GSM 채널 번호를 표시하고, 세로 축은 신호 레벨을 dBm 단위로 표시합니다. 선의 높이는 신호 강도를 나타냅니다.

Arduino와의 GSM 모듈 NEOWAY M590 통신

BS 식별자가 성공적으로 디코딩되었고 3개 주요 통신 사업자의 식별자에 해당하는 경우 해당 선이 해당 색상으로 표시됩니다.
화면 상단의 드롭다운 목록을 사용하면 SDR 수신기(여러 개가 연결된 경우), 범위를 선택할 수 있습니다. GSM 작업 900 또는 GSM 1800 및 수평 축 장치 ARFCN 또는 MHz.
버튼을 사용하면 스캐너 작동에 대한 보고서를 디코딩된 기지국 목록 형식으로 저장하고, BS 디코딩 결과를 지우고, 프로그램에 대한 정보를 얻을 수 있습니다.

작업의 원리와 특징.

작동 중에 프로그램은 2.0MHz(10GSM 채널) 단위로 작동 주파수 범위를 스캔하고 2.4MHz의 샘플링 주파수로 신호를 디지털화합니다. 스캐닝 프로세스는 신호 강도를 측정하기 위해 전체 범위를 통과하는 빠른 통과와 BS ID를 디코딩하기 위한 느린 통과로 구성됩니다.

전력을 측정하기 위해 전체 범위를 횡단한 후 한 번의 디코딩 단계가 수행됩니다. 따라서 GSM 900 범위에서 신호 레벨은 약 2초마다 업데이트되며 완전한 디코딩 과정에는 약 1분이 소요됩니다.
RTL-SDR로부터 수신된 신호의 품질이 좋지 않기 때문에 기지국 방송 제어 채널(BCCH)의 시스템 정보(SI)를 올바르게 디코딩할 확률은 높지 않습니다. 다중 경로 전파로 인한 신호 레벨 변동도 시스템 정보 디코딩 가능성을 감소시킵니다. 이러한 이유로 BS 식별자를 얻으려면 스캐너가 약 10분 동안 정보를 축적해야 합니다. 하지만 이 경우에도 모든 채널이 제공되는 것은 아닙니다. 여기가장 이상적인 수신기에서도 디코딩할 수 있는 충분한 신호 레벨과 품질을 제공합니다. 또한 모든 GSM 채널이 네트워크에서 작동하는 데 사용되는 것은 아닙니다. GSM 표준, 위 그림에서 볼 수 있듯이 Megafon은 채널 975 - 1000을 사용하여 작업합니다. UMTS 표준.
작동 중에 스캐너는 새로 디코딩된 채널에 대한 시스템 정보를 채널의 일반 정보 배열에 추가합니다. 하지만 이 단계에서 시스템 정보가 디코딩되지 않으면 이전에 디코딩된 채널에 대한 정보는 삭제되지 않고 어레이에 남아 있습니다. 이 정보를 지우려면 버튼을 사용하여 BS 디코딩 결과를 지우십시오.
보고서 저장 버튼을 클릭하면 누적된 결과가 저장됩니다. 텍스트 파일프로그램 이름, 데이터가 저장된 날짜 및 시간으로 구성된 이름으로 표시됩니다. 다음은 보고서 파일의 일부 예입니다.
스캐너는 Windows 7, 8.1 및 10에서 작동하도록 설계되었습니다. 이 작업은 R820T 튜너가 포함된 RTL-SDR 3개 사본으로 테스트되었으며 다른 유형의 튜너는 테스트되지 않았습니다.
프로그램의 특수 버전은 Windows XP에서 작동하도록 컴파일되었으며 표준 버전보다 몇 배 느리게 실행됩니다.

개발.

스캐너 프로그램은 어떠한 보증이나 책임도 없이 있는 그대로 제공됩니다. 스캐너의 기능을 확장하거나 성능을 향상시키는 방법에 대한 합리적인 아이디어가 있다면 구현 가능성에 대해 논의할 준비가 되어 있습니다.
스캐너 개발에 참여할 수 있으며, 이를 위해서는 개발 페이지를 방문하세요.
귀하의 참여로 GSM 스캐너의 추가 개발이 계획되어 있습니다.

Arduino로 여러 번 실험한 후 GPRS를 통해 서버로 좌표가 전송되는 간단하고 그리 비싸지 않은 GPS 추적기를 만들기로 결정했습니다.
Arduino Mega 2560(Arduino Uno), SIM900 - GSM/GPRS 모듈(서버에 정보 전송용), GPS 수신기 SKM53 GPS를 사용했습니다.

모든 것은 ebay.com에서 총 약 1500루블(arduino의 경우 약 500루블, GSM 모듈의 경우 조금 더 적음, GPS의 경우 조금 더 높음)에 구입되었습니다.

GPS 수신기

먼저 GPS를 사용하는 방법을 이해해야 합니다. 선택한 모듈은 가장 저렴하고 간단한 모듈 중 하나입니다. 그러나 제조업체는 위성 데이터를 저장하기 위해 배터리를 약속합니다. 데이터시트에 따르면 콜드 스타트에는 36초가 소요된다고 나와 있는데, 내 조건(창틀에서 10층, 근처에 건물이 없음)에서는 무려 20분이나 걸렸습니다. 그러나 다음 시작 시간은 이미 2분입니다.

Arduino에 연결된 장치의 중요한 매개 변수는 전력 소비입니다. Arduino 변환기에 과부하가 걸리면 소손될 수 있습니다. 사용된 수신기의 최대 전력 소비는 45mA @ 3.3v입니다. 왜 사양에 필요한 전압(5V)이 아닌 다른 전압에서의 전류 강도를 표시해야 하는지 궁금합니다. 그러나 Arduino 변환기는 45mA를 견딜 수 있습니다.

연결

RX 핀이 있지만 GPS는 제어되지 않습니다. 어떤 목적으로 사용되었는지는 알 수 없습니다. 이 수신기로 할 수 있는 주요 작업은 TX 핀에서 NMEA 프로토콜을 통해 데이터를 읽는 것입니다. 레벨 - 5V, Arduino 전용, 속도 - 9600 보드. VIN을 아두이노의 VCC에, GND를 GND에, TX를 해당 시리얼의 RX에 연결합니다. 먼저 데이터를 수동으로 읽은 다음 TinyGPS 라이브러리를 사용했습니다. 놀랍게도 모든 것을 읽을 수 있습니다. Uno로 전환한 후 SoftwareSerial을 사용해야 했는데 문제가 시작되었습니다. 메시지 문자 중 일부가 손실되었습니다. TinyGPS는 유효하지 않은 메시지를 차단하므로 이는 그다지 중요하지 않지만 매우 불쾌합니다. 1Hz 주파수를 잊어버릴 수 있습니다.

SoftwareSerial에 대한 간단한 참고 사항: Uno에는 하드웨어 포트가 없으므로 소프트웨어 포트를 사용해야 합니다. 따라서 보드가 인터럽트를 지원하는 핀에서만 데이터를 수신할 수 있습니다. Uno의 경우 2번과 3번입니다. 게다가 이러한 포트는 한 번에 하나의 포트만 데이터를 수신할 수 있습니다.

이것이 "테스트 벤치"의 모습입니다.


GSM 수신기/송신기


이제 더 흥미로운 부분이 나옵니다. GSM 모듈 - SIM900. GSM과 GPRS를 지원합니다. EDGE나 특히 3G는 모두 지원되지 않습니다. 좌표 데이터 전송의 경우 이는 아마도 좋을 것입니다. 모드 간 전환 시 지연이나 문제가 없으며 GPRS는 이제 거의 모든 곳에서 사용할 수 있습니다. 그러나 좀 더 복잡한 애플리케이션의 경우에는 이것만으로는 충분하지 않을 수 있습니다.

연결

모듈은 또한 동일한 레벨(5V)의 직렬 포트를 통해 제어됩니다. 여기서는 RX와 TX가 모두 필요합니다. 모듈은 쉴드입니다. 즉, Arduino에 설치됩니다. 게다가 메가, 우노 모두 호환됩니다. 기본 속도는 115200입니다.

우리는 그것을 Mega에서 조립했는데 여기서 첫 번째 불쾌한 놀라움이 우리를 기다리고 있습니다. 모듈의 TX 핀이 Mega의 7번째 핀에 떨어집니다. 메가의 7번 핀에서는 인터럽트를 사용할 수 없습니다. 즉, 7번 핀을 6번 핀에 연결해야 인터럽트가 가능합니다. 따라서 Arduino 핀 하나를 낭비하게 됩니다. 글쎄, 메가의 경우 그다지 무섭지 않습니다. 결국 핀이 충분합니다. 그러나 Uno의 경우 이는 이미 더 복잡합니다(인터럽트를 지원하는 핀은 2개(2와 3)뿐이라는 점을 상기시켜 드립니다). 이 문제에 대한 해결책으로 Arduino에 모듈을 설치하지 않고 전선으로 연결하는 것이 좋습니다. 그런 다음 Serial1을 사용할 수 있습니다.

연결한 후 모듈과 "대화"를 시도합니다(모듈을 켜는 것을 잊지 마세요). 포트 속도 - 115200을 선택하고 모든 내장 직렬 포트(메가의 경우 4개, 우노의 경우 1개)와 모든 소프트웨어 포트가 동일한 속도로 작동하는 것이 좋습니다. 이렇게 하면 보다 안정적인 데이터 전송을 얻을 수 있습니다. 추측할 수는 있지만 이유는 모르겠습니다.

그래서 우리는 직렬 포트 간에 데이터를 전달하기 위한 기본 코드를 작성하고 Atz를 보내고 응답으로 침묵을 받습니다. 무슨 일이 일어났나요? 아, 대소문자를 구분합니다. ATZ, 괜찮아요. 만세, 모듈이 우리의 말을 들을 수 있습니다. 호기심에 전화해 볼까요? ATD +7499... 유선 전화가 울리고 Arduino에서 연기가 나고 노트북이 꺼집니다. Arduino 변환기가 소손되었습니다. 6~20V에서 작동할 수 있다고 적혀 있지만 19V를 공급하는 것은 나쁜 생각이었고 7~12V를 권장합니다. GSM 모듈의 데이터 시트에는 부하시 전력 소비에 대한 언급이 없습니다. 음, 메가는 예비 부품 창고로 갑니다. 숨을 죽이고 USB에서 +5V 라인을 통해 +19V를 받은 노트북을 켰다. 작동하고 USB도 다 타지 않았습니다. 우리를 보호해 준 Lenovo에게 감사드립니다.


컨버터가 소진된 후 전류 소모량을 찾아보았습니다. 따라서 피크 - 2A, 일반 - 0.5A입니다. 이는 분명히 Arduino 변환기의 기능을 넘어서는 것입니다. 별도의 음식이 필요합니다.

프로그램 작성

이 모듈은 광범위한 데이터 전송 기능을 제공합니다. 음성 통화 및 SMS에서 시작하여 GPRS 자체로 끝납니다. 또한 후자의 경우 AT 명령을 사용하여 HTTP 요청을 실행할 수 있습니다. 여러 개를 보내야 하지만 그만한 가치가 있습니다. 실제로 수동으로 요청을 생성하고 싶지는 않습니다. GPRS를 통해 데이터 전송 채널을 열 때 몇 가지 미묘한 차이가 있습니다. 기존 AT+CGDCONT=1, “IP”, “apn”을 기억하시나요? 따라서 여기에도 동일한 것이 필요하지만 조금 더 교활합니다.

특정 URL의 페이지를 가져오려면 다음 명령을 보내야 합니다.

AT+SAPBR=1,1 //오픈 캐리어(캐리어) AT+SAPBR=3,1,"CONTYPE","GPRS" //연결 유형 - GPRS AT+SAPBR=3,1,"APN","인터넷" //APN, for Megafon - internet AT+HTTPINIT //HTTP 초기화 AT+HTTPPARA="CID",1 //사용할 캐리어 ID입니다. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //좌표가 AT+HTTPACTION=0인 sprintf 이후의 실제 URL // GET 메소드를 사용하여 데이터 요청 //응답 대기 AT+HTTPTERM //HTTP 중지

결과적으로 연결이 있으면 서버로부터 응답을 받게 됩니다. 즉, 사실 우리는 서버가 GET을 통해 좌표 데이터를 수신하는 경우 좌표 데이터를 보내는 방법을 이미 알고 있습니다.

영양물 섭취

Arduino 변환기에서 GSM 모듈에 전원을 공급하는 것은 나쁜 생각이기 때문에 동일한 eBay에서 12v->5v, 3A 변환기를 구입하기로 결정했습니다. 그러나 모듈은 5V 전원 공급 장치를 좋아하지 않습니다. 해킹을 해보겠습니다. Arduino에서 5V가 나오는 핀에 5V를 연결합니다. 그러면 모듈에 내장된 변환기(Arduino 변환기인 MIC 29302WU보다 훨씬 강력함)가 모듈에 필요한 것을 5V로 만들어줍니다.

섬기는 사람

서버는 Yandex.maps에 좌표를 저장하고 그리는 기본 서버를 작성했습니다. 향후에는 많은 사용자 지원, '무장/비무장' 상태, 차량 시스템 상태(점화 장치, 헤드라이트 등), 심지어 차량 시스템 제어까지 포함한 다양한 기능을 추가하는 것이 가능합니다. 물론 추적기에 대한 적절한 지원을 통해 본격적인 경보 시스템으로 원활하게 전환됩니다.

현장 테스트

케이스 없이 조립된 장치의 모습은 다음과 같습니다.


전력 변환기를 설치하고 죽은 DSL 모뎀의 케이스에 넣은 후 시스템은 다음과 같습니다.

전선을 납땜하고 Arduino 블록에서 여러 접점을 제거했습니다. 그것들은 다음과 같습니다:

나는 차에 12V를 연결하고 모스크바를 돌아다니며 트랙을 얻었습니다.


트랙이 찢어진 것으로 밝혀졌습니다. 그 이유는 GPRS를 통해 데이터를 전송하는 데 비교적 오랜 시간이 걸리고 이 시간 동안 좌표를 읽지 못하기 때문입니다. 이는 분명히 프로그래밍 오류입니다. 첫째, 시간이 지남에 따라 좌표 패킷을 즉시 전송하고 둘째, GPRS 모듈과 비동기식으로 작업하여 처리됩니다.

프로젝트 다이어그램:

안녕하세요 친구 여러분, 우리 머리 위로 수많은 우주선이 날아다니고 있습니다. 그 중에는 미국 GPS 시스템, 러시아 GLONASS, 유럽 Galileo 및 중국 BeiDou의 매우 유용한 항법 위성 약 90개가 있습니다. 그리고 오늘 우리는 그들로부터 신호를 받을 것입니다.

첫째, 약간의 이론: 위성 항법 시스템은 이전에 알려진 경로를 따라 비행하여 궤도와 궤적을 정확하게 관찰하거나 정지 궤도 또는 정지 궤도의 알려진 고정 지점에 위치하는 우주선 네트워크입니다. 위성은 평균 약 2만 킬로미터의 고도에서 비행하며, 각 위성은 자신의 시간을 지구 전체에 지속적으로 방송하는 초정밀 원자시계입니다. 현재 시간.

빛의 속도로 전파되는 무선 신호는 60~90밀리초의 지연을 거쳐 지구에 도달하며 이는 위성의 거리에 따라 달라집니다. 전파 시간 지연을 통해 무선 신호 소스의 정확한 위치를 알면 위성까지의 정확한 거리를 알 수 있습니다. 그런 다음 알려진 여러 물체와의 거리를 삼각 측량하여 우주에서 자신이 어디에 있는지 알아낼 수 있습니다.

이 파란 공이 우리 행성이라고 상상해 보세요. 그 위로 3개의 위성이 고도 2만 킬로미터 상공으로 날아갑니다. 첫 번째 거리까지의 거리를 측정하면 자신이 이 원의 어딘가에 있다는 정보를 받게 됩니다. 현재로서는 그다지 유익하지 않습니다. 두 번째 위성의 신호는 고도를 참조하지 않고 두 개의 교차점에 대한 위치를 명확하게 해줍니다. 세 번째 항법 위성의 신호는 표면 위의 이러한 지점의 높이를 나타내고 공식적으로 항법 방정식을 풀어 사용자의 위치를 ​​가능한 두 위치로 줄입니다. 실제로 이러한 좌표 중 하나는 놀라운 특성을 갖고 있으므로 폐기되어 문제가 완전히 해결됩니다. 네 번째 위성의 신호도 동일한 작업을 수행합니다. 이는 이미 항법 방정식을 명확하고 정확하게 해결합니다.

각 후속 위성까지의 거리를 측정하면 위치 정확도가 향상되며 현재 약 10개의 내비게이션 위성의 표준 가시성으로 정확도가 1~3미터에 이릅니다.

이론을 정리하고 실습으로 넘어 갑시다. 요즘에는 다양한 내비게이션 모듈이 별도로 판매됩니다. 가장 단순하고 가장 오래된 것들은 평균 5-7개의 위성에서 미국 GPS 관측 시스템의 신호만 지원합니다. 더 발전된 모듈은 또한 러시아 GLONASS 별자리로부터 신호를 수신할 수 있어 관측되는 총 위성 수가 평균 2배 증가합니다. 정확한 항해 및 코스 유지에 사용되는 나침반과 결합된 모듈도 판매되고 있습니다.

내 휴대폰 화면에는 다양한 내비게이션 시스템의 위성이 표시됩니다. 원은 GPS, 삼각형은 GLONASS, 별은 중국 BeiDou입니다. 그래서 내 휴대폰은 세 가지 다른 기능을 지원합니다. 네비게이션 시스템이들로부터의 신호를 결합하면 위치 결정의 정확도가 높아집니다. 이제 내 머리 위에는 28개의 위성이 있는데, 7개에서만 신호를 받을 수 있습니다. 내 휴대폰은 이미 각 위성의 위치를 ​​미리 알고 있습니다. 그리고 21개 위성의 신호가 사라진다는 것은 위성이 시야에서 벗어났음을 의미합니다. 내비게이션 신호는 매우 약합니다. VASCHE라는 단어에서는 거의 반사되지 않으며 지형, 건물, 자동차 지붕 등 머리 위나 측면의 금속에 의해 차단됩니다. 창밖에 눈이 떨어져도 수신이 잘 되지 않습니다.

프로젝트를 구현하려면 프로그래밍 가능한 플랫폼 Arduino Nano, 128 x 32 포인트 OLED 화면(I2C 버스를 통해 연결됨), UART를 통해 연결하기 위한 GPS 모듈 등 다양한 전자 모듈이 필요합니다. 리튬 배터리 200밀리암페어 이상의 용량, 리튬용 보호 충전 모듈 및 5V를 공급하는 부스트 컨버터를 갖추고 있습니다. 여기에는 세 가지 유형이 있으며 누구에게나 적합합니다. 또한 상태를 표시하기 위해 컬러 RGB LED를 사용할 계획이었지만 프로젝트가 진행되면서 이를 포기했습니다.

화면을 Arduino에 연결하고 첫 번째 어려움에 직면합니다. 표준 라이브러리 OLED 화면은 마이크로컨트롤러 메모리의 70%인 20kB를 차지하며 프로그램을 위한 공간이 거의 없습니다. 이전에는 고도계를 조립하고 있었는데 새로운 코드 줄이 있으면 메모리 오버플로가 발생하고 작동 중에 마이크로 컨트롤러가 정지된다는 사실에 직면했습니다. 그러므로 나는 훨씬 더 많이 사용할 것이다. 라이트 라이브러리. 그래픽은 작동하지 않고 OLED 화면에 텍스트만 표시하며, 메모리도 1KB만 차지한다.

GPS 모듈을 브레드보드에 별도로 연결하고 첫 번째 내비게이션 데이터를 확인합니다. 우주에서 보내는 신호가 포착되어 처리되었습니다. 이제 화면에 정보를 표시합니다. 수업! 4개의 위성이 보이더니 이제는 3개, 다시 4개, 벌써 5개입니다! 더 나은 GPS 수신을 위해 모듈은 창 바깥쪽에 와이어로 매달려 있습니다.

프로젝트 개발 중에 GPS 모듈을 사용했습니다. 다른 유형. 간단한 GPS 및 Glonass와 결합된 GPS입니다. 우리는 작동의 안정성을 확인하기 위해 여러 시간에 걸쳐 일련의 실험을 수행해야 했습니다. 모듈은 작동하는 것으로 밝혀졌지만 소프트웨어 라이브러리나는 땜질해야했다. 여러 가지 시도 다른 도서관, TinyGPS+는 모든 GPS 모듈과 동시에 작동하는 유일한 제품이었습니다.

일반적으로 라이브러리는 NMEA 프로토콜을 구문 분석하며 단순히 GPS 모듈이 초당 2회 내뱉는 데이터를 구문 분석합니다. 처리되지 않은 데이터 스트림은 다음과 같습니다.

결과적으로 내 펌웨어를 사용하면 NMEA 데이터 전송 프로토콜을 사용하여 UART를 통해 거의 모든 GPS 모듈을 연결할 수 있습니다. 실제로 이는 RX 및 TX 핀이 있는 대부분의 모듈입니다. Glonass의 GPS 모듈을 사용하는 것이 좋습니다. 더 많은 위성을 볼 수 있으므로 정확도가 더 높습니다. 모든 구성 요소와 모듈에 대한 링크는 이 비디오 설명에 있습니다.

브레드보드는 시스템의 전체 기능을 보여주었으며 이제 모든 것을 하드웨어로 조립할 수 있습니다. 리튬 배터리를 전원으로 사용할 예정이며, 충전과 함께 보호보드에 연결됩니다. 이 보드에서 낮은 저항 R3은 배터리 충전 전류를 설정하며 기본값은 1암페어입니다. 이는 소형 ​​배터리의 경우 많은 양이므로 저항을 교체해야 합니다. 화면에는 다양한 충전 전류에 대한 저항 값이 표시된 플레이트가 표시됩니다. 배터리 용량이 500밀리암페어 시간인 경우 충전 전류를 이 값보다 높게 설정해야 합니다. 저것들. 200 또는 300밀리암페어를 설정할 수 있으며 500밀리암페어를 초과할 수 없습니다.

다음으로 전압을 높여야 하며 화면과 GPS 모듈에 5V의 전원이 공급됩니다. 우리는 부스트 전압 변환기를 사용하여 이를 수행할 것입니다. 이는 일반적으로 전압을 3.7V에서 5V로 높이기 위해 보조 배터리에 설치됩니다. 저는 작은 녹색 모듈을 사용할 것입니다. 이 모듈은 최대 300mA까지 출력할 수 있으며 이 프로젝트에 충분합니다.

펌웨어를 업데이트했습니다. 이제 메인 화면을 로드할 때 위성의 현재 정확한 시간, 눈에 보이는 위성 수 및 추적기의 현재 속도가 표시되고 위치를 결정하는 데 오류가 있기 때문에 점프합니다. 버튼을 누르면 화면이 변경됩니다. 현재 속도 값과 관찰 기간의 최대 값이 여기에 표시됩니다. 다른 화면에는 영점까지의 현재 거리, 영점으로부터 기록된 최대 거리 및 주행 거리계가 표시됩니다.

나는 모든 모듈의 크기를 측정하고 가능한 한 컴팩트하게 배열하려고 노력합니다. 하지만 아무리 노력해도 얇은 화면이 넓은 화면과 맞지 않았습니다. GPS 수신기옴 그래서 화면을 다른 128x64 픽셀의 OLED로 교체하기로 결정했습니다. 이는 더욱 인체공학적이며 더 큰 버튼을 허용합니다. OLED 화면은 완벽하게 호환되며 최소한의 코드 수정이 필요하므로 작은 화면과 큰 화면을 갖춘 장치의 두 버전 모두에 펌웨어를 사용할 수 있습니다.

조립 다이어그램은 간단합니다. 화면을 I2C 버스에 연결해야 합니다. 이는 핀 A4 및 A5이고, GPS 모듈은 핀 D3 및 D4의 소프트웨어 직렬 포트에 연결됩니다. 핀 D7의 버튼. 배터리 전원을 통해 보호 모듈스위치로 드래그한 다음 부스트 컨버터로 드래그하고 Arduino를 5V에 연결합니다.

구성 요소를 편리하게 배치하기 위해 7x3cm 크기의 녹색 브레드보드를 ​​사용하겠습니다. 화면이 커넥터에 걸리는 것을 방지하기 위해 5mm 간격으로 플라스틱 스탠드에 설치합니다. 화면과 버튼 사이에 GPS 수신기가 있습니다. 보드 뒷면에는 Arduino 컨트롤러, 배터리 및 보호 보드가 있습니다. 배터리는 얇은 리튬 350밀리암페어를 사용합니다. 제가 착각하지 않으면 전자 담배에 사용되지만 제가 말했듯이 모든 리튬 배터리를 사용할 수 있습니다.

모든 것을 다시 측정하고 측정한 후 3D 프린터로 인쇄할 하우징 디자인을 준비합니다. TinkerCAD 웹사이트에서 말 그대로 15분이면 프로젝트를 인쇄할 준비가 됩니다. 파일을 플래시 드라이브로 전송하고 실행한 후 시작합니다. 프린팅 시간은 약 40분 정도 소요되며, 모듈 배치를 시험해 보는 첫 번째 조준체입니다.

보드와 버튼은 제자리에 맞았지만 화면은 말 그대로 1밀리미터 부족했고 내부 스탠드가 방해가 되었습니다. 그래서 모든 것이 제자리에 맞고 설치됩니다. 좋습니다. 프로젝트를 편집하고 인쇄합니다. 최종 버전오렌지 하우징. 인쇄를 마친 후 테이블을 식힐 시간을 준 다음 부품을 떼어내면 앞면이 매끄러워지고 움직이지 않게 됩니다.

플라스틱의 고정 모서리를 떼어서 청소합니다. ABS 플라스틱을 사용했기 때문에 아세톤으로 후처리를 합니다. 브러쉬로 바르면 층이 더 붙어서 바디감이 더 강해지고 윤기가 나요.

보드가 케이스 내부에 완벽하게 맞고 패스너가 정렬되어 있으며 버튼이 달라붙지 않습니다. 한쪽 끝에는 Arduino Nano 커넥터용 구멍이 있고 다른 쪽 끝에는 배터리 충전용 구멍이 있습니다. 조금 더 좁아져서 메스로 확장했습니다.

충전보드 모서리에 돌기가 있어서 커넥터가 깊어지는 것을 방지해주기 때문에 줄로 갈아줍니다. 이제 보드는 제자리에 잘 자리 잡았습니다.

안에 일반적인 견해장치는 다음과 같습니다. 하우징은 상단에 위치합니다. 그 아래에는 마이크로 스위치, 화면이 있는 브레드보드, GPS 모듈 및 버튼이 있습니다. 측면에는 승압 전력 변환기도 있습니다.

스위치의 경우 별도로 버튼 위의 메스로 케이스에 구멍을 뚫었습니다. 본체에 움푹 들어가 있어 방해가 되지 않습니다.

이제 납땜할 시간입니다. 스크린의 첫 번째 접점을 보드에 납땜하고 사용해 봅니다. 모든 것이 정확하며 나머지 3개의 접점을 납땜할 수 있습니다. 이제 버튼입니다. 그리고 반드시 브러시로 플럭스를 닦아내세요. 배터리 보호 모듈에 전선을 납땜합니다.

연결 시 전선의 색상에 주의하세요. 때때로 중국에서 잘못된 색상이 들어옵니다. 이 경우 커넥터의 납땜을 제거하고 전선을 직접 납땜하기로 결정했습니다. 더 나은 접촉. 절차가 복잡하고 납땜 시 정밀도와 주의가 필요합니다. 또한 접점을 뜨거운 접착제로 채웁니다. 이렇게 하면 트랙과 와이어가 실수로 빠지는 것을 방지할 수 있습니다. 그리고 전체 GPS 모듈을 즉시 열 수축 장치에 채워 넣습니다. 이는 필수는 아니지만 추가로 보호해 줍니다. 기계적 손상브레드보드에 장착하면 단락이 발생합니다.

또한 부스트 컨버터를 열 수축으로 포장합니다. 모듈을 고정하기 위해 양면 테이프를 사용합니다. 보드를 설치할 때 전선을 넣을 공간이 부족해서 중앙에 구멍을 뚫고 거기에 전원선을 꽂았습니다.

그런데 멋진 무선 드릴을 추천합니다. 단일 18650 배터리로 작동하며 보드와 케이스에 비슷한 구멍을 빠르게 뚫을 수 있습니다. 이전에는 이러한 작업을 위해 Dremel을 케이스에서 꺼내 전원 콘센트에 연결해야 했지만 지금은 항상 이것을 가지고 있습니다. 손에 드릴.

보드 윗부분이 조립되었고, 전선도 나사로 고정되었으니 이제 스위치를 설치해야 합니다. 이를 위해 우리는 여분의 다리를 물고 전원 공급 장치를 공급하고 차단하는 데 두 개만 필요합니다. 우리는 와이어를 납땜하고 평소와 같이 모든 것을 열 수축시킵니다. 다음으로 스위치를 제자리에 설치하고 글루건으로 채울 수 있습니다. 이제 추적기를 켜고 끄는 것이 편리해졌습니다.

보드를 케이스에 설치하고 작은 나사 4개로 고정합니다. 해당 구멍은 이미 하우징 지지대에 제공되어 있습니다. 화면 보호 필름을 제거해보니 디스플레이와 본체 사이에 커다란 틈이 눈에 띄었습니다. 그래서 일부 전자제품에서 투명한 포장재를 꺼내서 창문 크기에 맞게 유리를 잘라냈습니다. 그리고 케이스 플라스틱에 아세톤으로 붙였습니다.

우리는 계획에 따라 조립을 수행하며 여기에는 어려움이나 뉘앙스가 없습니다. 플러스에서 플러스로, 마이너스에서 마이너스로 주의하세요. 스위치를 충전 모듈의 출력에 직접 연결합니다. 이렇게 하면 전체 전원 회로가 꺼지고 배터리 소모가 방지됩니다.

모든 전선을 모듈에 납땜한 후 하단 보드를 파란색 전기 테이프로 덮습니다. 충전 기능이 있는 Arduino 컨트롤러가 맨 위에 있고 절연이 없으면 무언가 단락될 가능성이 있습니다.

보호 모듈을 납땜하고 글루건으로 제자리에 고정합니다.

배터리 접점을 웅덩이에 넣고 배터리가 과열되지 않도록 와이어를 빠르게 납땜합니다. 한편으로는 그리고 다른 한편으로는. 이 후에 연결해야합니다 마이크로 USB케이블을 연결하고 보호 모듈에 전원을 공급하면 작동이 활성화됩니다.

완료되었습니다. 이제 펌웨어를 업로드해야 합니다. Arduino를 컴퓨터에 연결하고 프로젝트 페이지로 이동하면 해당 링크가 비디오 설명에 있습니다. 아카이브를 다운로드하고, 파일의 압축을 풀고, 라이브러리를 설치하고, 32 또는 64 포인트 화면에 필요한 펌웨어 버전을 열고 이를 컨트롤러에 로드하십시오. 처음에는 모든 것이 작동했습니다! GPS 막대의 데이터. 시원한!

그 자리에 컨트롤러를 설치하고 자율 전원 공급 장치를 켭니다... iiiiiiiii... 아무것도 아닙니다. Arduino의 전원 LED는 켜져 있지만 화면이 켜지지 않습니다. 이것이 바로 트린데츠가 발생한 방식인데, 그 이유는 아직 모르겠습니다. 내장 배터리로 추적기가 자동으로 작동하도록 하려면 몇 시간의 작업이 필요했습니다.

처음에는 소형 승압 전력 변환기가 원인인 줄 알았습니다. 하지만 멀티미터로 확인해 보니 안정적인 5V가 나왔습니다. 다음으로, 다른 프로젝트에서 남겨둔 자율 전력 모듈을 연결했는데, 이 모듈은 대형 부스트 컨버터를 기반으로 구축되었습니다. 그리고 보라, 추적기가 시작되었지만 몇 초 후에 멈췄습니다.

그 위에 배터리를 충전하고 위성을 포착하기 위해 창문에 추적기를 놓았습니다. 3분 후 그는 4개의 위성에서 신호를 받아 위치를 파악했습니다. 그렇다면 작동하고 조립도 가능하다는 뜻인가요? 부스트 컨버터를 교체했는데 작은 컨버터가 전원 공급 장치에서 많은 소음을 발생시키는 것 같습니다.

그러기 위해서는 트래커를 완전히 분해하고 모든 전선의 납땜을 풀고 다시 조립해야 했습니다. 새 전원 모듈은 기존 전원 모듈과 같은 위치에 위치하며, 화면 아래에 맞도록 스탠드 하나만 제거하면 됩니다.

그게 다입니다. 간섭을 피하기 위해 전선을 땋은 머리로 꼬았습니다. 아아 그리고... 이 새끼는 또 안 켜졌어. 보다 정확하게는 화면에 아티팩트가 표시되면서 켜지고 즉시 정지되었습니다. 너무 많은 시간을 일했는데 모두 헛된 일이었습니다. 변환기를 교체해도 도움이 되지 않았습니다.

전원 공급 장치에 커패시터를 설치해 보았지만 아무 소용이 없었습니다. 추적기는 부스트 변환기와 실험실 전원 공급 장치 모두에서 자율적으로 작동하는 것을 거부했습니다. 정지되었거나 전혀 켜지지 않았습니다. 그러나 동시에 Arduino USB 커넥터에서도 완벽하게 작동했습니다.

순차적 종료 방법을 사용하여 OLED 화면이 원인이라는 것을 알 수 있었지만 여전히 그 이유를 이해하지 못합니다. 해결책이 갑자기 발견되었습니다. 다음 자율 전원 공급 장치 점검 중에 실수로 VIN 핀에 5V를 적용했습니다. 이 핀에 주목하세요! 아니다! 5V 전원을 공급하도록 설계되었으며 7~12V의 전압이 필요합니다.

그럼에도 불구하고 추적기는 즉시 시작되어 안정적으로 작동하기 시작했습니다. 저것들. 알고 보니 소형 안정장치가 문제의 원인이 아니라 다른 문제였던 것으로 밝혀졌습니다.

동시에 나는 현재 소비량을 확인하기로 결정했습니다. 5V에서 추적기는 약 70밀리암페어를 소비했습니다. 그리고 4V에서 부스트 컨버터를 통해 약 110밀리암페어로 나타났습니다. 따라서 내 작은 350밀리암페어 배터리는 3시간 동안 지속됩니다. 배터리 수명. 그리고 아직 전원 공급 장치를 최적화하지 않았으므로 항상 켜져 있는 LED를 차단해도 배터리를 절약할 수 있습니다.

추적기가 완전히 안정적으로 작동하기 시작했고, 창문 위에 놓아두었고 몇 분 후에 4개의 위성을 포착했습니다. 엄청난

Arduino의 이상한 동작 이유를 이해하는 데 관심이 있다면 여기에 소개가 있습니다.

1 - Arduino USB 커넥터를 통해 전원이 공급되면 트래커가 작동합니다.

2 – 모든 전원에서 5V를 적용하여 Arduino 5V 핀을 통해 전원을 공급하면 트래커가 멈추고 켜지지 않습니다.

3 - Arduino VIN 핀을 통해 7V 이상이 가해지면 트래커가 멈추고 켜지지 않습니다.

4 - 동일한 VIN 핀을 통해 비표준 5V로 전원이 공급되는 경우 추적기가 작동합니다.

완성된 장치는 하나의 하우징에 범용 자율 속도계, 거리계, 주행 거리계 및 위성 정확한 시간 시계가 포함되어 있습니다.

로딩 후 메인 화면 상단에는 그리니치의 현재 시간과 날짜가 표시되고, 두 번째 줄에는 현재 속도 시속 0.3km와 전원을 켠 이후 기록된 최대 속도 값 - 26 시간당 킬로미터. 세 번째 라인에서 현재 영점까지의 거리는 530미터이고 전원을 켠 이후 달성된 최대 거리는 580미터입니다. 네 번째 줄에는 주행 거리계에 923미터와 사용된 위성 수가 표시됩니다.

최종 문자는 GPS 모듈로부터 수신된 데이터의 양입니다.

버튼을 짧게 누르면 화면 표시가 바뀌고, 오랫동안 누르고 있으면 트래커는 현재 위치를 거리 측정을 위한 영점 기준점으로 기억합니다. 두 번째 화면에는 현재 속도와 최대 속도가 표시됩니다. 세 번째 화면에는 영점까지의 거리 정보가 표시됩니다. 네 번째 화면은 주행 거리계입니다. 다섯 번째 위도와 경도입니다.

이러한 매개변수를 사용하여 화면의 버튼을 길게 누르면 주행거리계와 최대값을 재설정할 수 있습니다. 저것들. 주행 거리계로 가서 버튼을 길게 눌러 재설정하세요.

테스트로 넘어 갑시다. 이제 추적기는 12개의 위성을 확인합니다. 현재 영점을 설정하고 주행 거리계를 0으로 재설정합니다. 나는 자동차 주행거리계에서도 똑같은 일을 합니다. 자동차 속도계에 따라 1.2km를 이동한 후 GPS 추적기에서도 동일한 1205m를 확인했습니다. 현재 직선의 영점까지의 거리는 0.93km입니다. 그리고 지도에 따르면 동일한 930미터이므로 지금까지 모든 것이 정확합니다.

나는 더 먼 거리를 측정하기로 결정했습니다. 다시 한 번 추적기와 자동차의 판독값을 0으로 재설정했습니다. 8.4km를 이동한 후 추적기에서 거리가 7974m로 더 짧다는 것을 발견했습니다. 이 경우 현재 영점까지의 거리는 4,930미터입니다. 지도에서 확인해 봅시다. 동일한 4,930m로 매우 정확하게 나타납니다. 명확하지는 않지만 왜 주행 거리계가 400m에 있고 어떤 주행 거리계가 자동차 또는 GPS에 있는지는 알 수 없습니다.

자, 이제 인쇄할 시간이에요 뒷 표지다시 테스트하겠습니다. 문을 닫겠습니다. 완성된 장치의 무게는 55g으로 매우 많았지만 중요하지는 않았습니다. 마지막에 무게를 줄이는 방법을 보여 드리겠습니다.

나는 스케이트장에 도착하여 하키 선수의 속도를 측정하기로 결정했습니다. 젠장, 그는 여전히 속도를 위해 덮개를 제거해야 합니다. 그 결과는 "러시아 로켓"과 같은 시속 5km의 맹렬한 속도였습니다. 나는 걸었고 스케이트장의 천장은 추위를 막기 위해 반사 호일로 단열되어 있기 때문입니다. 위성 신호가 있지만 정확하지 않습니다.

마지막 테스트를 한번 해보자 휴대전화. 전화기에는 7개의 위성이 보이고 추적기는 9개입니다. 기록을 시작하고 추적기의 주행 기록계를 재설정합니다. 음... 가자. 3km를 주행한 후 휴대폰과 트래커의 주행 거리계에 동일한 값이 표시되었습니다. 3017 미터 대 3021 미터는 훌륭한 결과이며 그러한 정확성을 기대하지 않았습니다.

그러나 주행 거리는 12,000km에 달했습니다. 신맛이 나지 않습니다. 이전에는 프로그램을 디버깅할 때 이미 이러한 결함이 발생하여 추적기가 즉시 7,000km 이동했습니다. 집에 오자마자 구글에 위도와 경도가 0인 지점을 만들었습니다. 가나 해안에서 멀지 않은 대서양에 위치한 것으로 밝혀졌습니다. 그곳에서 내 위치까지의 거리를 측정한 결과 동일한 7,000km를 얻었습니다. GPS 모듈은 때때로 좌표를 따라 0을 건너뛰는 것으로 나타났습니다. 이 문제는 프로그램 코드에 조건 하나만 추가하면 쉽게 해결할 수 있습니다. 그리고 이 결함은 테스트 중에 관찰되지 않았습니다.

제 생각에는 추적기가 정말 훌륭하다고 생각합니다. 이것은 GPS 모듈을 직접 사용하여 작업하는 첫 번째 경험입니다. 왜 필요한가요? 이러한 추적기는 자율 속도계 또는 독립 주행 거리계 역할을 할 수 있습니다. 자전거, 자동차, 장난감 또는 쿼드콥터에 장착할 수 있습니다. 또한 주어진 지점까지 직선 거리를 측정할 수 있으며, 0 값은 비 휘발성 기억 장치. 달성된 최대 속도와 거리 값을 기억합니다. 이 모든 작업은 자율적으로 수행되며 위성 외에는 누구에게도 의존하지 않습니다. 물론 이것은 정확한 시간 시계입니다. 최대 속도와 물체와의 최대 거리를 측정하는 데 필요합니다. 그렇습니다. 얼마나 높이 올라가는지 측정하려면 화면에 높이를 더 추가해야 합니다!

무게를 줄이는 방법에 대해 이야기해 보겠습니다. 이를 수행하는 가장 쉬운 방법은 플랫폼에 트래커를 조립하는 것입니다. 아두이노 프로 3.3V의 미니. 그러면 부스트 컨버터가 필요하지 않고 대신 3.3V의 작은 선형 스터브가 있고 GPS 모듈은 이 전압에서 문제 없이 작동하며 화면에서 전력 안정기를 우회해야 합니다.

글쎄요, 질문에 즉시 답하겠습니다. GSM 모듈을 추가하고 SMS를 통해 추적기를 제어할 수 있습니까? 그래 넌 할수있어. 이렇게 하려면 모듈 자체 외에도 프로그램 코드에 SMS 명령 처리를 추가해야 하며 이는 별도의 프로젝트여야 합니다.

오늘은 여기까지입니다. 이 영상이 마음에 드셨다면 마음에 드실 것이라 확신하며 친구들과 영상 링크를 공유하실 것입니다.

시청해 주셔서 감사합니다. 모두들 행운을 빌며 새로운 영상에서 만나요! 안녕!

데이터는 서비스 요구 사항에 해당하는 형식의 스프레드시트 dataGPS.csv에 저장됩니다. Google 내 지도.

    프로그래밍 언어: Arduino(C++)

비디오 교육

필요한 것

조립 방법

GPS-tracker.ino // SPI를 통해 장치 작업을 위한 라이브러리#포함하다 // SD 카드 작업을 위한 라이브러리#포함하다 // GPS 장치 작업을 위한 라이브러리#포함하다 // GPS 클래스의 객체를 생성하고 Serial1 객체를 전달합니다. GPS GPS(직렬1) ; // LED 핀#define LED_PIN A0 // 버튼 핀 #define BUTTON_PIN 13 // CS 마이크로 SD 카드 고정#CHIP_SELECT_PIN 9 정의 // 카드에 데이터를 쓰는 시간 간격#define 간격 5000 // 시간, 날짜, 위도 및 경도에 대한 배열 크기를 설정합니다.#define MAX_SIZE_MASS 16 //현재 시간을 저장할 배열문자 시간[MAX_SIZE_MASS]; // 상태 기록 bool stateRec = false ; //현재 시간을 기억한다긴 startMillis = millis() ; 무효 설정() ( // 프로그램의 동작을 모니터링하기 위해 직렬 포트를 엽니다. Serial.begin(115200); // 모니터가 열릴 때까지 기다립니다. 직렬 포트 // 프로그램의 모든 이벤트를 추적하기 위해// while (!Serial) ( // ) Serial.print ("직렬 초기화 정상 \r\n") ; // GPS 모듈과 직렬 연결을 엽니다. Serial1.begin(115200); // LED를 출력 모드로 설정핀모드(LED_PIN, OUTPUT) ; // 버튼을 로그인 모드로 설정핀모드(BUTTON_PIN, INPUT_PULLUP) ; // 초기화 정보를 시리얼 포트로 출력 Serial.println("SD 카드 초기화 중...") ; // SD 카드 초기화 while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("카드가 실패했거나 존재하지 않음" ) ; 지연(1000 ) ; ) // 시리얼 포트로 정보 출력 Serial.println("카드 초기화됨"); // 파일 작업을 위해 File 클래스의 dataFile 객체를 생성합니다.파일 dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; //파일이 존재한다면 if (데이터파일) ( // 메모리 카드에 미래 데이터의 이름을 씁니다. dataFile.println("시간, 좌표, 속도" ) ; // 파일을 닫는다데이터파일.닫기(); Serial.println("저장 확인"); ) else ( Serial.println ("test.csv 열기 오류" ) ; ) ) void loop() ( // 버튼 누름을 기록합니다. if (!digitalRead(BUTTON_PIN) ) ( // 메모리 카드에 "녹화 중" / "쓰기 중이 아님" 상태를 변경합니다.상태Rec = ! 상태Rec; // 표시 LED의 상태를 변경합니다. digitalWrite(LED_PIN, stateRec) ; ) // 데이터가 GPS 모듈에서 나온 경우 if (gps.available()) ( // 데이터를 읽고 구문 분석 gps.readParsing(); // GPS 모듈의 상태를 확인합니다. switch (gps.getState () ) ( // 모든 것이 정상입니다. case GPS_OK: Serial.println ("GPS는 정상입니다" ) ; //지정된 시간 간격이 경과한 경우 if (millis() - startMillis > INTERVAL && stateRec) ( // 메모리 카드에 데이터 저장저장SD() ; //현재 시간을 기억한다 startMillis = 밀리스() ; ) 부서지다 ; // 데이터 오류 사례 GPS_ERROR_DATA: Serial.println("GPS 오류 데이터" ); 부서지다 ; // 위성과 연결되지 않음케이스 GPS_ERROR_SAT: Serial.println( "GPS가 위성에 연결되지 않음") ; 부서지다 ; ) ) ) // 메모리 카드에 데이터를 저장하는 함수 void saveSD() ( 파일 dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // 파일이 존재하고 열려 있는 경우 if (데이터파일) ( // 현재 시간을 읽는다 gps.getTime(시간, MAX_SIZE_MASS); // 메모리 카드에 시간을 씁니다.데이터파일.print(" \" " ) ; dataFile.print(시간); 데이터파일.print(" \" " ) ; 데이터파일.print("," ) ; 데이터파일.print(" \" " ) ; // 위도와 경도 좌표를 메모리 카드에 읽고 씁니다. dataFile.print(gps.getLatitudeBase10(), 6); 데이터파일.print("," ) ; dataFile.print(gps.getLongitudeBase10(), 6); 데이터파일.print(" \" " ) ; 데이터파일.print("," ) ; dataFile.print(gps.getSpeedKm()); dataFile.println("km/h"); 데이터파일.닫기(); Serial.println("저장 확인"); ) else ( Serial.println ("test.csv 열기 오류" ) ; ) )