這是一個極為偶然的探索。本來是干活兒的間隙里作為休息的學習,隨手做個小模型,作為休息。結果產生一個偶然的發現。 這個發現能實用,但目前還沒用。未來作為引起學生學習物理的樂趣,可以用一用。 其實現涉及的技術領域有點兒多:Rhino建模、Grasshopper參數化編程、python語言、Micro:bit串口通信以及Makecode塊語言。 這里只是筆記式簡略記錄。 一、Rhino和Grasshoper參數化 Rhino是著名的三維建模軟件,具有極為精準而強大的Nurbs建模能力,常用于專業水平的工業設計、產品制作、珠寶創作等領域。Rhino功能極為繁復,學習較為困難。 Grasshoper是Rhino之中的一個通過參數化編程進行復雜建模的模塊,常用于自動化、智能化的精準參數化建模。 Grasshopper支持膠合python語言,應該也支持C#和Basic.Net(因為有這倆模塊)。Grasshopper自帶的python模塊是完備的python環境,如果安裝時為默認目錄,其位置在C:\用戶\用戶名\.rhinocode\py39-rh8目錄下。 二、Python的串口庫 Python是當前在眾多領域普遍使用的通用腳本語言。Python通過安裝第三方支持庫的方式可以進行功能的幾乎任意程度的擴展。Python本身不支持串口通信,但是安裝pySerial庫之后能夠正常支持串口功能。 重要!pySerial不是Python普遍的發行版內建支持庫,需要自己安裝。但是Grasshopper下似乎并能通過pip安裝。解決辦法是,從官網下載回來pyserial-3.5-py2.py3-none-any.whl,把它的擴展名改成zip,也就是pyserial-3.5-py2.py3-none-any.zip,解壓縮之后,把serial目錄放在py39-rh8\Lib下的就可以使用。有一點兒不便之處,是未來到Grasshopper里面寫代碼時,代碼提示時靈時不靈。但Python串口使用就那幾句代碼,影響也不大。 三、Micro:bit串口 Micro:bit是英國BBC領導開發的面向青少年的積木式單片機。雖然名字叫做“單片機”,但是由于硬件封裝的好,使用者根本碰不到硬件內部原理的知識,周邊軟件生態極為出色,甚至微軟也在站臺,使得幾歲的小朋友都能搞創新創作。 Micro:bit有兩種串口通信方式,一種是串口重定向到USB,一種是重定向到指定的TX、RX引腳。本質上這兩個重定向是一樣的,重定向到USB只能支持板載傳感器:加速度、溫度、亮度、磁力和角度。通過串口,一條可傳輸數據的安卓線就可以把外來傳感器的數據送給電腦了,Rhino借助Grasshopper的python把數據接收過來,一切就順理成章了。 四、Makecode編程Micro:bit Makecode是微軟為編程Micro:bit搞的平臺,它有網頁版和離線版。由于網速的原因,我一直在用離線版,其官方版本已經到了6.0.19.0了。 Makecode使用塊Blocks語言,零門檻,在使用者不知情的情況下已經讓用戶會編程了。當然它也支持js和python方式,區別不大。 五、實現傳感測量的視覺表達 (一)測量環境光亮度,通過Micro:bit送給串口 打開Micro:bit(當開機時),Micro:bit打開串口。Micro:bit在重定向串口USB時,默認波特率為115200,停止位、奇偶校驗等等這些都是默認常用的,無需設置。 接著持續不斷地每隔200毫秒把環境亮度級別寫入串口。 (二)Grasshopper接收串口數據 保險起見,查詢一下串口。 獲取串口數據。 (三)實現光亮度視覺表達 現在把串口送來的數值作為圓柱體的高度和旋轉角度。 邏輯是這樣的: ①先用R=8在工作平面上生成一個Circle圓曲線; ②用圓曲線生成圓面Boudary Surface; ③擠壓Extrude圓面為圓柱體。擠壓時,沿z單位向量的方向,向量長度通過Python3 Script獲取串口過來的光亮度測量值。 ④光亮度不但表現在圓柱體的高度上,同時,在XZ平面上把圓柱體旋轉Rotate環境的光亮度大小的角度。 ⑤Grasshopper獲取的串口數據會僅運行1次(如果不使用串口數據,則永久運行),為觸發程序時時運行,通過Control Knob送給Python模塊一個x參數。這個x參數沒有任何運算,什么用也沒有,只有觸發的功能。理論上來說,我們可以通過Grasshopper的與非門實現一個無限持續的“死循環”,但是我發現無論是在Python模塊里、還是Grasshopper的與非門里,一旦邏輯“死循環”出現,Rhino就沒反應了。 這種物理量測量值的表達方式,基于解釋語言,隨改隨用,極其方便,比如有些物理測量需要表達三維圖像時,顯然是絕大多數曲線圖繪制工具不易做到的。 |
|
來自: 新用戶5228KeDY > 《待分類》