Mchoro wa roboti ya Arduino ya kucheza densi. Seti ya Roboti Gari la Roboti lenye magurudumu mawili

Ni rahisi sana kutengeneza mashine tofauti na Arduino udhibiti wa kijijini, sensorer rahisi na mantiki. Ndiyo maana mstari huu ni maarufu sana. Kuna sensorer nyingi zinazoendana na bodi za upanuzi zinazouzwa. Mtandao umejaa maktaba za programu zilizotengenezwa tayari na miradi ya chanzo huria kwa hafla zote. Karibu maswali yote ambayo utakuwa nayo katika mchakato wa kusimamia Arduino tayari yameulizwa na mtu, na utapata jibu kila wakati.

Hebu tuanzie mahali fulani? Swali kuu ni uchaguzi wa mtawala. Kuna marekebisho mengi ya Arduino, pamoja na clones za wahusika wengine zilizojengwa juu ya matoleo haya. Hapa kuna, labda, madarasa mawili ya kuvutia zaidi kwetu:

  • Arduino Uno ni chaguo bora kwa anayeanza, bodi rahisi zaidi, ya bajeti na ya kawaida. Inategemea chip ya ATmega328 na mzunguko wa saa saa 16 MHz, kumbukumbu ya 32 KB flash, 2 KB RAM na 1 KB EEPROM. Uno ina pembejeo / matokeo ya dijiti 14 ambayo yanaweza kutumika kudhibiti sensorer na servos na vifaa vingine;
  • Arduino Mega / Mega 2560 ni bodi ambayo inafaa wakati unajua mapema kuwa mradi huo utakuwa mgumu. Tofauti kuu ni idadi kubwa ya pembejeo / mazao (48 katika Mega, 54 katika Mega 2560). Pia kuna kumbukumbu nyingi zaidi: 8 KB RAM, 4 KB EEPROM, na kumbukumbu ya flash 128 na 256 KB (katika Mega na Mega 2560, mtawaliwa). Bodi pia hutofautiana kutoka kwa kila mmoja kwenye chip Kasi ya USB na sifa zingine.

Bila shaka, pia kuna Arduino Pro, Arduino LilyPad na wengine wengi. Lakini kwa sasa hebu tuzingatie mifano miwili ya kwanza. Kwa upande wetu, kila kitu ni rahisi sana: Mega inahitajika kwa roboti yenye miguu mingi.

Msimbo wa kwanza

Kwanza hebu tusakinishe Kitambulisho cha Arduino(arduino.cc) ni jukwaa mtambuka mazingira huru maendeleo. Sasa, ikiwa tunaunganisha Arduino yetu, tunaweza kujaribu kuandika msimbo wa kwanza na mfano rahisi zaidi: mpango wa LED blinking. Watawala wengi wa Arduino wanayo na wameunganishwa na pin 13. Kwa njia, duniani Programu za Arduino kawaida huitwa michoro. Hapa kuna maandishi ya mchoro na maoni:

// Hebu tupe pini hii jina la LED: const int LED = 13; usanidi utupu() ( // Anzisha pini ya dijiti // kwa kutoa: pinMode(LED, OUTPUT); ) kitanzi tupu() ( // Weka kiwango kimoja cha kimantiki // kubandika 13 (washa LED): digitalWrite(LED , HIGH); // Sitisha utekelezaji wa mchoro // kwa pili: kuchelewesha (1000) tumia kiwango cha sifuri cha mantiki // kwa pini 13 (kuzima LED): digitalWrite (LED, LOW); / Sitisha utekelezaji wa mchoro // kwa sekunde: kuchelewesha (1000);

Makini na vipengele vya kuanzisha na kitanzi. Lazima ziwepo kwenye mchoro wowote wa Arduino. Usanidi huitwa mara moja baada ya kuwasha au baada ya kidhibiti kuwashwa tena. Ikiwa unataka msimbo utekelezwe mara moja tu, hapa ndipo unapaswa kuiweka. Mara nyingi hizi ni kila aina ya taratibu za kuanzisha kitu. Mchoro wetu sio ubaguzi: pini za kidijitali za Arduino zinaweza kufanya kazi kama pembejeo na matokeo. Katika utendakazi wa usanidi tunasema kwamba pin 13 itafanya kazi kama pato la kidijitali la kidhibiti.

Baada ya kazi ya kuanzisha kukamilisha kazi yake, kitanzi kilichofungwa kinazinduliwa moja kwa moja, ndani ambayo kazi ya kitanzi itaitwa. Tunatakiwa kuandika tunachotaka kufanya huko. Na tunataka kutumia kiwango kimoja cha kimantiki (5 V) ili kubandika 13, yaani, kuwasha taa ya LED, kisha subiri sekunde moja (1000 kwa milliseconds), kisha weka kiwango cha sifuri cha kimantiki (0 V) na tena subiri sekunde moja. Simu inayofuata ya kitanzi itarudia kila kitu.

Sasa tunapakia mchoro wetu kwa mtawala. Hapana, hatuhitaji mpanga programu. Watawala wa Arduino, pamoja na michoro zetu, wana programu maalum - bootloader, ambayo, hasa, inadhibiti msimbo wa upakiaji kutoka kwa kompyuta. Kwa hivyo ili kupakia mchoro, tunahitaji tu kebo ya USB na kipengee cha menyu ya Faili → Pakia (Ctrl + U) kwenye IDE ya Arduino.

Swali Muhimu

Je, tunahitaji miguu mingapi kwa kweli? Wacha tufafanue usanidi mwingi wa roboti za kutembea. Kwa idadi ya miguu:

  • biped - biped (mfano - binadamu);
  • quadruped - nne-legged (mfano - wengi mamalia);
  • hexapod - sita-legged (mfano - wadudu wengi);
  • octopod - nane-legged (mfano - buibui, nge, kaa na arthropods nyingine).

Mbali na idadi ya miguu, usanidi wa kila mmoja pia ni muhimu. Tabia kuu ya mguu ni idadi ya digrii za uhuru, au vipimo vya uhuru (DOF). Kiwango cha uhuru ni uwezo wa kuzunguka au kuinama kuzunguka mhimili mmoja (mara chache, kusonga mbele kando yake). Kwa wazi, ikiwa kuna kiwango kimoja tu cha uhuru, basi hautaenda mbali kwa mguu kama huo. Miguu ya digrii mbili za uhuru (2DOF) tayari inaruhusu roboti za miguu mingi kusonga, ingawa 2DOF huruhusu tu ncha ya mguu kusonga kwa uhuru katika ndege moja. Na mguu wa 3DOF husogeza "mguu" katika nafasi ya 3D (isipokuwa, bila shaka, shoka zote tatu zinafanana). Pia kuna miguu ya 4DOF, ambayo huongeza tu kubadilika na upeo wa mwendo wa mguu. Wadudu mara nyingi huwa na miguu 4DOF.

Je, hii ina maana gani kwetu? Katika roboti za bei nafuu za amateur, kila kiwango cha uhuru hugunduliwa na gari moja, kwa usahihi zaidi, gari la servo, au seva. Configuration ya miguu huamua kipekee ngapi ya servos hizi zinahitajika. Kwa hivyo, hexapod ya 3DOF itahitaji servos 18, na buibui 4DOF itahitaji 32. Usiogope na wingi, servos ndogo zinazotumiwa katika mifano ya RC ya amateur ni nafuu sana. Unaweza kuzipata katika maduka ya mtandaoni kwa kutafuta servo ndogo.

Ili kupanga servos, inatosha kujua kwamba tayari wana mtawala anayefanya kazi kuu. Na unachohitaji ni kusambaza nguvu na ishara ya digital, kumwambia mtawala ni nafasi gani tunataka kuzungusha shimoni la kiendeshi. Taarifa kuhusu muundo wao ni rahisi kupata. Itifaki yao ni rahisi zaidi ya itifaki zote za mawasiliano ya dijiti: urekebishaji wa upana wa mapigo - PWM (PWM kwa Kiingereza). Servo zote rahisi zina kiunganishi kilicho na pini tatu: ardhi, +5 V (voltage inaweza kutofautiana kulingana na ukubwa na nguvu) na pembejeo ya ishara. Vidhibiti vya Arduino vinaweza kuwa na mbili njia tofauti toa ishara kama hiyo. Ya kwanza ni PWM ya vifaa, ambayo chip yenyewe inaweza kutoa kwenye pini zake kadhaa za I/O za dijiti. Ya pili ni programu. Programu hukuruhusu kupokea kwa wakati mmoja ishara tofauti za PWM kuliko maunzi. Karatasi inayofaa kwake chini ya Arduino imetolewa - maktaba ya Servo. Inakuruhusu kutumia servos 12 kwa wakati mmoja kwenye vidhibiti vingi vya ukubwa mdogo (Uno, Kutokana, Nano) na servos 48 kwenye Arduino Mega na kadhalika. Pini ya mawimbi ya servo imeunganishwa kwenye pini ya kidijitali ya Arduino. Ardhi na nguvu - ni wazi kwa ardhi na nguvu, haya yanaweza kuwa ya kawaida kwa huduma zote. Katika vitanzi vya servo vya waya tatu, nyeusi au kahawia ni chini, katikati ni kawaida nyekundu +5 V, na hatimaye nyeupe au njano ni ishara. Kwa mtazamo wa programu, udhibiti ni rahisi sana:

