Daftar Isi:

Sistem GPS: 7 Langkah
Sistem GPS: 7 Langkah

Video: Sistem GPS: 7 Langkah

Video: Sistem GPS: 7 Langkah
Video: Tutorial Lengkap dan Review GPS Mini GF-07 GPS Mini Multifungsi untuk Lacak Lokasi dan Sadap Suara 2024, Oktober
Anonim
Sistem GPS
Sistem GPS
Sistem GPS
Sistem GPS
Sistem GPS
Sistem GPS

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

Mulai
Mulai
Mulai
Mulai
Mulai
Mulai
Mulai
Mulai

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

Hubungkan Modul GPS ke Raspberry Pi
Hubungkan Modul GPS ke Raspberry Pi
Hubungkan Modul GPS ke Raspberry Pi
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

Terima Data Dari Modul Penerima GPS
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

Hubungkan Layar ke Raspberry Pi
Hubungkan Layar ke Raspberry Pi
Hubungkan Layar ke Raspberry Pi
Hubungkan Layar 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

Atur Tampilan untuk Bekerja Dengan Raspberry Pi
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

Siapkan Mesin Status untuk Menampilkan Informasi GPS di Layar
Siapkan Mesin Status untuk Menampilkan Informasi GPS di Layar
Siapkan Mesin Status untuk Menampilkan Informasi GPS di Layar
Siapkan Mesin Status untuk Menampilkan Informasi GPS di Layar
Siapkan Mesin Status untuk Menampilkan Informasi GPS di Layar
Siapkan 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.

Direkomendasikan: