Բովանդակություն:
- Քայլ 1. Խառնման եղանակ »Ոչ մեկը
- Քայլ 2: Մեթոդ մեթոդ »Պտտել
- Քայլ 3. Մեթոդ մեթոդ »Պարզ
- Քայլ 4. Մեթոդ մեթոդ »Համաչափ
Video: Հասկանալով ալիքների խառնումը. 4 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Եթե երբևէ վարել եք հեռակառավարման շասսի, ապա մեծ հավանականություն կա, որ օգտագործել եք խառնուրդ, նույնիսկ եթե դա չգիտեիք: Մասնավորապես, եթե դուք օգտագործել եք մեկ ջոյստիկ կամ շարժունակություն ՝ սահող ղեկ կամ դիֆերենցիալ ղեկ օգտագործող փոխադրամիջոցը կառավարելու համար, ապա օգտագործել եք խառնուրդ:
Խառնումը պարզապես այն է, թե ինչպես են ձեր ջոյսթիկի տվյալները օգտագործվում որոշելու համար, թե որքան էներգիա պետք է մատակարարվի շասսիի յուրաքանչյուր կողմին:
Եթե դուք բացում եք ջոյսթիք, ապա սովորաբար ներսում կտեսնեք երկու պոտենցիոմետր: Մեկը ՝ Y առանցքի երկայնքով (վեր և վար) ձեր ընթացիկ դիրքը չափելու համար, իսկ մյուսը ՝ ձեր առանցքի երկայնքով X առանցքի երկայնքով (կողք կողքի):
Թեև ես այս թեմայով ոչ մի պաշտոնական ուսուցում չունեմ, բայց նախկինում ստիպված էի կոդի մեջ խառնել, և վերջերս ես ուզում էի մի փոքր ավելի խորանալ թեմայի մեջ:
Նախ ուզում եմ նշել, որ RC հաղորդիչներից շատերն ունեն խառնման ունակություն, ինչպես շատ շարժիչային կարգավորիչներ: Այս տեղեկատվությունը ամենաօգտակարը կլինի, եթե դուք ինքներդ պետք է խառնեք ձեր կոդը: Ասեք, օրինակ, եթե դուք օգտագործում եք Arduino- ն RC ընդունիչից չխառնված տվյալներ կարդալու համար, կամ ջոյսթիկի կաթսաներից անալոգային տվյալներ եք կարդում, կամ բջջային հավելվածում թվային ջոյսթիկից կոորդինատներն եք կարդում:
Եկեք նայենք մի քանի տարբեր խառնուրդային մոտեցումների:
Քայլ 1. Խառնման եղանակ »Ոչ մեկը
Նախ եկեք նայենք, թե ինչ է տեղի ունենում, եթե ընդհանրապես խառնուրդ չեք օգտագործում: Եթե դուք ուղղակի տվյալները մեկ առանցքից ուղարկում եք շասսիի մի կողմը, իսկ մյուս առանցքը ՝ մյուս կողմը, ձեր մեքենան չի արձագանքի այնպես, ինչպես ցանկանում եք:
Օրինակ, եթե ջոյսթիկը ամբողջ ճանապարհով առաջ եք մղում, Y առանցքը ամբողջ շնչափողում է, իսկ X առանցքը 0 -ի վրա: Այսպիսով, դուք կշարժվեիք շրջանաձև ՝ ուղիղ գնալու փոխարեն:
Քայլ 2: Մեթոդ մեթոդ »Պտտել
Մի աշխատակցուհի մի անգամ ինձ մատնանշեց, որ մի պտղունց կարող ես հաղորդիչդ 45 աստիճանով պտտել աղքատ մարդու խառնուրդի համար: Եթե դուք մտածում եք, որ ջոյսթիկի երկու պոտենցիոմետրերի արժեքները ցանցում x կամ y առանցք են (երկու առանցքները `-100 -ից +100), դա շատ իմաստալից է, քանի որ երկու առանցքի վրա պատրաստվում եք հասնել +100 -ի: երբ ջոյսթիկը սեղմում ես վերև և աջ: Այսպիսով, եթե սա ուղղակիորեն քարտեզագրվի ձեր երկու շասսի ալիքներին (ձեր ռոբոտի ձախ և աջ կողմերը), դա կդրդի ձեր ռոբոտին առաջ գնալ:
Այսպիսով, երբևէ փորձած խառնման առաջին մեթոդը մաթեմատիկորեն պտտելն էր x և y կոորդինատները 45 աստիճան ցանցի կենտրոնական կետի շուրջ:
Սա լավ է աշխատում, սակայն ես չեմ կարող 100% հզորությամբ առաջ գնալ, քանի որ երբ պտտվում եք, ընդհանուր շարժումը սահմանափակվում է ցանցի շրջանակով, ինչը նշանակում է, որ դուք երբեք իսկապես չեք կարող մտնել այդ վերին աջ անկյունը:
Սա նաև հանգեցնում է ցանցի անկյունների չօգտագործմանը: Սա խնդիր չէ, եթե դուք օգտագործում եք ջոյսթիք/ակ, որը սահմանափակում է ձեր շարժումը, այնպես որ այդ տարածքներն այդպես էլ չեն հասնում, այլապես կցանկանաք, որ ցանցի այդ հատվածը ինչ -որ բան անի, որպեսզի ձեր շարժումները լիովին համաչափ զգան:
Եթե դուք ինքս ինձ պես տեսողական սովորող եք, ապա այս հայեցակարգին գուցե ավելի հեշտ լինի ծանոթանալ ՝ դիտելով տեսանյութը այս ուսանելիի սկզբում:
Դիտարկենք կոդի մի քանի օրինակ:
Ո NOTՇԱԴՐՈԹՅՈՆՆԵՐԻ ՄԱՍԻՆ ՕՐԻՆԱԿՆԵՐԻ ՄԱՍԻՆ. Ես բաց եմ թողնում, թե ինչպես եք ստանում joystick_x և joystick_y արժեքները, քանի որ դրանք կփոխվեին `կախված ձեր նախագծից: Նաև ես քարտեզագրելու/սահմանափակելու եմ 100 ֆունտ ստեռլինգ, բայց, ամենայն հավանականությամբ, ձեզ հարկավոր կլինի քարտեզագրել 1000 - 2000 ՝ PWM- ի համար կամ 0 - 255 ՝ անալոգային ելքի համար և այլն: Ես միշտ սահմանափակում եմ … ամեն դեպքում:
Arduino Օրինակ.
// մաթեմատիկորեն պտտել
կրկնակի ռադ = -45*M_PI/180; int leftThrottle = joystick_x * cos (rad) - joystick_y * sin (rad); int rightThrottle = joystick_y * cos (rad) + joystick_x * sin (rad); // սահմանափակել leftThrottle = սահմանափակել (leftThrottle, -100, 100); rightThrottle = սահմանափակում (rightThrottle, -100, 100);
JavaScript Օրինակ.
// մաթեմատիկորեն պտտվող ռադ = -45*Մաթ. PI/180; leftThrottle = joystick_x * Math.cos (rad) - joystick_y * Math.sin (rad); rightThis // helper functionvar constrain = գործառույթ (համար, րոպե, առավելագույն) {վերադարձ Math.min (Math.max (num, min), max); };
Քայլ 3. Մեթոդ մեթոդ »Պարզ
Հաջորդը մենք ունենք շատ պարզ հավասարում, որն ես առաջին անգամ վերցրեցի Շոն Հեյմելի Adventures in Science SparkFun տեսանյութերից մեկում, որտեղ նա պատահաբար շատ նման նախագիծ էր աշխատում, որի վրա ես աշխատում էի:
Այս հավասարումը թույլ է տալիս առաջ շարժվել լիարժեք արագությամբ, բայց շատ նման է պտտման եղանակին, այն անտեսում է ցանցի անկյունային հատվածները: Դա պայմանավորված է նրանով, որ որոշ դեպքերում առավելագույնը 100 է, իսկ որոշ դեպքերում ՝ առավելագույնը 200: Այսպիսով, դուք կկիրառեք սահմանափակման գործառույթ ՝ 100 -ից հետո որևէ բան անտեսելու համար:
Եվ, ի դեպ, ես այս պարզը նվաստացուցիչ չեմ անվանում … պարզության մեջ գեղեցկություն կա:
Arduino Օրինակ
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // սահմանափակել leftThrottle = սահմանափակել (leftThrottle, -100, 100); rightThrottle = սահմանափակում (rightThrottle, -100, 100);
JavaScript Օրինակ.
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // սահմանափակել leftChannel = սահմանափակել (leftChannel, -100, 100); rightChannel = սահմանափակում (rightChannel, -100, 100); // helper functionvar constrain = գործառույթ (համար, րոպե, առավելագույն) {վերադարձ Math.min (Math.max (num, min), max); };
Քայլ 4. Մեթոդ մեթոդ »Համաչափ
Ես դուրս եկա պարզ մեթոդից ՝ հույս ունենալով լավագույնը դարձնել երկու աշխարհների հավասարումը: Այստեղ գաղափարն այն է, որ բոլոր ուղղություններով լիովին համամասնական լինի նույնիսկ անկյունագծով, չնայած այն բանին, որ չնայած ավելի մեծ հեռավորության վրա եք շարժվում, այն ունի նույն տիրույթը, ինչ ուղղահայաց շարժվելիս, որն ավելի փոքր հեռավորություն է:
Իմ օրինակներում դուք ավարտում եք -200 -ից +200 սանդղակով բոլոր ուղղություններով: Ես դա պատկերում եմ 100 ֆունտ ստերլինգ, քանի որ այն ներկայացնում է յուրաքանչյուր ալիքին տրվող էներգիայի տոկոսը, պատյան ձեր շարժիչի վերահսկիչի համար: Օրինակ, եթե դուք ուղարկում եք PWM ազդանշան, կարող եք այն քարտեզագրել 1000-ից 2000-ի, կամ եթե անալոգային ազդանշան եք ուղարկում, կարող եք քարտեզագրել 0-255-ի վրա և ուղղությունը սահմանել որպես բուլյան և այլն:
Arduino Օրինակ
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // որոշ դեպքերում առավելագույնը 100 է, որոշ դեպքերում `200 // եկեք հաշվի առնենք տարբերությունը, այնպես որ առավելագույնը միշտ 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = ձախThtottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - diff: rightThrottle + diff; // Քարտեզ ± 200 -ից մինչև 100 ± կամ ինչպիսի միջակայք է ձեզ հարկավոր // constrainleftThrottle = սահմանափակել (leftThrottle, -100, 100); rightThrottle = սահմանափակել (rightThrottle, -100, 100);
JavaScript Օրինակ
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // որոշ դեպքերում առավելագույնը 100 է, որոշ դեպքերում `200, // հաշվի առնենք տարբերությունը, այնպես որ առավելագույնը միշտ 200var diff = Math.abs (Math.abs (joystick_y) - Math.abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle -diff: rightThrottle + diff; // Քարտեզ 200 ֆունտից մինչև 100 ֆունտ ստեռլինգ կամ այն, ինչ ձեզ հարկավոր է -100, 100); // սահմանափակել leftThrottle = սահմանափակել (leftThrottle, -100, 100); rightThrottle = սահմանափակել (rightThrottle, -100, 100); // որոշ օգնական գործառույթներ varrain = գործառույթ (համար, րոպե, առավելագույն) {վերադարձնել Math.min (մաթ. առավելագույն (համար, րոպե), առավելագույն); }; var քարտեզ = գործառույթ (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, քարտեզագրված; inMin = inMin + inMax; num = num + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (num/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); քարտեզագրված = outSpan*(p/100) - (outMax/2); վերադարձը քարտեզագրված է;};
Խորհուրդ ենք տալիս:
4 ալիքների փոխանցում `14 քայլ
4 ալիքի փոխանցում. -Bhawna Singh, Prerna Gupta, Maninder Bir Singh Gulshan
Հասկանալով օդորակիչի հեռակառավարման վահանակի IR արձանագրությունը. 9 քայլ (նկարներով)
Հասկանալով օդորակիչի հեռակառավարման վահանակի IR արձանագրությունը. Ես բավականին երկար ժամանակ սովորում եմ IR արձանագրությունների մասին: Ինչպես ուղարկել և ստանալ IR ազդանշաններ: Այս պահին մնում է միայն AC հեռակառավարման վահանակի IR արձանագրությունը: Ի տարբերություն գրեթե բոլոր էլեկտրոնային սարքերի ավանդական հեռակառավարիչների (ասենք հեռուստացույցի), որտեղ
RaspiWWV - WWV կարճ ալիքների ձայնային ժամանակի հեռարձակում. 10 քայլ (նկարներով)
RaspiWWV - WWV կարճ ալիքների աուդիո ժամանակի հեռարձակում. Հիշեք այն օրերը, երբ դուք նստած ունեիք WWV ժամանակի ազդանշաններ լսելով ձեր կարճ ալիքների ռադիոյով (տիզ, տիզ, տիկին … Տոնով, ժամը կլինի…): (Լսեք այն YouTube- ի վերևում) Օ! Դուք կարոտե՞լ եք դա: Այժմ դուք կարող եք (կրկին) զգալ այդ պահերը և ունենալ
Հասկանալով 74LS273 Octal D Flip-Flop IC: 5 քայլ
Հասկանալով 74LS273 Octal D Flip-Flop IC- ը. Ես ձեռքս վերցրեցի 74LS273 IC- ն, երբ հին արբանյակային ընդունիչից փրկում էի որոշ բաղադրիչներ, ինչ-որ բան անում եմ նախագծերի միջև և գումար եմ խնայում…: Այս IC- ն կառավարման վահանակի վրա էր և լարված էր: 4-նիշանոց 7-հատվածանոց LED էկրան ՝ որոշ տրանս
Լսեք կարճ ալիքների հեռարձակումներ AM ռադիոյով. 5 քայլ (նկարներով)
Լսեք կարճ ալիքների հեռարձակումներ AM ռադիոյով. Ավելի մեծ ռադիոն իմ Sangean ATS-803A կարճ ալիքի ընդունիչն է: Փոքր ռադիոն առաջին պլանում ճամփորդական ահազանգ է/AM-FM ռադիոկայանը 1980-ականների վերջից: Ես այն փոխակերպեցի, որպեսզի կարճ ալիքների հաճախականություններ ստանա 4 -ից 9 ՄՀց -ի միջև և որոշ ժամանակ այդպես օգտագործեցի