Huduma myservo; // Servo kwenye pini 9 ya Arduino myservo.attach(9); // Zungusha hadi 90º nafasi myservo.write(90);

Servos nyingi zinaweza kuzunguka shimoni 180 °, na kwao 90 ° ni nafasi ya wastani. Ili kurahisisha uunganisho wa servos kwenye bodi ya Arduino, kuna idadi ya ufumbuzi. Ya kisheria zaidi ni Sensors Shield. Kwa kuiweka kwenye Uno na kusambaza nguvu kwa vituo vya servos, unaweza kuunganisha viunganisho vyao moja kwa moja ndani yake.

Betri

Suala lingine muhimu ni lishe. Ikiwa una bodi ya juu ambayo inakuwezesha kusambaza mfumo mzima kupitia mstari mmoja wa nguvu (na motors za servo hazitaingiliana na uendeshaji wa mtawala), basi unaweza kupata kwa chanzo kimoja. Chaguo ni kubwa, bora, bila shaka, ni briquettes za Li-Ion/Li-Po kwa mifano ya redio. Lakini pia wanahitaji kufaa kifaa cha kuchaji. Ikiwa una mtawala rahisi (Uno/Due/Nano), basi unaweza kuiwezesha kando, kwa mfano na "Krona" ya 9-volt, na kuunganisha servos kwa moja kuu. betri yenye nguvu. Kwa njia hii servos hakika itakuwa na nguvu ya kutosha. Lini betri za lithiamu unahitaji kufuatilia voltage kwa uangalifu zaidi kuliko kawaida ili hakuna kutokwa kupita kiasi ( mikazo inayoruhusiwa Inastahili kuangalia aina maalum ya betri). Kwa kusudi hili, robot ya Sleipnir, ambayo itajadiliwa zaidi, pia ina voltmeter ndogo ya digital iliyounganishwa nayo.

Jifanyie mwenyewe mende wa roboti

Kiti

  • Mdhibiti wa Arduino Uno: 1150 rub.
  • injini tatu za servo. Nilitumia HXT500, 200 kusugua. Kipande
  • Sehemu ya betri kwa Krona na swichi: 50 rub.
  • Betri "Krona": 145 rub.
  • Mpokeaji wa IR: 90 kusugua.
  • Waya ya chuma yenye kipenyo cha takriban 1.5 mm. Kwa mfano, nilitumia whisk iliyovunjika kupiga mayai

Jumla: 2035 kusugua.

DmitryDzz: Ninataka kukualika utengeneze hitilafu ndogo ya roboti ya miguu sita inayodhibitiwa kwa mbali kulingana na kidhibiti cha Arduino Uno. Miguu itakuwa na kiwango kimoja cha uhuru, na udhibiti utafanyika kwa kutumia udhibiti wa kijijini wa kawaida wa TV.

Lazima niseme kwamba hizi ni bei za maduka ya gharama kubwa ya Moscow. Katika maduka ya mtandaoni ya Kichina, yote haya yatagharimu nusu zaidi. Kuhesabu utoaji. Kweli, itabidi kusubiri, katika uzoefu wangu, kutoka kwa wiki mbili hadi miezi mitatu.

Njia rahisi ni kuchukua seti ya wajenzi, kwa sababu katika hatua za kwanza mtawala mmoja haitoshi. Sasa maduka mengi hutoa seti hizo. Kwa mfano, kuna duka la mtandaoni la ajabu "Amperka". Hapa utapewa seti kadhaa za ujenzi zinazofanana, tofauti katika maudhui na, bila shaka, bei. Rahisi zaidi ilinitosha - "Matryoshka X". Inajumuisha kidhibiti cha Arduino Uno, kebo ya USB ya kuunganisha kwa kompyuta, na ubao wa protoksi ( jambo lisiloweza kubadilishwa!), seti ya jumpers, LEDs, resistors na mambo mengine madogo.

Katika duka moja kuna sehemu ya "Wiki", ambapo utapata hata mafunzo ya video mafupi ya ajabu yaliyotafsiriwa kwa Kirusi. Hakikisha kuwaangalia. Na bila shaka, kuna jukwaa ambapo pengine watajaribu kukusaidia.

Ni zana gani utahitaji:

  • chuma cha soldering na kila kitu unachohitaji kwa soldering. Hutahitaji solder sana, na hutahitaji ujuzi wowote maalum;
  • bunduki ya gundi ya moto na viboko kwa ajili yake;
  • koleo kwa kufanya kazi na waya.

Ikiwa umekusanya kila kitu, wacha tuanze!

Udhibiti

Hebu tuendelee kwenye hatua ya kwanza: tunahitaji kujifunza jinsi ya kuingiliana na udhibiti wa kijijini na kujua kanuni za kushinikiza baadhi ya vifungo vyake. Nambari hizi baadaye zitakuwa muhimu kwa mchoro wa udhibiti wa roboti.

Katika hatua hii utahitaji pia mpokeaji wa IR na itakuwa vizuri kuwa na ubao wa protoksi. Idadi kubwa ya vidhibiti vya mbali vya IR hufanya kazi katika masafa ya mtoa huduma ya 36 kHz, 38 kHz au 40 kHz (Panasonic, Sony). Vighairi ni vidhibiti kutoka kwa Sharp (56 kHz), Bang & Olufsen (455 kHz) na labda mtu wa kigeni zaidi. Kwa hivyo tuko sawa Yoyote atafanya Kipokea IR katika 36, ​​38 au 40 kHz. Mzunguko hauwezi kufanana kabisa na mzunguko wa mtoa huduma wa ishara. Katika kesi hii, unyeti wa mpokeaji utapungua, lakini kwa mazoezi sikuona usumbufu wowote kwa kutumia mpokeaji wa TSOP2136 IR (36 kHz - tarakimu mbili za mwisho ni mzunguko) na udhibiti wa kijijini wa Sony (40 kHz).

Kwa hivyo, wapokeaji wa IR TSOP21xx, TSOP22xx, TSOP312xx wanafaa kwa udhibiti wa mbali zaidi. Nambari mbili za mwisho zinaweza kuwa 36, ​​37, 38 au 40. Kabla ya kuwasha mpokeaji wa IR, angalia wiring ya mawasiliano yake - kuna tatu tu kati yao: +5V (nguvu), GND (ardhi), Vs (pato) . Wacha tukusanye mzunguko kama kwenye kielelezo (wiring kwa TSOP2136).

Kama unavyoona, tuliunganisha pato la kipokea IR kwenye pembejeo ya analogi ya kidhibiti A0.

Hivi ndivyo msimbo wa mchoro unavyoonekana:

#pamoja na "IRremote.h" // Analogi pembejeo ya mtawala, // ambayo mpokeaji wa IR ameunganishwa: const int IR_PIN = A0; // Unda kitu cha kupokea IR: IRrecv irrecv(IR_PIN); usanidi utupu() ( Serial.begin(9600); Serial.println("tayari"); // Anza kusikiliza mawimbi ya IR: irrecv.enableIRIn();) kitanzi batili() ( // Eleza muundo wa matokeo, // ambayo // kupokea na kutatuliwa // amri za IR zitawekwa: matokeo ya decode_results // Ikiwa amri ya IR imepokelewa na // imefanywa kwa ufanisi, basi // toa msimbo uliopokea kwa serial // bandari ya mtawala: ikiwa (irrecv.decode (&matokeo)) ( Serial.println(results.value); irrecv.resume(); ) )

Mchoro hutumia maktaba maalum IRremote.h, ambayo hutenganisha mawimbi kutoka kwa vidhibiti mbali mbali vya IR. Maktaba hii ni fungua mradi, unaweza kuipakua kutoka kwa ukurasa https://github.com/shirriff/Arduino-IRremote. Na ili kuiunganisha na mradi wetu, tunahitaji kufanya hatua tatu:

  • nakala saraka ya maktaba kwenye saraka ya maktaba, ambayo, kwa upande wake, iko kwenye saraka ya ufungaji ya Arduino IDE;
  • anzisha upya IDE;
  • ongeza mstari #jumuisha "IRremote.h" hadi mwanzo wa mchoro wetu.

Sasa mchoro utakuwa na kazi za kusimbua ishara za IR zinazopatikana. Lakini kuona nambari zilizopokelewa, tutatumia pia kitu cha Serial. Kwa msaada wake, bandari ya serial(kebo sawa ya USB) tutahamisha nambari kwenye kompyuta. Katika kazi ya kuanzisha tunaanzisha kitu cha Serial. "9600" ni 9600 baud - kasi ambayo itatumika kwa maambukizi ya data. Baada ya kuanzishwa, tunaweza kuandika kwa mlango wa serial kwa kutumia chaguo la kukokotoa la println. Kuangalia matokeo ya pato hili kwenye kompyuta yako katika IDE ya Arduino, chagua kipengee cha menyu Kutools → Monitor Serial (Ctrl + Shift + M). Hakikisha tu kuwa imewekwa kuwa 9600 baud.

