Talaan ng mga Nilalaman:

Ang Butter Robot: ang Arduino Robot Na May Existential Crisis: 6 Mga Hakbang (na may Mga Larawan)
Ang Butter Robot: ang Arduino Robot Na May Existential Crisis: 6 Mga Hakbang (na may Mga Larawan)

Video: Ang Butter Robot: ang Arduino Robot Na May Existential Crisis: 6 Mga Hakbang (na may Mga Larawan)

Video: Ang Butter Robot: ang Arduino Robot Na May Existential Crisis: 6 Mga Hakbang (na may Mga Larawan)
Video: INTRODUCTION TO ARDUINO EDUCATION 2024, Hulyo
Anonim
Image
Image

Ang proyektong ito ay batay sa animated na serye na "Rick and Morty". Sa isa sa mga yugto, gumagawa si Rick ng isang robot na ang tanging layunin ay magdala ng mantikilya. Bilang mga mag-aaral mula sa Bruface (Brussels Faculty of Engineering) mayroon kaming isang takdang-aralin para sa proyekto ng mechatronics na kung saan ay upang bumuo ng isang robot batay sa isang iminungkahing paksa. Ang takdang-aralin para sa proyektong ito ay: Gumawa ng isang robot na naghahatid lamang ng mantikilya. Maaari itong magkaroon ng isang pagkakaroon ng krisis. Siyempre ang robot sa yugto ng Rick at Morty ay isang medyo kumplikadong robot at ang ilang mga pagpapasimple ay kailangang gawin:

Dahil nag-iisang layunin lamang na magdala ng mantikilya, maraming mga prangka na kahalili. Sa halip na tingnan ang robot at kunin ang mantikilya, bago ito dalhin sa tamang tao, ang robot ay maaaring magdala ng mantikilya sa lahat ng oras. Ang pangunahing ideya ay upang gumawa ng isang cart na nagdadala ng mantikilya sa kung saan ito kinakailangan.

Bukod sa pagdadala ng mantikilya, kailangang malaman ng robot kung saan niya kailangang dalhin ang mantikilya. Sa episode, ginamit ni Rick ang kanyang boses upang tawagan at utusan ang robot. Nangangailangan ito ng isang mamahaling sistema ng pagkilala sa boses at magiging kumplikado. Sa halip, ang bawat isa sa talahanayan ay nakakakuha ng isang pindutan: kapag na-aktibo ang pindutan na ito, mahahanap ng robot ang pindutang ito at lumipat patungo dito.

Upang muling makuhang muli, kailangang matupad ng robot ang mga sumusunod na kinakailangan:

  • Kailangan itong maging ligtas: dapat itong iwasan ang mga hadlang at pigilan ang sarili nito mula sa pagbagsak ng mesa;
  • Ang robot ay kailangang maging maliit: ang puwang sa mesa ay limitado at walang nais ang isang robot na naghahatid ng mantikilya ngunit kalahati ang laki ng mesa mismo;
  • Ang pagtatrabaho ng robot ay hindi maaaring depende sa laki o hugis ng talahanayan, sa ganoong paraan maaari itong magamit sa iba't ibang mga talahanayan;
  • Kailangan nitong dalhin ang mantikilya sa tamang tao sa mesa.

Hakbang 1: Pangunahing Konsepto

Ang mga naunang nabanggit na kinakailangan ay maaaring matugunan gamit ang iba't ibang mga diskarte. Ang mga pagpapasya tungkol sa pangunahing disenyo na nagawa ay ipinaliwanag sa hakbang na ito. Ang mga detalye tungkol sa kung paano ipinatupad ang mga ideyang ito ay matatagpuan sa mga sumusunod na hakbang.

