




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第2章國內外現狀2.1國內研究現狀在中國,越來越多的家庭選擇飼養小貓小狗等寵物。不過,丟失的情況越來越多,相對應的丟器卻不多。因此,基于單片機設計了一款寵物防走失系統,當寵物距離主人超過一定范圍時,藍牙模塊會發出信號,并且根據信號強度來判斷寵物距離主人的遠近。此時,如果寵物偏離預設區域,則GPS模塊會啟動實時定位功能,并將寵物位置信息發送到主人的手機上。同時,報警模塊也會發出聲音和光線提示,以便主人能夠及時察覺寵物走失的情況。在測試中,模擬了多種寵物走失的情況,包括寵物意外跑出門口、逃離繩索等,結果顯示該系統能夠準確地監測寵物位置,并及時向主人發出警報。因此,該系統可以幫助寵物主人及時發現寵物走失,從而盡快找回寵物,保障寵物的安全。目前,寵物防丟器的研究主要集中于以下幾方面:優化傳感器設計,研究人員正在嘗試開發新型壓力傳感器、聲音傳感器等,以獲得更準確的信息,提高定位精度和穩定性;結合機器學習和數據挖掘等技術,對采集到的數據進行分析和處理,以提高設備的準確性和穩定性;更新網絡通信技術,隨著物聯網技術的發展,研究人員開始嘗試使用物聯網技術,如NB-IoT、LoRa等,以提高系統的可靠性和覆蓋范圍。同時,在設計寵物防丟器時必須重視數據的安全和隱私保護。因此,研究人員正在探索各種不同的技術,如加密傳輸、身份驗證等,來保護用戶數據的安全和隱私。此外,還有部分研究人員致力于設計更高效的電源管理系統,以延長設備的使用壽命。2.2國外研究現狀FargrowingLiao等人提出了一種寵物防丟可穿戴設備,該設計的可穿戴設備為寵物防丟提供了全新的解決方案。傳統的寵物定位器通常需要用戶手動查找,而且其精確度較低,很難保證準確性。相比之下,該可穿戴設備不僅具有更高的精確度,而且還能夠快速響應并提供即時的位置信息。這對于那些經常帶寵物出門的人來說是非常重要的,特別是在公共場合或者陌生環境中,這種設備可以幫助主人及時尋找和控制寵物,避免寵物丟失造成的安全隱患和財產損失。其語音識別功能使得用戶可以更加便捷地控制設備,不需要進行手動操作,進一步提高了用戶體驗。寵物防丟可穿戴設備解決了寵物丟失、找回困難的問題,提供了一個高效、準確的解決方案,然而,寵物防丟定位系統還存在一些問題,比如設備成本較高、電池壽命短、信號覆蓋范圍有限等。此外,一些用戶對個人隱私和數據安全存在擔憂,因為這些設備需要收集寵物和主人的位置信息。總體而言,寵物防丟定位系統在未來有很大的發展空間,可以通過技術創新和更好的模塊搭配來解決現有的問題。第3章整體設計3.1硬件設計3.1.1單片機最小系統本設計選擇了STM32F103RCT6單片機作為主控芯片進行設計。本研究通過對比使用51單片機和該單片機實現GPS數據接收的效果,得出了使用該單片機更為適合的結論。下面將詳細介紹兩種單片機在GPS數據接收方面的差異。由于GPS數據需要進行緩存和編碼轉換,因此需要較大的內存和快速的運算速度。然而,51單片機內存較小,只有幾十KB,且運算速度較慢,在處理復雜任務時容易出現卡頓、延遲等問題,難以勝任GPS數據接收的要求。例如,在處理高精度GPS定位時,由于其需要頻繁地進行位移計算和衛星信號解算,51單片機計算速度會變得較慢,從而影響定位精度。相比之下,該單片機擁有更大的程序存儲容量、隨機存儲容量和更快的運行速度,能夠滿足GPS對于緩存和編碼轉換的內存和速度要求,從而更好地完成GPS數據接收的任務。例如,在處理高精度GPS定位時,該單片機的計算速度更快,能夠更加穩定地進行位移計算和衛星信號解算,從而提高定位精度。因此,使用該單片機比起51單片機來實現GPS數據接收更為適合。尤其是對于需要緩存和編碼轉換等操作的本設計,STM32單片機更加適合。STM32主控芯片的實物圖如圖3-1所示。圖3-1STM32主控芯片圖在市場上,有多種型號的單片機可供選擇,從低端的8位51系列控制器到基于ARM內核的32位控制器不等。考慮到單片機需要接入多個模塊,需要存儲多模塊的指令,因此需要單片機擁有足夠多的引腳和更大的儲存容量。同時,在對多個模塊進行信號管理和傳輸時,單片機需要擁有更快的執行速度和良好的信號處理性能。基于這些因素,控制系統的主控芯片決定選擇ST公司的STM32F103單片機,因為該芯片性能優異,儲存容量大,開發環境相對簡單,而且價格便宜。通過在單片機上編寫程序,控制系統可以不僅顯示經緯度和連接狀態,還可以實現信息的收發,并支持語音播報和手機綁定等功能,滿足大多數客戶的需求。為了滿足高性能、易于開發、低功耗、高可靠性等要求,STM32系列采用了ARMCortex-M內核,專門設計用于嵌入式系統。其中,STM32F1系列是其主要的產品系列之一,它還具備三個十二位十六通道的us級A/D轉換器,不同型號的單片機,擁有不同數量的最多高達112個端口,且所有端口均可映射到16個外部中斷向量。可進行雙采樣和保持信號,以及一個十二位雙通道D/A轉換器。研究通過實驗驗證了數字電路和模擬電路需要接地隔離的結論,并采用了電阻隔離來解決干擾問題。在測試中,我們使用了一個電子系統,其中包含數字和模擬電路。當數字電路和模擬電路共地時,數字電路會出現錯誤。為了解決這個問題,我們在數字電路和模擬電路之間加入了0歐姆電阻。測試結果表明,在加入電阻后,數字電路出現的錯誤明顯減少。我們還測試了其他隔離方法,例如磁珠隔離和電感隔離,但發現電阻隔離是最有效的方法。因此,本研究建議在數字電路和模擬電路接地時采用電阻隔離來確保電路運行穩定。該系列產品還采用ECOPACK封裝。單片機系統及引腳分配電路圖如圖3-2所示。圖3-2單片機最小系統電路圖3.1.2電源系統設計我們的設計方案采用了USB供電方式。由于我們的系統包含了感性負載和數字設備兩部分,我們需要分別給它們供電,以避免相互影響。具體地,我們采用了分離電源的設計,將電源分別給感性負載和數字設備供電,并通過USB接口實現供電。對于感性負載部分,我們采用了線性穩壓器,它能夠提供非常穩定的輸出電壓,并且在靜態工作時無需任何外部元件。這種設計方式簡單可靠、成本較低,適合傳感器等設備的供電。對于數字設備部分,由于其對功率波動比較敏感,因此我們采用了開關穩壓器進行供電。這種穩壓器能夠提供高效、高精度的供電,可以滿足我們的要求。此外,為了保證系統的穩定性,我們還采用了輸入輸出濾波電容和TVS二極管等器件,以抑制干擾和過壓等問題。我們的設計方案采用了USB供電方式,并采用了分離電源的設計,將電源分別給感性負載和數字設備供電,以保證系統的穩定性和可靠性。題。源接口和開關電路如圖3-3所示。圖3-3電源電路3.1.3顯示電路設計OLED屏幕因其價格低廉、廣泛應用和高性價比而成為常用顯示屏。因此,在本次設計中我們首選OLED屏幕,選用了OLED12864型號,其分辨率為128*64,屏幕尺寸為0.96寸。這使得它具有良好的便攜性和顯示性能,在本次電路原理圖設計中,我們將SCL和SDA引腳分別與主控芯片的PB8和PB9引腳相連,以實現各參數的顯示功能。圖3-4OLED顯示屏實物圖圖3-5顯示模塊電路原理圖通過OLED顯示屏,可以顯示經緯度信息和藍牙連接狀態,幫助我們進行信息的獲取。3.1.4短信模塊電路設計GSM模塊可實現發送語音通話、GPRS數據傳輸以及短信等功能。SIM800L模塊還集成了藍牙、GPS定位和LBS基站定位等多種功能。這些功能都符合本設計的需要。本設計中,GSM模塊將寵物位置信息傳輸到主人手機上,以便主人及時發現寵物走失和進行定位。圖3-6SIM800LSIM模塊由1N4007二極管、插卡SIM板和電容組成,SIM800L是一款功能強大、價格低、體積不大、可以滿足不同需求的四頻GSM/GPRS模塊。電容和二極管用于穩壓降壓,以防總體電路電壓過高造成SIM模塊損壞。其原理圖如圖3-7所示,SIM800L的特性包括:1.壓范圍為3.4V至4.4V2.頻段分為GSM850、EGSM900、DCS1800和PCS19003.可以通過AT命令設置頻段,4.內置TCP/IP協議。圖3-7GSM短信模塊電路設計通過SIM800L可以實現短信的收發,從而遠距離的獲取寵物的信息。3.1.5GPS模塊電路設計本設計采用以GPS定位為主、基站定位為輔的定位方式,在無法接收到GPS信號時利用基站進行定位。在現實場景中,GPS信號常常因城市建筑物遮擋或室內環境等原因而受干擾或無法接收到。因此,本設計選擇采用基站定位作為輔助定位方式。例如,當車輛行駛在隧道、高樓林立的城市街道和密閉空間中,GPS信號可能會受到影響而無法接收到,這時就需要利用基站定位來確定位置信息。同時,在一些偏遠地區或者室內場所,由于GPS信號接收不到,只能通過基站定位來實現定位功能。此外,基站定位也可以輔助提高導航系統的定位精度,比如在百度地圖中,除了使用GPS信號進行定位,還可以通過Wi-Fi定位和基站定位來獲得更加準確的定位結果。因此,本設計采用以GPS定位為主、基站定位為輔的定位方式,能夠提高定位的準確性和適用性,在無法接收到GPS信號時,依然可以保證定位功能的正常使用。圖3-8GPS模塊工作原理圖1978年2月22日,第一顆GPS試驗衛星成功進入軌道并開始運行,這標志著以導航衛星為動態已知點的無線電導航定位新時代的開創。這些衛星在距離地表20200公里的軌道上發送GPS信號,并由地面控制中心監控和控制其運行。在1973年至1979年之間,共發射了4顆設計壽命為5年的BlockI試驗衛星。GPS定位是通過基于時間算法實現的。衛星會不斷地廣播當前的時間和位置信息,而利用電磁波的傳輸速度是一定的,接收器可以通過不同衛星信號傳遞到的時間差計算出距離不同衛星的距離,并根據這些數據綜合推斷出接收器所在的位置信息。這是一種空間的距離交匯原理,需要至少四顆衛星才能進行定位,而衛星數量越多,獲得的位置信息就越精確。GPS定位設備的主要結構包括天線單元和接收單元兩大部分。這里介紹的是使用u-blox公司的VK2828U7GPS定位模塊進行定位。這款模塊具有高靈敏度、低功耗、輕便小巧的特點,并且內置電池,可以在掉電情況下保存衛星數據。GPS衛星每顆都會發射兩個頻率的載波信號,分別是L1(1575.42MHz)和L2(1227.60MHz),而本模塊使用的信號是L1。該模塊提供多種接口:包括1個UART接口、1個USBV2.0全速12Mbit/s接口,定位數據更新速率為每秒5次。1個DDC接口和1個SPI接口,同時,該模塊支持NMEA和UBX二進制協議。串口和I/O電壓均為3V電平,數字輸入輸出接口可以設置不同的時鐘頻率。設有一個外部中斷輸入接口。VK2828U7是一種高精度GPS模塊,大多數情況下被用于定位和導航應用。它采用了全球通用的串行通訊協議,因此可以很容易地集成到各種電子設備中。該模塊使用現代化的GPS技術,可以在任何天氣條件下進行準確的位置測量。VK2828U7的設計非常簡單,它由一個小型PCB板組成,尺寸大約為25mmx25mm,并且帶有一個內置的天線。這個小巧的設計使得它非常適合嵌入式系統、移動設備或者車輛中。此外,VK2828U7還具有低功耗特性,因此其使用壽命相當長,適用于長時間運行的應用場景。VK2828U7模塊支持多種定位模式,包括熱啟動、暖啟動和冷啟動。熱啟動模式下,它只需要幾秒鐘就可以重新定位,而在冷啟動模式下,可能需要幾分鐘的時間才能重新定位。此外,它還支持WAAS(廣域增強系統)、EGNOS(歐洲地區導航增強系統)和MSAS(日本多功能衛星輔助系統),這些系統能夠提供更高的定位精度和可靠性。VK2828U7模塊還支持異步串行通訊協議,因此可以很容易地與各種微控制器、單片機或其他設備進行通信。它還具有強大的數據處理能力,可以在模塊內部計算并輸出經緯度、速度、方向等信息。此外,它還支持多個數據輸出格式,包括NMEA-0183協議和二進制協議。這些輸出格式可以根據不同的應用程序和用戶需求進行選擇和配置。圖3-9VK2828U7定位模塊這款GPS模塊具有小巧的體積和優異的性能,其增加的放大電路有利于快速搜星,可配備多種有源天線,同時集成了RF射頻芯片、基帶芯片和核心CPU。模塊自帶SMA接口,并且PPS引腳連接到了狀態指示燈,常亮表示模塊已開始工作但未實現定位,閃爍則表示已定位成功。該模塊采用RT9193芯片組成電源模塊,提供DDR供電總線調壓,控制內存供電并采用標準的NMEA-0183數據輸出格式。利用VK2828U7定位模塊,可實現寵物位置的獲取。GPS模塊電路示意圖見圖3-10。圖3-10GPS模塊接口圖3.1.6藍牙模塊藍牙技術是一種適用于近距離通信的無線通信技術,它的成本較低且具有廣泛的應用場景,一般而言,其可靠連接范圍在10米左右。在個人電子設備和物聯網方面,藍牙得到了廣泛的應用。本次設計選用的是HC-06,該產品具有指令簡單、體積小和供電靈活等特點。此外,HC-06采用V2.0藍牙協議,在與單片機共用5V電源時,省去了匹配藍牙模塊電壓而降壓限流的操作。圖3-11HC-06藍牙模塊在現代智能設備的普及和物聯網的發展下,藍牙技術在數據傳輸中的應用越來越廣泛。其中,HC-06藍牙模塊作為一種低成本、易于使用的藍牙模塊,受到了廣泛的關注和應用。HC-06藍牙模塊具有6個引腳,包括RXD、TXD、VCC、GND和EN。其中,RXD和TXD分別用于串行通信的接收和發送;VCC和GND則是電源引腳,EN是使能腳,用于控制模塊的工作狀態。通過這些引腳的連接,HC-06藍牙模塊可以實現與手機端的數據傳輸,并且支持自動連接模式和AT指令設置模式。在自動連接模式下,當手機端與模塊連接時,模塊會自動進行配對和連接,方便用戶的使用;而在AT指令設置模式下,用戶可以通過串口發送AT指令,對模塊進行各種參數的設置和配置,從而滿足不同場景下的需求。比如將GPS模塊獲取的經緯度信息發送到手機端。下面是藍牙模塊的電路圖(見圖3-12)。圖3-12藍牙模塊電路3.1.7語音報警電路語音合成技術是語音播報系統的核心技術,就是可以理解為我們可以把任意的文字信息用語音的方式表達出來。它的原理是將我們給的文字和符號的信息進行一些處理和轉化后,用模仿人說話的方式表達出來。如圖3-13所示。圖3-13語音播報模塊電路圖通過WT588D芯片,可以實現語音播報的功能,例如“主人,我在這里”,幫助寵物主人更快準確的知道寵物的位置。WT588D的實物圖如圖3-14所示。圖3-14WT588D3.2軟件設計3.2.1軟件介紹Keil5可以幫助用戶更好地進行軟件開發,提高開發效率,減少出錯概率。以下將舉例說明Keil5在軟件開發中的實用性。首先,Keil5相比于Keil4有著更快的SWD下載速度。根據測試,Keil5的SWD下載速度比Keil4快五倍以上,這對于大型項目來說是非常重要的,可以顯著縮短下載時間。其次,在安裝Keil5時需要注意路徑必須使用英文路徑,并且不能與Keil4軟件互相沖突,這也是一個需要特別注意的細節。最后,在使用Keil5時需要添加芯片包,這個操作可以通過包管理器來完成,方便且高效。總之,Keil5是一個非常實用、全面、完整的C語言軟件開發系統,它的出現為程序設計師們帶來了很多便利。通過Keil5,用戶可以輕松完成代碼編寫、調試、燒錄等工作,從而更好地實現軟件開發目標。Keil5的軟件界面如圖3-15所示:
圖3-15Keil5軟件界面3.2.2系統主程序主程序的設計流程第一步進行各模塊初始化,然后開始調用各個子程序,主程序如下開始各模塊初始化調用子程序結束開始各模塊初始化調用子程序結束
3.2.3語音識別子程序設計我們采用LD3320語音識別模塊進行語音指令的識別。包括麥克風輸入、音頻輸入和串口輸入等,可以滿足不同場景下的需求。在識別模式下,LD3320語音模塊能夠準確地識別語音指令,該模塊采用了高性能數字信號處理器和專業的語音算法,具有較高的識別準確率和響應速度,并對其進行信息處理后執行相應的動作控制。具體的語音識別子程序設計如下圖所示:語音識別指令執行指令信息處理Y語音識別指令執行指令信息處理Y開始各模塊初始化語音模塊進入識別模式結束N3.2.4定位模式的程序設計該系統采用了兩種定位技術:LBS基站定位和GPS衛星定位。由于GPS定位在室內使用效果不佳,因此在室內時需要通過基站定位等其它定位來獲取位置信息。在設計程序時,系統會首先嘗試使用GPS定位,如果接收到有效的GPS數據,則使用GPS定位。如果連續20秒以上未能接收到有效的GPS數據,則系統會切換到基站定位,并進行定位處理。當系統再次接收到有效的GPS數據時,重新切換回GPS定位,并重新計時,如此循環。定位模式處理函數的程序流程圖如下圖所示:否是解析GPS信息是否接收到GPS信息是否有20秒沒接收到GPS數據否是解析GPS信息是否接收到GPS信息是否有20秒沒接收到GPS數據解析GPS信息獲取基站定位信息經緯度數據更新數據發送標志置位20秒定時重置是否是有效的GPS信息是是否否3.2.5SIM800L模塊子程序本設計使用SIM800L模塊和手機進行通信,通過串口與單片機進行通信,并最終實現了傳感器數據的發送和接收。在具體實現過程中,我們將SIM800L模塊連接到無線網絡,此后我們設定了標志位以確定有效數據的一致性,并在確認校驗正確后進行數據解析。隨后我們讀取短信模塊的數據并發送傳感器數據,在確保數據幀正確性后,我們將傳感器數據解析并發送,最終將數據顯示在手機端接收。例如,我們在一個智能家居系統中應用本設計。該智能家居系統包括多個傳感器,如溫度、濕度、光線等。我們將SIM800L模塊與單片機相連,并設置標志位以確保有效數據的一致性。一旦傳感器數據已被讀取并經過了適當的處理,它將被發送到SIM800L模塊,經過解析并發送至接收方,即用戶的手機。當接收方收到數據時,會立即將其解析并顯示出來。通過這種方式,用戶可以及時地監測智能家居系統中各種環境參數的變化,并做出相應的控制和調整。串口程序初始化流程如圖3-19所示。開始初始化串口工作方式開始初始化串口工作方式設置波特率使能中斷使能串口結束3.2.6藍牙模塊子程序首先,接通設備的電源,打開手機藍牙助手。接著,進行藍牙初始化,與此同時對設備也進行初始化。在手機端的藍牙助手中掃描設備的藍牙模塊并檢測連接狀態。搜索到設備藍牙模塊,選擇連接。如果未成功連接,可持續檢測并嘗試連接,直到成功為止。
建立連接數據收發斷開連接開始藍牙設備初始化系統初始化監測連接建立連接數據收發斷開連接開始藍牙設備初始化系統初始化監測連接連接上?掃描是否按鍵NNYY當前許多電子產品的控制系統往往被禁錮在封閉空間中,數據傳輸和交換大多采用自帶的串口。這種模式一旦系統存在問題,很難快速定位問題所在并將信息發送給用戶。出現錯誤時,僅能依賴系統報警信號來解決問題。因此,如何解決這個問題成為近年來的一大難題。直到藍牙技術的出現,為解決這一問題提供了一種解決方案。在本設計中,我們使用藍牙技術來實現系統數據的傳輸、采集和分析。。由于開發藍牙應用程序的難度較大,因此我們使用了開源藍牙助手應用程序。一旦兩個終端設備連接成功,我們就可以使用手機移動端進行數據發送和控制。
圖3-21藍牙助手app搜索界面圖3-22藍牙助手調試界面3.3系統設計總結總的來說,整個系統由嵌入式STM32、藍牙、全球定位系統GPS和全球移動通信系GSM統組成,其設計主要包括兩部分,底層程序設計和應用界面設計,系統的整體框架如圖3-23所示。圖3-23系統整體框架目前市場上有基于不同技術實現的多種防丟方案。其中,基于RFID(RadioFrequencyIdentification)技術的防丟方案需要搭配RFID標簽和讀卡器使用,通過2.4G無線射頻技術進行傳輸,可以實現較遠的傳輸距離,最遠可達100米左右。該方式的耗電量低,操作相對簡單,但預警距離無法隨意設置,需要特定硬件電路才能調控。另外一種主流的防丟技術是基于藍牙(Bluetooth)技術實現的,適用范圍更廣泛,并且預警距離可以靈活調整。藍牙防丟方案只需與智能手機連接即可使用,無需額外硬件支持,具有操作簡便、成本較低等優點。相比于RFID防丟技術,藍牙防丟技術的實現難度更低,功能也更為簡單靈活。針對我們的項目,我們決定采用藍牙技術來實現防丟功能。我們設計的防丟模式包括可控預警距離的防丟報警,在設備遠離我們一定距離時會發出警報提醒;同時,我們還設計了定位模式,可以隨時通過地圖實時定位、追蹤目標的位置。防丟報警不僅會在防丟設備端發出,同時也會通過雙向提醒方式通知手機端,更加高效地提高防丟效果。此外,我們還為防丟設備設計了一個按鍵,可以主動向指定手機發送短信請求幫助信息,提高了設備的求救能力。設計的基本功能主要體現在以下幾個方面:防丟模式下防丟目標在遠離我們一定距離時能發會警報提醒,其預警距離可控的防丟報警;定位模式下我們可以隨時隨地通過地圖實時定位、追蹤到目標當前位置;防丟報警不僅僅是防丟端的報警,手機端同樣會有提示的雙向提醒,能有效提高防丟效果;防丟端可以通過按鍵主動向指定手機發送短信請求幫助短信。第4章測試4.1硬件測試根據我們所學的知識,我們知道系統中最容易出現問題也是最重要的部分就是硬件電路。因此,在我的焊接過程中,我十分嚴謹和仔細,每一個動作都小心翼翼地完成,特別是在組裝電源時更是如此。主要有以下四個步驟:第一步:檢查。首先,選擇合適的元器件后,利用萬用表等儀器測量自己所選擇的元器件能否使用。第二步:焊接。在焊接時,要根據焊接元器件的類型和數量選擇不同的焊接方式和工具,并掌握正確的焊接技巧和方法。第三步:調試。在焊接剩下的元器件時,一定要注意芯片的引腳順序、LED的正負極等問題,完成后再將寫好的hex文件刻錄到單片機中。第四步:整合組裝。當所有模塊都焊接完成后,才可以組裝整個系統。在這一步中,我們也不能嫌麻煩,必須再次使用萬用表監測所有的功能模塊,檢測它們是否能正常運行。焊接完成的效果圖如圖4-1所示。圖4-1焊接完成效果圖
圖4-2實物正面圖4.2軟件測試這段文字中已經確定了本次設計所需的主控制器是STM32F103C8T6,開發環境是KEIL5。根據4.1內容,軟件調試是在KEIL5MDK平臺上進行的,目的是為了解決在編譯過程中出現的問題。在按照事先制定好的步驟進行操作時,需要先寫好一個小的模塊,然后點擊按鈕進行編譯,逐步完善直至達到自己所理想的效果。圖4-3KEIL5MDK軟件最終調試圖通過軟硬件的系統設計,將最終編寫的程序通過燒錄器下載到單片機,內容如圖4-4所示。
圖4-4KEIL5MDK選項調試圖然后,我們再點擊Debug選項卡,設置為如圖4-5所示。圖4-5Debug選項調試圖先將ST-link連接到STM32的調試接口,設置完成后,點擊Download按鈕就可以進行下載,下載完成界面效果如圖4-6所示。圖4-6下載調試結果圖4.3系統調試硬硬件整體測試是確保電子系統能夠按照設計要求進行工作的重要步驟。它通常包括靜態調試和動態調試兩種主要方法,以確認電路板、模塊或整個系統沒有任何設計或制造缺陷。靜態調試主要是通過觀察、測量和檢查來驗證系統的正確性和一致性,其中有四種方式可供選擇。第一種方法是肉眼觀察,它是最簡單但也最基本的方法之一。通過檢查電路板上是否存在明顯的焊接錯誤、短路或開路等問題,可以初步判斷出問題所在。例如,當電路板上的元器件安裝不正確時,在肉眼觀察下可以看到引腳不正確插入插槽的情況。第二種方法是使用萬用表,這是一種非常常見的電子測試工具。通過測量電路板各個點的電壓、電流和電阻等參數,可以確定元器件的工作狀態和電路的連通性。例如,在測量電路板上一個IC芯片的電源電壓時,如果讀數偏離了預期值,就可以懷疑是電源線有問題。第三種方法是上電檢查,它適用于那些需要通過電源供電才能正常工作的電路板。在此方法中,電路板被連接到一個穩定的電源,并使用萬用表來驗證各個部分的電壓、電流和功率等參數是否正常。例如,在上電檢查過程中,如果發現某些元件沒有工作,就可以通過測試確定其是否需要更換。第四種方法是綜合檢查測試,它是一種全面的靜態調試方法。它結合了前三種方法,通過肉眼觀察、使用萬用表和上電檢查等方式,系統地檢查電路板上每個元件的工作狀態,以保證整個系統的完整性和正確性。例如,在綜合檢查測試中,可以通過肉眼觀察并使用萬用表測量電路板上所有元器件的引腳連接,然后再對整個系統進行上電檢查,以驗證所有元器件的工作狀態。除了靜態調試外,動態調試也是確保電子系統能夠按照設計要求進行工作的重要步驟之一。動態調試旨在保證元器件正常工作,提高系統性能。例如,通過使用信號發生器和示波器等儀器來模擬電路板上的實際工作條件,可以驗證電子系統的性能是否符合預期。4.4實物測試我通過仔細閱讀說明書并深入研究硬件電路,最終設計了一張令我滿意的電路板。在整個過程中,我按照先焊接小部件再焊接大部件的流程進行了制作。接著,我進行了上電測試,對各個模塊進行測試,各模塊正常運行,顯示屏顯示了藍牙狀態和經緯度信息,藍牙正常連接且語音播報功能正常,斷開藍牙后手機可以正常通過短信獲取經緯度信息,接下來為實物測試的具體步驟。第一步:接通電源按下開關按鍵,各模塊進入初始狀態。系統會顯示經緯度信息到顯示屏上,如下所示。圖4-7初始狀態圖4-8搜索設備第二步:打開手機軟件并開啟藍牙,點擊軟件右上角連接,系統通過藍牙并利用藍牙模塊子程序與手機app進行連接,輸入密碼1234進行連接。圖4-9連接藍牙第三步:打開“聊天界面”系統會通過VK2828U7定位模塊與GPS子程序獲取經緯度,并通過藍牙連接實時發送寵物GPS位置信息到手機屏幕。圖4-10獲取經緯度信息第四步:通過藍牙連接利用單片機控制wt588d語音模塊可實現語音播報。當按下按鍵后喇叭會播放提前設置好的語音圖4-11語音播報第五步:當寵物跑遠藍牙連接斷開,系統通過SIM800L模塊與GSM模塊子程序發送短信至用戶。圖4-12位置短信總結本次設計是關于一款GPS寵物防丟器,它集成了多個模塊,包括液晶顯示器和SIM800L模塊,它能夠記錄位置,并將位置信息發送出去,功能非常多樣化。這款防丟器的器件十分復雜,需要多個模塊和傳感器共同協作才能正常工作。這也給整個設計過程帶來了不少的問題。在本次設計中,首先開展了市場調查和國內外研究,了解了整體情況,針對需求設計了幾個主要模塊。在選擇器件時,綜合考慮了器件性能、實用性和性價比等因素,進行了多方面的評估。隨后,進行了硬件電路設計,充分考慮各個模塊之間的影響,并且更加注重基礎設計,從多個角度防止電路出錯,確保電平穩定。在準備階段,需要深入理解設計課題,并認真研究涉及到的內容,以掌握有關知識。通過查閱文獻來獲取研究資料,同時初步構想系統所要實現的功能,如定位、GPS傳感器技術、短信通訊技術等,并收集相關資料作為系統設計的素材。對軟件的各項功能進行具體分析,以明確開發目標。通過對文獻的深入研究,并運用歸納、演繹、分析、綜合、抽象、概括等方法,了解軟件和硬件開發的相關技術,并熟悉系統中各個功能模塊之間的關系,掌握系統工作的原理和本質,并確定開發流程。設計出一套優良的系統并規范地編寫程序,同時進行選型和查找相關硬件說明來設計硬件模塊,逐個確定各個模塊,例如單片機STM32F103C8T6、定位模塊、短信通訊模塊、按鍵輸入模塊、聲光報警模塊。在硬件設計完成后開始系統軟件部分的設計,通過模塊化編程進行調試和修改。設計出對應電路圖進行仿真,并用Keil5軟件編寫設計程序,并繪制軟件流程圖,進行模擬仿真。在調試的過程中,要全面檢查系統,以防止系統存在隱性的BUG,并及時調整參數,確保系統的嚴謹性。最后檢查系統是否能夠按照要求實現控制功能,并整理論文。這樣就能完成一個整體的寵物防丟位置查詢系統設計,并實現各個功能。通過本次畢業設計,我得以充分回顧和應用我在大學四年所學的知識。在老師和同學的悉心幫助下,雖然整個過程曲折坎坷,但是最終我們成功地完成了畢業設計,令我感到十分興奮和自豪。
參考文獻[1]黃偉成,金亮,盧俊碩,霍文豪,劉德強.基于STM32單片機的智能寵物屋的設計與實現[J].信息與電腦(理論版),2022,34(10):162-164.[2]曹妍.基于單片機的智能寵物喂食器設計[J].電子技術,2021,50(09):32-33.[3]劉偉峰,陳廷炫.基于單片機的智能寵物牽引繩設計[J].電子制作,2021(18):16-18+69.[4]張楠楠,盛賽男.基于單片機的寵物防走失系統設計[J].周口師范學院學報,2021,38(05):36-39.[5]黃建軍,邵中魁,陶仁和,姜耀林.基于單片機的位置實時精調伺服控制系統開發[J].精密制造與自動化,2021(03):17-21.[6]洪熠,徐婷,何睿,羅彬,朱蒼璐.基于STM32單片機的智能寵物系統的未來發展[J].電腦知識與技術,2021,17(14):199-200.[7]龍小麗,楊澤鋒,黃闖,李楷,宮占霞.基于單片機的智能寵物投食系統設計[J].信息技術與信息化,2021(04):235-237.[8]饒云,程莉,胡文雅,劉忠成.基于STM32單片機的GPS定位技術的應用[J].計算機與數字工程,2020,48(04):970-973.[9]張紅月.基于單片機的太陽能智能寵物喂養系統[J].電腦編程技巧與維護,2019(12):142-143+162.[10]亓浩名,王利,武毅等.基于單片機的GSM短信收發模塊設計[J].電子測試,2012,No.245(03):63-68.[11]王騏,何嘉斌.單片機控制GSM模塊實現短信收發的軟件設計[J].單片機與嵌入式系統應用,2005(01):63-66.[12]孔德力.基于STC52單片機GSM短信上報GPS經緯度信息的設計[J].南方農機,2019,50(24):130-131.[13]沈廣沖,禹平.基于GPS和短信技術的迷路報警器[J].通信電源技術,2010,27(05):66-67.DOI:10.19399/ki.tpt.2010.05.019.[14]AlM.SmartPetFeederSystemandBigDataProcessingtoPredictPetFoodShortage[J].TurkishJournalofComputerandMathematicsEducation(TURCOMAT),2021,12(3):1858-1865.[15]HeoSP,JeongS.InternetofThingsintheBathroom:SmartHealth-MonitoringBidetSystem[J].MathematicalProblemsinEngineering,2021,2021.[16]MMartínez-Zarzuela.CustomIMU-BasedWearableSystemforRobust2.4GHzWirelessHumanBodyPartsOrientationTrackingand3DMovementVisualizationonanAvatar[J].Sensors,2021,21.[17]ZahabyM,GaonjurP,FarajianS.LocationtrackinginGPSusingKalmanFilterthroughSMS[C]//IEEEEUROCON2009.IEEE,2009:1707-1711.[18]KristianY,ArmantoH,FransM.Utilizinggpsandsmsfortrackingandsecuritylockapplicationonandroidbasedphone[J].Procedia-SocialandBehavioralSciences,2012,57:299-305.[19]Al-MazloumA,OmerE,AbdullahMFA.GPSandSMS-basedchildtrackingsystemusingsmartphone[J].InternationalJournalofElectronicsandCommunicationEngineering,2014,7(2):238-241.[20]ReinauKH,HarderH,WeberM.TheSMS–GPS-Tripmethod:Anewmethodforcollectingtripinformationintravelbehaviorresearch[J].TelecommunicationsPolicy,2015,39(3-4):363-373.附錄A原理圖附錄B源程序main主程序#include"sys.h"#include"delay.h"#include"gpio.h"#include"OLED_I2C.h"#include"usart1.h"#include"usart2.h"#include"usart3.h"#include"stmflash.h"#include"wt588d.h"#include"timer.h"#include"GPS.h"#include<stdio.h>#include<stdlib.h>#include<string.h>#defineFLASH_SAVE_ADDR ((u32)0x0800F000) //設置FLASH保存地址(必須為偶數)#defineSTM32_RX1_BUF Usart1RecBuf#defineSTM32_Rx1Counter RxCounter#defineSTM32_RX1BUFF_SIZE USART1_RXBUFF_SIZE#defineSTM32_RX2_BUF Usart2RecBuf#defineSTM32_Rx2Counter Rx2Counter#defineSTM32_RX2BUFF_SIZE USART2_RXBUFF_SIZE#defineSTM32_RX3_BUF Usart3RecBuf#defineSTM32_Rx3Counter Rx3Counter#defineSTM32_RX3BUFF_SIZE USART3_RXBUFF_SIZE#defineGPS_STR_LEN48GPS_INFO GPS; //GPS信息結構體externunsignedcharrev_start;externunsignedcharrev_stop;externunsignedchargps_flag;u8GPS_rx_flag=0;u8gpsInitFlag=0;u8 sendFlag=0x00; //發短信標志u8 hc05sendFlag=0; //hc05發送數據標志u8 shuaxin=0; //刷新標志char PhoneNumber[11]; //手機號碼charConversionNum[44]; //手機號碼轉碼后存放數組unsignedchardisplay[32];//顯示緩存數組voidUsartRxBufClear(u8USARTx)//清除指定串口接收緩存{ switch(USARTx) { case(1):memset(STM32_RX1_BUF,0,STM32_RX1BUFF_SIZE);//清除緩存 STM32_Rx1Counter=0;break; case(2):memset(STM32_RX2_BUF,0,STM32_RX2BUFF_SIZE);//清除緩存 STM32_Rx2Counter=0;break; case(3):memset(STM32_RX3_BUF,0,STM32_RX3BUFF_SIZE);//清除緩存 STM32_Rx3Counter=0;break; default:break; }}voidpc13LED(void)//核心板上的PC13小燈閃爍{ PC13_LED=0; delay_ms(60); PC13_LED=1; delay_ms(60); PC13_LED=0; delay_ms(60); PC13_LED=1; delay_ms(60); PC13_LED=0; delay_ms(60); PC13_LED=1;}voidPhoneNumTranscoding(void)//手機號轉碼{ u8i=0; for(i=0;i<11;i++)//發送中文短信手機號必須轉碼,前面需要加上003 { ConversionNum[i*4+0]='0'; ConversionNum[i*4+1]='0'; ConversionNum[i*4+2]='3'; ConversionNum[i*4+3]=PhoneNumber[i];}}voidgsm_atcmd_send(char*at)//GSMAT指令發送函數{unsignedshortwaittry;//延時變量do{gsm_rev_start=0;//接收開始標志清零gsm_rev_okflag=0;//接收完成標志清零waittry=0;//延時變量清零uart1_send((unsignedchar*)at,0xFF);//串口發送內容while(waittry++<3000)//進入while延時{if(gsm_rev_okflag==1)//等待GSM返回OK{return;//返回出去}delay_ms(1);}}while(gsm_rev_okflag==0);}voidgsm_init(void)//gsm初始化{gsm_atcmd_send("AT\r\n");//測試用的delay_ms(1000);gsm_atcmd_send("AT+CSCS=\"UCS2\"\r\n");//設置為unicode編碼delay_ms(1000);gsm_atcmd_send("AT+CMGF=1\r\n");//設置為文本模式delay_ms(1000);gsm_atcmd_send("AT+CNMI=2,1\r\n");//來短信時提示,并存儲到模塊內存 delay_ms(1000); gsm_atcmd_send("AT+CMGD=1,4\r\n");//清除短信 delay_ms(1000); gsm_atcmd_send("AT+CSMP=17,0,2,25\r\n");//設置短信保留為5分鐘,發送中文 delay_ms(1000); gsm_atcmd_send("AT+COLP=1\r\n"); delay_ms(1000); gsm_atcmd_send("AT+CLIP=1\r\n");//來電顯示 delay_ms(1000);}/**number為對方手機號*/voidgsm_send_msg(constchar*number,char*content){u8len;unsignedchar gsm_at_txbuf[60];//GSMAT命令緩存區memset(gsm_at_txbuf,0,60);//緩存清零strncpy((char*)gsm_at_txbuf,"AT+CMGS=\"",9);//將AT+CMGS=\",復制到gsm_at_txbufmemcpy(gsm_at_txbuf+9,number,44);//將手機號碼復制到AT+CMGS=\"之后len=strlen((char*)gsm_at_txbuf);//獲取gsm_at_txbuf字符串長度gsm_at_txbuf[len]='"';//AT+CMGS=\"12345678901\"gsm_at_txbuf[len+1]='\r';gsm_at_txbuf[len+2]='\n';//gsm_at_txbuf最終的格式"AT+CMGS=\"手機號碼\"\r\n"uart1_send(gsm_at_txbuf,0xFF);//發送需要接受短信的手機號碼delay_ms(1000);uart1_send((unsignedchar*)content,0xFF); //發短信內容delay_ms(100);printf("%c",0x1a); //發送結束符號delay_ms(10);}voidsim800_send_sms(unsignedchar*content)//sim800發送短信{ u8send_error=0; u16send_count=0; gsm_rev_okflag=0; OLED_ShowStr(0,6,"SendSms...",2); gsm_send_msg(ConversionNum,(char*)content);//發送短信 delay_ms(2000);//延時2秒 delay_ms(2000);//延時2秒 delay_ms(2000);//延時2秒 while(gsm_rev_okflag==0)//等待返回OK指令 { if(send_count++>8000) { send_count=0; send_error=1; break; } delay_ms(1); }; gsm_rev_okflag=0; if(send_error==1) OLED_ShowStr(0,6,"SendFail!",2);//顯示發送超時 else OLED_ShowStr(0,6,"SendOK!",2); UsartRxBufClear(1); delay_ms(2000);//延時2秒 delay_ms(2000);//延時2秒 delay_ms(2000);//延時2秒 OLED_ShowStr(0,6,"",2);}voidreceive_sim800_com(void) //接收sim800的命令{ char *presult1=0,*presult2=0; char gsm_at_txbuf1[20]; char SmsNum[3],len=0; if(strstr(STM32_RX1_BUF,"83B753D66570636E")!=NULL)//接收到獲取數據命令 { UsartRxBufClear(1); //串口1清除緩存 pc13LED();sendFlag=0x02; //發送短信標志 } if(strstr(STM32_RX1_BUF,"+CMTI:")!=NULL)//接收到短信 { presult1=strstr(STM32_RX1_BUF,"+CMTI:"); if(strstr(presult1,"\"SM\",")!=NULL) { presult2=strstr(presult1,"\"SM\","); //+CMTI:"SM",1 delay_ms(50); memset(gsm_at_txbuf1,0,20); //清空發送緩存區 memset(SmsNum,0,3); //清空緩存區 strncpy(gsm_at_txbuf1,"AT+CMGR=",8);//將AT+CMGR=",復制到gsm_at_txbuf memcpy(SmsNum,presult2+5,2); memcpy(gsm_at_txbuf1+8,SmsNum,2); len=strlen(gsm_at_txbuf1); //獲取gsm_at_txbuf字符串長度 gsm_at_txbuf1[len]='\r'; gsm_at_txbuf1[len+1]='\n'; //gsm_at_txbuf最終的格式"AT+CMGR=XXX\r\n" uart1_send((unsignedchar*)gsm_at_txbuf1,0xFF); UsartRxBufClear(1); //串口1清除緩存 } }}voidCheckNewMcu(void) //檢查是否是新的單片機,是的話清空存儲區,否則保留{ u8comper_str[6]; STMFLASH_Read(FLASH_SAVE_ADDR+0x10,(u16*)comper_str,5); comper_str[5]='\0'; if(strstr((char*)comper_str,"FDYDZ")==NULL) //新的單片機 { STMFLASH_Write(FLASH_SAVE_ADDR+0x10,(u16*)"FDYDZ",5);//寫入“FDYDZ”,方便下次校驗 delay_ms(50); STMFLASH_Write(FLASH_SAVE_ADDR+0x40,(u16*)"12345078910",11);//存入初始手機號 } STMFLASH_Read(FLASH_SAVE_ADDR+0x40,(u16*)PhoneNumber,11);//讀出手機號 PhoneNumTranscoding(); delay_ms(100);}voidGet_GPS(void)//獲取GPS數據{ staticu8errorNum=0; staticu8timeCount=0; if(rev_stop==1&&timeCount++>=5) //如果接收完一行 { if(GPS_RMC_Parse(STM32_RX3_BUF,&GPS))//解析GPRMC { errorNum=0; gps_flag=0; rev_stop=0; gpsInitFlag=1; } else { if(errorNum++>=30)//如果數據無效超過30次 { errorNum=30; gpsInitFlag=0; } gps_flag=0; rev_stop=0; } timeCount=0; } sprintf((char*)display,"%10.6f",GPS.longitude_Degree); OLED_ShowStr(40,2,(u8*)display,2);//顯示經度 sprintf((char*)display,"%10.6f",GPS.latitude_Degree); OLED_ShowStr(40,4,(u8*)display,2);//顯示緯度}voidLongiAndLatiChangeUnicode(char*str1,char*str2)//經緯度坐標轉Unicode碼{ u8i=0,len; char*buf=str1; len=strlen(buf);//獲取字符串長度 for(i=0;i<3;i++)//小數點前3位 { if(buf[i]!='') {*str2++='0'; *str2++='0'; *str2++='3'; *str2++=buf[i]; } } *str2++='0';*str2++='0';//小數點 *str2++='2';*str2++='E'; i++; for(;i<len-1;i++)//小數點后6位 { *str2++='0'; *str2++='0'; *str2++='3'; *str2++=buf[i]; } *str2='\0';}voidtrx_hc05_data(void) //發送接收藍牙數據{ u8i=0; staticu8bobaoFlag=0xFF; staticu16bobao_delay=0; staticu8init_flag=0; char *str1=0,*str2=0; char tempbuf[20]; if(strstr(STM32_RX2_BUF,"設置手機號碼")!=NULL)//接收到設置手機號碼指令 { str1=strstr(STM32_RX2_BUF,"設置手機號碼"); delay_ms(20); str2=str1+12; //把“設置手機號碼”這幾個字符截去掉 while(*str2>='0'&&*str2<='9') //判斷是不是0到9有效數字 { tempbuf[i]=*str2; i++; str2++; if(i>11)break; //超出手機號長度范圍,直接退出while循環 delay_ms(10); }tempbuf[i]='\0'; //加上結尾符 if(strlen(tempbuf)!=11) //手機號碼長度必須是11,不然都是設置失敗 { Uart2_SendStr("設置失敗,請核對號碼格式!\r\n");//設置失敗標志 } else { for(i=0;i<11;i++)PhoneNumber[i]=tempbuf[i]; //設置新的手機號 STMFLASH_Write(FLASH_SAVE_ADDR+0x40,(u16*)PhoneNumber,11); //把手機號存儲一遍 PhoneNumTranscoding(); Uart2_SendStr("手機號碼設置成功!\r\n"); //設置成功 } UsartRxBufClear(2); //串口2清除緩存 pc13LED(); hc05sendFlag=0; } if(strstr(STM32_RX2_BUF,"查看手機號碼")!=NULL)//接收到設置手機號碼指令 { memcpy(tempbuf,PhoneNumber,11); tempbuf[11]='\0'; sprintf((char*)display,"接收短信號碼為:%s\r\n",tempbuf); Uart2_SendStr((char*)display); UsartRxBufClear(2); //串口2清除緩存 pc13LED(); hc05sendFlag=0; } if(strstr(STM32_RX2_BUF,"cf")!=NULL) //接收到吃飯指令 { bobaoFlag=0; bobao_delay=0; UsartRxBufClear(2); //串口2清除緩存 pc13LED(); } if(strstr(STM32_RX2_BUF,"hj")!=NULL) //接收到回家指令 { bobaoFlag=1; bobao_delay=0; UsartRxBufClear(2); //串口2清除緩存 pc13LED(); } if(strstr(STM32_RX2_BUF,"gl")!=NULL) //接收到過來指令 { bobaoFlag=2; bobao_delay=0; UsartRxBufClear(2); //串口2清除緩存 pc13LED(); } if(strstr(STM32_RX2_BUF,"qx")!=NULL) //取消播報指令 { bobaoFlag=0xFF; UsartRxBufClear(2) //串口2清除緩存 pc13LED(); } if(STATE==0)//藍牙斷開 { if(init_flag==1) { init_flag=0; for(i=0;i<2;i++)OLED_ShowCN(i*16+80,0,i+10,1); //顯示中文:斷開 sendFlag=0x01; bobaoFlag=2; bobao_delay=0; } } else { if(init_flag==0) { init_flag=1; for(i=0;i<2;i++)OLED_ShowCN(i*16+80,0,i+8,1); //顯示中文:連接 bobaoFlag=0xFF; } } if(bobaoFlag!=0xFF) { if(bobao_delay==0)Line_1A(bobaoFlag);//播報內容 if(bobao_delay++>=450)bobao_delay=0; } if(hc05sendFlag==1) { hc05sendFlag=0; sprintf((char*)display,"經度:%10.6f\r\n",GPS.longitude_Degree); Uart2_SendStr((char*)display); sprintf((char*)display,"緯度:%10.6f\r\n",GPS.latitude_Degree); Uart2_SendStr((char*)display); Uart2_SendStr("\r\n"); }}intmain(void){ unsignedchari; charSEND_BUF[400];//發送短信緩存 charBUF1[50],BUF2[50];//BUF1為經緯度轉換前緩存區,BUF2為轉換后緩存區 delay_init(); //延時函數初始化 NVIC_Configuration(); //中斷優先級 I2C_Configuration(); //OLEDIIC引腳初始化 GPS_rx_flag=0; CheckNewMcu(); //校驗單片機 WT588D_GPIO_Init(); //wt588d語音播報模塊引腳初始化 STATE_GPIO_Init(); //hc-05STATE引腳初始化 OLED_Init(); //OLED初始化 OLED_CLS(); //清屏 OLED_ShowStr(0,2," GSMInit...",2); uart1_Init(9600); gsm_init();//gsm初始化 usart2_init(9600); USART3_Init(9600); OLED_CLS();//清屏 UsartRxBufClear(1); //串口1清除緩存 UsartRxBufClear(2); //串口2清除緩存 GPS_rx_flag=1; for(i=0;i<4;i++)OLED_ShowCN(i*16,0,i+4,0);//顯示中文:藍牙狀態 for(i=0;i<2;i++)OLED_ShowCN(i*16,2,i+0,0);//顯示中文:經度 for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+2,0);//顯示中文:緯度 OLED_ShowChar(64,0,':',2,0); OLED_ShowChar(32,2,':',2,0); OLED_ShowChar(32,4,':',2,0); for(i=0;i<2;i++)OLED_ShowCN(i*16+80,0,i+10,1); //顯示中文:斷開 TIM2_Init(500-1,7199);//計數到500為50ms 500*100=50000us=50ms //Tout=((arr+1)*(psc+1))/Tclk; //Tclk:定時器輸入頻率(單位MHZ)//Tout:定時器溢出時間(單位us) while(1) { trx_hc05_data(); //發送接收藍牙數據 receive_sim800_com(); //接收GSM的命令 if(shuaxin==1) //大概500ms執行一次以下內容 { shuaxin=0; Get_GPS();//獲取經緯度 if(sendFlag!=0x00) { /***以下為短信內容處理部分,發送中文短信必須轉換為Unicode碼***/ memset(SEND_BUF,0,400); //清空緩沖區 if(sendFlag==0x01) { strncpy(SEND_BUF,"8BF76CE8610FFF0C72D772D75DF27ECF8DD18FDCFF01",44); //請注意,狗狗已經跑遠! } sendFlag=0x00; strcat(SEND_BUF,"7ECF5EA6"); //經度 memset(BUF1,0,50); //清空緩沖區 memset(BUF2,0,50); //清空緩沖區 sprintf((char*)BUF1,"%10.6f",GPS.longitude_Degree); LongiAndLatiChangeUnicode(BUF1,BUF2);//將經度轉碼 strcat(SEND_BUF,BUF2); strcat(SEND_BUF,"FF0C7EAC5EA6");//,緯度 memset(BUF1,0,50); //清空緩沖區 memset(BUF2,0,50); //清空緩沖區 sprintf((char*)BUF1,"%10.6f",GPS.latitude_Degree); LongiAndLatiChangeUnicode(BUF1,BUF2);//將緯度轉碼 strcat(SEND_BUF,BUF2); strcat(SEND_BUF,"3002"); sim800_send_sms((unsignedchar*)SEND_BUF);//發送短信} } delay_ms(10); }}voidTIM2_IRQHandler(void)//定時器2中斷服務程序{ staticunsignedinttimeCount1=0; staticunsignedinttimeCount2=0; if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET) //檢查指定的TIM中斷發生與否:TIM中斷源 { TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中斷標志位 if(timeCount1++>=10)//500ms { timeCount1=0; shuaxin=1; } if(timeCount2++>=20)//1s { timeCount2=0; hc05sendFlag=1; } }}引腳初始化程序#include"gpio.h"http://///////////////////////////////////////////GPIO設置/////////////////////////////////////////////voidSTATE_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE); //使能PAC端口時鐘GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //輸入GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13; //端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //IO口速度為50MHzGPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOC,GPIO_Pin_13); //輸出GAO電平}#ifndef__GPIO_H#define__GPIO_H #include"sys.h"#definePC13_LED PCout(13) #defineSTATE PAin(4) voidSTATE_GPIO_Init(void);//初始化#endifOLED液晶初始化程序/**************************************************************************************Description:128*64點陣的OLED顯示屏驅動文件SD1306驅動IIC通信方式顯示屏**Others:none;**FunctionList:* 1.voidI2C_Configuration(void)--配置CPU的硬件I2C*2.voidI2C_WriteByte(uint8_taddr,uint8_tdata)--向寄存器地址寫一個byte的數據*3.voidWriteCmd(unsignedcharI2C_Command)--寫命令*4.voidWriteDat(unsignedcharI2C_Data)--寫數據*5.voidOLED_Init(void)--OLED屏初始化*6.voidOLED_SetPos(unsignedcharx,unsignedchary)--設置起始點坐標*7.voidOLED_Fill(unsignedcharfill_Data)--全屏填充*8.voidOLED_CLS(void)--清屏*9.voidOLED_ON(void)--喚醒*10.voidOLED_OFF(void)--睡眠*11.voidOLED_ShowStr(unsignedcharx,unsignedchary,unsignedcharch[],unsignedcharTextSize)--顯示字符串(字體大小有6*8和8*16兩種)*12.voidOLED_ShowCN(unsignedcharx,unsignedchary,unsignedcharN)--顯示中文(中文需要先取模,然后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030雞養殖行業市場深度分析及發展策略研究報告
- 高一歷史教學計劃的跨學科融合
- 拍賣市場收益分析協議
- 施工期間環境保護協議
- 廣州民航職業技術學院《國際貿易規則閱讀雙語》2023-2024學年第二學期期末試卷
- 2025-2030金屬纜索內固定系統市場供給現狀分析及發展趨勢預判研究報告
- 2025-2030迷你酒吧行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030起重運輸設備行業發展分析及發展趨勢與投資前景預測研究報告
- 2025-2030豚鼠食品行業市場現狀供需分析及投資評估規劃分析研究報告
- 武昌工學院《中國畫技法Ⅰ》2023-2024學年第二學期期末試卷
- 遼寧省沈陽126中學2025屆中考生物考前最后一卷含解析
- 4S店燒烤活動方案
- 《大氣輻射學》課件
- 新課標(水平三)體育與健康《籃球》大單元教學計劃及配套教案(18課時)
- 精神衛生機構污水處理方案
- 產品數字護照(DPP)技術發展報告(2023年)
- 2025高考數學專項復習第三章 函數與基本初等函數第1節 函數的概念及其表示含答案
- 2023-2024學年廣東省深圳市深中共同體聯考八年級(下)期中地理試卷
- 大學生創新創業基礎(創新創業課程)完整全套教學課件
- 醫療成品審核放行單
- NB/T 11462-2023帶式輸送機用液壓卷帶裝置
評論
0/150
提交評論