Satura rādītājs:

Sviesta robots: Arduino robots ar eksistenciālu krīzi: 6 soļi (ar attēliem)
Sviesta robots: Arduino robots ar eksistenciālu krīzi: 6 soļi (ar attēliem)

Video: Sviesta robots: Arduino robots ar eksistenciālu krīzi: 6 soļi (ar attēliem)

Video: Sviesta robots: Arduino robots ar eksistenciālu krīzi: 6 soļi (ar attēliem)
Video: robot, pasa la mantequilla #shorts #rickandmorty #rickymorty 2024, Decembris
Anonim
Image
Image

Šī projekta pamatā ir animācijas sērija "Riks un Mortijs". Vienā no epizodēm Riks izgatavo robotu, kura vienīgais mērķis ir atnest sviestu. Kā studentiem no Bruface (Briseles Inženieru fakultāte) mums ir uzdevums mehatronikas projektam, kura mērķis ir izveidot robotu, pamatojoties uz ieteikto tēmu. Šī projekta uzdevums ir: Izveidojiet robotu, kas pasniedz tikai sviestu. Tam var būt eksistenciāla krīze. Protams, robots Rika un Mortija epizodē ir diezgan sarežģīts robots, un ir jāveic daži vienkāršojumi:

Tā kā tā vienīgais mērķis ir atnest sviestu, ir daudz vienkāršākas alternatīvas. Tā vietā, lai liktu robotam izskatīties un paķert sviestu, pirms tas to atved īstajai personai, robots var visu laiku nest sviestu. Tādējādi galvenā ideja ir izgatavot ratiņus, ar kuriem sviests tiek nogādāts vajadzīgajā vietā.

Robotam, izņemot sviesta transportēšanu, ir jāzina, kur viņam vajadzēs atnest sviestu. Šajā epizodē Riks izmanto savu balsi, lai piezvanītu un komandētu robotu. Tam nepieciešama dārga balss atpazīšanas sistēma, un tas būtu pārāk sarežģīti. Tā vietā ikviens pie galda esošais saņem pogu: kad šī poga ir aktivizēta, robots var atrast šo pogu un virzīties uz to.

Lai atkārtotu, robotam jāatbilst šādām prasībām:

  • Tai jābūt drošai: tai jāizvairās no šķēršļiem un jānovērš sevi no galda nokrišanas;
  • Robotam jābūt mazam: vieta uz galda ir ierobežota, un neviens nevēlas robotu, kas pasniedz sviestu, bet ir uz pusi mazāks par pašu galdu;
  • Robota darbība nevar būt atkarīga no galda izmēra vai formas, tāpēc to var izmantot uz dažādiem galdiem;
  • Tai ir jānogādā sviests īstajai personai pie galda.

1. solis: galvenā koncepcija

Iepriekš minētās prasības var izpildīt, izmantojot dažādas metodes. Šajā posmā tiek izskaidroti lēmumi par galveno dizainu. Detalizētu informāciju par to, kā šīs idejas tiek īstenotas, var atrast šādās darbībās.

Lai veiktu savu pienākumu, robotam ir jāpārvietojas, līdz tiek sasniegts galamērķis. Ņemot vērā robota pielietojumu, ir skaidrs, ka labāk ir izmantot riteņus, nevis kustīgu kustību. Tā kā galds ir līdzena virsma un robots nesasniegs ļoti lielu ātrumu, divi darbināmi riteņi un viena ritentiņa bumba ir vienkāršākais un visvieglāk kontrolējamais risinājums. Piedziņas riteņiem jābūt darbināmiem ar diviem motoriem. Motoriem jābūt ar lielu griezes momentu, bet tiem nav jāsasniedz liels ātrums, tāpēc tiks izmantoti nepārtrauktie servomotori. Vēl viena servomotoru priekšrocība ir vienkāršība lietošanā ar Arduino.

Šķēršļu noteikšanu var veikt, izmantojot ultraskaņas sensoru, kas mēra attālumu, kas piestiprināts pie servo motora, lai izvēlētos mērījuma virzienu. Malas var noteikt, izmantojot LDR sensorus. Lai izmantotu LDR sensorus, būs jāizveido ierīce, kurā ir gan gaismas diode, gan LDR sensors. LDR sensors mēra atstaroto gaismu, un to var uzskatīt par sava veida attāluma sensoru. Tas pats princips pastāv arī ar infrasarkano gaismu. Pastāv daži infrasarkanie tuvuma sensori, kuriem ir digitālā izeja: aizvērt vai aizvērt. Tas ir tieši tas, kas robotam nepieciešams, lai noteiktu malas. Apvienojot 2 malu sensorus, kas novietoti kā divas kukaiņu antenas, un vienu darbināmu ultraskaņas sensoru, robotam jāspēj izvairīties no šķēršļiem un malām.