Upang magampanan ang kanyang tungkulin, ang robot ay kailangang lumipat hanggang sa maabot ang patutunguhan. Isinasaalang-alang ang application ng robot na ito ay prangka na ang paggamit ng mga gulong sa halip na isang "paglalakad" na paggalaw ay mas mahusay na gawin itong ilipat. Dahil ang isang mesa ay isang patag na ibabaw at ang robot ay hindi maaabot ang napakataas na bilis, dalawang gulong na gulong at isang caster ball ang pinakasimpleng at pinakamadaling kontrolin ang solusyon. Ang mga gulong na gulong ay kailangang palakasin ng dalawang motor. Ang mga motor ay kailangang magkaroon ng isang malaking metalikang kuwintas ngunit hindi nila kailangang maabot ang isang mataas na bilis, iyon ang dahilan kung bakit gagamitin ang tuluy-tuloy na servo motor. Ang isa pang bentahe ng servo motors ay ang pagiging simple ng paggamit sa isang Arduino.

Ang pagtuklas ng mga hadlang ay maaaring gawin gamit ang isang ultrasonic sensor na sumusukat sa distansya, nakakabit sa isang servo motor upang mapili ang direksyon ng pagsukat. Ang mga gilid ay maaaring napansin gamit ang mga sensor ng LDR. Ang paggamit ng mga sensor ng LDR ay mangangailangan ng pagtatayo ng isang aparato na naglalaman ng parehong humantong ilaw at isang sensor ng LDR. Sinusukat ng isang sensor ng LDR ang nasasalamin na ilaw at makikita bilang isang uri ng sensor ng distansya. Ang parehong prinsipyo ay umiiral sa infrared light. Mayroong ilang mga infrared proximity sensors na mayroong isang digital output: malapit o hindi malapit. Ito mismo ang kailangan ng robot upang makita ang mga gilid. Sa pamamagitan ng pagsasama-sama ng 2 gilid sensor na inilagay tulad ng dalawang mga antena ng insekto at isang naipatupad na ultrasonic sensor, ang robot ay dapat na maiwasan ang mga hadlang at gilid.

Ang pagtuklas ng pindutan ay maaari ding magawa sa pamamagitan ng paggamit ng mga IR sensor at leds. Ang bentahe ng IR ay ito ay hindi nakikita na gumagawa ng paggamit nito hindi nakakagambala para sa mga tao sa mesa. Maaaring magamit din ang mga laser, ngunit pagkatapos ay ang ilaw ay makikita at mapanganib din kapag may tumuturo sa laser sa mata ng ibang tao. Gayundin, kailangang i-target ng gumagamit ang mga sensor sa robot na may lamang isang manipis na laser beam, na magiging nakakainis. Sa pamamagitan ng pagsangkap sa robot ng dalawang sensor ng IR at pagbubuo ng pindutan ng isang IR na humantong, alam ng robot kung aling direksyon ang kailangan niyang puntahan sa pagsunod sa tindi ng ilaw ng IR. Kapag walang pindutan ang robot ay maaaring lumingon hanggang sa makuha ng isa sa mga leds ang signal mula sa isa sa mga pindutan.

Ang mantikilya ay inilalagay sa isang kompartimento sa tuktok ng robot. Ang kompartimento na ito ay maaaring binubuo ng isang kahon at isang aktibong takip upang buksan ang kahon. Upang buksan ang takip at ilipat ang ultrasonic sensor upang i-scan at makita ang mga hadlang na kailangan namin ng dalawang motor at para sa layuning ito, ang mga hindi tuloy-tuloy na servo motor ay mas inangkop dahil ang mga motor ay kailangang pumunta sa isang tiyak na posisyon at mapanatili ang postion na iyon.

Ang isang labis na tampok ng proyekto ay upang makipag-ugnay sa panlabas na kapaligiran sa isang boses ng robot. Ang isang buzzer ay simple at inangkop para sa hangaring ito ngunit hindi ito maaaring gamitin sa anumang oras dahil ang curent draw ay mataas.

