Daftar Isi:
- Langkah 1: Memulai
- Langkah 2: Hubungkan Modul GPS ke Raspberry Pi
- Langkah 3: Terima Data Dari Modul Penerima GPS
- Langkah 4: Hubungkan Tampilan ke Raspberry Pi
- Langkah 5: Atur Tampilan untuk Bekerja Dengan Raspberry Pi
- Langkah 6: Atur Mesin Status untuk Menampilkan Informasi GPS di Layar
- Langkah 7: Mari Implementasikan Sistem GPS Kita
Video: Sistem GPS: 7 Langkah
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-10 13:47
Pencipta Proyek: Carlos Gomez
Memiliki sistem navigasi yang andal sangat penting bagi siapa pun yang mencoba bepergian dan menjelajahi dunia.
Aspek terpenting yang memungkinkan sistem navigasi bekerja adalah kemampuan GPS yang tertanam di dalam sistem. Sistem GPS memungkinkan siapa saja untuk melacak lokasi dan kecepatan mereka untuk menampilkan informasi yang akurat tentang pengguna dan memberi pengguna representasi akurat tentang di mana mereka berada dan seberapa jauh mereka dari lokasi mereka.
Global Positioning System (GPS) adalah jaringan satelit yang mengorbit bumi pada ketinggian sekitar 20.000 km. Siapa pun yang memiliki perangkat GPS dapat menerima sinyal radio yang disiarkan oleh satelit dan dapat menggunakannya dengan cara apa pun yang diperlukan. Di mana pun lokasi Anda di planet ini, setidaknya empat GPS harus tersedia untuk Anda setiap saat. Menggunakan metode yang disebut trilaterasi 3-D, perangkat GPS dapat menggunakan tiga satelit untuk menentukan lokasi perangkat di Bumi. Masing-masing dari tiga satelit mengirimkan sinyal ke perangkat dan perangkat menentukan jaraknya dari satelit. Menggunakan masing-masing dari tiga perhitungan jarak, perangkat sekarang dapat menentukan lokasinya di Bumi dan mengembalikannya kepada pengguna.
Sistem GPS yang akan kami buat akan dapat melacak lokasi pengguna dengan mendapatkan koordinat pengguna di Bumi dan melakukan beberapa perhitungan untuk mengembalikan kecepatan, lokasi, dan jarak yang ditempuh pengguna.
Langkah 1: Memulai
Untuk memulai proyek ini, pertama-tama kita harus mengumpulkan semua bahan yang benar
1: Raspberry Pi Nol W
2: Penerima GPS
3: 1,8 TFT 128 x 160 Layar SPI LCD
4: ~11 kabel
5: 2 tombol
6: Resistor 2x 1k dan 2x 10k untuk tombol tarik ke bawah
7: Papan roti
Proyek ini akan menggunakan pin GPIO Raspberry Pi dan karena itu kita perlu menghubungkan semuanya dengan papan roti untuk mengembangkan proyek kita. Juga diasumsikan bahwa penyolderan pada semua pin telah selesai dan selesai sebelum melanjutkan dan menghubungkan semua bagian kami.
Langkah 2: Hubungkan Modul GPS ke Raspberry Pi
Untuk penggunaan sistem GPS kami, Anda perlu menghubungkan pin Tx dan Rx dari modul GPS ke pin GPIO 14 dan 15 pada Raspberry Pi. Pin Tx dari penerima GPS menuju ke pin Rx dari Pi dan pin Rx dari penerima GPS menuju ke pin Tx dari Raspberry pi.
Penerima GPS yang ditunjukkan pada gambar memerlukan 3.3V untuk digunakan dan Anda dapat menghubungkan pin 3.3V ke tegangan yang benar, sambil menghubungkan pin Ground ke ground.
Langkah 3: Terima Data Dari Modul Penerima GPS
Untuk menerima data dari penerima GPS ke Raspberry Pi, kita perlu mengizinkan soket yang benar untuk membaca dari port UART. Membaca data mentah akan mengharuskan kita untuk membuat perpustakaan parsing kita sendiri, tetapi dalam skenario ini kita dapat memanfaatkan daemon GPS yang berjalan di latar belakang untuk membantu menggunakan parsing data dan mengirimkannya ke Raspberry Pi
Untuk mencapai ini, kita dapat membuka terminal pada Raspberry Pi dan menjalankan kode:
sudo apt-get update
sudo apt-get install gpsd gpsd-clients python-gps
Ini harus mengurus unduhan untuk kami.
Setelah selesai, kita perlu menonaktifkan layanan sistem gpsd dengan menjalankan perintah berikut:
sudo systemctl stop gpsd.socket
sudo systemctl nonaktifkan gpsd.socket
Jika Anda ingin mengaktifkan layanan sistem gpsd default, Anda dapat menjalankan perintah berikut untuk memulihkannya:
sudo systemctl aktifkan gpsd.socket
sudo systemctl start gpsd.socket
Sekarang kita perlu memulai daemon gpsd dan mengarahkannya ke port UART dengan memasukkan
sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock
Kita sekarang dapat menjalankan perintah di bawah ini dan melihat semua data mengambang!
cgps -s
Langkah 4: Hubungkan Tampilan ke Raspberry Pi
Setelah penerima GPS kami aktif dan bekerja dengan Raspberry Pi, kami kemudian dapat menghubungkan layar ke Raspberry Pi. Kami akan menggunakan 5 kabel untuk menghubungkan layar LCD kami ke Raspberry Pi dan 4 pin lainnya untuk menghubungkan daya utama dan LED di layar.
Saya telah menyertakan foto layar TFT yang saya gunakan, tetapi ini akan berfungsi dengan layar dengan ukuran dan bentuk yang sama.
Hubungkan LED- dan GND ke ground dan sambungkan LED+ dan VCC ke 3.3V.
Hubungkan pin RESET pada layar ke pin 25 pada papan Pi.
Hubungkan A0 ke pin 24 pada papan Pi.
Hubungkan pin SDA ke pin MOSI pada papan Pi.
Hubungkan pin SCK pada layar LCD ke papan Pi.
Hubungkan pin CS ke pin 8 pada papan Pi.
Langkah 5: Atur Tampilan untuk Bekerja Dengan Raspberry Pi
Untuk mengatur tampilan kita perlu menggunakan perpustakaan ST7735 yang ditemukan di repo ini:
Pustaka Layar Python ST7735
Setelah kami memiliki perpustakaan tampilan ini diinstal ke sistem Raspberry Pi kami, kami sekarang dapat melanjutkan untuk menyiapkan file contoh untuk mengonfirmasi bahwa kabel kami sebelumnya berfungsi dengan benar.
Buat file berjudul example.py dan masukkan teks berikut di sana bersama dengan contoh gambar yang Anda pilih di folder yang sama
impor ST7735 sebagai TFTimport Adafruit_GPIO sebagai GPIO impor Adafruit_GPIO. SPI sebagai SPI
LEBAR = 128
TINGGI = 160 KECEPATAN_HZ = 4000000
# Konfigurasi Raspberry Pi.
# Ini adalah pin yang diperlukan untuk menghubungkan LCD ke Raspberry Pi
DC = 24 RST = 25 SPI_PORT = 0 SPI_DEVICE = 0
# Buat kelas layar TFT LCD.
disp = TFT. ST7735(DC, rst=RST, spi=SPI. SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=SPEED_HZ))
# Inisialisasi tampilan.
disp.begin() disp.reset()
# Muat gambar.
newData = 0x42 disp.command(newData) print('Memuat gambar…') image = Image.open('cat.jpg')
# Ubah ukuran gambar dan putar agar sesuai dengan tampilan.
gambar = image.rotate(270).resize((WIDTH, HEIGHT))
# Akan mencetak ke terminal bahwa program kami menggambar Gambar kami di layar
print('Menggambar gambar')
# Fungsi ini akan menampilkan gambar kita di layar
tampilan.display(gambar)
File ini akan mengatur konfigurasi Raspberry Pi untuk layar LCD dan perpustakaan akan mengonversi gambar kita di folder dan menampilkannya di layar.
Langkah 6: Atur Mesin Status untuk Menampilkan Informasi GPS di Layar
Kami akan menggunakan 5 mesin negara yang berbeda, sambil menerapkan diagram tugas kami untuk mengatur sistem gps kami.
Tampilan Ubah status mesin:
Mesin status ini akan mengontrol mana yang akan ditampilkan tergantung pada input tombol kami. Ini dilakukan dengan mengubah variabel yang memungkinkan python memanfaatkan pengetikan bebek dan memanggil fungsi yang benar untuk ditampilkan tergantung pada fungsi yang dipanggil
Mesin status kecepatan:
Mesin negara ini akan mengeksekusi kecepatan saat ini tergantung pada lokasi individu. Ini akan mengeksekusi setiap siklus jam untuk sistem GPS
Mesin status keluaran:
Mesin status ini akan menentukan output berdasarkan variabel yang ditentukan oleh mesin status perubahan tampilan menjadi tampilan saat ini.
Mesin status jarak
Mesin negara ini mengeksekusi setiap siklus jam dan menentukan total jarak yang ditempuh oleh pengguna dan setelah tombol reset ditekan, akan mengatur ulang jarak tempuh saat ini.
Mesin status lokasi:
Mesin status ini mengembalikan lokasi pengguna saat ini, menggunakan koordinat yang dikembalikan modul GPS tentang pengguna. Mesin negara ini tergantung pada koneksi internet pengguna.
Langkah 7: Mari Implementasikan Sistem GPS Kita
Setelah modul GPS kami mengirimkan informasi ke Raspberry Pi kami dan layar LCD kami menampilkan informasi di dalamnya, kami kemudian dapat mulai memprogram sistem GPS kami. Saya akan menggunakan mesin keadaan terbatas langkah sebelumnya untuk mengkodekan sistem GPS kami
## File utama untuk sistem Navigasi # # # #
# Perpustakaan untuk menggambar gambar
dari PIL impor Gambar dari PIL impor ImageDraw dari PIL impor ImageFont
# Perpustakaan untuk pengontrol ST7737
impor ST7735 sebagai TFT
# Perpustakaan untuk GPIO untuk Raspberry Pi
impor Adafruit_GPIO sebagai GPIO impor Adafruit_GPIO. SPI sebagai SPI
# Perpustakaan untuk GPS
#impor gpsd dari gps3 impor gps3
# Perpustakaan untuk waktu
waktu impor
# Perpustakaan untuk menemukan jarak antara dua titik
dari matematika impor sin, cos, sqrt, atan2, radian
# Impor perpustakaan Rpi untuk menggunakan tombol untuk beralih menu dan mengatur ulang
# impor RPi. GPIO sebagai bGPIO
# Atur pin untuk tombol
bGPIO.setmode(bGPIO. BCM)
bGPIO.setup(18, bGPIO. IN, pull_up_down=bGPIO. PUD_DOWN)
bGPIO.setup(23, bGPIO. IN, pull_up_down=bGPIO. PUD_DOWN)
# impor perpustakaan geopy untuk Geocoding
# # Akses internet diperlukan agar ini berfungsi
dari geopy.geocoder impor Nominatim
geolocator = Nominatim()
# Konstanta untuk sistem
#################################
LEBAR = 128
TINGGI = 160 KECEPATAN_HZ = 4000000
# Pin konfigurasi Raspberry Pi
DC = 24 # A0 pada layar TFT RST = 25 # Reset pin pada layar TFT SPI_PORT = 0 # Port SPI pada raspberry pi, SPI0 SPI_DEVICE = 0 # Slave pilih pada rapsberry pi, CE0
# Buat objek tampilan LCD TFT
disp = TFT. ST7735(DC, rst=RST, spi=SPI. SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=SPEED_HZ))
# Inisialisasi tampilan
tampilan.mulai()
# Latar belakang akan disetel ke hijau
#disp.clear((0, 255, 0))
# Bersihkan layar menjadi putih dan tampilkan
#disp.clear((255, 255, 255)) draw = disp.draw() #draw.rectangle((0, 10, 127, 150), outline=(255, 0, 0), fill=(0, 0, 255)) #disp.display()
# Variabel penempatan Kecepatan, Lintang, Bujur
#currentS = "Kecepatan Saat Ini: " # String kecepatan #totalDis = "Total Jarak: " # Jarak string #currentLoc = "Lokasi Saat Ini: " # Lokasi string
# Jarak koordinat x dan y
distX = 10 distY = 20
daftar poin =
# Koordinat kecepatan x dan y
kecepatanX = 10 kecepatanY = 20
# Koordinat lokasi x dan y
locX = 10 locY = 20
# Mengkonversi dari m/s ke mph
konversiVal = 2,24
# Fungsi pembaruan kecepatan, mengembalikan string
KecepatanVar = 0
def speedFunc(): global SpeedVar SpeedText = data_stream. TPV['speed'] if (SpeedText != "n/a"): SpeedText = float(SpeedText) * conversionVal SpeedVar = round(SpeedText, 1) # return (SpeedText)
def lokasiFunc():
latLoc = str(latFunc()) lonLoc = str(lonFunc())
reverseString = latLoc + ", " + lonLoc
lokasi = geolocator.reverse(reverseString)
kembali (lokasi.alamat)
# Fungsi pembaruan Latitude, mengembalikan nilai float
def latFunc(): Latitude = data_stream. TPV['lat'] if(Latitude == "n/a"): return 0 else: return float(round(Latitude, 4))
# Fungsi pembaruan garis bujur, mengembalikan string
def lonFunc(): Bujur = data_stream. TPV['lon'] if (Bujur == "n/a"): return 0 else: return float(round(Longitude, 4))
# Fungsi jarak mengembalikan TOTAL jarak yang ditempuh
jarak total = 0
def distFunc():
global totalDistance newLat = latFunc() newLon = lonFunc() if(newLat == 0 or newLon == 0): totalDistance = totalDistance # return (totalDistance) else: pointsList.append((newLat, newLon)) last = len(pointsList)-1 if(last == 0): return else: totalDistance += coorDistance(pointsList[last-1], pointsList[last]) # mengembalikan totalDistance
# Mengatur ulang jarak total
def resDistance():
total globalJarak totalJarak = 0
# Fungsi yang digunakan untuk mencari jarak antara dua koordinat
# menggunakan rumus Haversine untuk mencari. # Poin input adalah tupel
def coorDistance(point1, point2):
# Perkiraan radius Bumi dalam kilometer radius bumi = 6373,0
lat1 = titik1[0]
lon1 = titik1[1]
lat2 = titik2[0]
lon2 = titik2[1]
jarakLon = lon2 - lon1
jarakLat = lat2 - lat1
# Haversine
a = sin(jarakLat/2)**2 + cos(lat1) * cos(lat2) * sin(jarakLon/2)**2
# Haversine c
c = 2 * atan2(akar(a), kuadrat(1-a))
# Mengkonversi km ke Mil
jarak = (radius bumi * c) * 0,62137
if(distance <= 0,01): kembalikan 0,00 else: kembalikan putaran(jarak, 3)
# Berfungsi untuk menampilkan kecepatan di layar
def dispSpeed():
global SpeedVar # Tempatkan jarak pada variabel di layar draw.text((speedX, speedY), str(SpeedVar), font=ImageFont.truetype("Lato-Medium.ttf", 72))
# Berfungsi untuk menampilkan jarak di layar
def jarak():
draw.text((distX, distY), str(totalDistance), font=ImageFont.truetype("Lato-Medium.ttf", 60))
# Fungsi untuk menampilkan lokasi di layar, membutuhkan internet untuk bekerja
def dispLocation():
draw.text((locX, locY), locationFunc(), font=ImageFont.truetype("Lato-Medium.ttf", 8))
# Menggunakan kamus untuk meniru pernyataan sakelar
opsi disp = {
0: dispSpeed, 1: dispDistance, 2: dispLocation }
# Fungsi keluaran layar
keluaran def():
# Menggunakan variabel global untuk displayIndex global displayIndex # Membersihkan layar dan menerapkan background disp.clear((255, 255, 255)) draw.rectangle((0, 10, 127, 150), outline=(255, 0, 0), isi=(255, 0, 0))
# Fungsi panggilan tergantung pada nilai indeks tampilan
dispOptions[displayIndex]()
# Akan terhapus jika metode lain berhasil
# letakkan variabel jarak di layar
#draw.text((distX, distY), str(distFunc()), font=ImageFont.load_default()) # menempatkan variabel kecepatan di layar #draw.text((speedX, speedY), speedFunc(), font=ImageFont.load_default()) # Menampilkan pembaruan ke layar disp.display()
displayButton = 18 # BCM Pin pada raspberry pi
resetButton = 23 # BCM Pin di raspberry pi
tombolTekan = Salah
def cekDisplay():
global buttonPress global displayIndex if(bGPIO.input(displayButton) dan bukan buttonPress): displayIndex += 1 buttonPress = True if(displayIndex == 2): displayIndex = 0 elif(bGPIO.input(displayButton) dan buttonPress): print (" Masih ditekan") lain: buttonPress = False
# Siapkan gps
gps_socket=gps3. GPSDSocket() data_stream=gps3. DataStream() gps_socket.connect() gps_socket.watch()
timerPeriode =.5
# Nilai indeks untuk tampilan displayIndex = 0 coba: untuk new_data di gps_socket: if new_data: data_stream.unpack(new_data) if data_stream. TPV['lat'] != 'n/a': print(data_stream. TPV['speed'], data_stream. TPV['lat'], data_stream. TPV['lon']) distFunc() speedFunc() output() checkDisplay() if(bGPIO.input(resetButton)): resDistance() else: output() checkDisplay() if(bGPIO.input(resetButton)): resDistance() print('GPS belum terhubung') time.sleep(.1) time.sleep(.8) kecuali KeyboardInterrupt: gps_socket.close() print(' \nDihentikan oleh pengguna ctrl+c')
Kode di atas hanyalah salah satu contoh tentang cara membuat kode sistem kami dan saya telah menyematkan video tentang cara kerja sistem ini.