Orodha ya maudhui:

Baiskeli ya infinity - Baiskeli ya Mafunzo ya Baiskeli ya Ndani: Hatua 5
Baiskeli ya infinity - Baiskeli ya Mafunzo ya Baiskeli ya Ndani: Hatua 5

Video: Baiskeli ya infinity - Baiskeli ya Mafunzo ya Baiskeli ya Ndani: Hatua 5

Video: Baiskeli ya infinity - Baiskeli ya Mafunzo ya Baiskeli ya Ndani: Hatua 5
Video: ONGEZA NGUVU ZA KIUME | masaa 3 Bila kuchoka | WANAUME TU HII 2024, Novemba
Anonim
Image
Image
Vifaa
Vifaa

Wakati wa majira ya baridi, siku za baridi na hali mbaya ya hewa, wapenda baiskeli wana chaguzi chache tu za kufanya mazoezi ya kufanya mchezo wao wa kupenda. Tulikuwa tunatafuta njia ya kufanya mafunzo ya ndani na usanidi wa baiskeli / mkufunzi kuwa burudani zaidi lakini bidhaa nyingi zinazopatikana ni za gharama kubwa au ni boring tu kutumia. Hii ndio sababu tukaanza kukuza baiskeli ya infinity kama mchezo wa video wa mafunzo ya Chanzo wazi. Baiskeli ya infinity inasoma kasi na mwelekeo kutoka kwa baiskeli yako na kutoa kiwango cha mwingiliano ambao hauwezi kupatikana kwa urahisi na wakufunzi wa baiskeli.

Tunachukua faida ya unyenyekevu unaopatikana kutoka kwa mdhibiti mdogo wa Arduino na sehemu chache zilizochapishwa za 3D kupata sensorer za gharama nafuu kwa baiskeli iliyowekwa kwenye mkufunzi. Habari hupelekwa kwa mchezo wa video uliofanywa na injini maarufu ya kutengeneza mchezo, Umoja. Mwisho wa mafunzo haya, unapaswa kuwa na uwezo wa kuweka sensorer zako kwenye baiskeli yako na kuhamisha habari ya sensorer zako kwa Umoja. Tulijumuisha hata wimbo ambao unaweza kupanda na kujaribu usanidi wako mpya. Ikiwa una nia ya kuchangia unaweza kuangalia GitHub yetu.

Hatua ya 1: Vifaa

Vifaa
Vifaa

Orodha ya nyenzo utahitaji inaweza kutofautiana kidogo; kwa

mfano, saizi ya baiskeli yako itaamuru urefu wa nyaya za jumper unayohitaji lakini hapa kuna sehemu kuu ambazo utahitaji. Labda unaweza kupata bei rahisi kwa kila kipande kwenye wavuti kama AliExpress lakini kusubiri miezi 6 kwa usafirishaji sio chaguo kila wakati kwa hivyo walikuwa wakitumia sehemu ghali kidogo kwa hivyo makadirio hayajafutwa.

1 x Arduino nano ($ 22.00)

1 x Mini Breadboard ($ 1.33 / kitengo)

1 x 220 Ohm kupinga ($ 1.00 / kit)

1 x 10K Potentiometer ($ 1.80 / kitengo)

1 x sensa ya Ukumbi ($ 0.96)

20 cm x 6 mm 3D mkanda wa muda wa kuchapisha ($ 3.33)

Kit 1 x Vipimo mbali mbali vya M3 na bolts ($ 6.82)

1 x Sumaku ya kasi ya baiskeli ($ 0.98)

Tuliweka nyenzo hapo juu na sehemu zilizochapishwa za 3D. Faili tulizotumia zimeorodheshwa na zinahesabiwa na mkutano sawa na picha mwanzoni mwa sehemu hii. Faili zote zinaweza kupatikana kwenye Thingiverse. Unaweza kuzitumia kama ilivyo lakini hakikisha kwamba vipimo tulivyotumia vinaendana na baiskeli yako.

1. FremuConnection_PotentiometerHolder_U_Holder.stl

2. FremuConnection_Spacer.stl

3. BreadboardFrameHolder.stl

4. Pulley_PotentiometerSide.stl

5. Pot_PulleyConnection.stl

6. FremuConnection.stl

7. Pulley_HandleBarSide_Print2.stl

8. FremuToHallSensorConnector.stl

9. PotHolder.stl

10. HallSensorAttach.stl

Hatua ya 2: Kusoma na Kuhamisha Takwimu kwa Umoja

Kusoma na Kuhamisha Takwimu kwa Umoja
Kusoma na Kuhamisha Takwimu kwa Umoja

Nambari ya Arduino na Unity itafanya kazi pamoja kukusanya, kuhamisha na kusindika data kutoka kwa sensorer kwenye baiskeli. Umoja utaomba thamani kutoka kwa Arduino kwa kutuma kamba kupitia safu na subiri Arduino kujibu na maadili yaliyoombwa.

Kwanza, tunaandaa Arduino na Maktaba ya Serial Command ambayo hutumiwa kusimamia maombi kutoka kwa Umoja kwa kuunganisha kamba ya ombi na kazi. Kuweka msingi kwa maktaba hii kunaweza kufanywa kama ifuatavyo;

# pamoja na "SerialCommand.h"

SerialCommand sCmd; kuanzisha batili () {sCmd.addCommand ("TRIGG", TriggHanlder); Serial. Kuanza (9600); } kitanzi batili () {wakati (Serial.available ()> 0) {sCmd.readSerial (); }} batili TriggHandler () {/ * Soma na usambaze sensorer hapa * /}

Kazi TriggHandler imeambatanishwa na kitu SCmd. Ikiwa serial inapokea kamba inayofanana na amri iliyoambatishwa (katika kesi hii TRIGG), kazi ya TriggHandler inatekelezwa.

Tunatumia potentiometer kupima mwelekeo wa sensorer na sensa ya kumbi kupima mzunguko kwa dakika ya baiskeli. Usomaji kutoka kwa potentiometer unaweza kufanywa kwa urahisi kwa kutumia kazi za kujengwa kutoka Arduino. Kazi TriggHandler inaweza kisha kuchapisha thamani kwa serial na mabadiliko yafuatayo.

batili TriggHandler () {

/ * Kusoma thamani ya potentiometer * / Serial.println (AnalogRead (ANALOGPIN)); }

Sensor ya Hall ina mipangilio zaidi kabla ya kuwa na vipimo muhimu. Kinyume na potentiometer, thamani ya papo hapo ya sensa ya kumbi sio muhimu sana. Kwa kuwa walikuwa wakijaribu kupima kasi ya gurudumu, wakati kati ya vichocheo ndivyo walivutiwa.

Kila kazi inayotumiwa katika nambari ya Arduino inachukua muda na ikiwa sumaku inaambatana na sensa ya Jumba wakati usiofaa kipimo kinaweza kucheleweshwa kabisa au kurukwa kabisa kabisa. Kwa kweli hii ni mbaya kwa sababu Arduino angeweza kuripoti kasi ambayo ni tofauti sana na kasi halisi ya gurudumu.

Ili kuepuka hili, tunatumia huduma ya Arduinos inayoitwa ambatisha kukatiza ambayo inatuwezesha kuchochea kazi wakati wowote pini ya dijiti iliyochaguliwa inasababishwa na ishara inayoinuka. Kazi rpm_fun imeambatanishwa na usumbufu na laini moja ya nambari iliyoongezwa kwenye nambari ya usanidi.