Ang mga pangunahing paghihirap ng proyekto ay nakasalalay sa pag-coding, dahil ang mekanikal na bahagi ay medyo prangka. Maraming mga kaso ang kailangang isaalang-alang upang maiwasan ang robot na ma-stuck o gumawa ng isang bagay na hindi gusto. Ang mga pangunahing problema na kailangan naming malutas ay ang pagkawala ng signal ng IR dahil sa isang balakid at huminto pagdating sa pindutan!

Hakbang 2: Mga Kagamitan

Mga piyesa ng mekanikal

  • 3D printer at Laser cutting machine

    • Gagamitin ang PLA para sa 3D na pag-print ngunit maaari mo ring gamitin ang ABS
    • Ang isang plato ng 3 mm birch playwud ay gagamitin para sa paggupit ng laser dahil nagbibigay ito ng posibilidad na gawing madali ang mga pagbabago, maaari ding magamit ang Plexiglas ngunit mas mahirap baguhin ito kapag naputol na ng laser nang hindi ito sinisira.
  • Bolts, mani, washers

    Karamihan sa mga bahagi ay pinagsama-sama gamit ang M3 buttonhead bolts, washers at nut, ngunit ang ilan sa mga ito ay nangangailangan ng M2 o M4 bolts set. Ang haba ng bolts ay nasa saklaw na 8-12 mm

  • Ang mga spacer ng PCB, 25 mm at 15 mm
  • 2 Servo motor na may katugmang gulong
  • Ang ilang mga makapal na kawad na metal sa paligid ng 1-2 mm ang lapad

Mga elektronikong bahagi

  • Microcontroller

    1 arduino UNO board

  • Mga motor ng servo

    • 2 Malaking servo motor: tuloy-tuloy na Feetech 6Kg 360 degree
    • 2 mga micro servo motor: Feetech FS90
  • Mga sensor

    • 1 Ultrasonic sensor
    • 2 IR proximity sensors
    • 2 IR photodiode
  • Baterya
    • 1 9V na may hawak ng baterya + baterya
    • 1 4AA na may hawak ng baterya + mga baterya
    • 1 9V na kahon ng baterya + baterya
  • Karagdagang mga sangkap

    • Ang ilang mga tumatalon na wire, wires at soldering plate
    • Ang ilang mga resistors
    • 1 IR LED
    • 3 switch
    • 1 buzzer
    • 1 pindutan
    • 1 Arduino hanggang 9V na konektor ng baterya

Hakbang 3: Pagsubok sa Elektronika

Pagsubok sa Elektronika
Pagsubok sa Elektronika
Pagsubok sa Elektronika
Pagsubok sa Elektronika

Paglikha ng pindutan:

Ang pindutan ay simpleng ginawa ng isang switch, isang infrared LED, at isang resistor na 220 Ohm sa serye, na pinalakas ng isang 9V na baterya. Ito ay inilalagay sa isang 9V baterya pack para sa isang compact at malinis na disenyo.

Paglikha ng mga infrared module ng tatanggap:

Ang mga modyul na ito ay ginawa sa pamamagitan ng mga board ng paghihinang ng butas, na kung saan ay ikakabit sa paglaon ng mga tornilyo sa robot. Ang mga circuit para sa mga modyul na ito ay inilalarawan sa pangkalahatang mga iskema. Ang prinsipyo ay upang masukat ang tindi ng infrared light. Upang mapabuti ang mga sukat, ang mga collimator (ginawa gamit ang mga shrink tubes) ay maaaring magamit upang ituon ang isang tiyak na direksyon ng interes.

Ang magkakaibang mga kinakailangan ng proyekto ay kailangang magawa gamit ang mga elektronikong aparato. Ang bilang ng mga aparato ay dapat na limitado upang mapanatili ang isang medyo mababang pagiging kumplikado. Ang hakbang na ito ay naglalaman ng mga schematic ng mga kable at bawat code upang subukan ang lahat ng mga bahagi nang magkahiwalay:

  • Patuloy na mga motor ng Servo;
  • Ultrasonic sensor;
  • Hindi tuluy-tuloy na mga motor ng Servo;
  • Buzzer;
  • Pagtuklas ng direksyon ng pindutan ng IR;
  • Pagtuklas ng gilid ng mga sensor ng kalapitan;