Pogas noteikšanu var veikt arī, izmantojot IR sensorus un gaismas diodes. IR priekšrocība ir tā, ka tā ir neredzama, kas padara tās lietošanu netraucējošu cilvēkiem pie galda. Varētu izmantot arī lāzerus, bet tad gaisma būtu redzama un arī bīstama, ja kāds norāda lāzeru citas personas acī. Turklāt lietotājam robota sensorus vajadzētu mērķēt tikai ar plānu lāzera staru, kas būtu diezgan kaitinoši. Aprīkojot robotu ar diviem IR sensoriem un izveidojot pogu ar infrasarkano staru vadu, robots zina, kurā virzienā viņam jāiet, sekojot IR gaismas intensitātei. Ja nav pogas, robots var apgriezties, līdz viens no gaismas diodēm uztver signālu no vienas no pogām.

Sviestu ievieto nodalījumā robota augšpusē. Šis nodalījums var sastāvēt no kastes un vāka, lai atvērtu kārbu. Lai atvērtu vāku un pārvietotu ultraskaņas sensoru, lai skenētu un noteiktu šķēršļus, mums ir vajadzīgi divi motori, un šim nolūkam nepārtrauktie servomotori ir vairāk pielāgoti, jo motoriem ir jāiet noteiktā stāvoklī un jāuztur šī pozīcija.

Projekta papildu iezīme bija mijiedarboties ar ārējo vidi ar robota balsi. Skaņas signāls ir vienkāršs un šim nolūkam pielāgots, taču to nevar izmantot jebkurā laikā, jo cietēšanas līmenis ir augsts.

Projekta galvenās grūtības ir atkarīgas no kodēšanas, jo mehāniskā daļa ir diezgan vienkārša. Daudzi gadījumi ir jāņem vērā, lai izvairītos no tā, ka robots ir iestrēdzis vai dara kaut ko nevēlamu. Galvenās problēmas, kas mums jāatrisina, ir IR signāla zaudēšana šķēršļa dēļ un apstāšanās, kad tas nonāk pie pogas!

2. solis: materiāli

Mehāniskās detaļas

  • 3D printeris un lāzera griešanas mašīna
    • PLA tiks izmantota 3D drukāšanai, bet jūs varat arī izmantot ABS
    • Lāzera griešanai tiks izmantota 3 mm bērza saplākšņa plāksne, jo tā ļauj vēlāk viegli veikt izmaiņas, var izmantot arī plexiglas, bet to ir grūtāk modificēt, tiklīdz tas ir sagriezts ar lāzeru, to neiznīcinot
  • Skrūves, uzgriežņi, paplāksnes

    Lielākā daļa sastāvdaļu tiek turētas kopā, izmantojot M3 pogas uzgaļa skrūves, paplāksnes un uzgriežņus, bet dažām no tām ir nepieciešams M2 vai M4 skrūvju komplekts. Skrūvju garums ir 8-12 mm

  • PCB starplikas, 25 mm un 15 mm
  • 2 Servo motori ar saderīgiem riteņiem
  • Dažas biezas metāla stieples, kuru diametrs ir aptuveni 1-2 mm

Elektroniskās detaļas

  • Mikrokontrolleris

    1 arduino UNO valde

  • Servo motori

    • 2 lieli servo motori: nepārtraukta Feetch 6Kg 360 grādi
    • 2 mikro servomotori: Feetech FS90
  • Sensori

    • 1 ultraskaņas sensors
    • 2 IR tuvuma sensori
    • 2 IR fotodiodes
  • Baterijas

    • 1 9V akumulatora turētājs + akumulators
    • 1 4AA bateriju turētājs + baterijas
    • 1 9V akumulatora kārba + akumulators
  • Papildu sastāvdaļas

    • Daži lecami vadi, vadi un lodēšanas plāksnes
    • Daži rezistori
    • 1 IR LED
    • 3 slēdži
    • 1 skaņas signāls
    • 1 poga
    • 1 Arduino līdz 9V akumulatora savienotājs

3. darbība: elektronikas pārbaude

Elektronikas pārbaude
Elektronikas pārbaude
Elektronikas pārbaude
Elektronikas pārbaude

Pogas izveide:

Poga ir vienkārši izgatavota no slēdža, infrasarkanās gaismas diodes un 220 omu rezistora sērijveidā, ko darbina 9 V akumulators. Tas ir ievietots 9 V akumulatorā, lai iegūtu kompaktu un tīru dizainu.

Infrasarkanā uztvērēja moduļu izveide:

Šie moduļi ir izgatavoti ar caurumu caurumiem, kas vēlāk tiks piestiprināti robotam ar skrūvēm. Šo moduļu shēmas ir attēlotas vispārīgajās shēmās. Princips ir izmērīt infrasarkanās gaismas intensitāti. Lai uzlabotu mērījumus, var izmantot kolimatorus (izgatavotus no saraušanās caurulēm), lai koncentrētos uz noteiktu interesējošo virzienu.

Izmantojot elektroniskās ierīces, ir jāizpilda dažādas projekta prasības. Ierīču skaitam jābūt ierobežotam, lai saglabātu relatīvi zemu sarežģītību. Šis solis satur elektroinstalācijas shēmas un katru kodu, lai pārbaudītu visas detaļas atsevišķi:

  • Nepārtrauktie servomotori;
  • Ultraskaņas sensors;
  • Nepārtrauktie servodzinēji;
  • Signāls;
  • IR pogas virziena noteikšana;
  • Malu noteikšana, izmantojot tuvuma sensorus;

Šie kodi sākumā var palīdzēt izprast komponentus, taču tas ir ļoti noderīgs arī atkļūdošanai vēlākos posmos. Ja rodas kāda problēma, kļūdu var atklāt vieglāk, pārbaudot visus komponentus atsevišķi.

4. solis: 3D drukātu un lāzera griezuma gabalu dizains

3D drukāts un ar lāzeru sagrieztu gabalu dizains
3D drukāts un ar lāzeru sagrieztu gabalu dizains
3D drukāts un ar lāzeru sagrieztu gabalu dizains
3D drukāts un ar lāzeru sagrieztu gabalu dizains
3D drukāts un ar lāzeru sagrieztu gabalu dizains
3D drukāts un ar lāzeru sagrieztu gabalu dizains

Lāzera griezuma gabali

Montāža ir izgatavota no trim galvenajām horizontālajām plāksnēm, kuras kopā satur PCB starplikas, lai iegūtu atvērtu dizainu, kas vajadzības gadījumā viegli piekļūtu elektronikai.

Šīm plāksnēm ir jāizgriež nepieciešamie caurumi, lai pieskrūvētu starplikas un citas sastāvdaļas galīgajai montāžai. Galvenokārt visām trim plāksnēm ir caurumi tajā pašā vietā starplikām, un īpašie caurumi elektronikai ir attiecīgi piestiprināti pie katras plāksnes. Ievērojiet, ka vidējā plāksnē vidū ir caurums vadu novadīšanai.

Mazāki gabali tiek sagriezti pēc lielā servo izmēriem, lai tos piestiprinātu pie montāžas.

3D drukāti gabali

Papildus griešanai ar lāzeru daži gabali būs jāizdrukā 3D formātā:

  • Atbalsts ultraskaņas sensoram, kas to savieno ar vienu mikropervo motora roku
  • Atbalsts ritentiņam un diviem IR malu sensoriem. Infrasarkano staru sensoru detaļas kārbveida galu īpašais dizains darbojas kā ekrāns, lai izvairītos no traucējumiem starp pogu, kas izstaro IR signālu, un IS sensoriem, kuriem jākoncentrējas tikai uz to, kas notiek uz zemes
  • Mikroservo motora balsts atver vāku
  • Visbeidzot, pats vāks, kas izgatavots no diviem gabaliem, lai tam būtu lielāks darbības leņķis, izvairoties no sadursmes ar mikro servomotoru, kas atver vāku:

    • Apakšējais, kas tiks piestiprināts pie augšējās plāksnes
    • Un augšdaļa, kas ar apakšējo daļu ir savienota ar eņģēm, un tiek darbināta ar servo, izmantojot biezu metāla stiepli. Mēs nolēmām robotam pievienot nedaudz personības, piešķirot tam galvu.

Kad visi gabali ir izstrādāti un faili eksportēti pareizajā formātā izmantotajām mašīnām, gabalus faktiski var izgatavot. Ņemiet vērā, ka 3D drukāšana aizņem daudz laika, īpaši ņemot vērā vāka augšējā gabala izmērus. Lai izdrukātu visus gabalus, jums var būt nepieciešama viena vai divas dienas. Lāzera griešana tomēr ir tikai dažu minūšu jautājums.

