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

FaceBot: 8 քայլ
FaceBot: 8 քայլ

Video: FaceBot: 8 քայլ

Video: FaceBot: 8 քայլ
Video: Ինչպես Facebook-ում արգելափակումից հանել որևէ օգտատիրոջ 2024, Նոյեմբեր
Anonim
FaceBot
FaceBot

Այս ուղեցույցը ցույց կտա ձեզ, թե ինչպես ստեղծել էժան (39 դոլար) բախումից խուսափող ռոբոտ ՝ տառատեսակի վրա դեմքով: Մենք դա անում ենք ՝ օգտագործելով նոր ցածրարժեք, պայծառ OLED էկրան: Մեր ուսանողները սիրում են դեմքեր ավելացնել իրենց ռոբոտներին: Նրանք սիրում են նկարել ժպտերես դեմքեր, որոնք փոխվում են ՝ կախված ռոբոտի արածից:

Կան մի քանի փոքր էժան ռոբոտներ, որոնք մատչելի են մինչև $ 25, որոնք թույլ են տալիս սովորեցնել համակարգչային գիտության հիմունքները: Այս ռոբոտների խնդիրներից մեկն այն է, որ նրանք չեն ապահովում թափանցիկություն, թե ինչ է կատարվում ռոբոտի ներսում, երբ դուք այն կառուցում եք: 2018-ին ամեն ինչ սկսեց փոխվել ՝ ցածրարժեք բարձրորակ OLED էկրանների առկայությամբ: Այս ցուցադրումներն ունեն հետևյալ առավելությունները.

  • Նրանք շատ պայծառ են և ունեն բարձր հակադրություն: Նույնիսկ լուսավոր սենյակում դրանք հեշտ է կարդալ բազմաթիվ տեսանկյուններից:
  • Նրանք լավ լուծում ունեն: Նրանք, որոնք ես օգտագործում եմ, 168x64 պիքսել են: Սա գրեթե 4 անգամ գերազանցում է մեր օգտագործած ցուցադրումները:
  • Նրանք ցածր էներգիա ունեն և աշխատում են հետևողականորեն նույնիսկ այն ժամանակ, երբ ձեր ռոբոտի հզորությունը նվազում է:
  • Նրանք համեմատաբար ցածր գնով են (յուրաքանչյուրը մոտ $ 16), և գները նվազում են:

Նախկինում դրանք դժվար էր ծրագրավորվել և չափազանց շատ հիշողություն էին օգտագործում, որպեսզի դրանք օգտագործվեին ցածրարժեք Arduino Nanos- ով: Nano- ն ունի միայն 2K կամ դինամիկ RAM: Այս ուղեցույցը ցույց կտա ձեզ, թե ինչպես աշխատել այս խնդիրների շուրջ և ստեղծել ռոբոտ, որը երեխաները սիրում են ծրագրավորել:

Քայլ 1: Քայլ 1. Կառուցեք ձեր բազային ռոբոտը

Քայլ 1: Կառուցեք ձեր բազային ռոբոտը
Քայլ 1: Կառուցեք ձեր բազային ռոբոտը

