色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用Arduino和加速度傳感器制作數字滾球迷宮【后篇】

王偉 ? 2023-02-20 11:54 ? 次閱讀

前篇:用Arduino和加速度傳感器制作數字滾球迷宮

這次將為大家介紹一個使用Arduino制作的獨特電子作品項目,將會分【前篇】和【后篇】兩部分進行介紹。為我們介紹這個非常有趣的電子制作項目的是平原真先生,他是一位以事物之間的關系為主題進行探索的藝術家。平原先生同時也是大阪藝術大學的副教授,迄今為止,他使用計算機和電子器件制作了很多媒體藝術作品。在Device Plus上,平原先生也發表了一些極具意義的電子作品,例如“用Arduino制作的太陽能電池板供電數字生態箱”和“用Arduino和TOF距離傳感器制作甜甜圈播放器”。在后篇中,我們將會見證數字滾球迷宮是如何完成的。

前言

大家好!我是平原。本文是“用Arduino和加速度傳感器制作數字滾球迷宮”的后篇。在前篇中,我們組裝了電子電路,寫入了Arduino程序,并確認了電子部件的工作情況。接下來,在本文中我們將完成實物迷宮的制作,并使用游戲引擎Unity實際制作游戲。請大家也一起參與挑戰!

本項目的組成

本項目共分為六個部分。
在前篇中,我們完成了作品規劃、電子電路和Arduino程序。
在后篇中,我們將按照以下1到3的步驟進行制作。

制作迷宮外殼

創建迷宮的3D模型

Unity程序

1. 制作迷宮外殼

迷宮的設計是決定游戲可玩性的重要因素。我們需要一邊想象小球如何滾動一邊制作迷宮。

我們按照以下步驟制作迷宮外殼:

設計盒子

設計迷宮

切割材料

組裝盒子和迷宮

固定電子部件

粘貼標記

poYBAGPyzkWALEn_AAJaIA-a0Fk729.jpg

步驟1:設計盒子

盒子由5塊椴木單板粘合而成。盒子的尺寸為寬145mm、寬145mm、高70mm,以便里面有足夠的空間放置部件。板的厚度為4mm。為了使角部貼合在一起,設計時要考慮到厚度。在背面的板上打一個可以讓USB數據線穿過的孔。請使用Illustrator設計要裁剪的形狀。請參閱分發文件CutBox.ai

>> 分發文件下載(50.4MB)

pYYBAGPyzkaAIJP8AABvqRcR3mc644.jpg

步驟2:設計迷宮

在這個迷宮中,將正方形的盤面分成10個方格×10個方格,并設置圍墻。起點在左下角,終點在右上角。我創建了3種不同難度級別的迷宮。這里創建的迷宮數據不僅會用作激光加工機的切割數據,還會用于創建要在Unity中使用的3D模型。

在Illustrator中,將正方形分隔成10個方格 x 10個方格并繪制之間圍墻。使用網格功能會很方便。需要一邊想象小球的滾動一邊思考迷宮的設計。

如果從頭開始創建比較麻煩,可以參考下面的迷宮自動生成工具。

>>自動創建迷宮

完成后,調整線條的粗細,勾勒出整體輪廓,然后調整其大小以適應145mm x 145mm的盒子。

poYBAGPyzkmAbcBAAAFekAw2viU450.jpg

迷宮的地板與盒子底部的形狀相同。將墻壁與地板粘在一起形成迷宮。然后雕刻起點(S)和終點(G)。

創建具有3個難度級別的迷宮。1級沒有特別的關卡(左)。2級的起點和終點之間沒有連接,無法直接到達終點,小球在途中掉入一個洞中,就會穿越到另一個洞(中間)。3級的中心被挖空成圓形,這部分會像旋轉門一樣移動(右)。請參閱分發文件中的CutMaze.ai。

pYYBAGPyzkuAQPuyAAClo7_IyD8963.jpg

步驟3:切割材料

請使用創建的數據用激光加工機對椴木單板進行切割。椴木單板的厚度為4mm,請根據要使用的設備進行切割所需的設置。

poYBAGPyzk6AcogaAAFq-62Cn0k323.jpg

切割后的迷宮。迷宮的墻壁很薄,應該小心處理,以免它們斷裂。

