Բովանդակություն:

Arduino Sumo ռոբոտ ՝ 5 քայլ
Arduino Sumo ռոբոտ ՝ 5 քայլ

Video: Arduino Sumo ռոբոտ ՝ 5 քայլ

Video: Arduino Sumo ռոբոտ ՝ 5 քայլ
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Հուլիսի
Anonim
Arduino Sumo ռոբոտ
Arduino Sumo ռոբոտ

Սկսելուց առաջ

Ի՞նչ է սումո ռոբոտը:

Դա ինքնակառավարվող ռոբոտներ են ՝ հատուկ չափսերով և առանձնահատկություններով, այն նաև նախագծված է թշնամական ձևերով, ինչը նրան իրավունք է տալիս մասնակցելու այլ ռոբոտների հետ մրցումներին և մրցումներին:

«Սումո» անունը ծագել է հին ճապոնական մարզաձևից, որը երկու հակառակորդ է, որոնք պայքարում են ռինգում, որոնցից յուրաքանչյուրը փորձում է դուրս մղել մյուս հակառակորդին: Եվ սա այն է, ինչ ռոբոտները պետք է անեն նաև սումո ռոբոտաշինության մրցումներում, որտեղ ռոբոտներ, որոնք տեղադրված են ռինգում և միմյանց փորձում են դուրս մղել մրցակցին:

Գաղափարը

Կառուցեք որոշակի բնութագրերով և այդ մրցույթի օրենքներին համապատասխան ռոբոտ (Sumo), այս ռոբոտը պետք է ունենա ճշգրիտ չափսեր ՝ պայքարելու և գոյատևելու համար, որպեսզի ոչ մի կերպ չանցնի ռինգից:

Այսպիսով, եկեք նայենք Sumo ռոբոտների մրցակցության օրենքներին.

Ես կբացատրեմ մի քանի կարևոր դերեր, որոնք պետք է հաշվի առնել ձեր սեփական SUMO- ն կառուցելիս, դա նաև կարող է օգնել ձեզ պատկերացնել և նորարարել ձեր սեփական գաղափարը ՝ առանց խորը մանրամասների մեջ մտնելու:

1. Չափերը ՝ առավելագույն լայնություն 20 սմ, առավելագույն երկարություն 20 սմ, բարձրություն նշված չէ:

2. Ձև. Ռոբոտի ձևը կարող է փոփոխական լինել մրցարշավը սկսելուց հետո, բայց առանց մեկ կենտրոնական օբյեկտի պահպանման անբաժանելի մասերի:

3. Քաշը `չի գերազանցում 3 կգ -ը:

4. Ռոբոտը պետք է ինքնակառավարվող լինի:

Քայլ 1: Բաղադրիչներ

Image
Image
Օգտագործում է յուրաքանչյուր բաղադրիչի համար
Օգտագործում է յուրաքանչյուր բաղադրիչի համար

1 Արդուինո Անո 3

2 DC շարժիչ

1 L298N Dual H Bridge Arduino- ի համար

1 Ուլտրաձայնային տվիչ

2 IR TCRT5000

1 մարտկոց 9 վ

AA մարտկոց 4 * 1.5 v կտոր + Մարտկոց

4 ռոբոտային անիվներ

jumper լարերը

Քայլ 2: Օգտագործում է յուրաքանչյուր բաղադրիչի համար

Օգտագործում է յուրաքանչյուր բաղադրիչի համար
Օգտագործում է յուրաքանչյուր բաղադրիչի համար
Օգտագործում է յուրաքանչյուր բաղադրիչի համար
Օգտագործում է յուրաքանչյուր բաղադրիչի համար

Այժմ մենք ունենք անհրաժեշտ բաղադրիչները, ուստի եկեք մանրամասնորեն իմանանք, թե ինչի համար է այն օգտագործվում:

1- Արդուինո Անո 3

Այն հիմնական տախտակ է, որը վերահսկում է բոլոր մասերը և կապում դրանք միասին

2- DC շարժիչ

Որոնք օգնում են ռոբոտին մանևրել և շարժվել ՄՐMPՈՅԹԻ ռինգում

4- L298N Dual H Bridge Arduino- ի համար

Այն փոքր վահանակ է, որն ապահովում է շարժիչներին մշտական լարում, ինչպես նաև Arduino ափսեի աջակցություն ՝ շարժման և լարման լավ վերահսկմամբ:

5- Ուլտրաձայնային տվիչ

Ուլտրաձայնային սենսորն օգտագործվում է հակառակորդի ռոբոտը գտնելու համար և սովորաբար տեղադրվում է ռոբոտի վերևում:

6- IR TCRT5000

Ինչպես արդեն նշեցինք, մրցույթի մատանին նախագծված էր որոշակի չափսերով և ուներ երկու գույն, լրացումը ՝ սև, իսկ շրջանակը ՝ սպիտակ: Մրցույթի մասնակիցը չպետք է դուրս գա: Հետեւաբար, մենք օգտագործում ենք IR սենսորը `համոզվելու համար, որ ռոբոտը ռինգից դուրս չի լինի: Այս սենսորը օղակի գույները տարբերելու ունակություն ունի):

