作者:DIGILENT開源創客部落
本文由「135編輯器」提供技術支持
每個妹子的豆蔻年華都會有一段叫做「抓娃娃機」的美好回憶。而對於漢子們而言,陪女盆友在遊樂場玩娃娃機則是美好戀愛故事中的標配橋段(以防創傷,單身汪請自動繞過上述這段)。當然,這些回憶中肯定少不了妹子指明相中了有機玻璃箱中的某個娃娃,漢子丟下諸多硬幣,撩起袖管,卻無奈於一次次抓取失敗後的一臉懵逼…
今天的「每周酷創分享」特地在此為大家帶來一款工科男撩妹神器——「用FPGA開發板自製的抓娃娃機」,並奉上這一今年NIWeek現場最具人氣DEMO的動手自製寶典。無論你的目的是出於之後可以在寢室暗自猛練抓娃娃技術然後帶著妹子去湯姆熊炫耀,還是直接將之作為禮物送給你的女神(單身汪們可以看回來了),相信此技(計)一出,妥妥的工科男界的一股清流,幫助你迎來女神崇拜的目光。
看了以上視頻是不是有想要複製一臺屬於自己的抓娃娃機的衝動呢?經過與製作者Kaitlyn Franz妹子在NIWeek現場的勾搭(此妹子目前是DIGILENT美國技術團隊的實習生),Mr.D拿到了項目的DIY動手指南在此與大家分享。對於有興趣的童鞋,相信以下的乾貨內容能夠幫助你以最快的速度實現復刻。若是從此走上了人生幸福之路,別忘了分享下好消息哈!
DIGILENT Basys 3 Aritx-7入門級FPGA開發板(娃娃機的中樞大腦)
PmodCON3伺服機連接模塊(用以控制伺服電機)
PmodSTEP步進電機驅動模塊(用以控制步進電機)
PmodJSTK二軸操縱杆(用以控制抓娃娃機的夾手)
3D列印的抓娃娃機操控臺與整體機身
Xilinx Vivado軟體
對於「抓娃娃機」這一項目的編程代碼而言,最主要的部分就是狀態機。狀態機簡而言之是一種硬體語言結構,能夠讓你在同一個模塊下對一系列事件進行編程。很多時候,你知道你想要做什麼,但你卻不知道自己如何編寫代碼去實現它。通過狀態機,你就能夠以一種標準的編程結構將自己的想法有效地組織起來。
上圖就是該項目的狀態機(清晰原圖請點擊「閱讀原文」查閱)。「抓娃娃機」初始啟動/復位在 wait_state(等候狀態),當抓娃娃機的物理啟動按鈕被按下後,則進入start_state(啟動狀態)。從這裡開始,操縱杆的數據會以不同方向的形式進入到四種不同的direction_states(方向狀態)的其中之一。此時,相應的電機將被激活。在啟動狀態下,如果「抓娃娃機」的物理啟動按鈕被再次按下,則會進入一個循環,此時抓娃娃機的物理抓手會落下並抓取娃娃,無論是否抓到,都會最終回到wait_state(等候狀態)。
狀態機只是編程代碼中的一部分,它能夠幫助我們弄清楚不同電機的操作方向,以及「抓手」基於操縱杆的輸入在什麼時候應該打開或合攏。而與弄清楚狀態機同樣重要的是,我們需要知道如何實現所有組成部分之間的連接。包括:將信號從一個方向轉換為可以驅動4個步進電機所需信號的步進電機接口;將「抓手」的打開/合攏信號轉變為伺服電機所需要的PWM輸出的伺服控制器;獲取操縱杆的數據並將其轉化為一個方向的操縱杆控制器;以及從限位開關和按鈕獲取信號,確保穩定的信號能夠被傳送到狀態機的去抖動模塊等。你可以從以下框圖中了解所有這些組件是如何實現連接的(清晰原圖請點擊「閱讀原文」查閱):
在該項目的網頁版DIY動手指南中(點擊「閱讀原文」瀏覽),以兩種形式為有興趣的童鞋提供了該項目的代碼,不使用Vivado的同學可以參見項目原始碼,使用Vivado的同學則可以直接下載Vivado項目代碼。代碼下載完畢後,生成bit文件,然後將代碼燒到Basys3開發板中。當代碼燒到板上之後,你就能夠在抓娃娃機的狀態機代碼中看到當前的狀態代碼,其與Basys3板上的前3個LED指示燈一一對應。
由於是一個大型項目,在其實際的製作過程中,Kaitlyn妹子在這一部分先後花了近一個月的時間打造出了她理想中的整體機身。為此,她還特地分享出了多達16步的自製抓娃娃機機身製作的動手指南。由於內容過多,我們將在本周內將中文漢化版本的機身製作指南上傳到DIGILENT官網的「項目」板塊,盡請有興趣自己倒騰的童鞋關注。在這兒就先上一些機身實現過程的圖片,供大伙兒先解解眼饞。
當電路系統搭建完畢,整體機箱打造好,你就能夠擁有一臺屬於自己的抓娃娃機了。為了能夠幫助初學者儘快上手,我們也在DIGILENT中文技術社區陸續上線包括「如何應用Analog Discovery2來調試數字邏輯」,「如何用FPGA來控制步進電機/二軸操縱杆/伺服電機」等涉及該項目各個不同部分的入門級中文指南。以幫助哪怕是零基礎的同學來完成該項目的製作。怎麼樣,這態度是不是可以給個滿分?點擊「閱讀原文「」可了解更多精彩技術知識
DIGILENT是Xilinx大學計劃開發板的原廠
想了解Basys開發板還開發了哪些好玩的項目嗎?敬請關注我們的後續報導
如果對於這一項目在技術層面有任何建議,請關注以下微信公眾號詢問