Ang mga code na ito ay maaaring makatulong na maunawaan ang mga bahagi sa simula, ngunit napaka-kapaki-pakinabang din para sa pag-debug sa mga susunod na yugto. Kung nangyayari ang isang tiyak na problema, ang bug ay maaaring mas napansin sa pamamagitan ng pagsubok ng magkahiwalay na lahat ng mga bahagi.

Hakbang 4: Disenyo ng 3D na Naka-print at Laser Cut Pieces

Disenyo ng 3D na Naka-print at Laser Cut Pieces
Disenyo ng 3D na Naka-print at Laser Cut Pieces
Disenyo ng 3D na Naka-print at Laser Cut Pieces
Disenyo ng 3D na Naka-print at Laser Cut Pieces
Disenyo ng 3D na Naka-print at Laser Cut Pieces
Disenyo ng 3D na Naka-print at Laser Cut Pieces

Mga piraso ng Laser Cut

Ang pagpupulong ay gawa sa tatlong pangunahing pahalang na mga plato na pinagsama-sama ng mga spacer ng PCB upang makakuha ng isang bukas na disenyo na nagbibigay ng madaling pag-access sa electronics kung kinakailangan.

Ang mga plate na iyon ay kailangang may mga kinakailangang butas upang maputol ang mga spacer at iba pang mga bahagi para sa huling pagpupulong. Pangunahin, ang lahat ng tatlong mga plato ay may mga butas sa parehong lokasyon para sa mga spacer, at mga tukoy na butas para sa electronics na naayos ayon sa pagkakabanggit sa bawat plate. Pansinin na ang gitnang plato ay may butas para sa pagpasa ng mga wires sa gitna.

Ang mas maliit na mga piraso ay pinutol sa mga sukat ng malaking servo upang ayusin ang mga ito sa pagpupulong.

Mga naka-print na piraso ng 3D

Bilang karagdagan sa paggupit ng laser, ang ilang mga piraso ay kailangang naka-print na 3D:

  • Ang suporta para sa ultrasonic sensor, na nagli-link ito sa isang micro servo motor arm
  • Ang suporta para sa castor wheel at ang dalawang IR edge sensor. Ang partikular na disenyo ng uri ng kahon na hugis ng mga dulo ng piraso para sa mga IR sensor ay kumikilos bilang isang screen upang maiwasan ang mga pagkagambala sa pagitan ng pindutan na naglalabas ng IR signal at ng mga IR sensor na kailangang pagtuunan ng pansin ang nangyayari sa lupa lamang.
  • Ang suporta para sa micro servo motor na binubuksan ang talukap ng mata
  • At sa wakas ang talukap ng mata mismo, na gawa sa dalawang piraso upang magkaroon ng isang mas malaking anggulo ng pagpapatakbo sa pamamagitan ng pag-iwas sa banggaan ng micro servo motor na binubuksan ang talukap ng mata:

    • Ang ibabang isa na maaayos sa tuktok na plato
    • At ang tuktok na naka-link sa ilalim ng isang bisagra, at pinalabas ng servo gamit ang isang makapal na wire ng metal. Nagpasya kaming magdagdag ng kaunting pagkatao sa robot sa pamamagitan ng pagbibigay nito ng isang ulo.

Kapag ang lahat ng mga piraso ay dinisenyo at ang mga file ay na-export sa tamang format para sa mga machine na ginamit, ang mga piraso ay maaaring gawin. Magkaroon ng kamalayan na ang 3D pag-print ay tumatagal ng maraming oras, lalo na sa mga sukat ng tuktok na piraso ng talukap ng mata. Maaaring kailanganin mo ang isa o dalawang araw upang mai-print ang lahat ng mga piraso. Gayunpaman, ang paggupit ng laser ay ilang minuto lamang.