FaceBot կառուցելու համար մենք սովորաբար սկսում ենք բազային ռոբոտից: Օրինակներից մեկը 25 դոլար արժողությամբ CoderDojo ռոբոտն է, որը նկարագրված է այստեղ: Այս ռոբոտը օգտագործում է էժան և հանրաճանաչ Arduino Nano- ն ՝ պարզ շարժիչի վերահսկիչ, 2 DC շարժիչ և 4 կամ 6 AA մարտկոց: Ուսանողների մեծ մասը սկսում է օգտագործել պինգ -սենսորը `բախումներից խուսափող ռոբոտ կառուցելու համար: Քանի որ այն ապահովում է 5 վ էներգահամակարգ, այն կատարյալ է FaceBot- ի համար: Costsախսերը ցածր պահելու համար ես սովորաբար իմ ուսանողներին պատվիրում եմ մասերը առցանց պատվիրել e-Bay- ից: Մասերի հաճախ գալը տևում է 2-3 շաբաթ և պահանջում է փոքր քանակությամբ զոդում շարժիչների և հոսանքի անջատիչի համար: Մնացած միացումները կատարվում են 400 փողկապով գրատախտակի միջոցով: Ուսանողները հաճախ տաք սոսնձում են լարերը, որպեսզի դրանք չսահեն:

Կա մեկ փոփոխություն, որը մենք կատարում ենք բախումներից խուսափելու ստանդարտ նախագծում: Պինգի սենսորը մենք շասսիի վերևից տեղափոխում ենք շասսիի տակ: Սա ռոբոտի վերևում ցուցադրման համար տեղ է թողնում:

Բախումներից խուսափելու ծրագրավորումն ավարտելուց հետո ձեզ կարդում են ՝ դեմք ավելացնելու համար:

Քայլ 2: Քայլ 2. Գտեք և պատվիրեք ձեր OLED էկրանը

Քայլ 2: Գտեք և պատվիրեք ձեր OLED էկրանը
Քայլ 2: Գտեք և պատվիրեք ձեր OLED էկրանը

Երբ դուրս եկան OLED էկրաններ, ցածր գնով ցուցադրվողները նախատեսված էին ժամացույցների կամ ֆիտնեսի մոնիտորների համար: Արդյունքում դրանք փոքր էին, սովորաբար մոտ 1 դյույմ լայնությամբ: Լավ նորությունն այն է, որ դրանք էժան էին ՝ մոտ 3 դոլար: Այս դիսփլեյներով մենք մի քանի ռոբոտ ստեղծեցինք, բայց քանի որ ցուցադրման չափը սահմանափակ էր, այն, ինչ մենք կարող էինք անել էկրանին: Այնուհետև 2018 -ին մենք սկսեցինք տեսնել, որ ավելի մեծ 2.42 դյույմանոց OLED էկրանների արժեքը թանկանում է: 2019 թվականի հունվարին գները իջնում են մինչև $ 16: Վերջապես մենք ունեցանք հիանալի ցուցադրում, որը կարող էինք օգտագործել մեր ռոբոտների դեմքերի համար:

Ահա այս ցուցադրումների բնութագրերը.

  1. 2.42 դյույմ (անկյունագծային չափում)
  2. 128 պիքսել լայնությամբ (x- հարթություն)
  3. 64 պիքսել բարձր (y- հարթություն)
  4. Lowածր էներգիա (սովորաբար 10 մ)
  5. Մոնոխրոմ (դրանք գալիս են դեղին, կանաչ, կապույտ և սպիտակ)
  6. Կանխադրված SPI ինտերֆեյս, չնայած ցանկության դեպքում այն կարող եք փոխել I2C- ի
  7. SSD1309 վարորդ (շատ տարածված ցուցադրման վարորդ)

SPI ինտերֆեյսը ունի յոթ լար: Ահա ինտերֆեյսի բնորոշ պիտակները.

  1. CS - Չիպի ընտրություն
  2. DC - Տվյալներ/հրաման
  3. RES - Վերագործարկեք
  4. SDA - Տվյալներ. Սա պետք է միացված լինի Arduino Nano քորոց 11 -ին
  5. SCL - ockամացույց - սա պետք է միացված լինի Arduino Nano կապին 13 -ին
  6. VCC - +5 վոլտ
  7. GND - գետնին

Դուք նաև պետք է ունենաք մետաղալար ՝ էկրանը միացման սեղանին միացնելու համար: Սովորաբար էկրանները գալիս են 7 փին վերնագրով, որը դուք կպցնում եք էկրանին: Ես օգտագործեցի 7 մկկ Dupont միկրո և տղամարդու 7 միակցիչներ և դրանք զոդեցի այնպես, որ լարերը դուրս եկան էկրանի հետևի մասից:

Քայլ 3. Քայլ 3. Միացրեք OLED- ը Arduino Nano- ին

Քայլ 3. Միացրեք OLED- ը Arduino Nano- ին
Քայլ 3. Միացրեք OLED- ը Arduino Nano- ին
Քայլ 3. Միացրեք OLED- ը Arduino Nano- ին
Քայլ 3. Միացրեք OLED- ը Arduino Nano- ին

Այժմ դուք պատրաստ եք փորձարկել ձեր OLED- ը: Ես օգտագործում եմ մեկ այլ Arduino Nano պարզապես այն ստուգելու համար, որ յուրաքանչյուր ցուցադրում աշխատում է: Երբ թեստերն աշխատում են, ես այն միացնում եմ ռոբոտին: Փորձարկիչի միացման սխեման ցուցադրված է վերևի նկարում: Նկատի ունեցեք, որ OLED կապերը կարող եք տեղափոխել թվային ելքերն ապահովող այլ կապերի, բայց եթե համոզվեք, որ SCL (ժամացույցը) Arduino Nano pin 13 -ի վրա է, իսկ SDA- ն (տվյալները) Arduino Nano pin 11 -ի վրա, կարող եք օգտագործել լռելյայն կարգավորումները: ծրագրային ապահովումը: Սա ձեր ծածկագիրը մի փոքր ավելի պարզ է պահում:

Քայլ 4: Քայլ 4. Փորձարկեք ձեր ցուցադրումը

Քայլ 4: Փորձարկեք ձեր ցուցադրումը
Քայլ 4: Փորձարկեք ձեր ցուցադրումը

Ձեր էկրանը ստուգելու համար մենք կօգտագործենք u8g2 գրադարանը: Կան այլ գրադարաններ, որոնք կարող եք օգտագործել, բայց իմ փորձից պարզ է, որ դրանցից ոչ մեկն այնքան էլ լավ չէ u8g2 գրադարանում: Կրիտիկական գործոնն այն է, թե Arduino- ի ներսում RAM- ն որքան է օգտագործվում էկրանի կողմից: U8g2- ը իմ գտած միակ գրադարանն է, որն օգտագործում է «Էջի ռեժիմ», որը կաշխատի Arduino Nano- ի հետ:

Դուք կարող եք ավելացնել այս գրադարանը ձեր Arduino IED- ին ՝ «u8g2» - ը որոնելով «Կառավարեք գրադարանները» ցանկում: Դուք կարող եք նաև ներբեռնել կոդը անմիջապես gethub- ից:

github.com/olikraus/u8g2

Թեստի կոդը, որը ես օգտագործում եմ, այստեղ է.

github.com/dmccreary/coderdojo-robots/blob…

Պետք է նշել մի քանի բան: SCL և SDA կապի համարները մեկնաբանվում են, քանի որ դրանք Nano- ի կանխադրված կապերն են: U8g2- ի կոնստրուկտորը հիմնական տողն է.

// Մենք օգտագործում ենք SSD1306, 128x64, մեկ էջ, անանուն, 4 մետաղալար, Սարքաշար, SPI առանց ռոտացիայի, որն օգտագործում է դինամիկ հիշողության միայն 27% U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN), RDS_

Մենք օգտագործում ենք մեկ էջի ռեժիմ, քանի որ այդ ռեժիմը օգտագործում է նվազագույն RAM: Մենք օգտագործում ենք 4 լարային ապարատային ինտերֆեյս, և OLED- ը լռելյայն գալիս է SPI- ով:

Քայլ 5: Քայլ 5. Ավելացրեք ձեր OLED- ը ռոբոտին

Քայլ 5: Ավելացրեք ձեր OLED- ը ռոբոտին
Քայլ 5: Ավելացրեք ձեր OLED- ը ռոբոտին

Այժմ, երբ մենք ունենք աշխատող OLED և գիտենք, թե ինչպես նախաստորագրել u8g2 գրադարանները, մենք պատրաստ ենք ինտեգրել OLED- ը մեր բազային ռոբոտի հետ: Պետք է հաշվի առնել մի քանի բան: Մեր OLED թեստում մենք օգտագործեցինք կապերը, որոնք բոլորը կողք կողքի էին `լարերի լարումը հեշտացնելու համար: Unfortunatelyավոք, մեր Robot- ը վարելու համար մեզ անհրաժեշտ է 9 կապը, քանի որ այն PWM կապումներից մեկն է, որը մենք պետք է անալոգային ազդանշան ուղարկենք շարժիչի վարորդին: Լուծումը կայանում է նրանում, որ 9-րդ կապում տեղադրված մետաղալարն տեղափոխվում է մեկ այլ ազատ քորոց, այնուհետև #define հայտարարությունը փոխվում է այդ նոր քորոցի: OLED- ը ռոբոտի առջևի մասում տեղադրելու համար պլեքսիգլասից կտրեցի երկու եռանկյուն կտոր և տաք սոսնձված: դրանք դեպի շասսի: Ես միշտ սիրում եմ օգտագործել հղկաթուղթ ՝ պլեքսիգլասի մակերեսը կոպիտ կոտրելու համար, նախքան մասերը տաք սոսնձելով, որպեսզի դրանք շատ հեշտ չբաժանվեն:

Հաջորդը, եկեք որոշ տվյալներ ստանանք մեր OLED- ի մասին և որոշ դեմքեր նկարենք ռոբոտի վրա:

Քայլ 6: Քայլ 6: Displayուցադրել ռոբոտի պարամետրերը

Քայլ 6: Displayուցադրել ռոբոտի պարամետրերը
Քայլ 6: Displayուցադրել ռոբոտի պարամետրերը

Aուցասարք ունենալն այն է, որ այն իսկապես օգնում է կարգաբերել այն, ինչ կատարվում է մեր ռոբոտի ներսում, երբ այն շրջում է: Հազվագյուտ դեպք չէ, որ ծրագրավորողները աշխատեն աշխատասեղանի վրա, երբ միացված եք ձեր համակարգչին, որպեսզի այն չաշխատի, երբ ռոբոտը շրջում է: Ռոբոտի պարամետրը ցուցադրելու լավ օրինակ է այնպիսի արժեքի ցուցադրումը, ինչպիսին է պինգ սենսորով չափվող հեռավորությունը:

Վերևի լուսանկարում առաջին տողը (Echo Time) ցույց է տալիս ուշացման ժամանակը, երբ ձայնը հեռանում է ուլտրաձայնային բարձրախոսից և խոսափողի կողմից ստացված ժամանակի միջև: Այս թիվը այնուհետև երկրորդ տողում վերածվում է սանտիմետրի (Հեռավորությունը սմ -ով): Հաշվիչը թարմացվում է որոնման երկրորդ փուլում `ցույց տալու համար, որ ցուցադրումը թարմացվում է: «Շրջվելը …» ցուցադրվում է միայն այն դեպքում, երբ հեռավորությունը որոշակի թվից ցածր է, որը կոչվում է շրջադարձի շեմ: Երկու անիվներն էլ առաջ են շարժվում, եթե պինգի հեռավորությունը այս թվից բարձր է: Եթե թիվը շրջադարձի շեմից ցածր է, ապա մենք շրջում ենք շարժիչները (պահուստավորում), ապա փոխում ուղղությունը:

Ահա մի քանի նմուշի կոդ, որը ցույց է տալիս, թե ինչպես կարելի է վերցնել ping սենսորից ստացված արժեքները և ցուցադրել դրանք OLED էկրանին:

Ահա մի օրինակ, որը ստուգում է երեք պինգ սենսոր (ձախ, կենտրոն և աջ) և ցույց է տալիս էկրանի արժեքները.

github.com/dmccreary/coderdojo-robots/blob…

Քայլ 7: Քայլ 7: Նկարեք որոշ դեմքեր:

Քայլ 7: Նկարեք որոշ դեմքեր
Քայլ 7: Նկարեք որոշ դեմքեր

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

Դեմք նկարելու գծագրման հրամանը բավականին պարզ է: Մենք կարող ենք շրջանագծել դեմքի ուրվագծի համար և շրջանակներ լրացնել յուրաքանչյուր աչքի համար: Theպիտի համար բերանը կարող է լինել կես շրջան, իսկ անակնկալի զգացման համար `կլոր շրջան: Սա այն վայրն է, որտեղ երեխաները կարող են օգտագործել իրենց ստեղծագործությունը `արտահայտություններն անհատականացնելու համար: Երբեմն միտումնավոր նկարում եմ վատ դեմքեր և խնդրում ուսանողներին օգնել ինձ դրանք ավելի լավը դարձնելու համար:

Theուցադրման չափը ստանալու համար կարող եք օգտագործել display.height () և display.width () գործառույթները: Ստորև բերված ծածկագրում մենք ստեղծում ենք փոփոխականներ

half_width = display.width ()/2; half_height = display.height ()/2;

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

// մենք դա անում ենք յուրաքանչյուր օղակի սկզբում

display.clearDisplay (); // նկարել թեթև դեմք backgrounddisplay.fillCircle (half_width, half_height, 31, WHITE); // աջ աչքի մուգ էկրան. fill // ձախ աչք darkdisplay.fillCircle (half_width + 10, display.height ()/3, 4, BLACK); // բերանի ցուցադրման համար գծեք ուղիղ գիծ: գծել (կես_լայն - 10, ցուցադրում: բարձրություն ()/3 * 2, կես_լայնություն + 10, ցուցադրում: բարձրություն ()/3 * 2, ՍԵՎ); // այս տողը ուղարկում է մեր նոր դեմքը OLED էկրանին display.display ();

Քայլ 8: Քայլ 8: Անհատականացրեք

Քայլ 8: Անհատականացրեք
Քայլ 8: Անհատականացրեք

Հիմնական դեմքը նկարելը միայն սկիզբն է: Ուսանողները կարող են ստեղծել բազմաթիվ տատանումներ: Շատ ուսանողներ ավելացրել են մի փոքր բարձրախոս, որը նվագում է հնչերանգներ կամ հնչյուններ, երբ նրանք շարժվում են:

Կարող եք նաև կառուցել ավելի փոքր թեստային ծրագրեր, որոնք կօգնեն ձեր ուսանողներին շարժիչները ճիշտ միացնել: Օրինակ ՝ սլաքը (եռանկյունը) էկրանին կասի ուսանողին, թե ինչ ուղղությամբ պետք է պտտվի անիվը, երբ միացնում եք շարժիչները: Փորձարկման ծրագիրը շրջում է շարժիչային ուղղություններից յուրաքանչյուրով.

  1. Right Forward
  2. Աջ հետադարձ
  3. Ձախ Առաջ
  4. Ձախ հետադարձ

Յուրաքանչյուր ռեժիմի համար էկրանը թարմացվում է նոր դիսփլեյով ՝ ցույց տալու համար, թե որ անիվը պետք է պտտվի և ինչ ուղղությամբ:

Այդ ծրագրի օրինակն այստեղ է

github.com/dmccreary/coderdojo-robots/blob…

Կան բազմաթիվ լրացուցիչ օրինակներ և ծրագրավորման մանրամասներ CoderDojo Robots GitHub FaceBot էջում:

Կա նաև FaceBot ռոբոտի մի տարբերակ, որը հնարավորություն է տալիս ուսանողներին ուղղակիորեն փոխել էկրանին ՝ բախումից խուսափելու բոլոր պարամետրերը (առաջ արագություն, շրջադարձի հեռավորություն, շրջադարձի ժամանակ, շրջադարձի արագություն): Այս ռոբոտներին «ծրագրավորելու» համար համակարգիչ չի պահանջվում: Այս տարբերակները իդեալական են MakerFairs- ի և միջոցառումների համար, որոնք դուք չեք ցանկանում համակարգիչներ տեղափոխել:

Խնդրում ենք մեզ տեղեկացնել, թե ինչ նոր դեմքերով եք դուք և ձեր ուսանողները հայտնվում:

Շնորհավոր կոդավորում:

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