Visi SOLIDWORKS faili ir atrodami mapē ar zip.

5. darbība: montāža un elektroinstalācija

Image
Image
Montāža un elektroinstalācija
Montāža un elektroinstalācija
Montāža un elektroinstalācija
Montāža un elektroinstalācija
Montāža un elektroinstalācija
Montāža un elektroinstalācija

Montāža būs elektroinstalācijas un sastāvdaļu skrūvēšanas kombinācija, sākot no apakšas uz augšu.

Apakšējā plāksne

Apakšējā plāksne ir samontēta ar 4AA bateriju komplektu, servomotoriem, drukāto daļu (lodīšu ritentiņa piestiprināšana zem plāksnes), diviem malu sensoriem un 6 vīriešu un sieviešu starplikām.

Vidējā plāksne

Tālāk var uzstādīt vidējo plāksni, saspiežot servomotorus starp abām plāksnēm. Pēc tam šo plāksni var salabot, uzliekot tai pāri citu starpliku komplektu. Dažus kabeļus var izlaist caur centrālo caurumu.

Ultraskaņas moduli var piestiprināt pie nepārtraukta servo, kas ir piestiprināts pie vidējās plāksnes ar Arduino, 9 V akumulatoru (baro arduino) un diviem infrasarkanā uztvērēja moduļiem robota priekšpusē. Šie moduļi ir izgatavoti ar caurumu caurumiem un ir piestiprināti pie skrūvēm pie plāksnes. Šo moduļu shēmas ir attēlotas vispārīgajās shēmās.

Augšējā plāksne

Šajā montāžas daļā slēdži nav fiksēti, bet robots jau var darīt visu, izņemot darbības, kurām nepieciešams vāks, tādējādi ļaujot mums veikt kādu pārbaudi, lai izlabotu slieksni, pielāgotu kustības kodu un būtu viegli piekļuve arduino ostām.

Kad tas viss ir sasniegts, augšējo plāksni var nostiprināt ar starplikām. Pēdējās sastāvdaļas, kas ir divi slēdži, poga, servo, skaņas signāls un vāka sistēma, var beidzot piestiprināt pie augšējās plāksnes, lai pabeigtu montāžu.

Pēdējais, kas jāpārbauda un jālabo, ir servo leņķis, lai pareizi atvērtu vāku.

Malu sensoru slieksnis ir jāpielāgo ar komplektā iekļauto potenciometru (izmantojot plakanu skrūvgriezi) dažādām galda virsmām. Baltam galdam vajadzētu būt zemākam slieksnim nekā, piemēram, brūnam galdam. Arī sensoru augstums ietekmēs nepieciešamo slieksni.

Šī soļa beigās montāža ir pabeigta, un pēdējā atlikušā daļa ir trūkstošie kodi.

6. darbība: kodēšana: visu salieciet kopā

Viss nepieciešamais kods, lai robots darbotos, atrodas zip failā, kuru var lejupielādēt. Vissvarīgākais ir "galvenais" kods, kas ietver robota iestatīšanu un funkcionālo cilpu. Lielākā daļa citu funkciju ir ierakstītas apakšfailos (arī mapē ar zip). Šie apakšfaili pirms augšupielādes Arduino ir jāsaglabā tajā pašā mapē (ar nosaukumu "galvenais") kā galvenais skripts

Vispirms tiek definēts robota vispārējais ātrums kopā ar mainīgo "atgādināt". Šis "atgādinājums" ir vērtība, kas atceras, kādā virzienā robots pagriezās. Ja "atgādināt = 1", robots griežas pa kreisi, ja "atgādina = 2", robots griežas pa labi.

int ātrums = 9; // Robota vispārējais ātrums

int atgādināt = 1; // Sākotnējais virziens

Robota iestatīšanas laikā tiek inicializēti dažādi programmas apakšfaili. Šajos apakšfailos ir ierakstītas dzinēju, sensoru,… vadības pamatfunkcijas. Inicializējot tos iestatījumos, katrā no šiem failiem aprakstītās funkcijas var izmantot galvenajā cilpā. Aktivizējot funkciju r2D2 (), robots radīs tādu troksni kā R2D2 robots no Zvaigžņu karu filmu franšīzes tas sākas. Šeit r2D2 () funkcija ir atspējota, lai novērstu skaņas signāla pārāk lielu strāvas padevi.

// Iestatīšana @ atiestatīšana // ----------------

