산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino Mega를 NEO-6M GPS 모듈과 인터페이스하는 방법

구성품 및 소모품

Arduino Mega 2560
× 1
u-blox NEO-6M GPS 모듈
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

내가 찾은 것은 Arduino Mega와 NEO-6M GPS 모듈의 인터페이스에 대한 튜토리얼이 없어서 하나 만들기로 결정했다는 것입니다. 네가 좋아하길 바래!

필요한 구성 요소

하드웨어

<울>
  • 아두이노 메가 ==> 30달러
  • Neo-6M GPS 모듈 ==> $30
  • 소프트웨어

    <울>
  • 아두이노 IDE
  • 프로젝트의 총 비용은 $60입니다.

    GPS 정보

    GPS란 무엇인가요?

    GPS(Global Positioning System)는 최소 24개의 위성으로 구성된 위성 기반 항법 시스템입니다. GPS는 가입비나 설정 비용 없이 하루 24시간 전 세계 어디에서나 어떤 기상 조건에서도 작동합니다.

    GPS 작동 방식

    GPS 위성은 정확한 궤도에서 하루에 두 번 지구를 선회합니다. 각 위성은 GPS 장치가 위성의 정확한 위치를 디코딩하고 계산할 수 있도록 하는 고유한 신호 및 궤도 매개변수를 전송합니다. GPS 수신기는 이 정보와 삼각 측량을 사용하여 사용자의 정확한 위치를 계산합니다. 기본적으로 GPS 수신기는 전송된 신호를 수신하는 데 걸리는 시간만큼 각 위성까지의 거리를 측정합니다. 몇 개의 위성에서 거리를 더 측정하면 수신기가 사용자의 위치를 ​​파악하고 표시할 수 있습니다.

    2차원 위치(위도 및 경도)를 계산하고 움직임을 추적하려면 GPS 수신기가 최소 3개의 위성 신호에 잠겨 있어야 합니다. 4개 이상의 위성이 있는 경우 수신기는 3차원 위치(위도, 경도 및 고도)를 결정할 수 있습니다. 일반적으로 GPS 수신기는 8개 이상의 위성을 추적하지만 시간과 지구상의 위치에 따라 다릅니다. 위치가 결정되면 GPS 장치는 다음과 같은 기타 정보를 계산할 수 있습니다.

    <울>
  • 속도
  • 베어링
  • 추적
  • 여행 거리
  • 목적지까지의 거리
  • 신호란 무엇입니까

    GPS 위성은 최소 2개의 저전력 무선 신호를 전송합니다. 신호는 가시선을 따라 이동하므로 구름, 유리 및 플라스틱을 통과하지만 건물 및 산과 같은 대부분의 단단한 물체는 통과하지 않습니다. 그러나 최신 수신기는 더 민감하고 일반적으로 집을 통해 추적할 수 있습니다. GPS 신호에는 3가지 유형의 정보가 포함됩니다.

    <울>
  • 의사 무작위 코드
  • 아이디입니다. 정보를 전송하는 위성을 식별하는 코드. 기기의 위성 페이지에서 어떤 위성에서 신호를 받고 있는지 확인할 수 있습니다.

    <울>
  • 천문력 데이터
  • 천체력 데이터는 위성의 위치를 ​​결정하는 데 필요하며 위성의 상태, 현재 날짜 및 시간에 대한 중요한 정보를 제공합니다.

    <울>
  • 연력 데이터
  • 연감 데이터는 GPS 수신기에 하루 중 언제든지 각 GPS 위성이 있어야 하는 위치를 알려주고 해당 위성 및 시스템의 다른 모든 위성에 대한 궤도 정보를 보여줍니다.

    Neo-6M GPS 모듈

    NEO-6M GPS 모듈은 아래 그림과 같습니다. 외부 안테나와 함께 제공되며 헤더 핀은 제공되지 않습니다. 그래서 납땜을 해야 합니다.

    NEO-6M GPS 모듈 개요

    <울>
  • NEO-6M GPS 칩
  • 모듈의 핵심은 u-blox의 NEO-6M GPS 칩입니다. 50개 채널에서 최대 22개의 위성을 추적할 수 있으며 45mA 공급 전류만 소비하면서 업계 최고 수준의 감도(예:-161dB 추적)를 달성합니다. u-blox 6 포지셔닝 엔진은 또한 1초 미만의 TTFF(Time-To-First-Fix)를 자랑합니다. 칩이 제공하는 최고의 기능 중 하나는 절전 모드(PSM)입니다. 수신기의 일부를 선택적으로 켜고 끌 수 있어 시스템 전력 소비를 줄일 수 있습니다. 이는 모듈의 전력 소비를 단 11mA로 크게 줄여 GPS 손목시계와 같은 전력에 민감한 애플리케이션에 적합합니다. NEO-6M GPS 칩에 필요한 데이터 핀은 "0.1" 피치 헤더로 나뉩니다. 여기에는 UART를 통해 마이크로 컨트롤러와 통신하는 데 필요한 핀이 포함됩니다.

    참고 :- 모듈은 4800bps에서 230400bps까지의 전송 속도를 지원하며 기본 전송 속도는 9600입니다.

    위치 수정 LED 표시기

    NEO-6M GPS 모듈에는 위치 수정 상태를 나타내는 LED가 있습니다. 상태에 따라 다양한 속도로 깜박입니다.

    <울>
  • 깜박임 없음 ==>는 위성을 찾고 있음을 의미합니다.
  • 1초마다 깜박임 – 위치 수정이 발견되었음을 의미합니다.
  • <울>
  • 3.3V LDO 조정기
  • NEO-6M 칩의 작동 전압은 2.7~3.6V입니다. 그러나 이 모듈은 MICREL의 MIC5205 초저드롭아웃 3V3 레귤레이터와 함께 제공됩니다. 로직 핀은 또한 5볼트를 허용하므로 로직 레벨 변환기를 사용하지 않고도 Arduino 또는 모든 5V 로직 마이크로컨트롤러에 쉽게 연결할 수 있습니다.

    배터리 및 EEPROM

    모듈에는 HK24C32 2선식 직렬 EEPROM이 장착되어 있습니다. 크기는 4KB이며 I2C를 통해 NEO-6M 칩에 연결됩니다. 이 모듈에는 슈퍼 커패시터 역할을 하는 충전식 버튼 배터리도 포함되어 있습니다.

    배터리와 함께 EEPROM은 배터리 지원 RAM(BBR)을 유지하는 데 도움이 됩니다. BBR에는 시계 데이터, 최신 위치 데이터(GNSS 또는 비트 데이터) 및 모듈 구성이 포함됩니다. 그러나 영구적인 데이터 저장을 위한 것은 아닙니다.

    배터리가 시계와 마지막 위치를 유지하므로 TTFF(최초 수정 시간)가 1초로 크게 줄어듭니다. 이것은 훨씬 더 빠른 위치 잠금을 허용합니다.

    배터리가 없으면 GPS가 항상 콜드 스타트하므로 초기 GPS 잠금에 더 많은 시간이 걸립니다. 배터리는 전원이 인가되면 자동으로 충전되며 전원이 없을 때 최대 2주간 데이터를 유지합니다.

    핀아웃

    <울>
  • GND는 접지 핀이며 Arduino의 GND 핀에 연결해야 합니다.
  • TxD(송신기) 핀은 직렬 통신에 사용됩니다.
  • RxD(수신기) 핀은 직렬 통신에 사용됩니다.
  • VCC는 모듈에 전원을 공급합니다. Arduino의 5V 핀에 직접 연결할 수 있습니다.
  • 아두이노 메가

    Arduino는 사용하기 쉬운 하드웨어 및 소프트웨어를 기반으로 하는 오픈 소스 전자 플랫폼입니다. Arduino 보드는 입력(센서의 빛, 버튼의 손가락 또는 Twitter 메시지)을 읽고 이를 출력으로 바꿀 수 있습니다(모터 활성화, LED 켜기, 온라인 게시). 보드의 마이크로컨트롤러에 일련의 지침을 전송하여 보드에 수행할 작업을 지시할 수 있습니다. 이를 위해 Arduino 프로그래밍 언어(Wiring 기반)와 Arduino 소프트웨어(IDE)를 기반으로 Processing을 사용합니다.

    Arduino Mega 2560은 Atmega2560 기반의 마이크로컨트롤러 보드입니다.

    <울>
  • 54개의 디지털 I/O 핀과 16개의 아날로그 핀이 보드에 통합되어 있어 이 장치를 독특하고 다른 제품과 차별화할 수 있습니다. 54개의 디지털 I/O 중 15개는 PWM(펄스 폭 변조)에 사용됩니다.
  • 16MHz 주파수의 수정 발진기.
  • 보드에는 컴퓨터에서 보드로 코드를 연결하고 전송하는 데 사용되는 USB 케이블 포트가 있습니다.
  • DC 전원 잭은 보드에 전원을 공급하는 데 사용되는 보드와 연결됩니다.
  • 보드에는 요구 사항에 따라 전압을 조절할 수 있는 유연성을 제공하는 5V 및 3.3V의 두 가지 전압 조정기가 함께 제공됩니다.
  • 리셋 버튼과 USART라는 4개의 하드웨어 직렬 포트가 있어 통신 설정을 위한 최대 속도를 생성합니다.
  • 보드에 전원을 공급하는 방법에는 세 가지가 있습니다. USB 케이블을 사용하여 보드에 전원을 공급하고 코드를 보드로 전송하거나 보드의 Vin을 사용하거나 전원 잭이나 배터리를 통해 전원을 켤 수 있습니다.
  • 사양

    핀아웃

    핀 설명

    <울>
  • 5V 및 3.3V ==>이 핀은 약 5V의 출력 조정 전압을 제공하는 데 사용됩니다. 이 조절된 전원 공급 장치는 보드의 컨트롤러 및 기타 구성 요소에 전원을 공급합니다. 보드 또는 USB 케이블의 Vin 또는 다른 조정된 5V 전압 공급 장치에서 얻을 수 있습니다. 다른 전압 조정은 3.3V 핀에 의해 제공됩니다. 그릴 수 있는 최대 전력은 50mA입니다.
  • GND ==>보드에는 5개의 접지 핀이 있어 프로젝트에 둘 이상의 접지 핀이 필요할 때 유용합니다.
  • 재설정 ==> 이 핀은 보드를 재설정하는 데 사용됩니다. 이 핀을 LOW로 설정하면 보드가 재설정됩니다.
  • ==> 7V ~ 20V 범위의 보드에 공급되는 입력 전압입니다. 전원 잭에서 제공하는 전압은 이 핀을 통해 액세스할 수 있습니다. 그러나 이 핀을 통한 보드의 출력 전압은 자동으로 최대 5V로 설정됩니다.
  • 직렬 통신 ==> RXD 및 TXD는 직렬 데이터를 송수신하는 데 사용되는 직렬 핀입니다. 즉, Rx는 데이터 전송을 나타내고 Tx는 데이터 수신에 사용됩니다. 직렬 0에는 RX(0) 및 TX(1), 직렬 1에는 TX(18) 및 RX(19), 직렬 2에는 TX(16) 및 RX(17)가 포함된 직렬 핀의 4가지 조합이 사용됩니다. 직렬 3에는 TX(14) 및 RX(15)가 포함됩니다.
  • 외부 인터럽트 ==> 6개의 핀은 인터럽트 0(0), 인터럽트 1(3), 인터럽트 2(21), 인터럽트 3(20), 인터럽트 4(19), 인터럽트 5(18)와 같은 외부 인터럽트를 생성하는 데 사용됩니다. 이 핀은 LOW 값, 상승 또는 하강 에지를 제공하거나 인터럽트 핀에 값을 변경하는 등 여러 가지 방법으로 인터럽트를 생성합니다.
  • LED ==> 이 보드에는 디지털 핀 13에 연결된 내장 LED가 있습니다. 이 핀의 HIGH 값은 LED를 켜고 LOW 값은 끕니다.
  • AREF ==> AREF는 Analog Reference Voltage의 약자로 아날로그 입력을 위한 기준 전압입니다.
  • 아날로그 핀 ==> A0 ~ A15로 표시된 보드에 통합된 16개의 아날로그 핀이 있습니다. 이러한 모든 아날로그 핀을 디지털 I/O 핀으로 사용할 수 있다는 점에 유의하는 것이 중요합니다. 각 아날로그 핀은 10비트 분해능과 함께 제공됩니다. 이 핀은 접지에서 5V까지 측정할 수 있습니다. 그러나 AREF 및 analogReference() 함수를 사용하여 상위 값을 변경할 수 있습니다.
  • I2C ==>2개의 핀 20과 21은 I2C 통신을 지원합니다. 여기서 20은 SDA(주로 데이터 유지에 사용되는 직렬 데이터 라인)를 나타내고 21은 SCL(주로 장치 간의 데이터 동기화를 제공하는 데 사용되는 직렬 클럭 라인)을 나타냅니다.
  • SPI 커뮤니케이션 ==> SPI는 컨트롤러와 기타 주변 장치 구성 요소 간의 데이터 전송에 사용되는 직렬 주변 장치 인터페이스의 약자입니다. 4개의 핀, 즉 50(MISO), 51(MOSI), 52(SCK), 53(SS)은 SPI 통신에 사용됩니다.
  • 아두이노 IDE

    여기서는 이미 Arduino IDE를 설치했다고 가정합니다.

    1. 아래에 제공된 필수 라이브러리를 다운로드하십시오.

    TinyGPS 라이브러리

    2. 다운로드 후. 압축을 풀고 C:\Users\...\Documents\Arduino\libraries 폴더로 이동하여 (-)가 없는지 확인하십시오.

    3. Arduino IDE를 열고 프로그램 섹션에서 코드를 복사합니다.

    4. 그런 다음 도구 ==> 보드 ==> 여기에서 보드 선택으로 이동하여 보드를 선택합니다. 여기에서 Arduino Mega 2560을 사용합니다.

    5. 보드 선택 포트를 선택한 후 도구 ==> 포트

    로 이동합니다.

    6. 보드 및 포트 선택 후 업로드를 클릭합니다.

    연결

    Arduino MEGA ==> NEO-6M GPS

    <울>
  • 3.3V ==> VCC
  • GND ==> GND
  • Tx1(18) ==> 수신
  • 수신1(19) ==> 전송
  • Serial1 대신 Serial2 또는 Serial3을 사용할 수도 있습니다.

    직렬 2 핀

    <울>
  • Tx2(16) ==> 수신
  • Rx2(17) ==> Tx
  • Serial3 핀

    <울>
  • Tx3(14) ==> 수신
  • Rx3(15) ==> 전송
  • 결과

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Arduinomega_GPS
  • Arduinomega_GPSArduino
    //핀 18 및 19로 연결#include //long lat,lon; // 위도와 경도를 위한 변수 생성 objectfloat lat,lon;TinyGPS gps; // GPS 생성 objectvoid setup(){Serial.begin(57600); // 연결 serialSerial.println("GPS 수신 신호:");Serial1.begin(9600); // GPS 센서 연결} void loop(){ while(Serial1.available()){ // GPS 데이터 확인 if(gps.encode(Serial1.read()))// GPS 데이터 인코딩 { gps.f_get_position(&lat ,&론); // 위도와 경도 구하기 Serial.print("Position:"); //위도 Serial.print("위도:"); Serial.print(lat,6); Serial.print(","); //경도 Serial.print("경도:"); Serial.println(lon,6); } }} /*//핀 16 및 17로 연결#include //long lat,lon; // 위도와 경도를 위한 변수 생성 objectfloat lat,lon;TinyGPS gps; // GPS 생성 objectvoid setup(){Serial.begin(57600); // 연결 serialSerial.println("GPS 수신 신호:");Serial2.begin(9600); // GPS 센서 연결} void loop(){ while(Serial2.available()){ // GPS 데이터 확인 if(gps.encode(Serial2.read()))// GPS 데이터 인코딩 { gps.f_get_position(&lat ,&론); // 위도와 경도 구하기 Serial.print("Position:"); //위도 Serial.print("위도:"); Serial.print(lat,6); Serial.print(","); //경도 Serial.print("경도:"); Serial.println(lon,6); } }}*//*//핀 14 및 15로 연결#include //long lat,lon; // 위도와 경도를 위한 변수 생성 objectfloat lat,lon;TinyGPS gps; // GPS 생성 objectvoid setup(){Serial.begin(57600); // 연결 serialSerial.println("GPS 수신 신호:");Serial3.begin(9600); // GPS 센서 연결} void loop(){ while(Serial3.available()){ // GPS 데이터 확인 if(gps.encode(Serial3.read()))// GPS 데이터 인코딩 { gps.f_get_position(&lat ,&론); // 위도와 경도 구하기 Serial.print("Position:"); //위도 Serial.print("위도:"); Serial.print(lat,6); Serial.print(","); //경도 Serial.print("경도:"); Serial.println(lon,6); } }}*/

    회로도


    제조공정

    1. Arduino로 물방울 캡처
    2. Nextion 디스플레이로 재생
    3. U-blox LEA-6H 02 GPS 모듈(Arduino 및 Python 포함)
    4. DHT11로 Blynk에서 온도와 습도를 읽는 방법
    5. Arduino로 음악을 만드는 방법
    6. Arduino와 함께 NMEA-0183을 사용하는 방법
    7. GPS 및 TFT 디스플레이 실드가 있는 GPS 위치 표시
    8. Arduino에서 Modbus를 사용하는 방법
    9. Visuino를 사용하여 MicorSD 카드에 GPS 정보 기록
    10. Arduino + GPS 모듈 - 목적지 알림