usanidi batili () {

sCmd.addCommand ("TRIGG", TriggHanlder); ambatisha Kukatiza (0, rpm_fun, RISING); Serial. Kuanza (9600); } // Kazi rpm_fun hutumiwa kuhesabu kasi na hufafanuliwa kama; unsigned long lastRevolTime = 0; bastola ndefu isiyosainiwa Kasi = 0; batili rpm_fun () {unsigned long revolTime = millis (); deltaTime ya muda mrefu isiyosajiliwa = revolTime - lastRevolTime; / * revolSpeed ni thamani inayosambazwa kwa nambari ya Arduino * / revolSpeed = 20000 / deltaTime; lastRevolTime = muda wa maasi; } TriggHandler inaweza kisha kusambaza habari iliyobaki ikiombwa. utupu TriggHanlder () {/ * Kusoma thamani ya potentiometer * / Serial.println (analogRead (ANALOGPIN)); Serial.println (kasi ya kasi); }

Sasa tuna vizuizi vyote vya ujenzi ambavyo vinaweza kutumiwa kujenga nambari ya Arduino ambayo itahamisha data kupitia serial hadi ombi linapotolewa na Umoja. Ikiwa unataka kuwa na nakala ya nambari kamili, unaweza kuipakua kwenye GitHub yetu. Ili kujaribu ikiwa nambari imewekwa vizuri, unaweza kutumia mfuatiliaji wa serial kutuma TRIGG; hakikisha umeweka laini inayoishia kurudi kwa Inasimamia. Sehemu inayofuata itazingatia jinsi hati za Umoja wetu zinaweza kuomba na kupokea habari kutoka Arduino.

Hatua ya 3: Kupokea na Kusindika Takwimu

Kupokea na Kusindika Takwimu
Kupokea na Kusindika Takwimu

Umoja ni programu nzuri inayopatikana bure kwa hobbyist

nia ya kutengeneza mchezo; inakuja na idadi kubwa ya utendaji ambao unaweza kupunguza wakati kuweka vitu kadhaa kama vile utaftaji au programu ya GPU (shading ya AKA) bila kuzuia kinachoweza kufanywa na hati za C #. Umoja na watawala wadogo wa Arduino wanaweza kutumiwa pamoja kuunda uzoefu wa kipekee wa maingiliano na bajeti ndogo.

Lengo la kufundisha hii ni kusaidia kuanzisha mawasiliano kati ya Umoja na Arduino kwa hivyo hatutazamia sana katika huduma nyingi zinazopatikana na Umoja. Kuna mafunzo mengi makubwa ya umoja na jamii nzuri ambayo inaweza kufanya kazi bora zaidi kuelezea jinsi Unity inavyofanya kazi. Walakini, kuna tuzo maalum kwa wale wanaofanikiwa kufanya kazi kupitia hii inayoweza kufundishwa ambayo hutumika kama onyesho kidogo la kile kinachoweza kufanywa. Unaweza kupakua kwenye Github yetu jaribio la kwanza la kufanya wimbo na fizikia halisi ya baiskeli.

Kwanza, wacha tuende kwa kiwango cha chini ambacho kinapaswa kufanywa ili kuwasiliana na Arduino kupitia safu. Itaonekana haraka kuwa nambari hii haifai kwa mchezo wa kucheza lakini ni vizuri kupitia kila hatua na ujifunze ni mapungufu gani.

Katika Umoja, tengeneza eneo mpya na GameObject moja tupu iitwayo ArduinoPokea kwa kushikilia hati ya C # pia inaitwa ArduinoReceive. Hati hii ndio ambapo tutaongeza nambari yote inayoshughulikia mawasiliano na Arduino.

Kuna maktaba ambayo lazima ifikiwe kabla ya kuwasiliana na bandari za serial za kompyuta yako; Umoja lazima uanzishwe ili kuruhusu maktaba fulani itumike. Nenda kwenye Hariri-> Kutuma Mradi-> Mchezaji na karibu na Kiwango cha Utangamano cha Api chini ya ubadilishaji wa Usanidi. NET 2.0 Subset kwa. NET 2.0. Sasa ongeza nambari ifuatayo juu ya hati;