pYYBAGPyzlGAZ6exAAJXAYYd6Oo373.jpg

pYYBAGPyzlSABn2DAAE25OhrU5A868.jpg

步驟4:組裝盒子和迷宮

用木材專用膠粘貼盒子。這種膠即使用量很少也可以粘得很牢固,不要用量太大哦。

poYBAGPyzliAQKrSAAFivoa4jSs791.jpg

以同樣的方式將迷宮的地板和墻壁粘在一起。請用牙簽等在迷宮的墻壁背面粘上少量的膠,然后根據地板和墻壁的位置進行粘貼。注意不要混淆表面和背面,以及起點和終點的位置。

poYBAGPyzluAImOKAAKkGc-MXyk352.jpg

步驟5:固定電子部件

使用3D打印機制作一個面包板底座,將底部抬高28mm,使反射式光電傳感器處于接觸蓋子背面的高度。請使用分發文件BreadboadHolder.stl。如果您正好有一個高度合適的盒子,也可以用它來代替。

pYYBAGPyzl6AOcr1AAD33FdOHqM854.jpg

將面包板嵌入支架中,并用雙面膠將支架和Arduino UNO固定在盒子上。

pYYBAGPyzmKAetEXAALSJzXZxs0078.jpg

步驟6:粘貼標記

制作標記用于反射式光電傳感器的讀取。請在不干膠紙上打印兩個30mm x 30mm正方形并列的矩形。由于反射式光電傳感器對噴墨打印機的墨水沒有反應,所以請用黑色的筆涂抹為黑白、白黑、黑黑。

poYBAGPyzmWAQGaSAAEs12ZIGFI404.jpg

將標記粘貼在蓋子背面的反射式光電傳感器的位置。下面的照片中,從左到右的難度等級依次為1級、2級和3級。1級難度的迷宮,反射式光電傳感器1為黑色,反射式光電傳感器2為白色。難度的差異是通過白色和黑色的組合來判斷的。

poYBAGPyzmmAUgS7AAIL7MxaySk089.jpg

2. 創建迷宮的3D模型

我們按照以下步驟創建迷宮的3D模型:

從Illustrator導出SVG文件

將SVG文件導入Fusion360

利用推擠功能創建立體模型

輸出OBJ文件

步驟1:從Illustrator導出SVG文件

將Illustrator中的迷宮數據導出為SVG文件。移動在“1.制作迷宮外殼”的步驟2中創建的迷宮輪廓數據,使中心為0,0。從Illustrator菜單中選擇[文件] > [另存為],然后選擇SVG作為文件類型。請創建從1級到3級共3個文件。

pYYBAGPyzmyAXlu9AAEAvls3FuY137.jpg

步驟2:將SVG文件導入Fusion360

將步驟1中導出的SVG文件導入到3D CAD軟件Fusion 360中。Fusion360的安裝方法請參考其官網:

>> Fusion360

請從Fusio 360的菜單中,選擇 [插入] > [插入SVG], 將步驟1中導出的SVG文件導入Fusio 360。導入的形狀是草圖。

poYBAGPyzm-AFiGYAAG_t11xsZU025.jpg

步驟3:通過推擠功能創建立體模型

推擠迷宮的形狀,使其成為立體模型。請將整個草圖向下推擠5mm以使其成為地板。接下來,請僅將墻壁部分向上推出5mm。

pYYBAGPyznOAXaEVAAHFpTKEpU0379.jpg

在2級難度迷宮的地板上打兩個用來穿越的孔,孔徑約為Φ8mm。
3級難度的迷宮,在中央挖空Φ48mm的圓圈,制作兩層地板。

步驟4:輸出OBJ文件

需要從Fusion 360導出OBJ文件。請從Fusion 360的菜單中選擇[文件] > [導出] ,然后將文件導出為OBJ文件。由于該過程需要在云端完成,因此需要一些時間。完成后,該文件將會進入下載文件夾中。分發文件MazeLv1.obj、MazeLv2.obj、MazeLv3-A.obj、MazeLv3-B.obj是完成后的數據。

poYBAGPyznWAK_JXAAEdi5ocpZ8528.jpg

3. Unity程序

終于到了Unity中的程序部分了。請按照以下步驟操作:

在Unity中創建一個新項目

加載3D模型

配置小球

運用物理運算

安裝Serial Port Utility Pro

主程序

設置終點

2級關卡

3級關卡

切換迷宮

步驟1:在Unity中創建一個新項目

本次使用的Unity版本為2019.4.8f1 Personal。Unity的安裝方法請參考其官網:

>> Unity

請用3D模式創建一個新的Unity項目。

pYYBAGPyzniASGr1AADeatHUOgo116.jpg

步驟2:加載3D模型

加載迷宮的3D模型。將Fusio 360導出的OBJ文件拖放到Unity項目面板中的Asset文件夾中。

創建一個空的GameObject來掛載迷宮。請從Unity菜單中,選擇[Game Objects(游戲對象)] > [Create Empty(創建空對象)]。 將新建的GameObject重命名為“MazeObject”,并將Transform的位置設置為0。

將3D模型配置于stage上。將剛剛加載的地圖的3D模型“MazeLv1”拖放到層級面板的“MazeObject”中。如果直接這樣用,大小和旋轉會很奇怪,因此需要進行調整以使其處于正確的位置。請通過檢視面板的Transform,將旋轉設置為X270、Y180,將縮放設置為0.2。以同樣的方式設置2級的3D模型。3級由“MazeLV3-A”和“MazeLV3-B”兩個3D模型組成,因此請創建一個名為“MazeLv3”的空GameObject,并將這兩個3D模型放入其中。

pYYBAGPyznuAWNKlAAGFDRqI2Yg032.jpg

需要更改每個級別的顏色。請從Unity菜單中選擇 [Asset] > [Create] > [Material],創建三個材質。名稱分別是“MatLv1”、“MatLv2”和“MatLv3”。在材質的Inspector面板的反照率(Albedo)項目中更改顏色。我們將“MatLv1”設置為淺藍色,“MatLv2”設置為黃色,“MatLv3”設置為橙色。請將創建的材質拖放到“MazeLv1”、“MazeLv2”、“MazeLv3-A”、“MazeLv3-B”中的網格上。可以看到迷宮已被著色。

pYYBAGPyzn6AWfhhAAHquiMCfWw268.jpg

當前,三個迷宮是重疊顯示的,但“MazeLv2”和“MazeLv3”處于初始狀態,可以將它們禁用,在Inspector面板中名稱的左側取消選中即可。

步驟3:配置小球

將小球配置在起點。請從Unity菜單中,選擇[Game Objects(游戲對象)] > [3D Objects(3D對象)] > [Sphere(球體)]。對象的名稱是“Sphere”。更改為從正上方向下看的視角,更容易對齊位置。我想讓小球從空中落下,所以將y設置為5.0左右。

poYBAGPyzoGAKRGtAAF0RzAyAz0577.jpg

步驟4:運用物理運算

給3D模型賦予判斷碰撞的功能。請在“MazeObject”中選擇“MazeLv1”,在Unity菜單中選擇[Component(組件)] > [Physics(物理)] > [Rigid Body(剛體)]。從剛體的設置項目中取消選中“Use Gravity(使用重力)”并選中“Is Kinematic(開啟動力學)”。碰撞檢測項請選擇“連續且動態地進行碰撞檢測”。需要減少墻壁的摩擦力。然后請從Unity菜單中選擇[Component(組件)] > [Physics(物理)] > [Mesh Collider(網格碰撞器)]。網格碰撞器設置項目中的網格,請選擇“MazeLv1”中包含的網格。

將剛體和網格碰撞器附加給“MazeLv2”、“MazeLv3-A”和“MazeLv3-B”并進行相同的設置。

poYBAGPyzoaAE34DAAIZvN_68yk954.jpg

最后,將剛體附加給小球。選擇“Sphere”,然后從Unity菜單中選擇 [Component(組件)] > [Physics(物理)]> [Rigid Body(剛體)]。我希望“Sphere(球體)”根據重力移動,因此仍保持選中“UseGravity(使用重力)”。

如果在這個階段執行程序,小球應該會落下并碰撞迷宮。您可以試試看這部分的運行情況。

poYBAGPyzomAAqhvAAErMIxRKEs839.jpg

步驟5:安裝Serial Port Utility Pro

Unity與Arduino之間的通信僅通過標準功能也能實現,但這次我們將使用名為“Serial Port Utility Pro (SPUP)” 的工具。使用SPUP進行通信時,您可以不必擔心運行環境的差異。這個工具在資源商店的售價為79美元,不過您可以從其官網下載試用版。試用版需要在通信量達到一定程度時重新啟動Unity。我們可以在開發過程中使用試用版,在想長期使用時購買它。

>> Serial Port Utility Pro

下載試用版后,請解壓縮ZIP文件。從Unity菜單中,請選擇[Assets(資產)] > [Import Package(導入包)] > [Custom Package(自定義包)] ,然后選擇ZIP文件中包含的“spup_v2_free.unitypackage”。在接下來出現的窗口中,請選擇并導入包中的所有文件。

然后,創建一個空的GameObject,并附加SPUP組件。請從Unity菜單中,選擇[Game Objects(游戲對象)] > [Create Empty(創建空對象)]。 將新創建的游戲對象重命名為“SPUPObject”。選擇“SPUPObject”后,請從Unity菜單中選擇[Component] > [SerialPort] > [SerialPort Utility Pro],添加組件。

poYBAGPyzoyAbrQbAAGcOis9TrY718.jpg

設置為連接Arduino UNO。使用USB數據線將Arduino UNO連接到您的電腦,在已連接狀態下按下“SerialPort Utility Pro”上顯示“Show the devices connected to this PC”的黃色按鈕。如果您按下在新窗口中打開的按鈕,將會自動輸入VenderID、ProductID和Serial Number。需要使通信速度與Arduino程序中設置的值相匹配。請從BaudRate的下拉菜單中選擇57600bps。需要設置接收來自Arduino的數據的方法。請將“Read Protocol”設置為“Line Feed Data To String”。

pYYBAGPyzpCAD71QAAGvoCziLAE566.jpg

步驟6:主程序

創建一個用SPUP執行串行通信并根據加速度傳感器模塊的值移動迷宮的程序。這是本項目的核心程序。

請從Unity菜單中選擇[Assets] > [Create] > [C# Script],創建一個C#文件,并將其命名為“MazeScript”。雙擊C#文件打開編輯器,輸入以下代碼。

MazeScript.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class MazeScript : MonoBehaviour { public SerialPortUtility.SerialPortUtilityPro serialPort = null; Vector3 accSensor;//加速度傳感器 int photoRef1 = 0;//反射式光電傳感器1 int photoRef2 = 0;//反射式光電傳感器2 int threshold = 700;//反射式光電傳感器閾值 int mazeType = 0;//0:無 public GameObject mazeLv1;//迷宮Lv1的游戲對象 public GameObject mazeLv2;//迷宮Lv2的游戲對象 public GameObject mazeLv3;//迷宮Lv3的游戲對象 public GameObject ball;//小球的游戲對象 public GameObject goalText;//顯示終點 public Vector3 cameraPosOffset;//小球和相機的距離 Vector3 ballDefaultPos; void Start () { ballDefaultPos = ball.transform.position;//記錄小球的初始位置 reset(); } void Update () { //攝像頭 Camera.main.transform.position = ball.transform.position + cameraPosOffset; Camera.main.transform.LookAt(ball.transform.position); // 旋轉 Vector3 rotationEuler = new Vector3(Mathf.Atan2(accSensor.x, accSensor.z) / Mathf.PI *180, 0, Mathf.Atan2(accSensor.y, accSensor.z) / Mathf.PI *180); Quaternion rotation = Quaternion.Euler(rotationEuler); gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation,rotation, 0.1f); // 復位 if(Input.GetKeyDown(KeyCode.Space)) { reset(); } } public void reset() { setMaze();//迷宮的初始化 ball.transform.position = ballDefaultPos; ball.GetComponent().velocity = Vector3.zero; ball.GetComponent().angularVelocity = Vector3.zero; goalText.SetActive(false); stopVibe();//振動電機停止 } public void setMaze() { Debug.Log("photoRef1:" + photoRef1 +" photoRef2:" + photoRef2); if( (photoRef1 == 0) && (photoRef2 == 0)) { //如果值為 0,則不執行任何操作 return; }else if( (photoRef1 < threshold) && (photoRef2 > threshold) ) { //1級 mazeType = 1; mazeLv1.SetActive(true); mazeLv2.SetActive(false); mazeLv3.SetActive(false); }else if( (photoRef1 > threshold) && (photoRef2 < threshold) ) { //2級 mazeType = 2; mazeLv1.SetActive(false); mazeLv2.SetActive(true); mazeLv3.SetActive(false); }else if( (photoRef1 < threshold) && (photoRef2 < threshold) ) { //3級 mazeType = 3; mazeLv1.SetActive(false); mazeLv2.SetActive(false); mazeLv3.SetActive(true); } } public void ReadComplete(object data) { var text = data as List; if(text.Count != 5) return; accSensor = new Vector3( float.Parse(text[0]), float.Parse(text[1]), float.Parse(text[2])); photoRef1 = int.Parse(text[3]); photoRef2 = int.Parse(text[4]); } public void startVibe() { //使振動電機運轉的命令 serialPort.WriteCRLF("start"); } public void stopVibe() { //使振動電機停止的命令 serialPort.WriteCRLF("stop"); } }

請將“MazeScript”拖放到“MazeObject”。

從“MazeObject”的檢視面板中設置“MazeScript”。將“SPUPObject”拖放到Serial Port(串行端口)。將“MazeObject”中的“MazeLv1、Lv2、Lv3”分別拖放到“Maze Lv1、Lv2、Lv3”項目中。將“Sphere”拖放到“Ball”上。Goal Text(終點文本)將在稍后設置,因此暫時將其留空。Camera Pos Offset用來設置攝像頭和小球保持多少距離。請輸入x 0、y 5、z -3。

poYBAGPyzpOAQcMvAAHicDx2-lY437.jpg

在“SPUPObject”的檢視面板的SerialPortUtilityPro設置中,有一個叫做“Read Complete Event Object(Object)”的項目。該項目用來指定接收到串行通信時調用的函數。這里為“MazeScript”的 ReadComplete函數。

請單擊項目右下角的加號圖標。將Maze Object(迷宮對象)拖放到“無(對象)”字段。單擊右上角的Nofunction下拉菜單,然后選擇[MazeScript] > [ReadComplete]。

pYYBAGPyzpWAClHIAAAfkH7fVbQ939.jpg

如果在這里執行程序,應該可以收到來自Arduino的加速度傳感器模塊數據,并且迷宮應該可以動了。那就試試這部分程序的運行情況吧。然后,該休息一下了!

pYYBAGPyzpiAMshRAAE8MoZv94M942.jpg

步驟7:設置終點

我們需要創建一個當成功到達終點時做出反應的機制。在終點設置一個用于判斷碰觸終點的透明對象(觸發器),當小球碰到觸發器時,會顯示文本對象。

請從Unity菜單中選擇 [Game Object] > [3D Object] > [Cube],創建一個立方體。將其重命名為“GoalTrigger”,并將其放置在層級面板的“MazeObject”中。移動到地圖右上角的終點附近,通過縮放來調整大小。請取消選中“Mesh Renderer(網格渲染器)”,并將其設為隱藏,選中“BoxClider”的“設為觸發器”。

poYBAGPyzpyAApQ-AAE37-GJVak886.jpg

然后需要配置文本對象。請從Unity菜單中選擇[Game Object] > [3D Object] > [3DText]。將其重命名為“GoalText”,并將其放置在層級面板的“MazeObject”中。當使Transform的X旋轉90度時,應該可以看到“HelloWorld”字樣。在檢視面板的文本項目中輸入“GOAL!!!”。改變Transform的位置,將其移動到終點附近,將縮放設置為 0.2,并將字體大小設置為 100。

pYYBAGPyzp-AVapGAAFmuCPmh4s375.jpg

將用于判定到達終點的程序附加到“GoalObject”。
請從Unity菜單中選擇[Assets] > [Create] > [C# Script(C#腳本)],創建一個C#文件,并將其命名為“GoalScript”。雙擊C#文件打開編輯器,輸入以下代碼。

GoalScript.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; public class GoalScript : MonoBehaviour { public GameObject goalText; MazeScript MazeScript; void Start() { MazeScript = transform.root.GetComponent(); } void OnTriggerEnter(Collider other) { //接觸時調用的事件 if(other.name == "Sphere"){//如果名字是Shpere, goalText.SetActive(true);//顯示終點文本 MazeScript.startVibe();//發送使振動電機運轉的命令 } } }

請將“GoalScript”拖放到“GoalTrigger”,將“GoalText”拖放到“Goal Script”的“Goal Text”項目中。

從“MazeObject”的檢視面板中,將“GoalText”拖放到“MazeScript”的“GoalText”欄中。

如果在這里執行程序,當到達終點時會顯示“GOAL!!!”,并且振動電機應該會振動。要停止振動時,請按空格鍵重置游戲。終于像游戲樣了!

poYBAGPyzqGAAwYMAAEUNJ4Rm5s683.jpg

步驟8:2級關卡

需要給2級難度的迷宮添加扭曲功能。將觸發器配置在地板開孔的下方,然后將小球移動到扭曲對象的坐標處。

首先,請禁用“MazeLv1”并激活“MazeLv2”。就像設置到達終點判定機制一樣,制作一個立方體,將其放在地板開孔的下方,然后選中“BoxClider”的“設為觸發器”。對象的名稱是“WarpIn1”和“WarpIn2”。

接下來,需要配置對象,用來指定要扭曲的目標。請從Unity的菜單中選擇[Game Object] > [Create Empty]。對象的名稱是“WarpOut1”和“WarpOut2”。將其配置在另一個孔的附近。

請將“WarpIn1”、“WarpIn2”、“WarpOut1”和“WarpOut2”放入層級面板的“MazeLv2”中。

pYYBAGPyzqWAT6PDAAFi1mIDKmg535.jpg

需要編寫一個腳本來控制扭曲。請創建C#文件并在編輯器中輸入以下代碼:

WarpScript.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; public class WarpScript : MonoBehaviour { public GameObject warpOut; void OnTriggerEnter(Collider other) { if(other.name == "Sphere"){ other.transform.position = warpOut.transform.position; } } }

請將“WarpScript.cs”附加到“WarpIn1”和“WarpIn2”中,并將“WarpOut1”和“WarpOut2”拖放到“Warip Out”項。

當執行這部分程序時,小球掉進洞里,會穿越到另一個洞附近。

poYBAGPyzqiANFfkAAETnbE1ErM057.jpg

步驟9:3級關卡

3級難度的迷宮由兩部分組成。迷宮外側為“MazeLv3-A”,中間圓形挖空部分為“MazeLv3-B”。需要使中心部分緩慢旋轉。請禁用“MazeLv2”并激活“MaseLv3”。然后編寫使對象旋轉的代碼。請創建一個C#文件并輸入以下代碼:

RotateScript.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotateScript : MonoBehaviour { void Update() { transform.Rotate(new Vector3(0.0f, 0.0f, 0.05f)); } }

將“RotateScript.cs”附加到“MazeLv3-B”后,中心部分將會旋轉。碰撞檢測功能也會正常工作。

pYYBAGPyzqqAShbPAAE9_D4f-CE585.jpg

步驟10:切換迷宮

終于完成了這三個迷宮。最后,我們需要進行一些設置,使替換實物迷宮時3D模型迷宮也會切換。請在1級實物迷宮放置在盒子上的狀態下,運行Unity項目。當按下空格鍵時,控制面板上將會顯示如下所示的反射式光電傳感器反應值。

photoRef1:451 photoRef2:971

在1級實物迷宮的背面,在反射式光電傳感器1的位置貼有黑色標記,在反射式光電傳感器2的位置貼有白色標記。也就是說,反應值為黑色451,白色971。根據反射式光電傳感器的高度,該值可能會有所不同,但存在“黑色<白色”的關系。

1級是黑白,2級是白黑,3級是黑黑,所以需要確定白色和黑色的閾值,當滿足每個條件時就切換迷宮。

請看“MazeScript.cs”的第13行。在這里設置閾值。我們將閾值設為700,該值大致位于白色(451)和黑色(971)的中間。

int threshold = 700;//反射式光電傳感器閾值

在按下空格鍵時調用的setMaze()中,處理不同的情況。

public void setMaze() { Debug.Log("photoRef1:" + photoRef1 +" photoRef2:" + photoRef2); if( (photoRef1 == 0) && (photoRef2 == 0)) { //如果值為 0,則不執行任何操作 return; }else if( (photoRef1 < threshold) && (photoRef2 > threshold) ) { //1級 mazeType = 1; mazeLv1.SetActive(true); mazeLv2.SetActive(false); mazeLv3.SetActive(false); }else if( (photoRef1 > threshold) && (photoRef2 < threshold) ) { //2級 mazeType = 2; mazeLv1.SetActive(false); mazeLv2.SetActive(true); mazeLv3.SetActive(false); }else if( (photoRef1 < threshold) && (photoRef2 < threshold) ) { //3級 mazeType = 3; mazeLv1.SetActive(false); mazeLv2.SetActive(false); mazeLv3.SetActive(true); } }

已完成的Unity項目請參考分發文件中的“UnityApp”。但是,免費版的SerialPortUtilityPro無法分發文件,因此刪除了SerialPortUtilityPro包和“SPUPObject”。請參閱步驟5進行設置。

4. 結束語

大家辛苦了!這個“數字滾球迷宮”怎么樣?我認為這是一個使用Arduino和傳感器將實物和數字內容混合在一起的有趣作品。

在本文中,我們制作了三個stage,還制作了要穿越的洞和旋轉的墻壁。此外,還可以根據創意和想法創建各種stage,比如貌似有粘性而緩慢移動的地板、進入內部會彈出到空中的大炮、以及追球的對手角色。請大家勇敢地嘗試制作原創stage作品!

本系列連載一覽

前篇:用Arduino和加速度傳感器制作數字滾球迷宮
后篇:用Arduino和加速度傳感器制作數字滾球迷宮(本章)

poYBAGPyzqyALXDSAAA53eATtLI993.png

平原真

以事物之間的關系為主題進行探索的藝術家。他使用電腦和電子設備創作了很多媒體藝術作品,近年來,主要使用木材和石頭等天然素材創作三維立體作品。日本長岡造形大學副教授。Oggoroggo Products的代表。著有《Arduino實戰! 通過電子制作讓夢想成真》(OHMSHA)。https://makotohirahara.com/

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模型
    +關注

    關注

    1

    文章

    3268

    瀏覽量

    48944
  • 加速度傳感器

    關注

    12

    文章

    473

    瀏覽量

    55176
  • Arduino
    +關注

    關注

    188

    文章

    6472

    瀏覽量

    187376
  • Unity
    +關注

    關注

    1

    文章

    127

    瀏覽量

    21839
收藏 人收藏

    評論

    相關推薦

    什么是加速度傳感器加速度傳感器如何工作

    。但是剛開始的時候,你會發現光測量傾角和加速度好像不是很有用。但是,現在工程師們已經想出了很多方法獲得更多的有用的信息。加速度傳感器可以幫助你的機器人了解它現在身處的環境。是在爬山?還是在走下坡,摔倒
    發表于 02-02 15:30

    arduino學習筆記12 - ADXL345加速度傳感器實驗

    中就是使用加速度傳感器與陀螺儀進行卡爾曼濾波進行姿態矯正。本次試驗使用的ADXL345數字傳感器,通過I2C或者SPI接口直接輸出數字信號。
    發表于 10-24 09:39

    加速度傳感器的應用詳解

    幾個例子,更好的認識加速度傳感器。  游戲控制  加速度傳感器可以檢測上下左右的傾角的變化,因此通過前后傾斜手持設備來實現對游戲中物體的前后左右的方向控制,就變得很簡單。  圖像自動翻
    發表于 12-07 15:30

    加速度傳感器應用詳解

    例子,更好的認識加速度傳感器。 游戲控制 加速度傳感器可以檢測上下左右的傾角的變化,因此通過前后傾斜手持設備來實現對游戲中物體的前后左右的方向控制,就變得很簡單。 圖像自動翻轉
    發表于 11-07 16:15

    加速度傳感器的原理

    加工方法制造的加速度傳感器難以全面滿足這些要求。于是應用新興的微機械加工技術制作的微加速度傳感器應運而生。這種
    發表于 11-08 15:46

    加速度傳感器原理

    加工方法制造的加速度傳感器難以全面滿足這些要求。于是應用新興的微機械加工技術制作的微加速度傳感器應運而生。這種
    發表于 11-09 10:39

    如何測量汽車剎車踏板的位移和加速度

    要求測量汽車剎車踏板的位移和加速度,然后用VB上位機顯示,單片機是STC08S2,已有最小系統,加速度準備用3軸加速度傳感器測量,位移傳感器
    發表于 07-19 05:56

    加速度傳感器的選型

    由于傳感器應用十分廣泛,類型多種多樣,在各行各業都有應用。因此,在這里主要介紹用于振動測試的振動傳感器的選型。按測量振動參量分類可分為三大類:位移傳感器速度
    發表于 08-11 07:49

    加速度傳感器的工作原理解析

    滿足這些要求。于是應用新興的微機械加工技術制作的微加速度傳感器應運而生。這種傳感器體積小、重量輕、功耗小、啟動快、成本低、可靠性高、易于實現數字
    發表于 05-17 07:00

    陀螺儀傳感器和加速度傳感器的區別是什么?

    陀螺儀傳感器和加速度傳感器有什么不同?
    發表于 05-18 06:55

    單片機和加速度傳感器的跌倒監測系統設計

    本文介紹了單片機和加速度傳感器的跌倒監測系統設計方案。
    發表于 06-05 08:00 ?13次下載

    三軸加速度傳感器原理_三軸加速度傳感器應用

    本文首先介紹了三軸加速度傳感器原理,其次介紹了三軸加速度傳感器優點,最后介紹了三軸加速度傳感器
    發表于 10-17 15:19 ?1.9w次閱讀

    如何選擇合適的加速度傳感器

    這個是最先需要考慮的。這個取決于你系統中和加速度傳感器之間的接口。一般模擬輸出的電壓和加速度是成比例的,比如2.5V對應0g的加速度,2.6V對應于0.5g的
    發表于 01-17 16:44 ?1872次閱讀

    Arduino和加速度傳感器制作數字滾球迷宮【前篇】

    這次將為大家介紹一個使用Arduino制作的獨特電子作品,將會分【前篇】和【后篇】兩部分進行介紹。為我們介紹這個非常有趣的電子制作項目的是平原真先生,他是一位以事物之間的關系為主題進行
    的頭像 發表于 02-20 13:24 ?1202次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>Arduino</b><b class='flag-5'>和加速度</b><b class='flag-5'>傳感器</b><b class='flag-5'>制作數字</b><b class='flag-5'>滾球迷宮</b>【前篇】

    使用Arduino和加速度計陀螺儀傳感器MPU9250制作指南針

    電子發燒友網站提供《使用Arduino和加速度計陀螺儀傳感器MPU9250制作指南針.zip》資料免費下載
    發表于 06-26 10:24 ?1次下載
    使用<b class='flag-5'>Arduino</b><b class='flag-5'>和加速度</b>計陀螺儀<b class='flag-5'>傳感器</b>MPU9250<b class='flag-5'>制作</b>指南針
    主站蜘蛛池模板: 欧美性爱 成人| 成人毛片18岁女人毛片免费看| 红杏俱乐部| 伊人久久五月丁婷婷| 蜜臀色欲AV无人A片一区| china男士同性视频tv| 无限好资源免费观看| 久久精品国产在热亚洲| JLZZJLZZJLZ老师好多的水| 午夜福利不卡片在线播放免费 | 国家产午夜精品无人区| 99久久精品国产自免费| 乌克兰18性hd| 免费人成网站在线观看10分钟| 国产精品亚洲专区在线播放| 最近中文字幕免费高清MV视频| 日本在线高清不卡免费播放| 精品一成人岛国片在线观看| 岛国大片在线播放高清| 曰批视频免费40分钟不要钱 | 亚洲 日韩 欧美 国产专区| 美女张开腿让男生桶动态图| 国产女高清在线看免费观看| 99热这里只有精品88| 亚洲午夜精品A片久久软件| 日韩欧美一区二区三区免费看| 久久久大香菇| 国产精品无码亚洲区艳妇| 99热最新网站| 一本一本之道高清在线观看| 色综合a在线| 男子扒开美女尿口做羞羞的事| 国产在线不卡| 成人免费小视频| 799是什么意思网络用语| 亚洲国产韩国欧美在线不卡| 日韩人妻双飞无码精品久久 | 丁香成人网址| se01国产短视频在线观看| 最近高清中文字幕无吗免费看| 羞羞答答影院在线|