如何用OLED顯示器制作GPS設(shè)備
這個(gè)基于GPS的Arduino時(shí)鐘的一個(gè)主要用途是戶外探索,它可以作為一個(gè)緊湊的,一體化的工具來跟蹤時(shí)間,位置和運(yùn)動(dòng)數(shù)據(jù)。它也可以用于實(shí)地研究,在那里需要精確的GPS信息和時(shí)間戳數(shù)據(jù)進(jìn)行科學(xué)研究。這個(gè)拆解對(duì)業(yè)余愛好者和學(xué)生來說是一個(gè)很好的資源,所以讓我們開始吧!
硬件
按鈕的接線方式如下:
按鈕連接
OLED顯示器是另一個(gè)非常有用的組件,可用于廣泛的主題,涵蓋顯示輸入,GUI(圖形用戶界面)等等!線路是這樣的:
OLED布線
GPS模塊是市場(chǎng)上最方便、最簡(jiǎn)單的遠(yuǎn)程通信設(shè)備之一。雖然一些LoRa和其他GPS模塊可以遠(yuǎn)距離傳輸數(shù)據(jù),但在這種情況下NEO-6m僅用于提取數(shù)據(jù)。(在這里查看GPS模塊的快速概述)。下面是它是如何工作的總結(jié):
衛(wèi)星通信:接收來自GPS衛(wèi)星的信號(hào),以確定其在地球上的位置。
NMEA數(shù)據(jù)輸出:將包含位置、速度和時(shí)間數(shù)據(jù)的標(biāo)準(zhǔn)NMEA語句通過串行通信發(fā)送到Arduino。這些都是通過TinyGPS++庫翻譯的。
天線要求:需要外置或內(nèi)置天線才能有效接收衛(wèi)星信號(hào)。
以下是Neo-6m GPS模塊的布線:
全球定位系統(tǒng)(GPS)布線
出于本設(shè)備的目的,我們將只使用4個(gè)按鈕中的3個(gè)(示意圖如下),但其中任何數(shù)量的按鈕都可以用于任何其他應(yīng)用程序(在評(píng)論中分享它們,我很想看到它們)。
下面是完整的示意圖:
代碼
在我們開始之前,從這里下載u8g zip庫并從Sketch > Include Libraries > add . zip library將其添加到Arduino項(xiàng)目中心。關(guān)于安裝TinyGPS++庫的說明可以在這里找到。
讓我們一步一步地分解代碼:
變量聲明:
?設(shè)置u8g庫以優(yōu)化速度和刷新率。
?設(shè)置GPS設(shè)備,RX在引腳10上,TX在引腳11上。
?pd_bitmap_Aerospace_qr_code:存儲(chǔ)任何你想要的64x64 QR碼的信息(看看下面如何制作64x64 QR碼)。
?bitmap_icon_……:為每個(gè)菜單項(xiàng)存儲(chǔ)16x16像素的圖標(biāo)信息
?Bitmap_icons[8]:按照菜單在屏幕上顯示的順序存儲(chǔ)菜單
?Bitmap_scrollbar_background[]:顯示光標(biāo)位置的邊欄
?Bitmap_item_sel_outline:顯示在項(xiàng)目周圍的光暈
?不同按鈕的引腳聲明(在引腳10上添加另一個(gè)按鈕以用于其他用例)
?button_up_clicked, button_select_clicked和button down clicked:對(duì)按鈕的變量進(jìn)行拆分(單擊時(shí)為1,釋放時(shí)為0)
?item_selected, item_sel_previous & item_sel_next:跟蹤光標(biāo)在菜單列表上的位置
?current_screen:從menu_items數(shù)組中跟蹤當(dāng)前屏幕索引。
?如果數(shù)據(jù)有效且更新,這些變量存儲(chǔ)來自GPS模塊的數(shù)據(jù)。
?進(jìn)度:跟蹤加載屏幕上的進(jìn)度條。
?buffer:構(gòu)建字符串在進(jìn)度條上顯示進(jìn)度。
循環(huán)()函數(shù):
?按鈕導(dǎo)航:它檢查按鈕按下(BUTTON_UP_PIN, BUTTON_DOWN_PIN, BUTTON_SELECT_PI),并相應(yīng)地調(diào)整item_selected索引。例如,按“上”會(huì)減少所選項(xiàng)目,而按“下”會(huì)增加所選項(xiàng)目。當(dāng)?shù)竭_(dá)菜單末尾時(shí),所選內(nèi)容環(huán)繞。
?debating: button_up_clicked, button_down_clicked和button_select_clicked標(biāo)志用于防止重復(fù)的按鈕按下被注冊(cè)多次。一旦按鈕被釋放,標(biāo)志被重置,允許再次按下。
?屏幕導(dǎo)航:基于當(dāng)前屏幕(current_screen),當(dāng)按下“選擇”按鈕時(shí),它在不同的屏幕之間切換。它要么轉(zhuǎn)到下一個(gè)屏幕(menu_item),要么返回到菜單屏幕(current_screen = 0)。
?菜單顯示:如果current_screen == 0,則顯示菜單。它使用u8g圖形庫繪制上一菜單項(xiàng)、當(dāng)前菜單項(xiàng)和下一菜單項(xiàng)及其相應(yīng)的圖標(biāo),并更新滾動(dòng)條以反映所選項(xiàng)。
?GPS數(shù)據(jù)顯示:在特定的屏幕上(current_screen == 2用于位置/速度/高度,current_screen == 3用于時(shí)間/日期),程序讀取GPS數(shù)據(jù)并在顯示器上顯示值(緯度,經(jīng)度,速度,高度,時(shí)間和日期)。它在顯示GPS數(shù)據(jù)之前檢查其有效性。
?QR碼顯示:如果current_screen == 1,則使用u8 . drawbitmapp()函數(shù)在屏幕上顯示QR碼的位圖圖像。
PrintSomething()函數(shù):
?打印通過使用string()類聲明將float轉(zhuǎn)換為字符串而收集的數(shù)據(jù)。
?使用c_str()函數(shù)將字符串轉(zhuǎn)換為char[]以在OLED顯示器上打印。
getData()函數(shù):
?使用gps.speed.isValid()檢查速度是否有效,如果有效,則將速度設(shè)置為以米每秒為單位測(cè)量的速度。
注意:所有其他get()函數(shù)的工作方式相同。
QR碼說明
?將鏈接減少到不超過15個(gè)字符。
?去barcode.tec-it.com并生成一個(gè)32 × 32像素的條形碼。
?使用這個(gè)圖像到cpp網(wǎng)站將QR碼轉(zhuǎn)換為數(shù)組
?復(fù)制/粘貼這個(gè)數(shù)組到epd_bitmap_qr_code
本文編譯自hackster.io