Kwa hivyo, mtawala hupokea nguvu kupitia kebo ya USB na kupitisha data kupitia hiyo. Pakia mchoro, uzindua Serial Monitor na uanze kubonyeza vitufe vya udhibiti wa mbali. Misimbo inapaswa kuonekana kwenye dirisha la Ufuatiliaji wa Ufuatiliaji. Itifaki za udhibiti wa kijijini hutofautiana, wakati mwingine inaweza kuwa kanuni moja, wakati mwingine kadhaa. Kwa hali yoyote, unaweza kuchagua misimbo ambayo ni ya kipekee kwa kila kitufe cha udhibiti wa mbali.

Tunahitaji vifungo 13 vya udhibiti wa kijijini. Nilitumia yafuatayo:

  • 1 - laini upande wa kushoto;
  • 2 - kusonga mbele;
  • 3 - laini upande wa kulia;
  • 4 - kugeuka kushoto papo hapo;
  • 5 - kuacha;
  • 6 - kugeuka kulia papo hapo;
  • 7 - kusonga nyuma na upande wa kulia;
  • 8 - harakati za nyuma;
  • 9 - kusonga nyuma na upande wa kushoto;
  • kifungo cha bluu - polepole sana;
  • njano - polepole;
  • kijani - haraka;
  • nyekundu - haraka sana.

Andika misimbo ya vifungo hivi, itahitajika baadaye kwa mchoro wa udhibiti wa roboti.

Algorithm ya harakati

Mchoro wa udhibiti wa roboti unapatikana kwenye ukurasa wa mradi wetu (bit.ly/1dEwNDC). Usisahau kubadilisha thamani za viunga vya misimbo ya vitufe vilivyobonyezwa kwenye kidhibiti cha mbali hadi misimbo ya kidhibiti chako cha mbali (viunganishi IR_COMMAND_XXX_CODES katika faili ir_command_codes.h).

Hatutaangalia mchoro kwa undani; nadhani maoni katika kanuni ni ya kutosha, lakini swali moja bado linafaa kuzingatia.

Harakati za wadudu zinavutia sana. Na ingawa mende hawa wote wako karibu sana na kuanguka chini, kwa sababu fulani wao daima ni imara: wakati wowote angalau miguu mitatu (mbili upande mmoja na moja kwa nyingine) husimama juu ya uso. Na huku miguu hii ikivuta mende kuelekea shabaha moja, nyingine tatu huvutwa juu ili kurudia harakati hii. Kazi yetu ni kufanya kitu kama hicho.

Mdudu wetu wa roboti ana servomotors tatu zilizopangwa kwa safu kulingana na harakati. Kwa servomotors za kushoto na za kulia, mhimili wa shimoni huelekezwa juu, na kwa servomotor ya kati, inaelekezwa mbele. Kazi, kwa mfano, ya servo ya kushoto ni kusukuma miguu miwili mara moja: mbele ya kushoto na kushoto nyuma. Kwa njia, wameunganishwa kwa ukali kwa kila mmoja na kushikamana na rocker ya servo hii. Kazi ya servo ya kati ni kuinua upande wa kushoto wa beetle au kulia. Kwa hiyo, miguu ya kati ya kushoto na ya kulia, ambayo ni sehemu moja ya U-umbo, imeunganishwa na rocker ya injini hii.

Mchoro unapaswa kuhakikisha roboti inasonga mbele, nyuma, inageuka laini katika mwendo na kugeuka mahali pake. Ningependa pia kudhibiti kasi ya mende. Ili kuelezea harakati hizi kwa utaratibu, tutahitaji hisabati. Angalia mchoro.

Miduara ya bluu Miguu ya mende wa roboti iliyosimama juu ya uso imeonyeshwa, na ile iliyo angani ni nyeupe. Tafadhali kumbuka kuwa wakati wa kusonga mbele au nyuma, motors za servo za kushoto na za kulia lazima ziende sawa sawa. Na wakati wa kugeuka mahali, injini zinapaswa kuzunguka kwa njia tofauti (symmetrically). Jambo lingine la kuvutia ni kwamba harakati ya mbele na ya nyuma inatofautiana tu katika awamu ya servomotor ya kati.

Kwa hivyo hii inatekelezwaje? Tunakumbuka kwamba mtawala huita mara kwa mara kazi ya kitanzi. Hii ina maana kwamba katika kazi hii lazima tuweke msimbo ambao huamua nafasi ya sasa ya servos na kuwaweka kwenye nafasi hii. Kila servomotor lazima ifanye harakati za oscillatory. Tunaweza kuhesabu nafasi ya servomotor kwa wakati t kwa kutumia fomula ifuatayo:

X = dhambi(2πt/T),

ambapo X ni nafasi inayotakiwa ya servomotor, A ni amplitude ya oscillation, T ni kipindi cha oscillation.

Kwa hivyo, kulingana na wakati wa t, tutapata mabadiliko katika thamani ya X katika safu kutoka -A hadi +A. Servo motors inaweza kuwekwa kutoka 0 hadi 180 °. Kwa hiyo, ni bora kwetu kuzunguka kwenye nafasi ya "sifuri" ya 90 °. Na ikiwa tunataka kutoa oscillations na kipindi cha 1 s karibu na nafasi ya 90 ° na amplitude ya 30 °, basi formula inabadilishwa kuwa fomu ifuatayo:

X = 90 + 30 dhambi(2πt/1000),

ambapo t ni wakati katika milisekunde ambayo imepita tangu kuanza kwa oscillations. Ili kudhibiti kasi ya mende wa roboti, tunaweza kubadilisha kipindi cha oscillations. Kubwa ni, kasi ya chini.

Sasa hebu turudi kwenye mchoro wetu kwa mara nyingine tena, kwa sababu fomula iliyoandikwa hapo juu bado haijakamilika. Jinsi ya kuhakikisha ama synchronous au counter-movement ya servomotors kushoto na kulia? Jinsi ya kubadilisha awamu ya servomotor ya kati? Lazima tuongeze awamu ya oscillation kwenye fomula yetu. Kubadilisha hoja ya sine kwa kiasi π kwa, kwa mfano, injini ya kulia itafanya kazi katika antiphase hadi kushoto, yaani, njia tunayohitaji kugeuka mahali. Hivi ndivyo formula yetu sasa itaonekana kama:

X = 90 + 30 dhambi(2πt/1000 + Φ),

ambapo Φ ni awamu ya oscillation, thamani ni kutoka 0 hadi 2π.

Angalia meza ili kuelewa ni nini awamu za oscillation kwa motors za servo zinapaswa kuwa kwa kila aina ya harakati.

Bunge

Sasa hebu tukusanye roboti kwenye ubao wa protoksi na tupakie mchoro wa udhibiti.

Hii ni sana hatua muhimu kabla ya mkusanyiko. Jaribu kukata kebo ya USB na kuwasha ubao wa chakula kwa kutumia betri ya Krona. Angalia awamu zote za harakati na uhakikishe kuwa kila kitu kinafanya kazi. Baada ya kukusanya roboti, kubadilisha kitu chochote (kwa mfano, kuchukua nafasi ya servomotor iliyovunjika) itakuwa ngumu zaidi.

Sasa hebu tuendelee kwenye mkusanyiko yenyewe. Kipengele kikuu cha kubeba mzigo ni compartment ya betri. Ninapendekeza kutumia compartment iliyofungwa na daima na kubadili.

Njia rahisi zaidi ya kupata sehemu za mende ni gundi ya moto. Anza na motors za servo. Ondoa masikio ya kufunga yasiyo ya lazima na uunganishe mashine kwa kila mmoja. Kisha gundi mkutano huu wa "serva" tatu kwenye kifuniko sehemu ya betri. Usisahau kwamba chumba cha betri lazima kifungue kwa uhuru ili kubadilisha betri.

Njia rahisi ni gundi mtawala kwenye compartment, lakini siipendi sana chaguo hili, kwani nitalazimika kutoa Arduino Uno kwa mdudu milele. Kwa hivyo, unaweza kutatiza maisha yako na kutumia viunganishi vya Arduino kuambatisha sehemu ya betri. Chini ya chumba, gundi kiunganishi cha pini na lami kati ya pini za 2.54 mm. Inapaswa kuwekwa ili iingie kwenye tundu la mtawala katika eneo la pini za dijiti 8-11. Bado hatutazihitaji. Ikiwa huna kontakt karibu, klipu ya karatasi yenye umbo la U itafanya.

Waya zinazotoka kwenye sehemu ya betri lazima ziunganishwe kwenye pini za Vin na GND iliyo karibu. Usichanganye polarity! Pamoja na "Taji" kwenye Vin, ukiondoa kwenye GND. Ili kuhakikisha mawasiliano ya kuaminika ya waya na viungio vya Arduino, unaweza kubandika ncha ya waya kwa unene, lakini nilitumia kipande kifupi cha karatasi kama plagi. Na nilifunika eneo la soldering na bomba la kupungua kwa joto.

