- Bahan Yang Digunakan
- Modul GPS NEO6M
- Paparan OLED I2C 1.3 inci
- Rajah Litar
- Pengaturcaraan Arduino untuk Arduino OLED Speedometer
Speedometer digunakan untuk mengukur kelajuan perjalanan kenderaan. Kami sebelumnya menggunakan sensor IR dan sensor ruang untuk membina speedometer Analog dan speedometer digital masing-masing. Hari ini kita akan menggunakan GPS untuk mengukur kelajuan kenderaan yang bergerak. Speedometer GPS lebih tepat daripada speedometer standard kerana ia dapat mengesan kenderaan secara berterusan dan dapat mengira kelajuannya. Teknologi GPS digunakan secara meluas dalam telefon pintar dan kenderaan untuk navigasi dan amaran lalu lintas.
Dalam projek ini, kami akan membina speedometer Arduino GPS menggunakan modul GPS NEO6M dengan paparan OLED.
Bahan Yang Digunakan
- Arduino Nano
- Modul GPS NEO6M
- Paparan OLED I2C 1.3 inci
- Papan roti
- Menyambung Pelompat
Modul GPS NEO6M
Di sini kita menggunakan modul GPS NEO6M. Modul GPS NEO-6M adalah penerima GPS yang popular dengan antena seramik terbina dalam, yang memberikan kemampuan carian satelit yang kuat. Penerima ini mempunyai keupayaan untuk merasakan lokasi dan mengesan hingga 22 satelit dan mengenal pasti lokasi di mana sahaja di dunia. Dengan penunjuk isyarat on-board, kita dapat memantau status rangkaian modul. Ia mempunyai bateri sandaran data sehingga modul dapat menyimpan data ketika kuasa utama dimatikan secara tidak sengaja.
Inti inti dalam modul penerima GPS adalah cip GPS NEO-6M dari u-blox. Ia dapat mengesan hingga 22 satelit pada 50 saluran dan mempunyai tahap kepekaan yang sangat mengagumkan iaitu -161 dBm. Enjin kedudukan u-blox 6 saluran 50 ini mempunyai Time-To-First-Fix (TTFF) kurang dari 1 saat. Modul ini menyokong kadar baud dari 4800-230400 bps dan mempunyai baud lalai 9600.
Ciri-ciri:
- Voltan operasi: (2.7-3.6) V DC
- Semasa Operasi: 67 mA
- Baud rate: 4800-230400 bps (9600 Lalai)
- Protokol Komunikasi: NEMA
- Antara muka: UART
- Antena luaran dan EEPROM terbina dalam.
Pinout Modul GPS:
- VCC: Pin voltan input Modul
- GND: Pin tanah
- RX, TX: Pin komunikasi UART dengan Mikrokontroler
Kami sebelum ini menghubungkan GPS dengan Arduino dan membina banyak projek menggunakan modul GPS termasuk penjejakan kenderaan.
Paparan OLED I2C 1.3 inci
Istilah OLED adalah singkatan dari " Organic Light emitting diode", ia menggunakan teknologi yang sama dengan yang digunakan di kebanyakan televisyen kita tetapi mempunyai piksel yang lebih sedikit daripada mereka. Sangat menyeronokkan apabila modul paparan yang kelihatan hebat ini dihubungkan dengan Arduino kerana ini akan menjadikan projek kami kelihatan keren. Kami telah membahas Artikel lengkap mengenai paparan OLED dan jenisnya di sini. Di sini, kami menggunakan paparan OLED 1.28 "OLED Monochrome 4-pin SH1106. Paparan ini hanya dapat berfungsi dengan mod I2C.
Spesifikasi teknikal:
- IC Pemandu: SH1106
- Voltan Input: 3.3V-5V DC
- Resolusi: 128x64
- Antara muka: I2C
- Penggunaan semasa: 8 mA
- Warna piksel: Biru
- Sudut pandang:> 160 darjah
Huraian Pin:
VCC: Bekalan kuasa input 3.3-5V DC
GND: Pin rujukan tanah
SCL: Pin jam antara muka I2C
SDA: Pin Data Bersiri antara muka I2C
Komuniti Arduino telah memberi kami banyak Perpustakaan yang boleh digunakan secara langsung untuk menjadikannya lebih mudah. Saya mencuba beberapa perpustakaan dan mendapati bahawa Perpustakaan Adafruit_SH1106.h sangat mudah digunakan dan mempunyai beberapa pilihan grafik, oleh itu kami akan menggunakan yang sama dalam tutorial ini.
OLED kelihatan sangat keren dan dapat dihubungkan dengan mudah dengan pengawal mikro lain untuk membina beberapa projek menarik:
- Paparan OLED SSD1306 antara muka dengan Raspberry Pi
- Memaparkan Paparan OLED SSD1306 dengan Arduino
- Jam Internet menggunakan Paparan ESP32 dan OLED
- Pengawal Suhu AC automatik menggunakan Arduino, DHT11 dan IR Blaster
Rajah Litar
Gambarajah litar untuk speedometer Arduino GPS menggunakan OLED diberikan di bawah.
Persiapan yang lengkap akan kelihatan seperti di bawah:
Pengaturcaraan Arduino untuk Arduino OLED Speedometer
Kod lengkap projek diberikan di bahagian bawah tutorial. Di sini kami menerangkan kod lengkap demi baris.
Pertama sekali, sertakan semua perpustakaan. Di sini perpustakaan TinyGPS ++. H digunakan untuk mendapatkan koordinat GPS menggunakan modul penerima GPS dan Adafruit_SH1106.h digunakan untuk OLED.
#sertakan
Kemudian, alamat OLED I2C ditakrifkan, yang boleh berupa OX3C atau OX3D, ini adalah OX3C dalam kes saya. Juga, pin Reset pada paparan harus ditentukan. Dalam kes saya, ia didefinisikan sebagai -1, kerana paparan berkongsi pin Reset Arduino.
#tentukan OLED_ADDRESS 0x3C #tentukan OLED_RESET -1 Adafruit_SH1106 paparan (OLED_RESET);
Seterusnya, objek untuk kelas TinyGPSPlus dan Softwareserial ditakrifkan seperti gambar di bawah. Kelas siri perisian memerlukan pin Arduino no. untuk komunikasi bersiri, yang ditakrifkan sebagai 2 dan 3 di sini.
int RX = 2, TX = 3; TinyGPSPlus gps; SoftwareSerial gpssoft (RX, TX);
Di dalam persediaan () , inisialisasi dilakukan untuk komunikasi Serial dan OLED. Kadar baud lalai untuk komunikasi bersiri Software ditakrifkan sebagai 9600. Sini SH1106_SWITCHCAPVCC digunakan untuk menjana voltan paparan dari 3.3V dalaman dan display.begin fungsi digunakan untuk memulakan paparan.
persediaan tidak sah () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
Di dalam sementara loop sebenar, data bersiri yang diterima disahkan, jika isyarat GPS yang sah diterima, maka displaypeed () dipanggil untuk menunjukkan nilai kelajuan pada OLED.
manakala (gpssoft.available ()> 0) if (gps.encode (gpssoft.read ())) displaypeed ();
Di dalam displayspeed () fungsi, data kelajuan dari modul GPS diperiksa menggunakan fungsi gps.speed.isValid () dan jika ia mengembalikan nilai benar, maka nilai kelajuan yang dipaparkan pada paparan OLED. Di sini ukuran teks pada OLED ditentukan menggunakan fungsi display.setTextSize dan kedudukan kursor ditentukan menggunakan fungsi display.setCursor . Data kelajuan dari modul GPS disahkod menggunakan fungsi gps.speed.kmph () dan akhirnya ia dipaparkan menggunakan display.display () .
jika (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); display.print (gps.speed.kmph ()); paparan.display (); }
Akhirnya, muat naik kod di Arduino Uno dan masukkan sistem dalam kenderaan yang bergerak, dan anda dapat melihat kelajuan pada paparan OLED seperti yang ditunjukkan pada gambar di bawah.
Kod lengkap dengan video demo diberikan di bawah.