Ang lahat ng mga SOLIDWORKS-file ay matatagpuan sa zip folder.

Hakbang 5: Assembly at Kable

Image
Image
Assembly at Kable
Assembly at Kable
Assembly at Kable
Assembly at Kable
Assembly at Kable
Assembly at Kable

Ang pagpupulong ay magiging isang halo ng mga kable at pag-ikot ng mga sangkap nang magkasama, simula sa ilalim hanggang sa itaas.

Bottom plate

Ang ilalim na plato ay pinagsama kasama ang 4AA na baterya ng baterya, ang mga servo motor, ang naka-print na bahagi (na nakakabit sa ball caster sa ilalim ng plato), ang dalawang mga sensor ng gilid, at 6 na male-femal spacer.

Gitnang plato

Susunod, maaaring mai-mount ang gitnang plato, na pinipiga ang mga servo motor sa pagitan ng dalawang plate. Ang plate na ito ay maaaring maayos sa pamamagitan ng paglalagay ng isa pang hanay ng mga spacer sa itaas nito. Ang ilang mga kable ay maaaring dumaan sa butas ng gitna.

Ang module ng ultrasonic ay maaaring mai-attach sa isang hindi tuloy-tuloy na servo, na naayos sa gitnang plato kasama ang Arduino, ang 9V na baterya pack (pinapagana ang arduino), at ang dalawang mga infrared na module ng receiver sa harap ng robot. Ang mga modyul na ito ay ginawa gamit ang mga board ng paghihinang ng butas at nakakabit sa mga turnilyo sa plato. Ang mga circuit para sa mga modyul na ito ay inilalarawan sa pangkalahatang mga iskema.

Nangungunang plate

Sa bahaging ito ng pagpupulong, ang mga switch ay hindi naayos ngunit nagagawa na ng robot ang lahat maliban sa mga aksyon na nangangailangan ng talukap ng mata, sa gayon ay pinapayagan kaming gumawa ng isang pagsubok upang maitama ang treshold, upang maiakma ang code ng kilusan at magkaroon ng isang madaling pag-access sa mga daungan ng arduino.

Kapag nakamit ang lahat ng ito, ang tuktok na plato ay maaaring maayos sa mga spacer. Ang huling mga sangkap na kung saan ay ang dalawang switch, ang pindutan, ang servo, ang buzzer at ang talukbong na sistema ay maaaring maayos na maayos sa tuktok na plato upang matapos ang pagpupulong.

Ang huling bagay na susubukan at itama ay ang anggulo ng servo upang wastong buksan ang takip.

Ang threshold ng mga edge sensor ay kailangang iakma sa kasama na potensyomiter (sa pamamagitan ng paggamit ng isang flat distornilyador) para sa iba't ibang mga ibabaw ng mesa. Ang isang puting mesa ay dapat magkaroon ng isang mas mababang threshold kaysa sa isang brown table halimbawa. Gayundin ang taas ng mga sensor ay makakaimpluwensya sa kinakailangang threshold.

Sa pagtatapos ng hakbang na ito, natapos ang pagpupulong at ang huling natitirang bahagi ay ang mga nawawalang code.

Hakbang 6: Coding: Pinagsasama ang Lahat

Ang lahat ng kinakailangang code upang gumana ang robot ay nasa naka-zip na file na maaaring ma-download. Ang pinakamahalaga ay ang "pangunahing" code na may kasamang pag-setup at pag-andar ng loop ng robot. Karamihan sa iba pang mga pagpapaandar ay nakasulat sa mga sub-file (nasa zip folder din). Ang mga sub-file na ito ay dapat na nai-save sa parehong folder (na kung saan ay pinangalanang "pangunahing") bilang pangunahing script bago i-upload ito sa Arduino