Viunganishi kutoka kwa nyaya za gari la servo vinapaswa kukatwa, waya za nguvu (+5 V - kawaida nyekundu na GND - nyeusi au kahawia) zinapaswa kuunganishwa na kupelekwa kwenye soketi za 5V na GND iliyo karibu kwenye mtawala. Tutaunganisha baadaye kidogo. Waya za mawimbi ya kudhibiti (kawaida za manjano) zimeunganishwa kwa matokeo ya dijitali ya kidhibiti: servomotor ya kushoto hadi pini 2, sehemu ya katikati ya kubandika 4, ya kulia ya kubandika 7.

"+" na "-" za kipokezi cha IR zinaweza kuchomekwa tu kwenye kiunganishi cha Arduino (5V na GND iliyo karibu). Kweli, kuwapiga kwa nusu, mara mbili unene wao. Tunauza waya za nguvu zilizounganishwa hapo awali za servomotors kwa miguu sawa ya nguvu ya mpokeaji wa IR. Pato la ishara ya mpokeaji wa IR haiwezekani kufikia pembejeo ya analog ya mtawala wa A0, na utalazimika kuiongeza kwa waya.

Vidokezo kadhaa vya kutengeneza miguu. Kwanza jitayarisha miguu ya "mbele-nyuma" ya kushoto na kulia. Hakikisha kuwa ni za ulinganifu (makini na urefu na pembe za bend). Anza kuunganisha miguu tu baada ya kuhakikisha kuwa servos zimewekwa kwenye nafasi ya "zero" (90 °).

Ni bora kufunga jozi ya kati ya miguu mwisho. Ninakushauri kwanza ufanye miguu ya kati kwa muda mrefu, na kisha uikate kwa urefu uliotaka baada ya ufungaji. Katika nafasi ya "sifuri", miguu yote sita inapaswa kuwa juu ya uso. Swing ya miguu ya kati na amplitude ya 15 ° haipaswi kuingiliana na zamu za "antero-posterior".

Nini kinafuata?

Robozhuk ni tayari-kufanywa jukwaa la simu kulingana na mojawapo ya watawala maarufu zaidi na wa bei nafuu. Mradi umefunguliwa: https://github.com/beetle-ringo/arduino. Tengeneza uma (tawi) katika GitHub na uongeze utendakazi wako mwenyewe. Toa udhibiti wa mawazo yako - ongeza IR LED, na roboti iko tayari kwa vita vya roboti. Unganisha vitafuta vitu mbalimbali, vitambuzi vinavyogusika, gyroscope... Ifundishe roboti kuepuka vikwazo au kutembea kwenye mstari, jaribu kusakinisha kamera ya wavuti juu yake. Kunaweza kuwa na mawazo milioni, na unaweza kuchagua moja ya kuvutia zaidi kila wakati.

Robot Sleipnir

Kiti

  • Arduino Uno Dagu Mdhibiti wa Robot ya Spider: 2530 rub.
  • Servo anatoa SG90 9g (vipande 16) 1150 rub.
  • Pakiti ya betri ya LiPo, 7.4 V, 1800 mAh RUR 490
  • Moduli ya redio 4 Pini ya Bluetooth RF Transceiver RUR 270
  • Kiashiria cha voltage (si lazima) DC 3.3–30 V Mita ya Paneli ya LED Nyekundu RUR 100
  • Kona ya alumini. Katika soko la karibu la ujenzi 135 rubles.
  • Bolts na karanga. Katika soko la karibu la flea rubles 35.

Jumla: 4710 kusugua.

*Vipengele vilinunuliwa kutoka wakati tofauti, na nafasi nyingi zinaweza kuboreshwa

poconoco: Hebu tujaribu kukusanya usanidi usio wa kawaida - roboti ya 2DOF ya miguu minane. Miguu ya 2DOF ni rahisi zaidi kupanga, na nina rundo la huduma ambazo hazijatumiwa zimelala karibu. Na muhimu zaidi, itawezekana kuiita kwa heshima ya farasi wa miguu minane ya mungu Odin Sleipnir (daima aliota juu yake!).

Sleipnir yetu itakuwa na miguu minne kila upande na viungo viwili. Kila pamoja ni gari la servo, ambalo linamaanisha servos nane kwa kila upande. Kwa unyenyekevu, viungo vyote vinane upande mmoja wa farasi vitazunguka katika ndege moja. Ingawa hii sio lazima kabisa. Zaidi ya hayo, ikiwa miguu ya upande mmoja ni "chessboarded" kidogo ili miguu miwili ya karibu haiwezi kugusa kila mmoja, hii itakuwa bora zaidi, itakuruhusu kuchukua hatua pana na kukimbia.

Nadhifu na inayofanya kazi, lakini mbali na suluhisho la bei rahisi zaidi ni kutumia bodi ya kidhibiti maalum iliyoboreshwa kwa kuunganisha idadi kubwa ya servos. Nilikutana na Kidhibiti cha Dagu Spider Robot - hii ni Arduino Mega sawa, lakini kwenye ubao ulio na viunganisho vya pini 3 vilivyouzwa hapo awali, ambapo unaweza kuunganisha mara moja servos hizo 48 bila ngao yoyote. Inafaa kwa roboti za miguu mingi kwenye Arduino.

Udhibiti

Tutadhibitiwa kupitia Bluetooth. Kuna ufumbuzi mbalimbali wa vifaa kwa hili. Hizi ni ngao na kadi tofauti zilizo na UART kiolesura cha serial(kama bandari ya kawaida ya com, yenye viwango vya mawimbi 5 pekee). Ilionekana kwangu kuwa kadi ndogo zaidi na interface ya UART ilikuwa ya vitendo zaidi. Huunganisha kwa pini zinazolingana za UART/Serial za bandari ya Arduino. Wacha tuangalie nuances mbili: kwenye Uno/Due/Nano na zile zinazofanana kuna bandari moja tu kama hiyo, na pia hutumiwa kwa firmware kupitia USB. Kwa hiyo, huenda ukahitaji kuzima moduli ya Bluetooth wakati wa sasisho la firmware. Na nuance ya pili - usisahau kwamba pini ya RX ya moduli imeunganishwa na pini ya TX ya Arduino, na TX kwa RX. Mambo kama hayo hutokea katika UART.

Kupanga Bluetooth sio ngumu zaidi kuliko servos data inaweza kusomwa kwa byte, ambayo ndiyo tutatumia:

Char cmd; Serial.begin(9600); ikiwa (Serial.available()) cmd = Serial.soma();

Ikiwa Arduino Mega inatumiwa na Bluetooth imeunganishwa kwenye bandari ya pili, basi Serial1 imeandikwa badala ya Serial. Ni muhimu kukumbuka kuwa sio lazima utumie Bluetooth, lakini udhibiti roboti moja kwa moja kupitia USB. Na hakuna kitakachobadilika katika nambari iliyo hapo juu! Ni tu kufanya kazi na bandari ya serial, lakini ikiwa kuna kisambazaji cha BT au kibadilishaji cha kubadilisha fedha cha USB kinachoning'inia sio muhimu kwetu.

Upande wa pili wa Bluetooth

Njia rahisi zaidi ya kuunganisha ni kupitia huduma za kawaida za Linux. Ili kufanya kazi, tutahitaji huduma za sdptool, rfcomm (sehemu ya kifurushi cha bluez kwenye hazina za Ubuntu), pamoja na minicom (ndivyo kifurushi kinaitwa). Maagizo ya kufanya kazi na huduma hizi yanaweza kupatikana kwenye mtandao.

Algorithm ya harakati

Kwa hexapod, gait rahisi zaidi itakuwa hii: miguu imegawanywa katika makundi mawili ya miguu mitatu, na moja ya makundi ni kabisa chini, nyingine ni hewa, upya mbele. Hii ni mbali na njia pekee inayowezekana. Unaweza kuweka paws mbili tu angani, au hata moja, na nyingine nne au tano chini. Pia kuna njia nyingi za kutembea kwa octapod. Tutachukua moja rahisi zaidi, pia na vikundi viwili vya miguu minne.

Kwa hivyo tunahitaji kufanya nini kufanya kazi na servos 16 na gait iliyochaguliwa? Jibu sahihi ni kusoma kuhusu inverse kinematics (IR). Urefu wa kifungu hauruhusu kupanua mada kwa upana, lakini kuna nyenzo nyingi kwenye mtandao. Kwa kifupi, IC hutatua tatizo la kupata ishara muhimu za udhibiti ili mfumo uchukue nafasi nafasi inayotakiwa. Kwa mguu, hii ina maana kwamba kulingana na kuratibu za mahali ambapo mguu unapaswa kupiga, pembe za servos ambazo zinahitajika kuweka kwa hili zinapaswa kuamua. Na kwa kudhibiti kuratibu za miguu, unaweza kudhibiti nafasi ya mwili. Tuna miguu 2DOF, shoka ni sambamba, hivyo mguu daima huenda katika ndege moja. Tatizo la IR katika kesi hii limepunguzwa hadi nafasi ya 2D, ambayo hurahisisha sana.