7- Մարտկոց 9 վ

Այն աջակցում է հիմնական տախտակին (Arduino) `կարևոր լարման միջոցով:

8- AA մարտկոց 4 * 1.5 v կտոր + Մարտկոց

Այն աջակցում է երկու շարժիչներին (DC շարժիչ) կարևոր լարման հետ և այն պետք է տարանջատվի ՝ անիվների ամբողջ ուժը հաղորդելու համար:

9- Jumper լարերը

Քայլ 3: Դիզայն

Դիզայն
Դիզայն
Դիզայն
Դիզայն

Ես պատրաստել եմ սումո ռոբոտների երկու դիզայն ՝ օգտագործելով Google 3D էսքիզը, քանի որ սիրում եմ ստեղծել իմ ռոբոտների թղթե մոդելներ ՝ նախքան լազերային դանակի ակրիլից մասեր կտրելը: Հաստատելու համար, որ բոլոր մասերը միմյանց ճիշտ կտեղավորվեն, կարևոր է, որ թղթե մոդելները տպվեն գծագրերի ճշգրիտ չափերով:

Եվ ես հաշվի եմ առնում մրցակցության օրենքներին համապատասխան չափումներ կատարելը, այնպես որ փորձեք մտածել ավելի ստեղծագործական ձևերի մեջ և կատարել ձեր սեփական մոդելը:

Ռոբոտի քաշի նկատմամբ ավելի զգայուն լինելու համար, կամ այնուհետև մարտկոցները դրեք ռոբոտի առջևի մասում ՝ առջևի վահանով ՝ 45 աստիճանի անկյան տակ ռոբոտի տեսքով:

Ներբեռնեք դիզայնը 1 այստեղից

Ներբեռնեք դիզայնը 2 այստեղից

Կարող եք նաև ներբեռնել Թղթի մոդելի ձևանմուշ

Բացեք PDF ֆայլը Adobe Acrobat Reader- ով (խորհուրդ է տրվում ծրագրակազմ)

Քայլ 4: Խաղալ ռազմավարություն

Image
Image
Խաղալ ռազմավարություն
Խաղալ ռազմավարություն

Ինչպես արդեն նշեցինք, որ ռոբոտը պետք է ունենա ինքնուրույն վերահսկելու իր ունակությունը, ուստի այն մեզ հնարավորություն է տալիս ծրագրավորել այն մեկից ավելի եղանակներով ՝ կախված այն բանից, թե ինչպես եք ցանկանում, որ ռոբոտը ռինգում խաղա այնպես, ինչպես ցանկացած հակառակորդ իսկական ցանկանում է հաղթել խաղը:

Խաղային ռազմավարություն (1)

· Մենք անընդհատ ռոբոտ ենք դարձնելու իր շուրջը:

· Ռոբոտը պտույտի ընթացքում անընդհատ չափում է տարածությունը:

· Եթե հակառակորդի չափված հեռավորությունը ցածր է (օրինակ ՝ 10 սմ), դա նշանակում է, որ հակառակորդը գտնվում է մեր ռոբոտի դիմաց անմիջապես:

· Ռոբոտը պետք է դադարեցնի պտտվելը, այնուհետև սկսի հարձակումը (արագ առաջ շարժվի ամբողջ ուժով):

· Ռոբոտը միշտ պետք է վերցնի IR սենսորների ընթերցումները `համոզվելու համար, որ մենք չենք անցել օղակի սահմանը:

· Եթե կարդալ սպիտակ գույնի IR առկայության մասին, այն պետք է շարժի ռոբոտին անմիջապես սենսորի հակառակ ուղղությամբ (օրինակ. Եթե առջևի սենսորը, որը ցույց էր տալիս ռոբոտի սպիտակ գույնի նշումը, շարժվում է հետ):

Խաղային ռազմավարություն (2)

· Սկզբում ռոբոտը չափում է առջևի հեռավորությունը:

· Ռոբոտը հետ է շարժվում նույն չափված հեռավորությամբ:

· Ռոբոտը դադարում է պտտվելուց, այնուհետև հանկարծ սկսում հարձակումը (առաջ շարժվել ամբողջ ուժով):

· Հակառակորդի դեպքում ռոբոտը պետք է պտտվի 45 աստիճանով, մինչդեռ ռինգից ընկնելու դեպքում գոյատևի ինքն իրեն:

· Ռոբոտը միշտ պետք է վերցնի IR սենսորների ընթերցումները `համոզվելու համար, որ մենք չենք անցել օղակի սահմանը:

· Եթե կարդալ սպիտակ գույնի IR առկայության մասին, այն պետք է շարժի ռոբոտին անմիջապես սենսորի հակառակ ուղղությամբ (օրինակ. Եթե առջևի սենսորը, որը ցույց էր տալիս ռոբոտի սպիտակ գույնի նշումը, շարժվում է հետ):

Քայլ 5: mingրագրավորում

Ծրագրավորում
Ծրագրավորում

խնդրում ենք ստուգել սխեման և ծածկագիրը

* Թարմացնել 2019-03-26

Ներբեռնեք ուլտրաձայնային գրադարանը այստեղից և տեղադրեք այն.

github.com/ErickSimoes/Ultrasonic/blob/mas…

/*

Ահմեդ Ազուզի կողմից

www.instructables.com/id/How-to-Make-Ardu…

Ներբեռնեք lib- ը այստեղից

github.com/ErickSimoes/Ultrasonic/blob/ma…

*/

#ներառել ուլտրաձայնային. ժ

Ուլտրաձայնային ուլտրաձայնային (4, 3);

const int IN1 = 5;

const int IN2 = 6; const int IN3 = 9; const int IN4 = 10; #սահմանել IR_sensor_front A0 // առջևի տվիչ #սահմանել IR_sensor_back A1 // հետևի զգայարան int հեռավորություն;

դատարկ կարգավորում ()

{Serial.begin (9600); ուշացում (5000); // ըստ sumo համատեղ դերերի} void loop () {int IR_front = analogRead (IR_sensor_front); int IR_back = analogRead (IR_sensor_back); հեռավորություն = ultrasonic.read (); Պտտել (200); // սկսել rotete if (հեռավորությունը <20) {Stop (); իսկ (հեռավորությունը 650 || IR_back> 650) {ընդմիջում;} ուշացում (10); } if (IR_front <650) // <650 նշանակում է սպիտակ գիծ {Stop (); ուշացում (50); ԵACԵԿ (255); ուշացում (500); } if (IR_back <650) // {Stop (); ուշացում (50); ԱՌԱ (255); ուշացում (500); } /* ----------- վրիպազերծում ---------------- Serial.print (ուլտրաձայնային. Տարբերակ (CM)); Serial.println («սմ»); Serial.println ("IR առջև` "); Serial.println (IR_front); Serial.println ("IR ետ ՝"); Serial.println (IR_back); */

} //--------------------------------------------

void FORWARD (int Speed) {// Երբ մենք ուզում ենք թույլ տալ Motor To առաջ շարժվել, // պարզապես չեղյալ համարել այս հատվածը loop բաժնում: analogWrite (IN1, Արագություն); analogWrite (IN2, 0); analogWrite (IN3, 0); analogWrite (IN4, Արագություն); } // ------------------------------------------------ անվավեր BACKWARD (int Speed) {// Երբ ուզում ենք թույլ տալ, որ Motor To շարժվի առաջ, // պարզապես չեղյալ համարեք այս հատվածը հանգույցի հատվածում: analogWrite (IN1, 0); analogWrite (IN2, Արագություն); analogWrite (IN3, Արագություն); analogWrite (IN4, 0); } // ------------------------------------------------ անվավեր Պտտել (int Արագություն) {// Երբ մենք ցանկանում ենք թույլ տալ, որ Շարժիչը պտտվի, // պարզապես չեղյալ համարեք այս հատվածը հանգույցի հատվածում: analogWrite (IN1, Արագություն); analogWrite (IN2, 0); analogWrite (IN3, Արագություն); analogWrite (IN4, 0); } // ------------------------------------------------ անվավեր Stop () {// Երբ մենք ցանկանում ենք շարժվել դեպի կանգառ, // պարզապես չեղյալ համարել այս հատվածը հանգույցի հատվածում: analogWrite (IN1, 0); analogWrite (IN2, 0); analogWrite (IN3, 0); analogWrite (IN4, 0); }

Խորհուրդ ենք տալիս: