속도계는 차량의 주행 속도를 측정하는 데 사용됩니다. 이전에는 IR 센서와 홀 센서를 사용하여 아날로그 속도계와 디지털 속도계를 각각 구축했습니다. 오늘은 GPS를 사용하여 움직이는 차량의 속도를 측정합니다. GPS 속도계는 차량을 지속적으로 찾고 속도를 계산할 수 있기 때문에 표준 속도계보다 정확합니다. GPS 기술은 내비게이션 및 교통 경보를 위해 스마트 폰과 차량에서 널리 사용됩니다.
이 프로젝트에서는 OLED 디스플레이가있는 NEO6M GPS 모듈을 사용하여 Arduino GPS 속도계 를 구축 할 것 입니다.
사용 된 재료
- Arduino Nano
- NEO6M GPS 모듈
- 1.3 인치 I2C OLED 디스플레이
- 브레드 보드
- 점퍼 연결
NEO6M GPS 모듈
여기서는 NEO6M GPS 모듈을 사용하고 있습니다. NEO-6M GPS 모듈은 강력한 위성 검색 기능을 제공하는 세라믹 안테나가 내장 된 인기있는 GPS 수신기입니다. 이 수신기는 위치를 감지하고 최대 22 개의 위성을 추적하고 세계 어디에서나 위치를 식별 할 수 있습니다. 온보드 신호 표시기를 사용하여 모듈의 네트워크 상태를 모니터링 할 수 있습니다. 데이터 백업 배터리가있어 주전원이 우발적으로 차단되었을 때 모듈이 데이터를 저장할 수 있습니다.
GPS 수신기 모듈 내부의 핵심은 u-blox의 NEO-6M GPS 칩입니다. 50 개 채널에서 최대 22 개의 위성을 추적 할 수 있으며 -161dBm의 매우 인상적인 감도 수준을 제공합니다. 이 50 채널 u-blox 6 포지셔닝 엔진은 1 초 미만의 TTFF (Time-To-First-Fix)를 자랑합니다. 이 모듈은 4800-230400 bps의 전송 속도를 지원하며 기본 전송 속도는 9600입니다.
풍모:
- 작동 전압: (2.7-3.6) V DC
- 작동 전류: 67mA
- 전송 속도: 4800-230400 bps (9600 기본값)
- 통신 프로토콜: NEMA
- 인터페이스: UART
- 외부 안테나 및 내장 EEPROM.
GPS 모듈의 핀아웃:
- VCC: 모듈의 입력 전압 핀
- GND: 접지 핀
- RX, TX: 마이크로 컨트롤러가있는 UART 통신 핀
우리는 이전에 GPS를 Arduino와 인터페이스했으며 차량 추적을 포함한 GPS 모듈을 사용하여 많은 프로젝트를 구축했습니다.
1.3 인치 I2C OLED 디스플레이
OLED라는 용어는“ 유기 발광 다이오드 (Organic Light Emitting Diode)”의 약자 로 대부분의 TV에서 사용되는 것과 동일한 기술을 사용하지만 그에 비해 픽셀 수가 적습니다. 이 멋진 디스플레이 모듈이 우리의 프로젝트를 멋지게 보이게 만들 것이기 때문에 Arduino와 인터페이스하는 것은 정말 재미 있습니다. 여기에서 OLED 디스플레이 및 유형에 대한 전체 기사를 다뤘습니다. 여기에서는 모노크롬 4 핀 SH1106 OLED 1.28 인치 OLED 디스플레이를 사용하고 있습니다. 이 디스플레이는 I2C 모드에서만 작동합니다.
기술 사양:
- 운전사 IC: SH1106
- 입력 전압: 3.3V-5V DC
- 해상도: 128x64
- 인터페이스: I2C
- 소비 전류: 8mA
- 픽셀 색상: 블루
- 시야각:> 160도
핀 설명:
VCC: 입력 전원 공급 3.3-5V DC
GND: 접지 참조 핀
SCL: I2C 인터페이스의 클록 핀
SDA: I2C 인터페이스의 직렬 데이터 핀
Arduino 커뮤니티는 이미이를 훨씬 더 간단하게 만드는 데 직접 사용할 수있는 많은 라이브러리를 제공했습니다. 몇 개의 라이브러리를 사용해 보았는데 Adafruit_SH1106.h 라이브러리가 사용하기 매우 쉽고 그래픽 옵션 이 몇 개 있다는 것을 알았습니다. 따라서이 튜토리얼에서 동일한 것을 사용할 것입니다.
OLED는 매우 멋져 보이고 다른 마이크로 컨트롤러와 쉽게 인터페이스하여 흥미로운 프로젝트를 만들 수 있습니다.
- 라즈베리 파이와 SSD1306 OLED 디스플레이 인터페이스
- Arduino와 SSD1306 OLED 디스플레이 인터페이스
- ESP32 및 OLED 디스플레이를 사용하는 인터넷 시계
- Arduino, DHT11 및 IR Blaster를 사용하는 자동 AC 온도 컨트롤러
회로도
OLED를 사용 하는이 Arduino GPS 속도계의 회로도 는 다음과 같습니다.
전체 설정은 다음과 같습니다.
Arduino OLED 속도계 용 Arduino 프로그래밍
프로젝트의 전체 코드는 튜토리얼 하단에 있습니다. 여기에서는 전체 코드를 한 줄씩 설명합니다.
우선 모든 라이브러리를 포함합니다. 여기서 TinyGPS ++. h 라이브러리는 GPS 수신기 모듈을 사용하여 GPS 좌표를 가져 오는 데 사용되고 Adafruit_SH1106.h 는 OLED에 사용됩니다.
#포함
그런 다음 OLED I2C 주소가 정의되며 OX3C 또는 OX3D가 될 수 있습니다. 여기에서는 제 경우에는 OX3C입니다. 또한 디스플레이의 리셋 핀을 정의해야합니다. 제 경우에는 디스플레이가 Arduino의 재설정 핀을 공유하기 때문에 -1로 정의됩니다.
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 Adafruit_SH1106 디스플레이 (OLED_RESET);
다음으로 TinyGPSPlus 및 Softwareserial 클래스 의 객체는 아래와 같이 정의됩니다. 소프트웨어 직렬 클래스에는 Arduino 핀 번호가 필요합니다. 여기서는 2와 3으로 정의되는 직렬 통신용입니다.
int RX = 2, TX = 3; TinyGPSPlus gps; SoftwareSerial gpssoft (RX, TX);
setup () 내부 에서 Serial 통신 및 OLED에 대한 초기화가 수행됩니다. 소프트웨어 시리얼 통신의 기본 전송 속도는 9600으로 정의됩니다. 여기서 SH1106_SWITCHCAPVCC 는 내부적으로 3.3V에서 디스플레이 전압을 생성하는 데 사용되며 display.begin 기능은 디스플레이 를 초기화하는 데 사용됩니다.
void setup () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
내부 상태 에 해당 루프는 수신 된 직렬 데이터를 검증 유효한 GPS 신호가 수신되는 경우, 다음 () displayspeed OLED의 속도 값을 표시하기 위해 호출된다.
while (gpssoft.available ()> 0) if (gps.encode (gpssoft.read ())) displayspeed ();
displayspeed () 함수 내 에서 gps.speed.isValid () 함수를 사용하여 GPS 모듈의 속도 데이터를 확인 하고 true 값을 반환하면 속도 값이 OLED 디스플레이에 표시됩니다. 여기서 OLED의 텍스트 크기는 display.setTextSize 함수를 사용하여 정의 하고 커서 위치는 display.setCursor 함수를 사용하여 정의 합니다. GPS 모듈의 속도 데이터는 gps.speed.kmph () 함수를 사용하여 디코딩 되고 마지막으로 display.display ()를 사용하여 표시됩니다.
if (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); display.print (gps.speed.kmph ()); display.display (); }
마지막으로 Arduino Uno에 코드를 업로드하고 시스템을 움직이는 차량에 넣으면 아래 이미지와 같이 OLED 디스플레이에서 속도를 볼 수 있습니다.
데모 비디오가 포함 된 완전한 코드는 다음과 같습니다.