Una ang pangkalahatang bilis ng robot ay tinukoy kasama ang variable na "ipaalala". Ang "paalala" na ito ay isang halaga na naaalala kung aling direksyon ang robot ay lumiliko. Kung "ipaalala = 1", ang robot ay / ay lumiliko sa kaliwa, kung "ipaalala = 2", ang robot ay / ay lumiliko pakanan.

int bilis = 9; // Pangkalahatang bilis ng robot

int ipaalala = 1; // Paunang direksyon

Sa pag-setup ng robot, ang iba't ibang mga sub-file ng programa ay naisasimulan. Sa mga sub-file na ito, ang pangunahing mga pag-andar sa kontrol ng mga motor, sensor,… ay nakasulat. Sa pamamagitan ng pagsisimula sa kanila sa pag-set up, ang mga pagpapaandar na inilalarawan sa bawat isa sa mga file na ito ay maaaring magamit sa pangunahing loop. Sa pamamagitan ng pag-aktibo ng pagpapaandar r2D2 (), ang robot ay magkakaroon ng ingay tulad ng R2D2 robot mula sa franchise ng pelikula ng Star Wars kapag nagsisimula ito Narito ang function na r2D2 () ay hindi pinagana upang maiwasan ang buzzer mula sa pagguhit ng masyadong maraming kasalukuyang.

// Setup @ reset // ----------------

