Lav en stødpose i Arduino og Unity ved hjælp af en joystik og ballon: 5 trin

Lav en stødpose i Arduino og Unity ved hjælp af en joystik og ballon: 5 trin

Indholdsfortegnelse:

Anonim

Denne instruktør handler simpelthen om at læse input fra en joduisk arduino men med et lille twist! vi skal dreje vores joystick i en stansekasse:) og endnu bedre vil vi visualisere hele processen i enhed3D

Vær opmærksom på, at hele denne instruktion er tilgængelig som en afspilningsliste på min youtube-kanal. Hvis du leder efter mere detaljerede instruktioner, kan du se nedenstående link:

afspilningsliste

forsyninger:

Trin 1: Lad os samle komponenterne

alt hvad du behøver for dette er

1- joystick

2- ballon

3- silicium og lighter

4-4 mand til kvinde ledninger

Trin 2: Lad os lave vores stødpose

1 - blæs ballonen til en størrelse af din præference

2- Sæt hovedet på ballonens knude på joystickets knap

* hvis vi skulle slå ballonen på dette tidspunkt, ville det ikke bevæge joysticket, da knuden fungerer som en fælles, så vi bliver nødt til at:

3- Brug varmt silicium fastgør knuden til knappen

og tillykke med vores stødpose er klar:)

Trin 3: Arduino Code

i arduino vil vi simpelthen læse joystickets x- og y-værdier, men hovedspørgsmålet er, hvornår sender jeg mine værdier og hvordan de giver mening. vil jeg sende det hele tiden? svaret er nej, som du vil se senere, vil vi tilføre kraft i enhed og have det tilføjet konstant uanset hvor lille det ville gøre det til at opføre sig som vanvittigt, så vi skal bestemme en værdi, der indikerer, at et joystick er flyttet nok, dvs. udstansede

Bemærk, at joysticket i hvilestilling ikke giver dig 0,0, men i stedet en medianværdi mellem 0 og maksimalaflæsning, som som standard er 1023, jeg kortlæste værdierne for lettere beregninger fra (0, 255), så vores hvileposition er omkring 124 124 og derefter fastslog jeg, at halvvejs mellem 124 og 255 (186) og 124 og 0 (62) vil være tegn på signifikant bevægelse, og det er, når jeg skal senge mine værdier

void setup () {

// sæt din setup kode her for at køre en gang:

Serial.begin (9600); }

void loop () {// sæt din hovedkode her, for at køre gentagne gange:

int x = analogRead (A0); int y = analogRead (A2); x = map (x, 0, 1023, 0, 255); y = map (y, 0, 1023, 0, 255); hvis (x> 185 || x <62 || y> 185 || y <62) {Serial.flush (); Serial.print (x); Serial.print (''); Serial.print (y); Serial.println (); forsinkelse (20); }

forsinkelse (20); // writetimout

}

Trin 4: Unity Code Part1

I denne del vil vi lave stanseposen og som altid skal du sørge for at dine enhedsprojekter tillader seriel kommunikation ved

rediger> projektindstillinger> afspiller> rul ned til optimering og skift api-kompatibilitet til.NET 2.0

1- Opret en cylinder, der vil være ud stansepose

2-fastgør en stivbygningskomponent til den. en stiv krop tillader simpelthen objektet at blive udsat for love af enhedens fysik som tyngdekraft, kraft, masse … osv

3- Fastgør en fjederforbindelse til det og sørg for at placere svinget (rotationscentret) øverst i midten af ​​cylinderen

4-nu er vi nødt til at ændre nogle fysiske egenskaber i vores fælles og stive krop for at gøre posen mere modstandsdygtig

a-ændring vinkel trækker til 10

b-skift forår til 70

c-indstil spjældet til 40

Trin 5: Enhed Del 2 Lader læse og flytte posen

du kan følge video tutorialen for trin for trin forklaring eller blot vedhæfte følgende script til din cylinder og have det sjovt:)

ved hjælp af UnityEngine;

ved hjælp af System.Collections; ved hjælp af System.IO.Ports;

offentlig klasse Punch: MonoBehaviour {

offentlige int x, y; offentlig int kraft; offentlig float vinkel; offentlig AudioSource-afspiller;

private Vector3 punchDir; Private Rigidbody Punching Bag; privat serialport stream = ny serialport (@ ". " + "COM11", 9600);

// Brug dette til initialisering tomt Start () {

stream.Open (); stream.ReadTimeout = 25; StartCoroutine (readData ()); punchingBag = GetComponent (); } // Opdatering kaldes en gang pr. Ramme ugyldig Opdatering () {punchDir = ny Vector3 (x, 0, y); vinkel = Vector2.Angle (Vector2.up, punchDir); hvis (vinkel <0) {Debug.Log ("negativ værdi"); }}

public void punchIt (int _x, int _y) {punchDir = ny Vector3 (_x, 0f, _y); punchingBag.AddForce (power * punchDir); player.Play (); }

IEnumerator readData () {

mens (true) {if (stream.IsOpen) {

prøve {

streng værdi = stream.ReadLine (); streng værdier = value.Split (','); int x1 = int.Parse (værdier 0); int y1 = int.Parse (værdier 1); Debug.log (x1); hvis (x1> = 62 && x1 <= 185) {x1 = 0;

} ellers hvis (x1> 185) {x1 = -1; } ellers hvis (x1 <62) {x1 = 1; }

hvis (y1> = 62 && y1 <= 185) {y1 = 0;

} ellers hvis (y1> 185) {y1 = -1; } ellers hvis (y1 <62) {y1 = 1; } Debug.Log (x1); //Debug.Log(y1); punchIt (x1, y1); } catch (System.Exception) {// Debug.Log ("TimeOut Exception"); }

} udbytte retur nul;

}

} }