Acha asili ya eneo la kuratibu O kwa kila mguu iwe shimoni la servo ya juu, ambayo ni, viuno. Na tunayo kuratibu za uhakika A ambapo mguu unahitaji kugonga. Kisha ni rahisi kuona kwamba unahitaji kutatua tatizo la kutafuta pointi za makutano ya miduara miwili (angalia mchoro wa miguu ya upande mmoja, hii inaonyeshwa kwenye mguu wa kulia). Baada ya kupata sehemu ya makutano B ya miduara (kwa kuchagua yoyote kati yao), ni rahisi kuhesabu pembe zinazohitajika kwa kutumia ubadilishaji kutoka kwa kuratibu za Cartesian hadi zile za polar. Kwa kificho, suluhisho la tatizo hili linaonekana kama hii:

Kuelea A = -2 * x; kuelea B = -2 * y; kuelea C = sqr(x) + sqr(y) + sqr(hipLength) - sqr(shinLength); kuelea X0 = -A * C / (sqr(A) + sqr(B)); kuelea Y0 = -B * C / (sqr(A) + sqr(B)); kuelea D = sqrt(sqr(hipLength) - (sqr(C) / (sqr(A) + sqr(B)))); kuelea mult = sqrt(sqr(D) / (sqr(A) + sqr(B))); shoka la kuelea, ay, bx, kwa; shoka = X0 + B * mult; bx = X0 - B * mult; ay = Y0 - A * mult; kwa = Y0 + A * mult; // au bx kwa sehemu nyingine ya makutano kuelea jointLocalX = shoka; // au kwa kwa sehemu nyingine ya makutano kuelea jointLocalY = ay; float hipPrimaryAngle = polarAngle(jointLocalX, jointLocalY); float hipAngle = hipPrimaryAngle - hipStartAngle; kuelea shinPrimaryAngle = polarAngle (x - jointLocalX, y - jointLocalY); kuelea shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;

ambapo x na y ni kuratibu za mahali ambapo unahitaji kufikia kwa mguu wako; hipStartAngle - pembe ambayo "hip" inazungushwa hapo awali (na servo iko katikati), vivyo hivyo - shinStartAngle. Kwa njia, katika mahesabu haya pembe ni wazi katika radians, lakini zinahitaji kuhamishiwa kwenye vitu vya Servo kwa digrii. Nambari kamili ya firmware ya kufanya kazi, pamoja na kipande hiki, imetumwa kwenye GitHub, angalia kiunga mwishoni mwa kifungu. Hii ni kipande cha IR, lakini badala yake unahitaji zaidi kidogo kanuni rahisi kutumia IR hii kwa miguu yote (tazama kazi legsReachTo(), legWrite()). Utahitaji pia msimbo ambao unatekeleza mwendo - kusonga seti moja ya miguu "nyuma" (ili roboti isonge mbele), huku seti nyingine ya miguu ikiinuliwa na kusogezwa mbele kwa hatua inayofuata, angalia kitendakazi cha stepForward(). Inachukua hatua moja na vigezo vilivyopewa. Kwa vigezo hivi, kwa njia, unaweza kuchukua hatua nyuma, licha ya jina la kazi. Ikiwa kazi hii itaitwa kwa kitanzi, roboti itasonga mbele.

Sasa kupokea amri na kutafsiri. Wacha tuongeze hali kwenye programu:

Jimbo la Enum ( SIMAMA, MBELE, NYUMA, MBELE_KULIA, MBELE_KUSHOTO );

Na katika kitanzi kikuu cha utekelezaji kitanzi () tutaangalia Hali ya sasa(kutofautisha kwa hali) na kuvuta stepForward() ikiwa tunasonga mbele (na au bila mzunguko), na tena stepForward(), lakini kwa hoja hasi xamp, ikiwa tunahitaji kurudi nyuma. Zamu katika kesi hii zitachakatwa kwa legWrite(), na kwa kugeukia kulia miguu na upande wa kulia itasimama (wakati safu za kushoto). Hapa kuna tanki kama hilo la farasi. Kikatili, lakini rahisi sana na inafanya kazi. Mzunguko laini unaweza kufanywa tu kwa miguu ya 3DOF, mfano wa hii unaweza kuonekana kwenye hazina ya buggybug.

Badili (hali) ( kipochi MBELE: kipochi FORWARD_KULIA: kipochi FORWARD_KUSHOTO: stepForward(h, dh, xamp, xshift); break; kesi NYUMA NYUMA: stepForward(h, dh, - xamp, xshift); break; )

amri ya Char; wakati (Serial1.available()) amri = Serial1.soma(); kubadili (amri) ( kipochi "w": state = FORWARD; break; case "s": state = NYUMA; break; case "d": state = FORWARD_RIGHT; break; case "a": state = FORWARD_LEFT; break; default : jimbo = STOP;

Hapa ndipo pointi kuu za firmware zimekwisha, wengine ni kila aina ya vitu vidogo. Ingawa labda kuna moja zaidi hatua muhimu- uwezo wa kurekebisha servos. Hata kwa mkusanyiko wa makini zaidi, ikiwa unaamuru servo zote kugeuka 90 °, baadhi yao bado yataishia na pembe ya mbali kidogo. Kwa hiyo, tunahitaji uwezo wa kurekebisha. Unaweza kuona jinsi nilivyofanya hivi katika njia za hipsWrite() na shinsWrite() na kwenye safu zenyewe. marekebisho faini hipsTune na shinsTune.

Bunge

Kwa miundo kama hiyo, hauitaji chochote maalum: karatasi ya plexiglass ya unene unaofaa (kutoka soko la karibu la vifaa) na jigsaw au hacksaw ya kukata sehemu itafanya. Na bila shaka, drill kuchimba mashimo. Badala ya plexiglass, unaweza kutumia plywood (basi unaweza pia kufanya uandishi wa kukumbukwa kwa kutumia burner kwenye muundo wa mwisho). Unaweza pia kutumia karatasi au pembe za alumini. Na Sleipnir, nilifuata njia ya kutumia kona ya alumini na mbavu 1 cm (kununuliwa mahali fulani katika duka kubwa la ujenzi).

Msingi itakuwa sura ya mstatili. Viungo - kupigwa kwa sentimita 4. Inafaa pia kuhifadhi kwenye bolts ndogo na karanga. Tunakata kona ndani ya vipande vinavyohitajika, kata grooves kwa servos, na kuchimba mashimo kwa bolts zilizowekwa na screws. Ni bora kuonyesha muundo kuliko kuelezea. Ukubwa unaweza kuwa wowote, roboti lazima ziwe tofauti. Lakini kumbuka: kwa muda mrefu miguu, zaidi ya lever servo itabidi kushinikiza na mzigo zaidi itakuwa. Hadi kufikia hatua ya kushindwa kugeuka na hata kuvunja. Lakini 4-5 cm sio shida.

Kwa robots za bajeti nyepesi, mara nyingi hazijisumbui na kiungo tofauti kilichoelezwa kwa viungo, na mzigo mzima huanguka kabisa kwenye shimoni la gari la servo. Kwa kuzingatia uzito mdogo, hii sio muhimu hata kidogo. Na kwa uzito zaidi, unapaswa kufikiri juu ya servos na gia za chuma na kuzaa shimoni ya mpira.

Kila servo kawaida huja na skrubu kadhaa na seti ya viambatisho ambavyo vinaweza kubanwa kwenye shimoni kwa maombi mbalimbali. Chaguo letu bora ni "pembe" moja (au pembe), ambayo inakuwezesha kuunganisha bar kwenye servo. Kwa hivyo, axes za servos mbili zimefungwa kwenye bar moja, na bar inakuwa "hip". Katika kesi hii, servo moja imeshikamana na mwili, na nyingine inakuwa sehemu ya mguu wa chini. Inastahili kushikamana na bar nyingine kwake, ili tu kurefusha au kufanya kiungo cha kuvutia zaidi. kazi ya uchungu kidogo - na jukwaa ni tayari (seti rahisi ya bisibisi, funguo, kibano, cutters waya, nk sana kuongeza kasi ya mchakato).


Nini kinafuata?

Mradi mzima unapatikana katika https://github.com/poconoco/sleipnir. Nilielezea moja ya usanidi usiowezekana - miguu mingi ya 2DOF, ndefu, nyembamba, rahisi kuanguka upande wake. Jaribu kutengeneza roboti bora yenye miguu ya 3DOF. Na miguu 4DOF. Kwa makucha au taya. Kwa mfano, 3DOF kinematics kinyume Unaweza kurejelea hazina ya buggybug - firmware ya hexapod iko. Unaweza pia kutengeneza roboti mahiri, badala ya zile zinazodhibitiwa, kwa kusakinisha vihisi umbali badala ya Bluetooth, na kuifundisha roboti kuepuka kuta na vizuizi. Ikiwa utaweka sensor kama hiyo kwenye gari la servo na kuizungusha, unaweza kukagua eneo hilo, karibu na sonar.

Siku njema! Mbele yenu, wapendwa, kuna roboti ya sanaa ambayo inaweza kuchora vitu mbalimbali vya spherical au ovoid kuanzia ukubwa wa 4 hadi 9 cm.

Ili kuifanya utahitaji printa ya 3D, kit zana za kawaida+ Arduino.

Kumbuka: Usikate tamaa kwa miradi inayotumia kichapishi cha 3D. Ikiwa unataka, unaweza daima kupata mahali au njia ambapo unaweza kuagiza uchapishaji wa sehemu muhimu kwa mradi huo.

Hatua ya 1: Kidogo kuhusu roboti

Robot ya sanaa - mhimili mbili ya nyumbani, ambayo inaweza kuunda kwenye nyuso nyingi za duara. Roboti imerekebishwa kuwa aina fulani vitu (mipira ya ping pong, mapambo ya Krismasi, balbu za mwanga na mayai (bata, goose, kuku ...).

Mitambo ya kasi ya juu ya usahihi na torque ya juu hutumiwa kuzungusha kitu cha spherical na kusonga kidhibiti, na gari la utulivu na la kuaminika la SG90 servo hutumiwa kuinua utaratibu wa kushughulikia.

Hatua ya 2: Sehemu Muhimu

Ili kufanya ufundi wa DIY Tunahitaji:

  • 2x fani 623;
  • Hairpin yenye kipenyo cha mm 3 na urefu wa 80-90 mm;
  • 1x spring (urefu 10 mm na kipenyo 4.5 mm);
  • 2x NEMA motors 17 stepper (torque 4.4 kg / cm);
  • nyaya za magari (urefu wa 14 + 70 cm);
  • Cable ya USB;
  • 1x servo SG90;
  • Arduino Leonardo;
  • ngao JJRobots;

  • madereva 2xA4988 kwa motors za stepper;
  • Ugavi wa nguvu 12V/2A;
  • 11x M3 6mm screws;
  • 4x M3 16mm screws;
  • 4x karanga za M3;
  • 2x 20mm vikombe vya kunyonya;
  • 1x nati ya mrengo M3;
  • alama 1 x;

Hatua ya 3: Muhtasari wa jumla

Unaweza kutumia mchoro huu kama "karatasi ya kudanganya".

Hatua ya 4: Hebu tuanze!

Roboti husogeza kidhibiti chenye alama iliyoambatanishwa nacho, ambacho kinaendeshwa na kidude cha ngazi. Mwingine motor stepper ni wajibu wa kuzungusha kitu ambacho kuchora hutumiwa (yai, mpira ...). Vikombe viwili vya kunyonya hutumiwa kushikilia kipengee mahali pake: moja ikiwa imeshikamana na injini ya hatua na nyingine upande wa kinyume wa kitu. Chemchemi ndogo itabonyeza kikombe cha kunyonya, kikisaidia kushikilia kitu. Kiendeshi cha servo cha SG90 kinatumika kuinua/kushusha alama.

Hatua ya 5: Manipulator

Weka nut kwenye shimo iliyoandaliwa kwa ajili yake na kaza screw 16 mm. Wacha tufanye vivyo hivyo kwa mwenye kipengee (upande wa kulia kwenye picha hapo juu). Wakati wa kuunda bawaba kwa manipulator, screws 2 16 mm zilitumiwa. Hinge hii inapaswa kuzunguka kwa uhuru baada ya kuimarisha screws.

Hatua ya 6: Wanyonyaji

Weka moja ya vikombe vya kunyonya ndani ya shimo kwenye kishikilia kipengee.

Hatua ya 7: Kuweka Stepper Motors

Tunaunganisha motors zote mbili kwa sura kuu kwa kutumia screws 8.

Hatua ya 8: Mhimili wa Mzunguko

Wacha tuweke vitu vyote kama inavyoonyeshwa kwenye picha hapo juu.

  • Mnyonyaji;
  • Parafujo;
  • Sehemu ya juu;
  • Spring;
  • Kuzaa 623 (lazima kujengwa ndani ya kikombe cha kushoto);
  • Kikombe cha kushoto;
  • Nafasi ya bure kwa sura kuu;
  • Kikombe cha kulia;
  • Kuzaa 623;
  • pete ya spacer;
  • Mrengo wa nut (M3).

Hatua ya 9: Weka kila kitu mahali pake

Hebu tuingize manipulator iliyokusanyika kwenye mhimili wa motor stepper.

Wacha tusakinishe msaada wa kushoto kwenye mhimili wa gari la stepper.

Alama na yai zimewekwa kama mfano (hakuna haja ya kuziweka sasa).

KUMBUKA: Huduma itahitaji marekebisho. Utahitaji kuweka tena pembe yake wakati wa mchakato wa urekebishaji.

Hatua ya 10: Elektroniki

Hebu tuimarishe umeme nyuma ya sura kuu kwa kutumia screws (2 itakuwa ya kutosha).

Hebu tuunganishe nyaya.

Ikiwa utabadilisha polarities wakati wa kuunganisha motors za stepper, zitazunguka tu kwa mwelekeo tofauti, lakini kwa gari la servo hali haitakuwa mbaya sana! Kwa hiyo, angalia mara mbili polarity kabla ya kuunganisha!

Hatua ya 11: Kuandaa Arduino Leonardo

Wacha tupange Arduino Leonardo kwa kutumia mazingira ya programu Arduino IDE (v 1.8.1).

  • Pakua Arduino IDE (v 1.8.1) na usakinishe programu;
  • Hebu tuzindue programu. Chagua bodi ya Arduino Leonardo na COM PORT inayolingana kwenye menyu ya "zana->bodi";
  • Hebu tufungue na kupakua msimbo wa Sphere-O-Bot. Wacha tufungue faili zote ndani ya folda moja na tuite "Ejjduino_ARDUINO".

Hatua ya 12: Roboti ya sanaa iko tayari kuunda kazi za sanaa

Hatua ya 13: Dhibiti Robot

Programu Inkscape. Pakua na usakinishe programu ya Inkscape (Ninapendekeza toleo thabiti 0.91).

Pakua na usakinishe kiendelezi cha Udhibiti wa EggBot (toleo la 2.4.0 limejaribiwa kikamilifu).

Kiendelezi cha Udhibiti wa EggBot cha Inkscape ndicho chombo unachohitaji kutumia unapojaribu na kusawazisha EggBot yako na kuhamisha muundo wako kwenye yai. Kwanza unahitaji kuzindua Inkscape. Baada ya kuzindua Inkscape, orodha ya "Viendelezi" itaonekana, na ndani yake unahitaji kuchagua "Eggbot" submenu. Ikiwa huoni menyu ndogo ya Eggbot, basi hujasakinisha viendelezi kwa usahihi. Tekeleza chelezo na ufuate kwa uangalifu maagizo ya kusakinisha viendelezi.

Ni hayo tu, asante kwa umakini wako!)

Matokeo yake ni roboti ya kuchekesha ambayo inaweza kuona vizuizi mbele yake, kuchambua hali hiyo na kisha, ikiwa imechagua njia bora zaidi, inaendelea. Roboti iligeuka kuwa rahisi kubadilika. Ina uwezo wa kugeuka digrii 180, na angle ya mzunguko ni 45 na 90 digrii. Mwandishi alitumia Iteaduino, ambayo ni analog ya Arduino, kama mtawala mkuu.

Nyenzo na zana za kutengeneza roboti:
- microcontroller (Arduino au Iteaduino sawa);
- sensor ya ultrasonic;
- mmiliki wa betri;
- toys za Kichina za kuunda gurudumu (unaweza kununua iliyopangwa tayari);
- wakataji wa waya;
- gundi;
- waya;
- motors;
- fiberboard;
- jigsaw;
- transistors (D882 P).

Mchakato wa utengenezaji wa roboti:

Hatua ya kwanza. Kutengeneza wheelbase
Ili kuunda gurudumu, mwandishi alinunua magari mawili ya toy ya Kichina. Hata hivyo, huna wasiwasi juu ya hili ikiwa una pesa za ziada, kwa vile unaweza kununua msingi uliofanywa tayari. Kwa kutumia vikata waya, magari yalikatwa vipande viwili ili kuunda axles mbili za kuendesha. Sehemu hizi kisha ziliunganishwa pamoja. Hata hivyo, katika kesi hii unaweza pia kutumia chuma cha soldering;

Wakati wa kuchagua magari, ni bora kuchukua toys na magurudumu ya kawaida, kwa kuwa, kulingana na mwandishi, na spikes kama yake, robot inaruka sana.

Kuna wakati mwingine wakati waya zitatoka kwa motors kwenye mmoja wao unahitaji kukumbuka kubadili polarity.


Hatua ya pili. Kufanya kifuniko cha juu
Jalada la juu la roboti limetengenezwa kwa kadibodi nene pia inaweza kutumika kwa madhumuni haya. Unaweza kuona shimo la mstatili kwenye kifuniko; inapaswa kuwekwa ili mhimili wa gari la servo, ambalo litaingizwa ndani yake, liko kwa ulinganifu. Kuhusu shimo katikati, waya zitatoka kwa njia hiyo.


Hatua ya tatu. Kujaza roboti
Ni bora kutumia usambazaji wa umeme tofauti ili kuunganisha chasi, kwani mtawala anahitaji 9V ili kuifanya, wakati motors zinahitaji 3V tu. Kwa ujumla, wamiliki wa betri tayari wamejengwa kwenye chasi ya mashine hizo tu wanahitaji kuunganishwa kwa sambamba.








Mitambo hiyo imeunganishwa na mtawala kwa kutumia transistors za aina ya D882 P. Ni bora, bila shaka, kutumia transistors za nguvu za aina ya TIP120B, lakini mwandishi aliwachagua tu kulingana na sifa zinazofaa. Sehemu zote za elektroniki zimeunganishwa kulingana na mchoro maalum.

Baada ya kuangaza firmware ya roboti, itakuwa tayari kwa majaribio. Ili roboti iwe na wakati wa kugeuka kwa pembe fulani, unahitaji kuchagua wakati sahihi wa uendeshaji kwa motors.

Kuhusu vitambuzi, ile ya ultrasonic inahitaji kuunganishwa kwenye pato la 7 la kidhibiti cha kidhibiti kidogo. Gari ya servo imeunganishwa na pembejeo ya 3 ya dijiti, msingi wa transistor wa gari la kushoto umeunganishwa na pini 11, na msingi wa moja wa kulia umeunganishwa na 10.

Ikiwa Krona inatumika kama usambazaji wa nguvu, basi minus imeunganishwa kwa GND, na kuongeza kwa VIN. Pia unahitaji kuunganisha emitter ya transistor na mawasiliano hasi kutoka kwa usambazaji wa nguvu wa chasi ya roboti hadi GND.

Duka la roboti na roboti za kaya roboti quadrocopters hoverboards wajenzi roboti habari za vinyago

Mimi hufurahi wakati wahandisi wa siku zijazo wanapounda vifaa vyao wenyewe na hukasirika ninaposikia mtu akizungumza kuhusu kutumia Arduino ndani yao.

Hii sio nakala yangu ya kwanza juu ya mada hii: Nina hamu ya kuandika moja mara baada ya kusoma kifungu juu ya uwezekano usio na kikomo wa jukwaa kwenye mada ya DIY juu ya Habré. Nina hamu ya kuandika juu ya bei ya kweli ya sehemu baada ya kusoma makala kuhusu kununua seti ya ujenzi kwa $ 200 ambayo haina karibu chochote (samahani, nilisahau ambapo niliiona).

Jambo hapa sio kwamba nadhani Arduino ni wazo mbaya. Kinyume chake, shukrani kwa jukwaa, watu wengi walijifunza kuhusu ulimwengu wa microcontrollers na kujifunza kwamba hata mtu asiye na elimu maalum, na ujuzi mdogo wa programu na hakuna ujuzi wa umeme anaweza kukusanya kifaa kidogo cha baridi.

Shukrani kwa Arduino, miradi mingi ambayo ilikuwa ikikusanya vumbi katika benki za kumbukumbu za ubongo za waandishi wao iliona mwanga wa siku.

Ninakubali kwa uaminifu kwamba wakati mwingine mimi mwenyewe nilitumia msimbo ulioandikwa kwa Arduino (kwa mfano, kampuni ya InvenSense inazalisha moduli ya MPU6050, ambayo imeweza tu kukimbia vizuri).
Ninawadharau watu hao ambao, baada ya kugundua ulimwengu wa vidhibiti vidogo, hawakujisumbua kutazama ndani yake na wale ambao wanafaidika na watu kama hao.

Mwanafunzi kutoka Idara ya Teknolojia ya Habari, shabiki wa Arduino, alikuja kwenye maabara yetu (na kufanya kazi nasi). Mwanamume huyo alitumia pesa nyingi katika ununuzi wa *duins zenyewe na moduli kwa ajili yao. Nilitazama, bila majuto, kwani siku zijazo (bado ninatumai) muundaji wa mifumo ya roboti hakuweza kuzindua PWM. frequency inayohitajika, ingawa alitumia saa nyingi za "ndege" akifanya kazi na jukwaa.

Kwa hivyo, mwanafunzi huyu alinionyesha "mita ya kiwango cha betri", au kitu kama hicho. Niliipata haswa sasa kwenye ebay, ambapo inaitwa " Moduli ya Sensor ya Unyeti wa Juu ya Voltage -Arduino Inapatana"na inauzwa kwa $8.58. Hii hapa kwenye picha:

Kwa njia, waya wa kati, ambayo ni "+" - hutegemea tu hewani - kila kitu kinafanywa kwa kiwango cha juu. muunganisho unaofaa mgawanyiko wa voltage rahisi, bei nyekundu ambayo ni senti 2 kwa resistors na senti 20 kwa kontakt - hii ni ikiwa unununua kwa rejareja.

Hii sio kesi pekee ya udanganyifu wa ndugu yetu hapa chini nitatoa kadhaa zaidi. Sasa, kwa wale wanaopenda muundo, nitaandika ubaya kuu wa Arduino.


Kwenye Hobbyking, ambapo mashabiki wa miradi mbali mbali ya modeli wanadanganywa kwa njia sawa na katika duka zingine kwa wapenzi wa Arduino, capacitor ya kawaida iliuzwa chini ya kivuli cha aina fulani ya kichungi. Sikuweza kumpata sasa. Kwa kiunganishi cha pini tatu, bila shaka. Kwa dola 3 tu.

Sensor ya AVR PIC inayolingana na Mini Motor Speed ​​​​counter- kubadilishwa na LED na phototransistor iliyounganishwa na mtawala wa kati na mistari ishirini ya kanuni. Sio thamani ya 7.98.

Vifungo 2*4 vya Kusukuma vya Kibodi ya Matrix AVR ARM Arduino Sambamba- hizi ni vifungo tu vinavyoweza kununuliwa kwa vipande 10 kwa dola.

Kuna kifaa kimoja ulimwenguni ambacho ninachukia zaidi kuliko Arduino - mbed. Watengenezaji wake walichukua mtawala wa LPC1768 (pia inapatikana kwenye LPC11U24), wakaiuza kwenye ubao na vidhibiti viwili (sitazungumza juu ya ubora wa mpangilio wa bodi), ikasogeza nusu ya miguu nje (nusu ya pili haijaunganishwa. popote, ambayo inakera sana), aliandika IDE isiyo sahihi mtandaoni (hata hivyo, bora kidogo kuliko Arduino, ingawa inahitaji muunganisho wa Mtandao) na kuiuza kwa $64. Samahani, lakini hii tayari ni sawa.

Nini cha kufanya ikiwa ghafla unaamua kuacha kuashiria wakati na kuanza kujifunza microcontrollers?

  1. Kulikuwa na mfululizo wa makala kuhusu Habré "STM32F1xx - kuponya uraibu wa Arduino pamoja" - makala ni nzuri na yanaeleweka kabisa, inasikitisha kwamba mwandishi aliacha kuandika makala mpya.
  2. Wageni wote wanatumwa kwa easyelectronics.ru, ambapo DIHALT wenzao walichapisha kozi ya mafunzo kuhusu vidhibiti vidogo vya AVR.
  3. « Kubuni programu kwenye vidhibiti vidogo vya familia ya 68HC12/HCS12 kwa kutumia lugha ya C"S. F. Barrett, D. J. Park - kitabu bora ambacho hukusaidia kuelewa misingi ya upangaji programu katika C kwa vidhibiti vidogo. Shida pekee ni kwamba hakuna uwezekano wa kupata vidhibiti vidogo vya Freescale, kwa hivyo itabidi uwasilishe mifano mwenyewe kwa AVR, PIC, MSP430 au kidhibiti kingine chochote.
  4. Kabla ya kununua chochote kwa vifaa vyako, soma kuihusu angalau kwenye Wikipedia - labda sehemu hiyo hiyo inaweza kununuliwa kwa bei nafuu ikiwa unaiita tofauti.

Je! unajua nini cha ajabu? Miongoni mwa watumiaji wa Arduino, kuna hata wale wanaodharau Apple kwa "kulenga kwao mtumiaji mwenye akili finyu anayeshughulika-kwa-vidogo kama hivyo."

Sitaki kuudhi au kumshawishi mtu yeyote. Lakini nitafurahi ikiwa angalau mtu mmoja ambaye amesoma makala hadi wakati huu anabadilishana Arduino kwa microcontroller rahisi - labda atakuwa msanidi mzuri wa mifumo iliyoingia katika siku zijazo.

Wacha tuzungumze juu ya jinsi unavyoweza kutumia Arduino kuunda roboti inayosawazisha kama Segway.

Segway kutoka Kiingereza. Segway ni gari la magurudumu mawili lililosimama lililo na gari la umeme. Pia huitwa hoverboards au scooters za umeme.

Umewahi kujiuliza jinsi Segway inavyofanya kazi? Katika somo hili tutajaribu kukuonyesha jinsi ya kutengeneza roboti ya Arduino inayojisawazisha yenyewe kama Segway.

Ili kusawazisha roboti, motors lazima zipinge roboti kuanguka. Kitendo hiki kinahitaji maoni na vipengele vya kurekebisha. Kipengele cha maoni - ambacho hutoa kuongeza kasi na mzunguko katika shoka zote tatu (). Arduino hutumia hii kujua mwelekeo wa sasa wa roboti. Kipengele cha kurekebisha ni mchanganyiko wa injini na gurudumu.

Matokeo ya mwisho yanapaswa kuwa kitu kama hiki:

Mchoro wa roboti

Moduli ya Kiendeshi cha L298N:

DC gear motor na gurudumu:

Roboti inayojisawazisha kimsingi ni pendulum iliyogeuzwa. Inaweza kuwa bora zaidi ikiwa katikati ya misa ni ya juu ikilinganishwa na axles za gurudumu. Kituo cha juu cha wingi kinamaanisha wakati wa juu wa inertia ya wingi, ambayo inafanana na kasi ya chini ya angular (kuanguka polepole). Ndiyo sababu tunaweka pakiti ya betri juu. Walakini, urefu wa roboti ulichaguliwa kulingana na upatikanaji wa vifaa :)