void setup () {initialize_IR_sensors (); initialize_obstacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int atgādināt = 1; // sākotnējais virziens Starteris (atgādināt); }

Sākuma (atgādinājuma) funkcija vispirms tiek izmantota iestatīšanas laikā. Šī funkcija liek robotam apgriezties un meklēt vienas no pogām IR signālu. Kad poga ir atrasta, programma iziet no startera funkcijas, mainot mainīgo “cond” uz false. Robota rotācijas laikā tam jāapzinās sava vide: tai ir jānosaka malas un šķēršļi. Tas tiek pārbaudīts katru reizi, pirms tas turpina apgriezties. Tiklīdz robots atklās šķērsli vai malu, tiks izpildīts protokols, lai izvairītos no šiem šķēršļiem vai malām. Šie protokoli tiks izskaidroti vēlāk šajā posmā. Funkcijai Starter ir viens mainīgais, kas ir atgādinājuma mainīgais, kas tika apspriests iepriekš. Piešķirot atgādinājuma vērtību startera funkcijai, robots zina, kurā virzienā tam jāgriežas, lai meklētu pogu.

// Sākuma cilpa: pagriezieties un meklējiet pogu // ------------------------------------ ----------------

void Starter (int atgādināt) {if (isedgeleft () || isedgeright ()) {// Noteikt malas edgeDetected (atgādināt); } cits {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } cits {ja (atgādināt == 1) {// Mēs griezāmies pa kreisi, ja (isobstacleleft ()) {stoppeed (); izvairīties_obstacle (atgādināt); } cits if (isedgeleft () || isedgeright ()) {// Noteikt malu maluDetected (atgādināt); } else {pagrieziens pa kreisi (ātrums); }} cits if (atgādināt == 2) {ja (isobstacleright ()) {stoppeed (); izvairīties_obstacle (atgādināt); } cits if (isedgeleft () || isedgeright ()) {// Noteikt malu maluDetected (atgādināt); } cits {pagrieziens (ātrums); }}}}}}

Ja robots atrod pogu, tad pirmā startera cilpa tiek aizvērta un sākas galvenā, funkcionālā robota cilpa. Šī galvenā cilpa ir diezgan sarežģīta, jo robotam katru reizi ir jānosaka, vai priekšā ir šķērslis vai mala. Galvenā ideja ir tāda, ka robots seko pogai, to atrodot un katru reizi pazaudējot. Izmantojot divus IR sensorus, mēs varam atšķirt trīs situācijas:

  • atšķirība starp kreisā un labā sensora noteikto IR gaismu ir lielāka par noteiktu slieksni, un ir poga.
  • IR gaismas atšķirība ir mazāka par slieksni, un robota priekšā ir poga.
  • IR gaismas atšķirība ir mazāka par slieksni, un robota priekšā nav pogas NO.

Izsekošanas režīms darbojas šādi: kad poga tiek atklāta, robots virzās uz pogu, pagriežot tajā pašā virzienā, kurā tas pagriezās (izmantojot atgādinājuma mainīgo), un tajā pašā laikā nedaudz virzās uz priekšu. Ja robots pagriezīsies pārāk tālu, poga atkal tiks pazaudēta, un šajā brīdī robots atceras, ka viņam jāgriežas citā virzienā. Tas tiek darīts arī, nedaudz virzoties uz priekšu. To darot, robots nepārtraukti griežas pa kreisi un pa labi, bet tikmēr virzās uz pogu. Katru reizi, kad robots atrod pogu, tas tikai turpina griezties, līdz to pazaudē; tādā gadījumā tas sāk kustēties citā virzienā. Ievērojiet atšķirības starp funkcijām, kas tiek izmantotas startera cilpā un galvenajā cilpā: startera cilpa izmanto "turnleft ()" vai "turnright ()", savukārt galvenajā cilpā tiek izmantoti "moveleft ()" un "moveright ()". Kustības pa kreisi/pa labi funkcijas ne tikai liek robotam griezties, bet arī liek viņam vienlaikus virzīties uz priekšu.

/ * Funkcionālā cilpa ---------------------------- Šeit ir tikai sliežu režīms */

int zaudēts = 0; // Ja pazudis = 0, poga ir atrasta, ja zaudēta = 1, poga tiek zaudēta void loop () {if (isedgeleft () || isedgeright ()) {

ja (! isobstacle ()) {

virzība uz priekšu (ātrums); kavēšanās (5); } cits {izvairīties_objekts (atgādināt); } cits {if (atgādināt == 1 && zaudējis == 1) {// Mēs pagriezāmies pa kreisi, apstājoties (); if (! isobstacleright ()) {moveright (ātrums); // Pagriezieties, lai atrastu pogu} else {išvengti_obstacle (atgādināt); } atgādināt = 2; } cits if (atgādināt == 2 && zaudējis == 1) {stoppeed (); ja (! isobstacleleft ()) {moveleft (ātrums); // Mēs pagriezāmies pa labi} else {išvengti_obstacle (atgādināt); } atgādināt = 1; } cits if (zaudēts == 0) {ja (atgādināt == 1) {// Mēs griezāmies pa kreisi, ja (! isobstacleleft ()) {moveleft (ātrums); // Mēs pagriezāmies pa labi} else {stoppeed (); izvairīties_obstacle (atgādināt); } //} cits if (atgādināt == 2) {ja (! isobstacleright ()) {moveright (ātrums); // Pagriezieties, lai atrastu pogu} else {stoppeed (); izvairīties_obstacle (atgādināt); }}} kavēšanās (10); zaudēts = 0; }} //}}

Tagad ir sniegts neliels divu sarežģītāko darbību skaidrojums:

Izvairieties no malām

Protokols, lai izvairītos no malām, ir definēts funkcijā ar nosaukumu "edgeDetection ()", kas ir ierakstīta apakšfaila "kustība". Šis protokols balstās uz faktu, ka robotam vajadzētu saskarties ar malu tikai tad, kad tas ir sasniedzis galamērķi: pogu. Kad robots atklāj malu, pirmā lieta, ko tas dara, ir mazliet atkāpties, lai būtu drošā attālumā no malas. Kad tas ir izdarīts, robots gaida 2 sekundes. Ja šo divu sekunžu laikā kāds nospiež pogu robota priekšpusē, robots zina, ka tas ir sasniedzis personu, kas vēlas sviestu, un atver sviesta nodalījumu un pasniedz sviestu. Šajā brīdī kāds var paņemt sviestu no robota. Pēc dažām sekundēm robotam apniks gaidīt un viņš vienkārši aizvērs sviesta vāku. Kad vāks ir aizvērts, robots izpildīs startera cilpu, lai meklētu citu pogu. Ja gadās, ka robots saskaras ar malu pirms galamērķa sasniegšanas un poga robota priekšpusē netiek nospiesta, robots neatver sviesta vāku un nekavējoties izpilda startera cilpu.

Izvairieties no šķēršļiem

Funkcija izvairīšanās_obstacle () atrodas arī apakšfaila "kustība". Grūti izvairīties no šķēršļiem ir fakts, ka robotam ir diezgan liela akla vieta. Ultraskaņas sensors ir novietots robota priekšpusē, kas nozīmē, ka tas var noteikt šķēršļus, bet nezina, kad viņam tas tiek garām. Lai to atrisinātu, tiek izmantots šāds princips: Kad robots saskaras ar šķērsli, tas izmanto mainīgo mainīgo, lai pagrieztos citā virzienā. Tādā veidā robots izvairās no sitiena ar šķērsli. Robots turpina griezties, līdz ultraskaņas sensors vairs neatklāj šķērsli. Laikā, kad robots griežas, skaitītājs tiek palielināts, līdz šķērslis vairs netiek atklāts. Šis skaitītājs dod aptuvenu šķēršļa garumu. Virzoties uz priekšu un vienlaikus samazinot skaitītāju, var izvairīties no šķēršļiem. Kad skaitītājs sasniedz 0, startera funkciju var atkal izmantot, lai pārvietotu pogu. Protams, robots veic startera funkciju, pagriežoties tajā virzienā, kurā tas atcerējās, ka tas notiek, pirms viņš saskārās ar šķērsli (atkal izmantojot atgādinājuma mainīgo).

Tagad, kad esat pilnībā sapratis kodu, varat sākt to lietot!

Noteikti pielāgojiet sliekšņus savai videi (piemēram, baltās tabulās IR atstarojums ir lielāks) un pielāgojiet dažādus parametrus savām vajadzībām. Liela uzmanība jāpievērš arī dažādu moduļu barošanai. Ir ļoti svarīgi, lai servodzinēji netiktu darbināti ar Arduino 5V portu, jo tie patērē daudz strāvas (tas var sabojāt mikrokontrolleru). Ja sensoriem tiek izmantots tas pats barošanas avots, kas servo barošanai, var rasties dažas mērīšanas problēmas.

Ieteicams: