![ทำกระเป๋า Punching ใน Arduino และ Unity โดยใช้ Joystic และ Balloon: 5 ขั้นตอน ทำกระเป๋า Punching ใน Arduino และ Unity โดยใช้ Joystic และ Balloon: 5 ขั้นตอน](https://img.gwsigeps.com/img/circuits/make-a-punching-bag-in-arduino-and-unity-using-a-joystic-and-balloon-3.jpg)
สารบัญ:
- วัสดุ:
- ขั้นตอนที่ 1: ให้รวบรวมองค์ประกอบ
- ขั้นตอนที่ 2: ทำให้กระเป๋า Punching ของเรา
- ขั้นตอนที่ 3: รหัส Arduino
- ขั้นตอนที่ 4: รหัส Unity ตอนที่ 1
- ขั้นตอนที่ 5: ความสามัคคีส่วนที่ 2 ให้อ่านและย้ายกระเป๋า
คำแนะนำนี้เป็นเรื่องเกี่ยวกับการอ่านอินพุตจาก arduino joystic แต่มีการบิดเล็กน้อย! เรากำลังจะเปลี่ยนจอยสติกของเราให้กลายเป็นกระเป๋าเจาะ:) และยิ่งกว่านั้นเราจะเห็นภาพกระบวนการทั้งหมดในเอกภาพ 3 มิติ
โปรดทราบว่าคำแนะนำทั้งหมดนี้มีให้ใช้งานเป็นเพลย์ลิสต์ในช่อง YouTube ของฉันหากคุณกำลังมองหาคำแนะนำโดยละเอียดเพิ่มเติมโปรดดูลิงก์ด้านล่าง:
เพลย์ลิส
วัสดุ:
ขั้นตอนที่ 1: ให้รวบรวมองค์ประกอบ
สิ่งที่คุณต้องการสำหรับสิ่งนี้คือ
1- จอยสติ๊ก
2- บอลลูน
3- ซิลิกอนและเบา
4-4 ชายกับสายหญิง
ขั้นตอนที่ 2: ทำให้กระเป๋า Punching ของเรา
1- ขยายบอลลูนตามขนาดที่คุณต้องการ
2- ห่อหัวของปมบอลลูนกับลูกบิดของจอยสติ๊ก
* ถ้าเราจะต่อยบอลลูนในเวลานี้มันจะไม่เลื่อนจอยสติ๊กเนื่องจากปมทำหน้าที่เป็นข้อต่อดังนั้นเราจะต้อง:
3- ใช้ซิลิกอนร้อนแนบปมกับลูกบิด
และขอแสดงความยินดีกระเป๋าเจาะของเราพร้อม:)
ขั้นตอนที่ 3: รหัส Arduino
ใน arduino เราแค่ไปอ่านค่าจอยสติ๊ก x และ y แต่คำถามหลักคือเมื่อไหร่ที่ฉันจะส่งค่าของฉันและวิธีที่จะทำให้พวกเขาเข้าใจ ฉันต้องการส่งตลอดเวลาหรือไม่ คำตอบคือไม่อย่างที่คุณจะเห็นในภายหลังเราจะเพิ่มพลังในความสามัคคีและมีการเพิ่มอย่างต่อเนื่องโดยไม่คำนึงว่าขนาดเล็กจะทำให้มันทำงานอย่างบ้าคลั่งดังนั้นเราจำเป็นต้องกำหนดค่าที่บ่งชี้ว่าจอยสติกขยับพอคือ เจาะ
สังเกตุว่าจอยสติกที่ตำแหน่งพักไม่ได้ให้ 0,0 แต่แทนค่ามัธยฐานระหว่าง 0 และค่าสูงสุดที่อ่านซึ่งเป็นค่าเริ่มต้น 1,023 ผมก็แมปค่าสำหรับการคำนวณง่ายขึ้นจาก (0, 255) ดังนั้นตำแหน่งพักผ่อนของเราคือ ประมาณ (124,124) และจากนั้นฉันพิจารณาว่าครึ่งทางระหว่าง 124 และ 255 (186) และ 124 และ 0 (62) จะบ่งบอกถึงการเคลื่อนไหวที่สำคัญและนั่นคือเมื่อฉันต้องการค่าของฉัน
การตั้งค่าเป็นโมฆะ () {
// ใส่รหัสการตั้งค่าของคุณที่นี่เพื่อเรียกใช้ครั้งเดียว:
Serial.begin (9600); }
void loop () {// ใส่รหัสหลักของคุณที่นี่เพื่อทำงานซ้ำ ๆ:
int x = analogRead (A0); int y = analogRead (A2); x = แผนที่ (x, 0, 1023, 0, 255); y = แผนที่ (y, 0, 1023, 0, 255); ถ้า (x> 185 || x <62 || y> 185 || y <62) {Serial.flush (); Serial.print (x); Serial.print (''); Serial.print (y); Serial.println (); ล่าช้า (20); }
ล่าช้า (20); // writetimout
ขั้นตอนที่ 4: รหัส Unity ตอนที่ 1
ในส่วนนี้เราจะทำกระเป๋าเจาะและเช่นเคยโปรดให้แน่ใจว่าโครงการความสามัคคีของคุณช่วยให้การสื่อสารแบบอนุกรมโดย
แก้ไข> การตั้งค่าโครงการ> โปรแกรมเล่น> เลื่อนลงเพื่อปรับให้เหมาะสมและเปลี่ยนความเข้ากันได้ของ api เป็น. NET 2.0
1- สร้างกระบอกซึ่งจะออกถุงเจาะ
2- แนบองค์ประกอบ rigidbody กับมัน คนที่แข็งทื่อเพียงแค่อนุญาตให้วัตถุนั้นอยู่ภายใต้กฎหมายของฟิสิกส์เอกภาพเช่นแรงโน้มถ่วงแรงมวล … ฯลฯ
3- ต่อข้อต่อสปริงเข้ากับมันและตรวจสอบให้แน่ใจว่าได้วางเดือย (กึ่งกลางของการหมุน) ที่ตรงกลางด้านบนของกระบอกสูบ
ตอนนี้เราจำเป็นต้องเปลี่ยนคุณสมบัติทางฟิสิกส์บางอย่างในข้อต่อและตัวแข็งของเราเพื่อทำให้กระเป๋ามีความยืดหยุ่นมากขึ้น
a- เปลี่ยนลากเชิงมุมถึง 10
b-change สปริงเป็น 70
c- ตั้งค่าแดมเปอร์เป็น 40
ขั้นตอนที่ 5: ความสามัคคีส่วนที่ 2 ให้อ่านและย้ายกระเป๋า
คุณสามารถทำตามวิดีโอสอนสำหรับคำอธิบายทีละขั้นตอนหรือเพียงแค่แนบสคริปต์ต่อไปนี้เพื่อทรงกระบอกของคุณและสนุก:)
ใช้ UnityEngine;
ใช้ System.Collections; ใช้ System.IO.Ports;
Punch ระดับสาธารณะ: MonoBehaviour {
int สาธารณะ x, y; พลัง int สาธารณะ มุมลอยสาธารณะ เครื่องเล่น AudioSource สาธารณะ
Vector3 punchDir ส่วนตัว Rigidbody ส่วนตัวเจาะกระเป๋า; สตรีม SerialPort ส่วนตัว = ใหม่ SerialPort (@ ". " + "COM11", 9600);
// ใช้สำหรับการเริ่มต้นเป็นโมฆะเริ่มต้น () {
stream.Open (); stream.ReadTimeout = 25; StartCoroutine (readData ()); punchingBag = GetComponent (); } // Update เรียกว่าหนึ่งครั้งต่อเฟรมเป็นโมฆะ Update () {punchDir = new Vector3 (x, 0, y); มุม = Vector2.Angle (Vector2.up, punchDir); if (มุม <0) {Debug.Log ("ค่าลบ"); }}
โมฆะสาธารณะ punchIt (int _x, int _y) {punchDir = ใหม่ Vector3 (_x, 0f, _y); punchingBag.AddForce (power * punchDir); player.Play (); }
IEnumerator readData () {
ในขณะที่ (จริง) {ถ้า (สตรีม IsIspen) {
ลอง {
ค่าสตริง = stream.ReadLine (); string values = value.Split (','); int x1 = int.Parse (ค่า 0); int y1 = int.Parse (ค่า 1); Debug.Log (x1); if (x1> = 62 && x1 <= 185) {x1 = 0;
} ถ้า if (x1> 185) {x1 = -1; } ถ้า if (x1 <62) {x1 = 1; }
ถ้า (y1> = 62 && y1 <= 185) {y1 = 0;
} อื่นถ้า (y1> 185) {y1 = -1; } อื่นถ้า (y1 <62) {y1 = 1; Debug.Log (x1); //Debug.Log(y1); punchIt (x1, y1); } catch (System.Exception) {// Debug.Log ("การยกเว้น TimeOut"); }
} ผลตอบแทนเป็นโมฆะ;
}
} }