Toleo lililokamilishwa la roboti ya kusawazisha inaweza kuonekana kwenye takwimu hapo juu. Juu kuna betri sita za Ni-Cd za nguvu bodi ya mzunguko iliyochapishwa. Katikati ya motors, betri ya 9-volt hutumiwa kwa dereva wa motor.

Nadharia

Katika nadharia ya udhibiti, kushikilia kigezo fulani (katika kesi hii nafasi ya roboti) kunahitaji kidhibiti maalum kinachoitwa PID (wimbo muhimu wa derivative). Kila moja ya vigezo hivi ina "faida", kwa kawaida huitwa Kp, Ki na Kd. PID hutoa marekebisho kati ya thamani inayotakiwa (au ingizo) na thamani halisi (au pato). Tofauti kati ya pembejeo na pato inaitwa "kosa".

Kidhibiti cha PID hupunguza hitilafu hadi thamani ndogo zaidi kwa kuendelea kurekebisha matokeo. Katika roboti yetu ya kujisawazisha Uingizaji wa Arduino(ambayo ni mteremko unaotaka kwa digrii) umewekwa na programu. MPU6050 husoma mwelekeo wa sasa wa roboti na kuilisha kwa algoriti ya PID, ambayo hufanya hesabu ili kudhibiti injini na kuiweka roboti sawa.

PID inahitaji thamani za Kp, Ki na Kd kurekebishwa hadi viwango bora zaidi. Wahandisi hutumia programu kama vile MATLAB kukokotoa thamani hizi kiotomatiki. Kwa bahati mbaya, hatuwezi kutumia MATLAB kwa upande wetu kwa sababu itatatiza mradi hata zaidi. Badala yake, tutarekebisha maadili ya PID. Hapa ni jinsi ya kufanya hivyo:

  1. Fanya Kp, Ki na Kd kuwa sawa na sifuri.
  2. Rekebisha Kp. Kp ndogo sana itasababisha roboti kuanguka kwa sababu marekebisho hayatoshi. Kp nyingi husababisha roboti kurudi na kurudi kwa fujo. Kp nzuri itafanya roboti kusonga mbele na kurudi kidogo (au kuzunguka kidogo).
  3. Mara Kp imewekwa, rekebisha Kd. Thamani nzuri ya Kd itapunguza oscillations hadi roboti iwe karibu kuwa thabiti. Kwa kuongeza, Kd sahihi itashikilia roboti hata ikiwa inasukumwa.
  4. Hatimaye, sasisha Ki. Ikiwashwa, roboti itazunguka hata Kp na Kd zimewekwa, lakini itatengemaa baada ya muda. Thamani sahihi ya Ki itapunguza muda unaohitajika ili kuimarisha roboti.

Tabia ya roboti inaweza kuonekana kwenye video hapa chini:

Msimbo wa Arduino wa roboti inayojisawazisha

Tulihitaji maktaba nne za nje ili kuunda roboti yetu. Maktaba ya PID hurahisisha hesabu ya thamani za P, I na D Maktaba ya LMotorController hutumiwa kudhibiti injini mbili kwa moduli ya L298N. Maktaba ya I2Cdev na MPU6050_6_Axis_MotionApps20 maktaba zimeundwa ili kusoma data kutoka MPU6050. Unaweza kupakua msimbo, ikiwa ni pamoja na maktaba, katika hazina hii.

#pamoja na #pamoja na #pamoja na "I2Cdev.h" #pamoja na "MPU6050_6Axis_MotionApps20.h" #kama I2CDEV_UTEKELEZAJI == I2CDEV_ARDUINO_WIRE #pamoja na "Waya.h" #endif #fafanua MIN_ABS_SPEED 20 MPU60; // Udhibiti wa MPU/hali vars bool dmpReady = uongo; // kuweka kweli ikiwa init ya DMP ilifaulu uint8_t mpuIntStatus; // inashikilia hali halisi ya ukatizaji kutoka kwa MPU uint8_t devStatus; // hali ya kurudisha baada ya kila operesheni ya kifaa (0 = mafanikio, !0 = kosa) uint16_t packetSize; // saizi ya pakiti ya DMP inayotarajiwa (chaguo-msingi ni baiti 42) uint16_t fifoCount; // hesabu ya baiti zote kwa sasa katika FIFO uint8_t fifoBuffer; // FIFO hifadhi bafa // mwelekeo/mwendo vars Quaternion q; // mvuto wa chombo cha quaternion VectorFloat; // vekta ya mvuto kuelea ypr; //yaw/pitch/roll chombo na vekta ya mvuto //PID double originalSetpoint = 173; mara mbili ya kuweka = originalSetpoint; double moveAngleOffset = 0.1; pembejeo mbili, pato; //rekebisha maadili haya ili kutoshea muundo wako mwenyewe mara mbili Kp = 50; mara mbili Kd = 1.4; mara mbili Ki = 60; PID pid(&input, &output, &setpoint, Kp, Ki, Kd, ​​DIRECT); motorSpeedFactorLeft mara mbili = 0.6; motorSpeedFactorRight mara mbili = 0.5; //MOTOR CONTROLLER int ENA = 5; int IN1 = 6; int IN2 = 7; int IN3 = 8; int IN4 = 9; int ENB = 10; LMotorController motorController(ENA, IN1, IN2, ENB, IN3, IN4, motorSpeedFactorLeft, motorSpeedFactorRight); tete bool mpuInterrupt = uongo; // inaonyesha ikiwa pini ya kukatiza ya MPU imeingia kwenye utupu wa juu dmpDataReady() ( mpuInterrupt = true; ) usanidi batili() ( // jiunge na basi la I2C (maktaba ya I2Cdev haifanyi hivi kiotomatiki) #kama I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin. TWBR = 24; // 400kHz I2C clock (200kHz ikiwa CPU ni 8MHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true/set your own). , iliyopunguzwa kwa unyeti wa min mpu.setXGyroOffset(220) mpu.setYGyroOffset(-85); washa DMP, kwa kuwa sasa iko tayari mpu.setDMPenabled(kweli); // wezesha utambuzi wa kukatiza kwa ArduinoInterrupt(0 , dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // weka bendera yetu Tayari ya DMP ili alama kuu loop() kitendakazi kinajua ni "ni sawa kuitumia dmpReady = true; // pata saizi ya pakiti ya DMP inayotarajiwa kwa kulinganisha baadaye packetSize = mpu.dmpGetFIFOPacketSize(); // anzisha PID pid.SetMode(AUTOMATIC); pid.SetSampleTime(10); pid. SetOutputLimits(-255, 255); ) vinginevyo ( // ERROR! // 1 = upakiaji wa kumbukumbu ya awali haukufaulu // 2 = Usasisho wa usanidi wa DMP haukufaulu // (ikiwa itavunjika, kawaida msimbo utakuwa 1) Serial.print(F("Uanzishaji wa DMP imeshindwa (msimbo ")); Serial.print(devStatus); Serial.println(F()") ) utupu kitanzi() ( // ikiwa upangaji haukufaulu, usijaribu kufanya chochote ikiwa (!dmpReady ) rudisha // subiri kukatizwa kwa MPU au pakiti za ziada zinapatikana wakati (!mpuInterrupt && fifoCount< packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is >Pakiti 1 inapatikana // (hii huturuhusu kusoma mara moja zaidi bila kusubiri kwa an interrupt) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); pembejeo = ypr * 180/M_PI + 180; ))

Thamani za Kp, Ki, Kd zinaweza kufanya kazi au zisifanye kazi. Ikiwa hawana, fuata hatua zilizo hapo juu. Kumbuka kuwa mwelekeo wa msimbo umewekwa hadi digrii 173. Unaweza kubadilisha thamani hii ukitaka, lakini kumbuka kuwa hii ndiyo pembe ya kuinama ambayo roboti lazima idumishe. Pia, ikiwa injini zako ni za kasi sana, unaweza kurekebisha thamani za motorSpeedFactorLeft na motorSpeedFactorRight.

Ni hayo tu kwa sasa. Baadaye.