void setup () {initialize_IR_sensors (); initialize_obstacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int ipaalala = 1; // paunang direksyon Starter (ipaalala); }

Ang pagpapaandar ng Starter (ipaalala) ay unang tinawag sa pag-setup. Ginagawa ng pagpapaandar na ito ang robot na paikutin at hanapin ang signal ng IR ng isa sa mga pindutan. Kapag natagpuan na ang pindutan, lalabas ang programa sa pagpapaandar ng Starter sa pamamagitan ng pagbabago ng variable na 'cond' patungo sa hindi totoo. Sa panahon ng pag-ikot ng robot kailangan itong magkaroon ng kamalayan sa kapaligiran nito: kailangang makita ang mga gilid at balakid. Sinusuri ito tuwing oras bago ito magpatuloy sa pag-ikot. Kapag ang robot ay nakakita ng isang balakid o isang gilid, ang protokol upang maiwasan ang mga hadlang o gilid ay naisakatuparan. Ang mga protokol na ito ay ipapaliwanag mamaya sa hakbang na ito. Ang pagpapaandar ng Starter ay may isang variable na kung saan ay ang paalala variable na tinalakay dati. Sa pamamagitan ng pagbibigay ng halaga ng paalala sa pagpapaandar ng Starter, alam ng robot kung saang direksyon kailangan itong lumiko upang hanapin ang pindutan.

// Starter Loop: Tumalikod at hanapin ang pindutan // ------------------------------------ ----------------

void Starter (int ipaalala) {if (isedgeleft () || isedgeright ()) {// Detect the edge edgeDetected (ipaalala); } iba pa {bool cond = true; habang (cond == totoo) {kung (buttonleft () == false && button right () == false && isbuttonDetected () == true) {cond = false; } iba pa {kung (ipaalala == 1) {// Lumiliko kami sa kaliwa kung (isobstacleleft ()) {stopspeed (); iwasan_obstacle (ipaalala); } iba pa kung (isedgeleft () || isedgeright ()) {// Detect the edge edgeDetected (ipaalala); } iba pa {turnleft (bilis); }} iba pa kung (ipaalala == 2) {kung (isobstacleright ()) {stopspeed (); iwasan_obstacle (ipaalala); } iba pa kung (isedgeleft () || isedgeright ()) {// Detect the edge edgeDetected (ipaalala); } iba pa {pagliko (bilis); }}}}}}

Kung mahahanap ng robot ang pindutan, pagkatapos ay ang unang Starter loop ay lumabas at ang pangunahing, functional loop ng robot ay nagsisimula. Ang pangunahing loop na ito ay medyo kumplikado dahil sa tuwing, kailangan ng robot na tuklasin kung mayroon o walang hadlang o isang gilid sa harap nito. Ang pangunahing ideya ay ang robot ay sumusunod sa pindutan sa pamamagitan ng paghahanap nito at mawala ito sa bawat oras. Sa pamamagitan ng paggamit ng dalawang IR sensor, maaari nating makilala ang tatlong sitwasyon:

  • ang pagkakaiba sa pagitan ng ilaw ng IR na nakita ng kaliwa at kanang sensor ay mas malaki kaysa sa isang tiyak na threshold, at mayroong isang pindutan.
  • ang pagkakaiba sa ilaw ng IR ay mas maliit kaysa sa threshold, at mayroong isang pindutan sa harap ng robot.
  • ang pagkakaiba sa ilaw ng IR ay mas maliit kaysa sa threshold, at WALANG pindutan sa harap ng robot.

Ang paraan ng paggana ng track routine ay ang mga sumusunod: kapag ang pindutan ay napansin, ang robot ay gumagalaw patungo sa pindutan sa pamamagitan ng pag-on sa parehong direksyon na ito ay lumiliko (gamit ang paalala variable) at sa parehong oras ilipat ang isang maliit na pasulong. Kung masyadong malayo ang robot, mawawala muli ang pindutan, at sa puntong ito naaalala ng robot na kailangan niyang lumiko sa kabilang direksyon. Ginagawa din ito habang sumusulong nang kaunti. Sa pamamagitan nito, ang robot ay patuloy na lumiliko pakaliwa at lumiliko pakanan, ngunit sa pansamantalang oras ay sumusulong pa rin patungo sa pindutan. Sa tuwing mahahanap ng robot ang pindutan, patuloy lamang itong binabago hanggang sa nawala ito kung saan nagsisimula itong lumipat sa iba pang direksyon. Pansinin ang pagkakaiba sa mga pagpapaandar na ginagamit sa Starter loop at sa pangunahing loop: gumagamit ang Starter loop "turnleft ()" o "turn kanan ()", habang ang pangunahing loop ay gumagamit ng "moveleft ()" at "moveright ()". Ang paggalaw ng kaliwa / kanan ay hindi lamang magpapasara sa robot ngunit magpapalipat din sa kanya nang sabay.

/ * Functional loop ---- - Narito, mayroon lamang ang track routine * /

int nawala = 0; // Kung nawala = 0 ang pindutan ay natagpuan, kung nawala = 1 ang pindutan ay nawala void loop () {if (isedgeleft () || isedgeright ()) {

kung (! isobstacle ()) {

sumulong (bilis); antala (5); } iba pa {iwas_obstacle (ipaalala); } iba pa {kung (ipaalala == 1 && nawala == 1) {// Lumiliko kami sa kaliwang stopspeed (); kung (! isobstacleright ()) {moveright (bilis); // Turn around to find the button} else {iwas_obstacle (paalala); } ipaalala = 2; } iba pa kung (ipaalala == 2 && nawala == 1) {stopspeed (); kung (! isobstacleleft ()) {ilipat sa kaliwa (bilis); // Lumiliko kami sa kanan} iba pa {iwas_obstacle (paalalahanan); } ipaalala = 1; } iba pa kung (nawala == 0) {kung (ipaalala == 1) {// Lumiliko kami sa kaliwa kung (! isobstacleleft ()) {moveleft (bilis); // Lumiliko kami sa kanan} iba pa {stopspeed (); iwasan_obstacle (ipaalala); } //} iba pa kung (ipaalala == 2) {kung (! isobstacleright ()) {moveright (bilis); // Turn around to find the button} else {stopspeed (); iwasan_obstacle (ipaalala); }}} pagkaantala (10); nawala = 0; }} //}}

Ngayon, isang maliit na paliwanag ng dalawang pinaka-kumplikadong mga gawain ay ibinibigay:

Iwasan ang mga gilid

Ang protokol upang maiwasan ang mga gilid ay tinukoy sa isang pagpapaandar na tinatawag na "edgeDetection ()" na nakasulat sa "kilusan" sub-file. Ang protokol na ito ay umaasa sa ang katunayan na ang robot ay dapat lamang makatagpo ng isang gilid kapag naabot na nito ang patutunguhan: ang pindutan. Kapag ang robot ay nakakita ng isang gilid, ang unang bagay na ginagawa nito ay lumipat ng kaunti upang maging ligtas na paghuhubad mula sa gilid. Kapag tapos na ito, naghihintay ang robot ng 2 segundo. Kung ang isang tao ay pinindot ang pindutan sa harap ng robot sa loob ng dalawang segundo na iyon, alam ng robot na naabot na nito ang taong nais ang mantikilya at buksan ang kompartimento ng mantikilya at iharap ang mantikilya. Sa puntong ito, ang isang tao ay maaaring kumuha ng mantikilya mula sa robot. Pagkalipas ng ilang segundo ang robot ay magsasawang maghintay at isasara lamang ang takip ng mantikilya. Kapag nakasara na ang takip ay isasagawa ng robot ang Starter loop upang maghanap para sa isa pang pindutan. Kung nangyari na ang robot ay nakatagpo ng isang gilid bago maabot ang patutunguhan nito at ang pindutan sa harap ng robot ay hindi pinindot, hindi bubuksan ng robot ang takip ng mantikilya at agad na maisasagawa ang Starter loop.

Iwasan ang mga hadlang

Ang function na avo_obstacle () ay nakalagay din sa "kilusan" sub-file. Ang mahirap na bahagi tungkol sa pag-iwas sa mga hadlang ay ang katunayan na ang robot ay may isang malaking malaking bulag na lugar. Ang sensor ng ultrasonic ay inilalagay sa harap ng robot, na nangangahulugang makakakita ito ng mga hadlang, ngunit hindi alam kung kailan niya ito naipapasa. Upang malutas ito, ginagamit ang sumusunod na prinsipyo: Kapag nakatagpo ng robot ang isang balakid, ginagamit nito ang variable ng reming upang lumiko sa iba pang direksyon. Sa ganitong paraan maiwasan ng robot ang pagpindot sa balakid. Patuloy na lumiliko ang robot hanggang sa hindi makita ng ultrasonic sensor ang balakid. Sa oras na ang robot ay lumiliko, ang isang counter ay nadagdagan hanggang sa ang sagabal ay hindi na nakita. Ang counter na ito ay nagbibigay pagkatapos ng isang approximation ng haba ng balakid. Sa pamamagitan ng paglipat ng pasulong at sa parehong oras ng pagbawas ng counter ang balakid ay maiiwasan. Kapag naabot na ng counter ang 0, maaaring magamit muli ang pagpapaandar ng Starter upang ilipat ang pindutan. Siyempre ang robot ay gumagana ang Starter sa pamamagitan ng pag-on sa direksyon na naalala nito na pupunta bago siya nakatagpo ng balakid (muli gamit ang paalala variable).

Ngayon na lubos mong naiintindihan ang code, maaari mo nang simulang gamitin ito!

Siguraduhing iakma ang mga threshold sa iyong kapaligiran (ang pagsasalamin ng IR ay mas mataas sa mga puting mesa halimbawa) at upang iakma ang iba't ibang mga parameter sa iyong mga pangangailangan. Gayundin, dapat bigyan ng malaking pansin ang paggana ng iba't ibang mga module. Pangunahing kahalagahan na ang mga servo motor ay hindi pinalakas ng Arduino 5V port, dahil tumatagal sila ng maraming kasalukuyang (maaari itong makapinsala sa microcontroller). Kung ang parehong mapagkukunan ng kuryente ay ginagamit para sa mga sensor tulad ng isa upang paandarin ang mga servos, maaaring makaranas ang ilang mga problema sa pagsukat.

Inirerekumendang: