





摘" 要:為解決傳統超市購物模式中出現的購物效率低等問題,提出一種能改善當今消費者購物體驗的超市智能購物車設計。該設計采用STM32F103C8T6單片機作為中央處理器,實現對外圍信號的接收和處理及對外圍設備的控制。通過多種模塊的應用與相互配合,并利用超聲波定位和無線射頻(RFID)等技術,使智能購物車具有自動跟隨、緊急避障和自助結賬等功能。最后分別對上述功能進行調試,分析在調試過程中存在的常見問題并提出解決方案。該購物車的設計既為消費者節約購物時間和改善購物體驗,又為超市減少結賬成本、提升人氣和獲得更多收益。
關鍵詞:STM32F103C8T6單片機;智能購物車;自動跟隨;超聲波定位;RFID
中圖分類號:TP23" " " " 文獻標志碼:A" " " " " 文章編號:2095-2945(2023)17-0036-06
Abstract:" In order to solve the problem of low shopping efficiency in the traditional supermarket shopping mode, a supermarket smart shopping cart design is proposed, which can improve the shopping experience of today's consumers. This design uses STM32F103C8T6 single-chip microcomputer as the central processor to receive and process the peripheral signals and control the peripheral equipment. Through the application and cooperation of many kinds of modules, and the use of ultrasonic positioning and radio frequency(RFID) technology, the smart shopping cart has the functions of automatic following, emergency obstacle avoidance and self-checkout. Finally, the above functions are debugged, the common problems existing in the debugging process are analyzed and the solutions are put forward. The design of the shopping cart can not only save shopping time and improve shopping experience for consumers, but also reduce checkout costs, improve popularity and gain more benefits for supermarkets.
Keywords: STM32F103C8T6 single chip microcomputer; smart shopping cart; automatic following; ultrasonic positioning; RFID
隨著時代的不斷發展,人們對生活各個方面的體驗有了更高要求。超市與生活息息相關,是人們補充生活用品的主要場所,并且超市購物也成為人們在閑暇時的放松方式之一。可如今的超市購物模式有很多值得改善的地方,其中常見的便是人多結賬效率低導致排隊時間過長[1],還有因為推動購物車而不方便騰出手照顧小孩的情況。這些都會讓消費者感到困擾,使消費者的購物欲望下降,甚至導致放棄購買,這無疑對超市的口碑與利益都帶來很大影響。為解決這些問題,本設計提出對超市購物車進行智能化升級,一方面使購物車能夠通過超聲波定位技術進行自動跟隨,并能在障礙物闖入跟隨路徑的時候進行緊急避障;另一方面使購物車能夠通過無線射頻(RFID)技術對帶有標簽的商品進行識別,將信息如商品總價格整合后展示在顯示屏幕中,從而客戶可以通過相應的支付方式在購物車上自行結賬。此外,采用RFID的快速準確識別還可以防止用戶未經掃描將貨物放進購物車等偷盜行為。
1" 智能購物車硬件設計
1.1" STM32F103C8T6單片機
本次設計所采用的控制單元為STM32F103C8T6型號的單片機,是中低端的32位ARM微控制器,該系列芯片是由意法半導體公司出品,其內核是Cortex-M3。其存儲器為16 K到512 K字節的閃存程序存儲器,本次設計所使用的是閃存存儲器容量64 K字節的型號。該單片機的電源管理方面,有2.0~3.6 V的供電與I/O引腳、上電/斷電復位。該單片機配備有專門的庫函數,使開發難度大幅度降低,已經大量應用于各個方面設備的開發研制[2-3],因此本次設計就選定該型號的單片機作為控制單元。
1.2 超聲波模塊
本次智能購物車的自動跟隨功能是采用超聲波的方式進行。超聲波模塊選用的是網上容易采購的單收單發的超聲波模塊,其接收距離在4~500 cm,模塊工作電壓為5 V,模塊的工作方式為串口通信,模塊發送頻率為50 Hz,模塊通信波特率為115 200。超聲波單發送模塊和獨立的一個供電5 V模塊一起組合,該供電模塊由廠家自己設計,能處理超聲波發送模塊,上電就可用[4]。超聲波單接收模塊的接口與單發送模塊相同,相應的接口要和單片機的接口相連。據功能要求,本次超聲波模塊選擇用1個發送模塊和2個接收模塊。發送模塊有配備好的控制板,2個接收模塊連接單片機的USART2與USART3串口通信接口。通過超聲波模塊得知距離后,將使用多個超聲波模塊,將其布置為一個三角形,其角度和邊長長度都有規定值,當用戶移動的時候,該三角形的形狀便會發生改變,根據此改變,購物車就會進行調整,使其繼續維持規定的三角形形狀,以此達到自動跟隨的功能[5-7]。
1.3 避障傳感器模塊
為了應對購物車在自動跟隨的過程中有小孩或貨物闖入跟隨路徑,因此采用避障傳感器模塊就能使購物車立刻停止,防止碰撞的發生。避障傳感器是采用市面上常見的直式避障傳感器模塊,通過電位器可調節檢測距離,其有效距離為2~32 cm。該模塊工作電壓為3.3~5 V,故可以采用3~5 V的直流電源進行供電。其接口說明為:①VCC接3.3~5 V的電壓;②GND接GND;③OUT接數字量輸出接口,即單片機IO口。
1.4" RFID模塊
為了實現購物車的自動識別功能,考慮到一般的條形碼識別可能會帶來的偷盜行為,本次設計所采用的識別模式是RFID無線射頻識別的技術。RFID模塊選型確定為M3650-HA,該模塊的通信接口為UART TTL,該模式可以與單片機進行直接相連,模塊的TXD引腳接單片機RXD引腳,模塊的RXD引腳接單片機TXD引腳,GND與單片機的GND相連形成共地。其工作電壓為5 V,波特率設置為115 200。本次設計是將RFID用于商品的識別上,將無源標簽設置在商品上,閱讀器安裝在購物車上,由于掃描識別過程是用戶將商品放入購物車中,其距離小,可以使識別效率有所保障,采用無源標簽也節省了一定的成本[8]。
1.5" 顯示屏模塊
顯示屏模塊采用1.3寸的OLED顯示屏模塊,通過按鍵觸發單片機,從而控制屏幕,達到人機交互的功能,該模塊編程和接線較簡單,價格便宜,其自備自發光能力,具有對比度高,功耗低等優點,該模塊使用的通信模式為IIC的模式,驅動芯片是SSD1306。由于采用的是IIC通信模式,所以其引腳為4針,分別是VCC接口、GND接口、SCL接口和SDA接口,這樣的少量引腳可以為其他的模塊節省接口,這里通過設置將SCL接PB8,SDA接PB9。
1.6" 電機驅動模塊
本設計電機采用的是市面上常見的直流電機,其工作電壓有3種模式,分別是DC3V、DC5V、DC6V。為了電壓的選擇統一,本次采用的是直流5 V的電機,減速箱減速比為48∶1,空載(加輪子)為190 r/min。直流電機驅動模塊采用市面上的L298N直流電機驅動模塊,該模塊采用的是L298N芯片來直接驅動2路3~30 V的直流電機,并且提供5 V輸出接口,可以方便控制直流電機的速度與方向,其驅動電路采用H橋式。其IN1至IN4的接口分別依次接單片機的PB12至PB15接口,ENA與ENB接單片機的PA6與PA7接口。本次購物車的設計將用到2個直流電機和1個L298N電機驅動模塊。
2" 智能購物車軟件設計
2.1" 主函數設計
本次購物車設計的主函數流程圖如圖1所示。首先對各個硬件系統進行初始化,之后對各個傳感器進行數據獲取,其中包括超聲波所測的距離和RFID所識別的商品信息等。在中斷方面,本次設計為RFID識別程序和緊急避障程序設置了中斷,主函數會一直處理超聲波跟隨的程序和讀取相應按鍵值進行相關的支付步驟。
2.2" 自動跟隨模塊子程序設計
本次自動跟隨模塊設計主要是依賴于所用的超聲波模塊測得的距離數據,通過該距離數據進行計算從而達到自動跟隨的目的。首先由超聲波模塊獲得左右兩邊的距離數據,以這2個數據為基礎,可以得出左右兩邊距離相互之間的差值和各自與規定距離的差值,然后運用相應的PID算法進行計算處理,最后再分別傳輸給對應的電機。自動跟隨流程圖如圖2所示。
2.3" 緊急避障模塊子程序設計
如果購物車在自動跟隨路徑中出現障礙物,則還需考慮緊急避障模塊程序設計。該模塊設計比較簡單,使用常見的紅外避障模塊,程序上將其設置為中斷,當有物品出現在紅外避障模塊的危險范圍內時,就會觸發中斷,而中斷程序設置為電機停止;當物品離開了紅外避障的危險范圍,就能回到正常的自動跟隨功能。緊急避障流程圖如圖3所示。
2.4" 自動識別模塊子程序設計
該模塊程序只需要將識別到的數據放置在一個列表中,之后將特定置位中的數據提取出來交給單片機主程序進行處理。應注意,本次的識別過程是在接收到數據時,程序上將其設置為中斷,目的是能及時接收并傳出RFID接收到的數據。由于只進行基本功能的實現,所以商品信息的設置數量只有2個并且用卡片代替,在連接電腦時通過RFID模塊將信息寫入卡片中,當RFID識別到指定的卡時,就將數據上傳給單片機,單片機根據數據在顯示屏中顯示相應的信息,這里只包括商品名和單價。若后續有新的想法,可以繼續完善使其更加豐富。自動識別流程圖如圖4所示。
3" 智能購物車功能調試
本次的功能調試主要分為2個部分,第一個部分是自動跟隨功能的調試,該部分工作量較大,難度主要分布在算法的設計與選擇,關鍵參數的設定等;第二個部分是自動識別功能的調試,該部分的工作在于將RFID所識別的信息進行接收儲存。
本次的調試方法,將實物按照硬件設計部分進行接線,之后通過指定的數據將相關信息展示在OLED顯示屏中,例如距離誤差、左右輪速度等。將所有功能模塊接線后,通過STLink將單片機和電腦直接連接,方便依據問題直接修改程序并燒錄。其中模塊主要包括超聲波模塊、RFID識別模塊、OLED顯示屏和按鍵等。接線組合后稱之為實驗臺,如圖5所示。
3.1" 自動跟隨功能調試
自動跟隨功能和其他功能最大的區別便是需要觀察實際的運動情況,因為有些情況是在編程中體現不了的。本次調試中出現的問題除了最基本的算法選擇,就是一些錯誤運動情況,接下來分別進行闡述。
第一種錯誤情況是數據的格式問題,這是調試中最簡單但又是最容易忽視的問題。在之前的程序編寫中為了讀取方便,將大部分數據設置成了無符號數,倘若在之前區分前后,將其全部設置為正數時是沒問題的,但這必定會增加代碼的長度,這并不提倡。但在修改后,一些數據就必須變成有符號數來應對自身變為負數的情況,否則在出現負值時,由于無符號數的規定,導致數值突然變大,產生錯誤。除了符號規定之外,數據大小的規定也是如此。所以針對以上問題,要根據自己選擇的算法進行相應數據類型的修改,這是最基礎也是必須關注的地方。
第二種錯誤情況是邏輯錯誤,這其實是屬于代碼編程方面,但是在調試時這種錯誤就會放大的很明顯,在之前的代碼中,嘗試的是先判斷左右方向再判斷前后方向,邏輯上沒有出現明顯問題,但在實際中并不如此,例如若不設定停止程序,小車由于慣性會一直處于左右判斷的環節,無法進入前進后退的環節,這些問題都在測試中出現過。若將該程序編寫完善,這種程序邏輯也不適用于超市的布局,因為先左右再前后的運動邏輯在遇到拐角的情況時,就可能會發生碰撞,這也是后來更改為差速轉向的原因。
第三種錯誤情況是小車運動狀況與程序不符。首先我們知道,小車是具有慣性的,盡管程序編寫完成后,將假想數據填入,其數值的顯示符合運動邏輯,但是將程序燒錄在單片機后,實際運動便出現了差錯,其中的現象有小車在誤差存在時不產生運動、小車速度突然增加、小車轉彎幅度過大、轉彎和前進方向錯誤及小車原地旋轉等。導致其中一些問題出現的原因,是由于如同上述2種錯誤中編程邏輯錯誤和數據格式與表示范圍錯誤的情況,可以進行相應地修改解決。但有的錯誤會與電機相關,當計算得出PWM的占空比很小時,也就相當于PWM所產生的模擬電壓很小,這就導致了電機無法正常工作,表現為電機停止并且電機驅動模塊報警,這在調試階段經常發生,在占空比為25%以下時,尤其在電機受載的情況下,電機就無法工作。這便導致了錯誤的發生。因為當計算得出的小車左右輪的速度小于這個占空比時,就會讓小車發生和預期不一樣的運動狀態,例如停止、急轉彎等。只有當速度高于這個占空比時,才能按照程序所期望的形式運動。另一種運動狀況是轉彎過度,這是由于程序中的延時時間設置不合理,其用較大且不變的速度進行轉彎,導致了轉彎過度,應合理設置延時時間。
第四種錯誤情況是數值增加速率過快,在調試過程中更改了延時函數后,會發現當小車固定在一個位置時,其速度會逐一增加。或者在一個范圍內來回運動時,小車的速度值就會跟原本計算的數值不同。這是由于所用的算法使速度在誤差仍然存在時一直增加,這是積分環節的效果,最終導致在停止或來回運動時可能會使數值不匹配,這里簡單理解為減少誤差的速度小于因誤差存在速度值增加的速度。
關于這幾種錯誤的解決,第一種錯誤情況只需重新更改變量的表示范圍即可。第二種錯誤主要針對算法代碼的修改。對于第三種錯誤情況,第一種猜想是PWM產生的較小模擬電壓很多電機都無法做出反應,便只能修改程序。左右輪的速度是由距離偏差和左右偏差共同決定,并且大多情況速度大小與距離偏差關系很大,則可以考慮使小車在占空比為25%以下的情況時,用最低的速度完成原地轉向即可。但是必須要考慮到停止程序的編寫和加入,因為當左右偏差很小時,25%的占空比顯得過大,就會產生新的錯誤,例如小車一直處于原地轉向狀態,表現為原地打轉和左右擺頭,并且代碼編寫的難度也會加大。第二種猜想是認為目前所用電機不能達到設計要求,所以很簡單,嘗試更換轉矩更大的電機進行實驗,但硬件的更換勢必會帶來成本的增加。第四種錯誤情況可以添加新的程序,例如在達到規定距離后,強行將一些參數清零,并適當調整積分環節的參數。
3.2" 自動識別功能調試
RFID識別功能函數的編寫邏輯,先初始化相關的串口功能,再通過USART串口通信,使用相應的中斷函數將RFID閱讀器讀到的數據存放到相應列表之中,因為采用的是讀卡號的模式,閱讀器發送過來的數據,有12個十六進制的數據,前4個數據是閱讀器一些狀態數據,最后一位是校驗位,這幾位數據可以用來檢測是否成功傳入數據。其中中間的7位數據,便是卡號,也是要利用的數據。在具體的程序編寫方面,其實與市面上的一些例程大同小異,過程中也參考了本次RFID廠家提供的程序。在程序編寫完成后,進行相應接線并開始調試,調試的思路是把RFID所讀到的數據中的第一個數據通過OLED顯示屏模塊進行展示。
首次嘗試時,發現將卡片放置在閱讀器上后沒有任何反應,在確定接線無誤后,認為是單片機的串口失靈,便重新編寫了一個串口收發程序,其功能是通過上位機將數據發給單片機,單片機又重新將數據發回至上位機。通過測試,串口無誤。后面考慮是否是設置錯誤,通過設置軟件進行查詢,發現設置中忽略了波特率的設置,程序中為保持所用通信設備的一致,均采取了115 200的波特率,但是閱讀器的默認設置是9 600,通過設置軟件更改設置即可。
第二次嘗試時,發現的狀況是程序中所用于儲存待用數據列表為空,OLED顯示屏顯示列表第一個數據為D8,但是理論上是91。開始考慮應該是程序問題,便開始使用keil的調試功能進行一步一步運行,發現是在一個讀取卡號程序的編寫中出現了錯誤。因為閱讀器將讀到的12個數據分別發送給單片機,就會產生12個中斷。剛開始編寫程序時沒有注意到這一點,認為是一次中斷將數據全部給出,現在回想這也是不可能的,因為通過參考手冊和程序的復查,一般的USART通信中的數據都在8位,個別情況會有所不同。原本的編寫邏輯會在第一次中斷產生后,就將所有的中間數據清除,例如存放數據的列表和用于記錄中斷次數的變量,該錯誤導致無法進入讀取卡號程序的后續判斷語句。通過借鑒與更改后,設計為只要記錄中斷次數的變量大于0,便讓其等待一段時間,將中斷全部執行完成,再進入程序的后續部分,燒錄后,現象與預期相同。
3.3" 調試其他說明
在完成以上兩大主要功能的調試后,便是一些其他功能的調試,其中包括簡單地緊急停車避障、按鍵互動,出現的問題也就是程序的編寫錯誤,進行相應地修改即可。緊急停車避障通過對模塊的調整來改變探測距離,保證其能停止即可。按鍵互動方面只需要簡單模擬支付環節即可,不涉及過于復雜的程序,也沒有加入通信,調試過程便不再贅述。
因為本次的調試階段直接用實物進行調試修改,沒有進行軟件仿真,雖然加大了工作量和成本增加的風險,但是在實物調試完成后,本設計的實物也就相應完成。采用模塊式的調試,即將各個功能分別調試后再整合,自動跟隨功能調試使用到的實物設備為電機、驅動模塊、超聲波模塊和OLED顯示屏模塊;自動識別功能調試使用到的實物設備為RFID識別模塊和OLED顯示屏模塊,其他功能也是用已有硬件進行調試,各個功能完成后就可以整合在一起成為最終的實物。再次強調,實物的連接要確保接線沒有錯誤,尤其是電源和接地的線路,如有不慎就會燒毀硬件,造成損失。雖然本次設計沒有采用仿真,但是仿真的優勢與便利不可忽視,其可以有效安全的檢測電路設計和程序設計的合理性與可行性。圖6是設計的實物展示,是實驗臺調試完畢后與驅動部分的相連,其中驅動部分是由直流減速電機、電源與電源轉換模塊、電機驅動模塊組成,并由亞克力板進行組裝。
4" 結束語
本設計采用STM32F103C8T6單片機作為系統的控制單元,并結合多種模塊使購物車具有自動跟隨和自動識別等主要功能。自動跟隨功能模塊采用單收單發超聲波模塊,相比一般的超聲波模塊,其實現功能原理更簡單,不會出現因為采用多個收發一體式的超聲波模塊而產生干擾的問題。自動識別功能模塊采用RFID技術,可以做到自動快速精準掃描識別,并且防止有個別用戶不經過掃描將物品添加進購物車的偷盜情況。本次設計給出了超市智能購物車的硬件設計、模塊選擇方案和相應的接線方式,給出了系統軟件設計的大致思路和各個子程序的相關流程。調試方面直接采用實物調試,并且提出了主要功能模塊在實物調試中出現的問題與解決方案。本次購物車的設計不僅能夠解放用戶的雙手,更方便地進行自助結算,而且為超市增加人氣,節省收銀流程中的成本,從而提高口碑與收益。
參考文獻:
[1] 趙銀銀,栗杰,孫海寧.超市智能結賬購物車[J].計算機產品與流通,2017(8):245.
[2] 楊佳,王英志.基于STM32F103單片機的智能購物車系統設計[J].科技視界,2013(24):26-27.
[3] 成雷,鄭云天,李月華,等.基于STM32的超市智能購物車[J].電子世界,2017(23):110-112.
[4] 陳樂鵬,譚曉東,曹江浩,等.超聲波定位系統智能跟隨小車設計[J].科技創新與應用,2019(35):24-26.
[5] 景建斌,張云龍.基于DW1000的自動跟隨購物車系統[J].中國科技信息,2019(7):90-91,93.
[6] 張豐,李順霖,陳仁,等.基于自動跟隨系統的智能行李箱[J].智能計算機與應用,2019,9(3):156-158.
[7] 陸藺.超聲波三維定位與跟蹤系統的設計與實現[D].蘇州:蘇州大學,2010.
[8] MOBEEN S, MUHAMMAD F M, MAQSOOD A, et al. IoT-Based Smart Shopping Cart Using Radio Frequency Identification[J].IEEE Access,2020(8):68426-68438.