kutumia Bandari za System. IO;

Hii itakuruhusu ufikie darasa la SerialPort ambalo unaweza kufafanua kama kitu kwa Darasa la Kupokea la Arduino. Fanya iwe ya faragha ili kuepuka usumbufu wowote kutoka kwa hati nyingine.

SerialPort binafsi arduinoPort;

Kitu arduinoPort kinaweza kufunguliwa kwa kuchagua bandari sahihi (kwa mfano ambayo USB Arduino imeunganishwa) na kiwango cha baud (i.e. kasi ambayo habari hutumwa). Ikiwa huna uhakika ni bandari gani ambayo Arduino imeingizwa ndani unaweza kujua ama katika msimamizi wa kifaa au kwa kufungua IDE ya Arduino. Kwa kiwango cha baud, thamani chaguomsingi kwenye kifaa zaidi ni 9600, hakikisha tu kuwa unayo nambari hii katika nambari yako ya Arduino na inapaswa kufanya kazi.

Nambari inapaswa sasa kuonekana kama hii;

kutumia System. Collections;

kutumia System. Collections. Generic; kutumia UnityEngine; kutumia Bandari za System. IO; darasa la umma ArduinoPokea: MonoBehaviour {private SerialPort arduinoPort; // Tumia hii kwa uanzishaji wa batili Anza () {arduinoPort = mpya SerialPort ("COM5", 9600); bandari ya arduino. Fungua (); AndikaToArduino ("TRIGG"); }}

Nambari yako ya COM itakuwa tofauti. Ikiwa uko kwenye MAC, jina la COM linaweza kuwa na jina ambalo linaonekana kama hii /dev/cu.wchusbserial1420. Hakikisha nambari kutoka sehemu ya 4 imepakiwa kwa Arduino na mfuatiliaji wa serial umefungwa kwa sehemu hii yote na kwamba nambari hii inakusanyika bila shida.

Wacha tupeleke ombi kwa Arduino kila fremu na tuandike matokeo kwenye kidirisha cha dashibodi. Ongeza kazi ya AndikaToArduino kwa darasa ArduinoPokea. Kurudi kwa gari na laini mpya ni muhimu kwa nambari ya Arduino ili kuchanganua maagizo yanayokuja vizuri.

utupu wa kibinafsi AndikaToArduino (ujumbe wa kamba)

{ujumbe = ujumbe + "\ r / n"; arduinoPort. Andika (ujumbe); arduinoPort. BaseStream. Flush (); }

Kazi hii inaweza kuitwa katika kitanzi cha Sasisho.

Sasisha batili ()

{AndikaToArduino ("TRIGG"); Debug. Log ("Thamani ya Kwanza:" + arduinoPort. ReadLine ()); Debug. Log ("Thamani ya Pili:" + arduinoPort. ReadLine ()); }

Nambari iliyo hapo juu ni kiwango cha chini kabisa unahitaji kusoma data kutoka kwa Arduino. Ikiwa utazingatia sana ramprogrammen iliyotolewa na umoja, unapaswa kuona kushuka kwa utendaji. Kwa upande wangu, huenda kutoka karibu na ramprogrammen 90 bila kusoma / kuandika hadi 20 FPS. Ikiwa mradi wako hauhitaji sasisho za mara kwa mara inaweza kuwa ya kutosha lakini kwa mchezo wa video, Ramprogrammen 20 ni ndogo sana. Sehemu inayofuata itaangazia jinsi unaweza kuboresha utendaji kwa kutumia uzi nyingi.

Hatua ya 4: Kuongeza Uhamishaji wa Takwimu

Sehemu iliyopita ilifunua jinsi ya kuweka msingi

mawasiliano kati ya mpango wa Arduino na Umoja. Shida kubwa na nambari hii ni utendaji. Katika utekelezaji wa sasa, Umoja unapaswa kusubiri Arduino kupokea, kusindika na kujibu ombi. Wakati huo, nambari ya Umoja inapaswa kusubiri ombi lifanyike na haifanyi kitu kingine chochote. Tulitatua suala hili kwa kuunda uzi ambao utashughulikia maombi na kuhifadhi utofauti kwenye uzi kuu.

Kuanza, lazima tujumuishe maktaba ya kufunga kwa kuongeza;

kutumia Mfumo. Kukanyaga;

Halafu, tunaanzisha kazi ambayo tunaanza kwenye nyuzi. AsynchronousReadFromArduino huanza kwa kuandika ombi kwa Arduino na kazi ya WrtieToArduino. Usomaji umefungwa katika kizuizi cha kukamata, ikiwa wakati wa kusoma, vigeu hubaki kuwa batili na kazi ya OnArduinoInfoFail inaitwa badala ya OnArduinoInfoReceive.

Ifuatayo tunafafanua kazi za OnArduinoInfoFail na OnArduinoInfoReceive. Kwa hili linaloweza kufundishwa, tunachapisha matokeo kwenye koni lakini unaweza kuhifadhi matokeo kwenye vigeuzi unavyohitaji kwa mradi wako.

utupu wa kibinafsi OnArduinoInfoFail ()

{Debug. Log ("Usomaji umeshindwa"); } utupu wa faragha OnArduinoInfo Imepokelewa (kuzungushwa kwa kamba, kasi ya kamba) {Debug. Log ("Readin Sucessfull"); Debug. Log ("Thamani ya Kwanza:" + mzunguko); Debug. Log ("Thamani ya pili:" + kasi); }

Hatua ya mwisho ni kuanza na kusimamisha nyuzi ambazo zitauliza maadili kutoka kwa Arduino. Lazima tuhakikishe kwamba uzi wa mwisho umefanywa na kazi ya mwisho kabla ya kuanza mpya. Vinginevyo, maombi mengi yanaweza kufanywa kwa Arduino kwa wakati mmoja ambayo inaweza kuchanganya Arduino / Umoja na kutoa matokeo yasiyotabirika.

binafsi Thread activeThread = null;

Sasisha batili () {if (activeThread == null ||! activeThread. IsAlive) {activeThread = new Thread (AsynchronousReadFromArduino); ActiveThread. Start (); }}

Ikiwa unalinganisha utendaji wa nambari na ile tuliyoandika katika sehemu ya 5, utendaji unapaswa kuboreshwa sana.

utupu wa kibinafsi OnArduinoInfoFail ()

{Debug. Log ("Usomaji umeshindwa"); }

Hatua ya 5: Wapi Ifuatayo?

Wapi Ijayo?
Wapi Ijayo?

Tuliandaa onyesho ambalo unaweza kupakua kwenye Github yetu (https://github.com/AlexandreDoucet/InfinityBike), pakua nambari na mchezo na usafiri kupitia wimbo wetu. Yote yamewekwa kwa mazoezi ya haraka na tunatumahi kuwa inaweza kukupa ladha ya kile unaweza kujenga ikiwa utatumia kile tulichokufundisha na hii inayoweza kufundishwa.

Mikopo

Wachangiaji wa Mradi

Alexandre Doucet (_Doucet_)

Maxime Boudreau (MxBoud)

Vyanzo vya nje [Injini ya mchezo wa Umoja] (https://unity3d.com)

Mradi huu ulianza baada ya kusoma mafunzo ya Allan Zucconi "jinsi ya kuunganisha Arduino na Umoja" (https://www.alanzucconi.com/2015/10/07/how-to-int …….)

Ombi kutoka kwa Arduino linashughulikiwa kwa kutumia maktaba ya SerialCommand (https://github.com/kroimon/Arduino-SerialCommand)

Ilipendekeza: