๊ธธ๊ฑฐ๋ฆฌ๋ฅผ ๊ฑท๋ค๊ฐ ๊ฒน๊ฒน์ด ์์ธ ํฅ๋ณด๋ ๋๋ฌธ์ ๋ถํธํ๋ ์ ์ด ์์ผ์ ๊ฐ์?
2018๋
๊ตญ๋ด ์ต์ด ์ ๋ํฅ๋ณด๋ ๊ณต์ ์๋น์ค 'ํฅ๊ณ ์'์ด ๋ฑ์ฅํ ์ด๋, ๋ค์ํ ๊ณต์ ํฅ๋ณด๋ ์๋น์ค๊ฐ ์ถ์๋๋ฉด์ ๋์ ๊ณณ๊ณณ์์ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ณต์ ํฅ๋ณด๋์ ์์จ์ฑ์ผ๋ก ์ธํด ์ฃผ์ ์งํ์ฒ ์ญ ์ฃผ๋ณ๊ณผ ๋ณดํ๋ก, ๊ณต๊ณต์์ค ๋ฑ์์ ํตํ ๋ฐ ์์ค ์ด์ฉ์ ๋ฐฉํดํ๋ ๋ฌธ์ ๊ฐ ๋น๋ฒํ ๋ฐ์ํ๊ณ ์์ต๋๋ค. ๐ถโโ๏ธ๐ง
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ง๋ ๊ธฐ๋ฐ ๊ธฐ๋ณธ์๊ธ ํ ์ธ์จ ์์คํ
์ ๊ณ ์ํ์ต๋๋ค.
์ด ์์คํ
์ ๊ณต์ ํฅ๋ณด๋๊ฐ ๋ฐ์ง๋ ์ง์ญ์์์ ์ฌ์ฉ์ ์ฅ๋ คํ์ฌ ํฅ๋ณด๋๋ฅผ ์๋ฐ์ ์ผ๋ก ๋ถ์ฐ์ํค๊ณ , ์ฌํ์ ํผ๋์ ์ค์ด๋ฉฐ ์ง์ ๊ฐ๋ฅํ ๋ชจ๋น๋ฆฌํฐ ํ๊ฒฝ์ ์กฐ์ฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๐
- ์ฌ์ฉ์๊ฐ ๊ณต์ ํฅ๋ณด๋๋ฅผ ์ข ๋ฃํ ๋, ํด๋น ํฅ๋ณด๋์ ์์น ์ ๋ณด๋ฅผ ์๋ฒ๋ก ์ ์กํฉ๋๋ค. ๐ก
- ์๋ฒ๋ ์ฃผ๋ณ 30m ๋ฐ๊ฒฝ ๋ด์ ์๋ ํฅ๋ณด๋ ์๋ฅผ ๊ณ์ฐํ์ฌ ๋ฐ์ง๋๋ฅผ ์ธก์ ํฉ๋๋ค. ๐
- ๋ฐ์ง๋์ ๋ฐ๋ผ 5๋๋น 1์์ ํ ์ธ์จ์ ์ ์ฉํ์ฌ ๊ธฐ๋ณธ ์๊ธ(1500์)์ ํ ์ธํฉ๋๋ค. ๐ฐ
- ์ฌ์ฉ์๋ QR ์ฝ๋๋ฅผ ์ธ์ํ ์์ ์ ํ ์ธ๋ ์๊ธ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค. ๐
- NEO-6M GPS ๋ชจ๋๊ณผ Raspberry Pi๋ฅผ ์ฌ์ฉํ์ฌ ์ค์๊ฐ์ผ๋ก ํฅ๋ณด๋์ ์์น๋ฅผ ์์งํ๊ณ ์๋ฒ์ ์ ์กํฉ๋๋ค. ๐ฐ๏ธ
- ์๋ฒ๋ ์์ ํ ์์น ์ ๋ณด๋ฅผ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ , ์ฃผ๋ณ ํฅ๋ณด๋ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๐๏ธ
- Flutter๋ก ์ ์๋ ๋ชจ๋ฐ์ผ ์ฑ์ ์ฌ์ฉ์์๊ฒ ํ ์ธ๋ ์๊ธ์ ์ค์๊ฐ์ผ๋ก ์ ๊ณตํ๋ฉฐ QR ์ฝ๋ ์ค์บ์ ํตํด ๊ฐํธํ๊ฒ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ๐ฒ
- NEO-6M GPS ๋ชจ๋์ด ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์
/dev/ttyAMA0
ํ์ผ์ ์๋, ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. - ํ์ด์ฌ์
pynmea2
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์น ๋ฐ์ดํฐ๋ฅผ ํ์ฑํฉ๋๋ค. - ํ์ฑํ ๋ฐ์ดํฐ๋ฅผ
requests
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ๋ก ์ ์กํฉ๋๋ค. ๐ - ์๋ฒ๋ ์์ ํ ๋ฐ์ดํฐ๋ฅผ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ฑ์์ QR ์ฝ๋๋ฅผ ์ค์บํ์ฌ ํฅ๋ณด๋ ID๋ฅผ ์๋ฒ๋ก ์ ์กํฉ๋๋ค. ๐ฅ
- ์๋ฒ๋ ํด๋น ID๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํฅ๋ณด๋ ์์น ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
- ๋ฐ๊ฒฝ 30m ๋ด์ ํฅ๋ณด๋ ์๋ฅผ ๊ณ์ฐํ๊ณ , ํ ์ธ์จ์ ์ ์ฉํ ์๊ธ์ ๋ฐํํฉ๋๋ค. ๐งพ
- ์ฑ์ ์ฌ์ฉ์์๊ฒ ํ ์ธ๋ ์๊ธ์ ํ์ํฉ๋๋ค. ๐ต
- Raspberry Pi: ํฅ๋ณด๋ ์๋ฎฌ๋ ์ด์ ์ฅ์น
- NEO-6M GPS ๋ชจ๋: ์ค์๊ฐ ์์น ์ ๋ณด ์์ง
-
์๋ฒ: Java Spring Boot
-
๋ฐ์ดํฐ๋ฒ ์ด์ค: MySQL
-
ํ๋ก ํธ์๋ ์ฑ: Flutter
-
ํต์ : HTTP ํ๋กํ ์ฝ์ ํตํ ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ ๋ฐ์ดํฐ ์ ์ก
-
ํ์ด์ฌ: ์์น ๋ฐ์ดํฐ ํ์ฑ ๋ฐ ์๋ฒ ํต์
- ์จ๋ผ์ธ ํ์๋ฅผ ํตํด ์ฌ๋ฌ ์์ด๋์ด๋ฅผ ๋ ผ์ํ๊ณ , ๊ณต์ ํฅ๋ณด๋ ๋ฐ์ง ๋ฌธ์ ํด๊ฒฐ ์์ด๋์ด๋ฅผ ์ ์ ํ์์ต๋๋ค.
- ๋๋ฉด ํ์๋ฅผ ํตํด ๊ตฌ์ฒด์ ์ธ ์์คํ ์ค๊ณ ๋ฐ ์ฌ์ฉ ๊ธฐ์ ์ ๊ฒฐ์ ํ์์ต๋๋ค.
- Java Spring Boot๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ์์ต๋๋ค.
- MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๊ณํ๊ณ DataGrip์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ์์ฑํ์ต๋๋ค.
- ๋ ๊ฐ์ง ์ฃผ์ API๋ฅผ ๊ตฌํํ์์ต๋๋ค:
- ํฅ๋ณด๋ ์ ๋ณด๋ฅผ ์์ ํ์ฌ ์ ์ฅํ๋ API
- ์ฃผ๋ณ ํฅ๋ณด๋ ์๋ฅผ ๊ณ์ฐํ๊ณ ํ ์ธ๋ ์๊ธ์ ๋ฐํํ๋ API
- Raspberry Pi์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด OS๋ฅผ ์ค์นํ๊ณ ์ด๊ธฐ ํ๊ฒฝ ์ค์ ์ ์๋ฃํ์ต๋๋ค.
- NEO-6M GPS ๋ชจ๋๊ณผ Raspberry Pi๋ฅผ ์ฐ๊ฒฐํ๊ณ , ํ๋ก๋๋ฅผ ์์ฑํ์ฌ ํ๋์จ์ด๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค.
- NEO-6M ๋ชจ๋์์ GPS ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ด๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด๋ก ์ ์กํ๋ ์์ ์ ์๋ฃํ์ต๋๋ค.
- ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์์ ์์งํ ์์น ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ๊ณ , ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ฒ ์ฒ๋ฆฌํ๋์ง ๊ฒ์ฆํ์ต๋๋ค.
- ํ ์คํธ ๊ฒฐ๊ณผ, ์ค๋ด์์๋ GPS ์ ํธ๊ฐ ์ฝํ์ฌ ์ธ๋ถ ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์งํํ์๊ณ ์ ์์ ์ผ๋ก ์๋ํ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
- Flutter๋ก ๋ชจ๋ฐ์ผ ์ฑ์ ๊ฐ๋ฐํ์์ผ๋ฉฐ, ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ฌ ์ฌ์ฉ์์๊ฒ ์๊ธ์ ํ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
- ์์ฑ๋ ํ๋์จ์ด, ์๋ฒ, ์ฑ์ ํตํฉํ์ฌ ์ค์ ๋ก ์๋ํ๋ ํ๊ฒฝ์ ์๋ฎฌ๋ ์ด์ ํ์์ต๋๋ค.
- ํ๋ก์ ํธ ๊ฒฐ๊ณผ๋ฌผ์ ๊ณต์ ํฅ๋ณด๋์ ์ฅ์ฐฉํ๊ณ ํ ์คํธ๋ฅผ ์งํํ์ฌ ์์ด๋์ด์ ์คํ ๊ฐ๋ฅ์ฑ์ ๊ฒ์ฆํ์ต๋๋ค.
- NEO-6M GPS ๋ชจ๋ GY-GPS6MV2
- Raspberry Pi
- ์๋ฒ: GitHub Repository - On-Track Server
- ํ๋ก ํธ ์ฑ: ํ์ฌ ๋ ํฌ์งํ ๋ฆฌ
- ํ์ด์ฌ ์ฝ๋: GitHub Repository - On-Track Python
- Use Neo 6M GPS Module with Raspberry Pi and Python
- Raspberry Pi ์ GPIO ์ฌ์ฉํด๋ณด๊ธฐ - ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
- ์ฌ์ฉ์๋ ์ํ๋ ์ฌ์ฉ ์๊ฐ์ ์ ํํ์ฌ ์ฌ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
- ๋จ์ ์๊ฐ์ด ์ค์๊ฐ์ผ๋ก ํ์๋๋ฉฐ, ์ฌ์ฉ ์ข ๋ฃ ์ ๋จ์ ์๊ฐ์ ๋ฐ๋ผ ํ๋ถ ๊ธ์ก์ด ์๋ ๊ณ์ฐ๋ฉ๋๋ค.
- ๋ฐ์ง๋์ ๋ฐ๋ผ ํ ์ธ์จ์ด ์ ์ฉ๋์ด ๋ถ์ฐ๋ ์ฃผ์ฐจ์ฅ ์ด์ฉ ์ ์ถ๊ฐ ํ ์ธ์ ๋ฐ์ ์ ์์ต๋๋ค.
- Geolocator ํจํค์ง๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์์ ํ์ฌ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ์ฃผ์ฐจ์ฅ์ ํ์ํฉ๋๋ค.
- QR ์ฝ๋๋ฅผ ํตํด ๊ฒฐ์ ๋ฐ ๋ผ์ด๋ฉ ์์์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋๋ฒ๊น ๋ชจ๋์์ QR ์ฝ๋ ์์ด ํ ์คํธ ์งํ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ฌ์ ๊ฒฐ์ ํ ์๊ฐ์ ๋ฐ๋ผ ํ์ด๋จธ๊ฐ ์๋ํ๋ฉฐ, ์ค์๊ฐ์ผ๋ก ๋จ์ ์๊ฐ์ด ํ์๋ฉ๋๋ค.
- ์ฌ์ฉ ์์, ์ผ์ ์ ์ง, ์ฌ์ฌ์ฉ, ์ข ๋ฃ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค.
- ๋ผ์ด๋ฉ ์ข ๋ฃ ์, ๋จ์ ์๊ฐ์ ๋ฐ๋ฅธ ํ๋ถ ๊ธ์ก ๋ฐ ํ ์ธ ๊ธ์ก์ ์๋ ๊ณ์ฐํ์ฌ ์ฌ์ฉ์์๊ฒ ํ์ํฉ๋๋ค.
- Flutter: UI ๋ฐ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ ๊ฐ๋ฐ
- Dart: Flutter ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
- Geolocator: ์์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ๊ฐ๊น์ด ์ฃผ์ฐจ์ฅ์ ๊ณ์ฐ
- Shared Preferences: ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ์ฌ ์ฑ ์ข ๋ฃ ํ์๋ ์ํ ๋ณต์ ๊ฐ๋ฅ
- QR Code Scanner: QR ์ฝ๋ ๊ธฐ๋ฐ ๊ฒฐ์ ๋ฐ ๋๋ฒ๊น ์ง์
-
์ฑ ์คํ
- ์ฑ์ ์คํํ๋ฉด ์๋์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ์ฃผ์ฐจ์ฅ์ ํ์ํ์ฌ ํ๋ฉด์ ํ์ํฉ๋๋ค.
-
์ฌ์ ๊ฒฐ์
- '์ฌ์ฉ ์์' ๋ฒํผ์ ๋๋ฌ ์ฌ์ ๊ฒฐ์ ์ฐฝ์ ๋์๋๋ค.
- ์ํ๋ ์ฌ์ฉ ์๊ฐ์ ์ ๋ ฅํ๊ฑฐ๋ ๋๋กญ๋ค์ด์์ ์ ํํ์ฌ ์ฌ์ ๊ฒฐ์ ๋ฅผ ์งํํฉ๋๋ค.
- ๊ฒฐ์ ๊ธ์ก์ด ํ์๋๋ฉฐ, QR ์ฝ๋ ์ค์บ์ ํตํด ๊ฒฐ์ ๊ฐ ์๋ฃ๋ฉ๋๋ค.
-
๋ผ์ด๋ฉ ์์
- ๊ฒฐ์ ํ ํ์ด๋จธ๊ฐ ์์๋๋ฉฐ, ์ค์๊ฐ์ผ๋ก ๋จ์ ์๊ฐ์ด ํ์๋ฉ๋๋ค.
-
์ผ์ ์ ์ง ๋ฐ ์ฌ์ฌ์ฉ
- ๋ผ์ด๋ฉ ๋์ค ์ผ์ ์ ์งํ ์ ์์ผ๋ฉฐ, ํ์ ์ '์ฌ์ฌ์ฉ' ๋ฒํผ์ ๋๋ฌ ๋ค์ ์์ํ ์ ์์ต๋๋ค.
-
๋ผ์ด๋ฉ ์ข ๋ฃ ๋ฐ ํ๋ถ
- ์ฌ์ฉ ์ข ๋ฃ ์ ๋จ์ ์๊ฐ์ ๋ฐ๋ฅธ ํ๋ถ ๊ธ์ก์ด ๊ณ์ฐ๋์ด ํ๋ฉด์ ํ์๋ฉ๋๋ค.
- ๋ฐ์ง๋์ ๋ฐ๋ฅธ ํ ์ธ์จ์ด ์ ์ฉ๋ ํ๋ถ ๊ธ์ก์ด ํจ๊ป ํ์๋ฉ๋๋ค.
- ์ด ์ ์ฅ์๋ฅผ ํด๋ก ํฉ๋๋ค.
git clone https://github.com/์ฌ์ฉ์๋ช /ontrack.git cd ontrack
Flutter ํ๊ฒฝ์ ์ค์ ํ ํ ์์กด์ฑ์ ์ค์นํฉ๋๋ค.
flutter pub get
๋๋ฐ์ด์ค ๋๋ ์๋ฎฌ๋ ์ดํฐ์์ ์ฑ์ ์คํํฉ๋๋ค.
flutter run