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

Հարմարեցված Arduino- ն կարող է ղեկի կոճակները պահել նոր մեքենայի ստերեոով. 9 քայլ (նկարներով)
Հարմարեցված Arduino- ն կարող է ղեկի կոճակները պահել նոր մեքենայի ստերեոով. 9 քայլ (նկարներով)

Video: Հարմարեցված Arduino- ն կարող է ղեկի կոճակները պահել նոր մեքենայի ստերեոով. 9 քայլ (նկարներով)

Video: Հարմարեցված Arduino- ն կարող է ղեկի կոճակները պահել նոր մեքենայի ստերեոով. 9 քայլ (նկարներով)
Video: How to use Prototyping Shield with breadboard for Arduino 2024, Նոյեմբեր
Anonim
Հարմարեցված Arduino- ն կարող է պահել ղեկի կոճակները նոր մեքենայի ստերեոով
Հարմարեցված Arduino- ն կարող է պահել ղեկի կոճակները նոր մեքենայի ստերեոով
Հարմարեցված Arduino- ն կարող է պահել ղեկի կոճակները նոր մեքենայի ստերեոով
Հարմարեցված Arduino- ն կարող է պահել ղեկի կոճակները նոր մեքենայի ստերեոով
Հարմարեցված Arduino- ն կարող է պահել ղեկի կոճակները նոր մեքենայի ստերեոով
Հարմարեցված Arduino- ն կարող է պահել ղեկի կոճակները նոր մեքենայի ստերեոով

Ես որոշեցի իմ Volvo V70 -02- ի մեքենայի բնօրինակ ստերեոն փոխարինել նոր ստերեո ձայնով, որպեսզի կարողանամ վայելել այնպիսի նյութեր, ինչպիսիք են mp3- ը, bluetooth- ը և handsfree- ը:

Իմ մեքենան ունի ղեկի կառավարման մի շարք ստերեոյի համար, որը ես կցանկանայի, որ դեռ կարողանայի օգտագործել: Ես չէի սպասում, որ դա խնդիր կլինի, քանի որ շուկայում կան մի քանի ադապտերներ, որոնք ենթադրաբար համատեղելի են իմ մեքենայի հետ: Սակայն շուտով իմացա, որ նրանք այդպիսին չեն: (Թվում է, թե V70- ի ադապտերները կարող են խնդիրներ ունենալ -02 մեքենաների հետ ՝ մի փոքր այլ CAN արձանագրության պատճառով):

Այսպիսով, ինչ անել այդ դեպքում: Պահե՞լ հին ստերեոն: Ապրե՞լ ոչ աշխատանքային կոճակներով: Իհարկե ոչ! Եթե շուկայում չկա աշխատանքային ադապտեր, ապա մենք ստիպված կլինենք կառուցել այն:

Այս հրահանգը կարող է կիրառվել (որոշ հարմարեցումներով) այն մեքենաների համար, որտեղ ղեկի կոճակները հաղորդակցվում են CAN ավտոբուսի վրայով:

Քայլ 1: Իմացեք, թե ինչպես հրամաններ ուղարկել ստերեո

Իմացեք, թե ինչպես հրամաններ ուղարկել ստերեո
Իմացեք, թե ինչպես հրամաններ ուղարկել ստերեո
Իմացեք, թե ինչպես հրամաններ ուղարկել ստերեո
Իմացեք, թե ինչպես հրամաններ ուղարկել ստերեո

Առաջին բանը, որ դուք պետք է անեք, պարզելն է, թե ինչպիսի հեռավոր մուտք է ակնկալում ստերեոն: Սովորաբար արտադրողները դա ձեզ չեն ասի, և դուք հավանաբար մուտք չեք ունենա աշխատող հեռակառավարման վահանակներ ՝ հակադարձ տեխնիկայի համար:

Իմ նոր ստերեոյի (Kenwood) հեռակառավարիչը բաղկացած է մեկ մետաղալարից, և ես չեմ կարողացել որևէ տեղեկատվություն պարզել, թե ինչպես է այն աշխատում: Այնուամենայնիվ, այն ունի նաև 3.5 մմ անցք ՝ հեռավոր մուտքագրման համար: Այդ մասին նույնպես ոչինչ չկարողացա պարզել: Բայց կան նաև այլ ապրանքանիշերի 3.5 մմ -անոց խցիկի մասին որոշ տեղեկություններ, որոնք ենթադրում են, որ տարբեր հրամաններ են որոշվում ՝ ծայր ու թևի միջև հատուկ դիմադրություն կիրառելով (և ըստ ցանկության ՝ մատանի և թևի միջև): Օրինակ ՝ https://forum.arduino.cc/index.php?topic=230068.0. Այսպիսով, ես որոշեցի փորձել, որը հագեցած էր տախտակով, մի փունջ ռեզիստորներով և 3,5 մմ խրոցով, որը միացված էր ստերեոին և միացված էր հացահատիկին: Սկզբում ոչինչ չճանաչվեց, բայց ստերեոն ունի «ուսուցման ռեժիմ» ընտրացանկ, և այնտեղ կարող են հաջողությամբ տեղադրվել հրամանները ՝ տարբեր դիմադրություններ կիրառելիս: Հաջողություն:

Այնուամենայնիվ, ես հետագայում պարզեցի, որ այստեղ սխալ եմ թույլ տվել. Ոչ բոլոր այն հրամանները, որոնք կարծես սովորում էր ստերեոն, իրականում կաշխատեին: Օրինակ ՝ Սովորելու ռեժիմում գտնվեց 30 կՕմ, բայց չաշխատեց ավելի ուշ, և որոշ հրամանների համար, որոնք ես սահմանեցի, դիմադրության տարբերությունն այնքան փոքր էր, որ հետագայում գործադրվեց սխալ հրաման:

Այսպիսով, ես խորհուրդ եմ տալիս օգտագործել ռեզիստորներով տախտակ և անջատիչ կոճակներ բոլոր այն հեռավոր հրամանների համար, որոնք ցանկանում եք կարգավորել և իրականում ստուգել, որ դրանք բոլորը կաշխատեն:

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

Քայլ 2: Իմացեք, թե որտեղ միանալ CAN ավտոբուսին

Իմացեք, թե որտեղ միանալ CAN ավտոբուսին
Իմացեք, թե որտեղ միանալ CAN ավտոբուսին

Դուք պետք է լավ տեղ գտնեք CAN ավտոբուսին միանալու համար: Քանի որ դուք փոխարինում եք հին ստերեոյին, որը հաղորդակցվում է CAN- ի միջոցով, դուք պետք է կարողանաք այն գտնել ստերեոյի հետևում: CAN ավտոբուսը բաղկացած է մի զույգ ոլորված լարերից (CAN-L և CAN_H): Վստահ լինելու համար խորհրդակցեք ձեր մեքենայի էլեկտրագծերի սխեմայի հետ:

Քայլ 3. CAN հաղորդագրությունների հակադարձ ճարտարագիտություն

CAN հաղորդագրությունների հակադարձ ճարտարագիտություն
CAN հաղորդագրությունների հակադարձ ճարտարագիտություն

Եթե Google- ը ձեզ չասի, թե ինչ CAN հաղորդագրություններ պետք է լսեք, ապա ձեզ հարկավոր է միանալ CAN ավտոբուսին և կատարել հակադարձ ճարտարագիտություն: Ես օգտագործեցի Arduino Uno և CAN վահան: (Դուք իրականում կարիք չունեք CAN վահանի, ինչպես կտեսնեք ավելի ուշ, փոխարենը կարող եք օգտագործել որոշ էժան բաղադրիչներ տախտակի վրա):

Խորհրդակցեք Google- ի հետ ՝ պարզելու, թե ինչ հաճախականություն պետք է օգտագործեք ձեր մեքենային միանալիս: (Սովորաբար դուք կգտնեք, որ կա բարձր արագության և ցածր արագության CAN ցանց: Դուք միանում եք ցածր արագության ցանցին):

Դուք նաև պետք է ծրագրավորեք Arduino- ն `CAN- ի բոլոր հաղորդագրությունները սերիական ինտերֆեյսի վրա մուտքագրելու համար, որպեսզի կարողանաք դրանք պահել ձեր համակարգչի մատյանում: Ստանդարտ Arduino IDE- ն չի պահի տվյալները տեղեկամատյանում, բայց կարող եք օգտագործել օրինակ. Փափուկ փոխարեն.

Նախքան սկսեք գրել ձեր ծրագիրը, դուք պետք է տեղադրեք CAN_BUS_Shield գրադարանը:

Ահա մի քանի կեղծ կոդ, որոնք կօգնեն ձեզ սկսել ձեր ծրագիրը.

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

{init սերիական կապ init CAN գրադարան} հանգույց () {եթե CAN հաղորդագրություն է ստացվել {կարդալ CAN հաղորդագրության ձևաչափի մատյան մուտքագրում գրել մուտքագրում սերիալին}}

Հուշումներ.

Դուք կարող եք օգտագործել MCP_CAN դասի օրինակ ՝ CAN գրադարանի գործառույթներին մուտք գործելու համար.

MCP_CAN m_can;

Init CAN:

մինչդեռ (m_can.begin ()! = CAN_OK)

{ուշացում (1000); }

Ստուգեք և կարդացեք CAN հաղորդագրությունները.

իսկ (m_can.checkReceive () == CAN_MSGAVAIL)

{// Ստացեք CAN id, հաղորդագրության երկարությունը և հաղորդագրության տվյալները m_can.readMsgBufID (& m_canId, & m_msgLen, m_msgBuf); // Հաղորդագրության տվյալներով ինչ -որ բան արեք այստեղ}

Եթե ավելի շատ օգնության կարիք ունեք, կարող եք իմ ծրագրի հղումը գտնել հետագա քայլերում: CAN վահանի գրադարանը ներառում է նաև օրինակ: Կամ ստուգեք mviljoen2- ի հրահանգը, որը ներառում է նմանատիպ քայլ:

Նախ ձեզ հարկավոր կլինի տեղեկատու ֆայլ, որը կօգնի ձեզ զտել տվյալները: Միացրեք բռնկումը ռադիոյի ռեժիմին և մի քանի րոպե գրանցեք ամեն ինչ ՝ առանց որևէ կոճակի հպելու:

Հետո կոճակներից յուրաքանչյուրի համար սկսեք մուտք գործել, սեղմել կոճակը և դադարեցնել անտառահատումները:

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

Տեղեկամատյանները պարունակում են բազմաթիվ հաղորդագրություններ, այնպես որ ձեզ հարկավոր կլինի գրել ինչ -որ ծրագիր այս կամ հնարավոր է օգտագործել Excel- ը: (Ես իմ կարիքների համար օգտագործել եմ շատ կոդավորված պայմաններով ծրագիր, այնպես որ ես վախենում եմ, որ չեմ կարող առաջարկել մի ծրագիր, որը դուք կարող եք օգտագործել):

Մի նախազգուշական խոսք. Դուք չեք կարող վստահ լինել, որ կոճակը միշտ կստեղծի նույնական հաղորդագրություն: Որոշ բիթեր կարող են պարունակել աճող հաշվիչներ և այլն (սակայն կարող եք բացառել, որ հաղորդագրության ID- ն նույնը լինի):

Եթե պատահաբար ունենաք Volvo V70 -02, ահա թե ինչ եք փնտրում.

  • Հաղորդագրության id.
  • Բայթ 1: 0x00 (հոգ չէ)
  • Բայթ 2: 0x00 (հոգ չէ)
  • Բայթ 3: 0x00-0x07 (թքած ունի)
  • Բայթ 4: 0x1f (հոգ չէ)
  • Բայթ 5: 0x40 (հոգ չէ)
  • Բայթ 6: 0x40 (թքած ունի)
  • Byte7: Կոճակի նույնացուցիչ.

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

Քայլ 4: Սարքավորման նախատիպ

Սարքավորումների նախատիպը
Սարքավորումների նախատիպը

Ձեր սարքավորումները պետք է կարողանան.

  1. Որոշեք CAN ավտոբուսում ստացված հրամանները
  2. Ուղարկեք այլ ձևաչափով հրամաններ ստերեո

Եթե ունեք բավականաչափ տարածք, կարող եք օգտագործել Arduino- ն և CAN վահանը առաջին մասի համար, իսկ երկրորդի համար կցել լրացուցիչ սարքավորում: Այնուամենայնիվ, կան որոշ թերություններ.

  • CAN վահանի արժեքը
  • Չափը
  • Arduino էլեկտրամատակարարումը ուրախ չի լինի, եթե այն ուղղակիորեն միացված լինի ձեր 12V մեքենաներին (հավանաբար կաշխատի, բայց կյանքը, հավանաբար, կկրճատվի):

Այսպիսով, փոխարենը ես օգտագործեցի հետևյալը.

  • Atmega 328, «Արդուինոյի ուղեղ»: (Կան որոշ տարբերակներ, ձեռք բերեք մեկը, որը հավասար է Arduino Uno- ին: Դուք կարող եք այն գնել Arduino բեռնիչով կամ առանց դրա):
  • 16 ՄՀց բյուրեղ + կոնդենսատորներ ժամացույցի ազդանշանի համար:
  • MCP2551 CAN հաղորդիչ:
  • MCP2515 CAN վերահսկիչ:
  • TSR1-2450, փոխակերպում է 6,5-36 Վ-ը 5 Վ-ի: (Նախատիպում չի օգտագործվում, քանի որ ծրագրակազմը չի մտածի էներգիայի մատակարարման մասին):
  • CD4066B անջատիչ, որը կօգտագործվի ստերեո հրամաններ ուղարկելու ժամանակ:
  • Մի երկու դիմադրություն: (Արժեքները կարելի է գտնել Արծվի սխեմաներում ՝ հետագայում):

Այս կոնֆիգուրացիայի հետ կապված լավ բան այն է, որ այն լիովին համատեղելի է Arduino- ի և CAN վահանի գրադարանի հետ:

Եթե ցանկանում եք կարգավորել չորսից ավելի կոճակներ, գուցե մտածեք CD4066B- ից այլ բան օգտագործելու մասին: CD4066B- ն կարելի է բնութագրել որպես չորս անջատիչ մեկում, որոնցից յուրաքանչյուրը վերահսկվում է Atmegas GPIO կապումներից մեկով: Յուրաքանչյուր անջատիչին միացված է ռեզիստոր, որը կարող է օգտագործվել ստերեոյի մուտքի համար օգտագործվող դիմադրությունը վերահսկելու համար: Այսպիսով, սա հեշտությամբ կարող է օգտագործվել չորս տարբեր հրամաններ ուղարկելու համար: Եթե դրանք համակցված են, ապա կարող են ստացվել դիմադրության լրացուցիչ արժեքներ: Այստեղ է, որ նշվում է նախկինում նշածս սխալը: Ես ունեմ չորս կոճակ, բայց ես նախատեսում էի կիրառել դրանցից երկուսը երկար և կարճ սեղմման համար `վեց տարբեր հրամաններ տալու համար: Բայց, ի վերջո, ես պարզեցի, որ չեմ կարող գտնել այնպիսի դիմադրողների համադրություն, որն ինձ վեց աշխատանքային համակցություն կտար: Հավանաբար հնարավոր կլիներ դրա փոխարեն միացնել անալոգային ելքային ազդանշանը ստերեոին (3.5 մմ ծայր): (Ուշադրություն դարձրեք, որ Atmega- ն չունի իրական անալոգային ելքային կապեր, ուստի կպահանջվի լրացուցիչ սարքավորում):

Փորձարկման նպատակով ես պատրաստել եմ նաև պարզ «մեքենա և ստերեո» սիմուլյատոր ՝ իմ նախատիպին միանալու համար: Դա հեշտացնում է վրիպազերծումը, և եթե հաճույք չեք ստանում նստել ձեր մեքենայի և ծրագրի մեջ, ես կարող եմ դա խորհուրդ տալ:

Նախատիպը պատկերված է նկարի ներքևի տախտակով: Էներգամատակարարման, ծրագրավորման և սերիական գրանցման համար այն կցվում է Arduino Uno- ին, որտեղ հեռացվել է Atmega չիպը:

Վերին տախտակը մեքենա + ստերեո սիմուլյատոր է, որը կօգտագործվի նախատիպի նախնական փորձարկման համար:

Նախատիպ + սիմուլյատորը նախատեսված է աշխատել հետևյալ կերպ.

  • Սեղմեք սիմուլյատորի տախտակի անջատիչ կոճակներից մեկը: (Սրանք ձեր ղեկի կոճակներն են):
  • Երբ սիմուլյատոր ծրագիրը հայտնաբերում է կոճակի սեղմում, այն կուղարկի համապատասխան CAN հաղորդագրություն յուրաքանչյուր 70 ms, քանի դեռ կոճակը սեղմված է: (Քանի որ ավելի վաղ վերցրած տեղեկամատյանները ցույց էին տալիս, որ իմ մեքենայում այդպես է աշխատում): Այն նաև կուղարկի բազմաթիվ «անպիտան» CAN հաղորդագրություններ `ավտոբուսում այլ երթևեկություն մոդելավորելու համար:
  • CAN հաղորդագրությունները ուղարկվում են CAN ավտոբուսով:
  • CAN հաղորդագրությունները ստացվում են նախատիպի կողմից:
  • MCP2515- ը նետում է բոլոր անկապ հաղորդագրությունները `հիմնված հաղորդագրության id- ի վրա:
  • Երբ MCP2515- ը ստանում է հաղորդագրություն, որը պետք է մշակվի, դա ցույց կտա, որ այն ունի հաղորդագրություն:
  • Atmega- ն կկարդա հաղորդագրությունը և կորոշի, թե որ կոճակը պետք է համարվի ակտիվ:
  • Atmega- ն նաև հետևելու է, թե երբ է ստացվել վերջին հաղորդագրությունը, որոշ ժամանակ անց կոճակը թողարկված կհամարվի: (CAN հաղորդագրությունները ցույց են տալիս միայն, որ կոճակն անջատված է, այլ ոչ թե այն սեղմված կամ բաց թողնված է):
  • Եթե կոճակը համարվում է ակտիվ, ապա CD4066B- ի մեկ կամ մի քանի անջատիչ կակտիվանա:
  • Սիմուլյատորը (այժմ գործում է որպես ձեր ստերեո) կբացահայտի, որ դիմադրության և թևի միջև կիրառվում է դիմադրություն: (Tipայրը միացված է 3.3 Վ -ին, իսկ դիմադրության միջոցով `անալոգային մուտքի քորոցին: Երբ որևէ հրաման ակտիվ չէ, այս քորոցը կկարդա 3.3 Վ, երբ հրամանն ակտիվ է, արժեքը կդառնա ավելի ցածր և կճանաչի հրամանը:
  • Մինչ հրամանը ակտիվ է, համապատասխան led- ը նույնպես կակտիվանա: (Կան վեց լուսարձակներ, քանի որ ես պլանավորում էի օգտագործել տարբեր երկար / կարճ սեղմումներ իմ երկու կոճակների համար):

Սարքավորումների նախատիպի մասին լրացուցիչ մանրամասների համար տե՛ս Eagle- ի սխեմաները հետագա քայլում:

Լրացուցիչ մանրամասներ սիմուլյատորի տախտակի սարքավորման մասին.

  • 16 ՄՀց բյուրեղ
  • 22 pF կոնդենսատորներ
  • LED դիմադրիչները պետք է ընտրվեն `ելնելով LED հատկություններից
  • A7 և 3.3V միացված դիմադրիչ, ընտրեք օրինակ. 2kOhm (ոչ կրիտիկական):
  • MCP2551- ի և MCP2515- ի հետ կապված ռեզիստորները ձգվող-ներքև են: Ընտրեք օրինակ 10 կՕմ

(Կամ, եթե նախընտրում եք, կարող եք օգտագործել CAN վահանը սիմուլյատորի «CAN մասի» համար):

Կարևոր է, որ դուք իմանաք, թե ինչպես են Atmega կապում քարտեզագրվում Arduino կապում, երբ սարքավորումները նախագծում եք:

(Մի միացրեք ոչ մի լուսարձակ անմիջապես CD 4066B- ին, այն կարող է կարգավորել միայն ցածր հոսանք: Ես դա փորձեցի, երբ առաջին անգամ փորձարկեցի ելքը, և չիպը դարձավ անօգուտ: Լավն այն է, որ ես գնել էի դրանցից մի քանիսը միայն այն պատճառով, որ նրանք այնքան էժան են)

Քայլ 5: Ապահովիչների ծրագրավորում

Միգուցե նախորդ քայլին նկատեցիք, որ նախատիպը չունի առանձին բաղադրիչներ MCP2515- ի ժամացույցի ազդանշան առաջացնելու համար: Դա պայմանավորված է նրանով, որ արդեն կա 16 ՄՀց բյուրեղ, որն օգտագործվում է որպես Atmega ժամացույցի ազդանշան, որը մենք կարող ենք օգտագործել: Բայց մենք չենք կարող այն ուղղակիորեն միացնել MCP2515- ին, և լռելյայն Atmega- ում չկա ժամացույցի անջատման ազդանշան:

(Եթե նախընտրում եք, կարող եք բաց թողնել այս քայլը և փոխարենը ավելացնել ժամացույցի լրացուցիչ սարքավորում):

Այնուամենայնիվ, մենք կարող ենք օգտագործել մի բան, որը կոչվում է «ապահովիչների ծրագրավորում» ՝ GPIO կապում մեկի ժամացույցի անջատման ազդանշանը միացնելու համար:

Նախ պետք է գտնել «boards.txt» անունով ֆայլը, որն օգտագործվում է ձեր Arduino IDE- ի կողմից: Ձեզ հարկավոր է պատճենել Arduino Uno- ի գրառումը, տալ նոր անուն և փոխել արժեքը low_fuses- ի համար:

Իմ նոր տախտակն այսպիսին է.

##################################################### #############Հիմնված Arduino Uno#Փոփոխությունների վրա.#Ցածր_ֆյուզները փոխվել են 0xff- ից մինչև 0xbf ՝ Atmega PB0- ում 16 ՄՀց ժամացույց#դուրս գալու համար/պին 14 = Arduino D8

clkuno.name = ockամացույցի անջատում (Arduino Uno)

clkuno.upload.protocol = Arduino clkuno.upload.maximum_size = 32256 clkuno.upload.speed = 115200 clkuno.bootloader.low_fuses = 0xbf clkuno.bootloader.high_fuses = 0xde clkuno.bootloader.extended_fuses = 0xfd clkuno.bootloader.path = optiboot clkuno.bootloader.file = optiboot_atmega328.hex clkuno.bootloader.unlock_bits = 0xff clkuno.bootloader.lock_bits = 0xcf clkuno.build.mcu = atmega328p clkuno.build.f_cpu = 16000000L clkunobuild.build.kkanto.k.o = arc.

##############################################################

Նկատի ունեցեք, որ ժամացույցի անջատումը ակտիվացված է `դրա կառավարման բիթը սահմանելով 0:

Տախտակների կազմաձևման ֆայլում նոր խորհուրդը ստեղծելուց հետո դուք պետք է այրեք նոր բեռնիչ Atmega- ում: Դա անելու տարբեր եղանակներ կան, ես օգտագործեցի https://www.arduino.cc/hy/Tutorial/ArduinoToBreadboard- ում նկարագրված մեթոդը:

Դա անելուց հետո, հիշեք, որ Atmega- ում ծրագիր վերբեռնելիս ընտրեք ձեր տախտակի նոր տեսակը և ոչ թե Arduino Uno- ն:

Քայլ 6: Softwareրագրակազմ

Րագրակազմը
Րագրակազմը

Timeամանակն է, որ համր սարքավորումները խելացի դարձնեն `ավելացնելով որոշ ծրագրակազմ:

Ահա մի քանի կեղծ ծածկագիր նախատիպի համար.

lastReceivedTime = 0

lastReceivedCmd = ոչ մի cmdTimeout = 100 setup () {enable watchdog կարգավորել կապում D4-D7 որպես ելքային կապում init CAN setup CAN filter} loop () {reset watchdog if (CAN հաղորդագրություն է ստացվել) {յուրաքանչյուր կոճակի հրամանի համար {եթե CAN հաղորդագրությունը պատկանում է կոճակի հրամանը {lastReceivedTime = այժմ lastReceivedCmd = cmd}}} եթե այժմ> lastReceivedTime + cmdTimeout {lastReceivedCmd = none} յուրաքանչյուր կոճակի հրամանի համար {if lastReceivedCmd is button command {set command pin output = on} else {set command pin output = off }}}

cmdTimeout- ը որոշում է, թե որքան պետք է սպասենք, մինչև համարենք վերջին թողարկված ակտիվ կոճակը: Քանի որ կոճակը ԿԱՐՈ է հաղորդագրության հրամաններ ուղարկվել մոտավորապես յուրաքանչյուր 70 ms, այն պետք է ավելի մեծ լինի, քան որոշ լուսանցքով: Բայց եթե այն մեծ լինի, հետաձգման փորձ կլինի: Այսպիսով, 100 ms- ը լավ թեկնածու է թվում:

Բայց ի՞նչ է պահակախումբը: Դա օգտակար փոքր ապարատային հատկություն է, որը կարող է մեզ փրկել վթարի դեպքում: Պատկերացրեք, որ մենք ունենք սխալ, որի պատճառով ծրագիրը խափանում է, մինչ ձայնի բարձրացման հրամանը ակտիվ է: Հետո մենք կավարտվեինք ստերեոով ՝ առավելագույն ձայնի վրա: Բայց եթե պահակակետը չվերակայվի կոնկրետ ժամանակի համար, նա կորոշի, որ ինչ -որ անսպասելի բան է տեղի ունեցել, և պարզապես թողարկում է վերականգնում:

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

{// թույլ տալ առավելագույնը 250 ms հանգույցի համար wdt_enable (WDTO_250MS); // այլ init իրեր} void loop () {wdt_reset (); // զբաղվել բաներով}

ԿԱՐՈ Է զտել Դե, դուք կարող եք կարգավորել CAN վերահսկիչը, որպեսզի մերժի բոլոր հաղորդագրությունները, որոնք չեն համապատասխանում ֆիլտրին, որպեսզի ծրագրակազմը ժամանակ չկորցնի այն հաղորդագրությունների վրա, որոնք մեզ չեն հետաքրքրում:

անստորագիր երկար դիմակ = 0x1fffffff; // Ներառեք բոլոր 29 վերնագրի բիթերը դիմակի մեջ

անստորագիր երկար ֆիլտրԻդ = 0x0400066; // Մեզ միայն հետաքրքրում է այս CAN հաղորդագրության id m_can.init_Mask (0, CAN_EXTID, դիմակ); // Դիմակ 0-ը վերաբերում է 0-1 զտիչին m_can.init_Mask (1, CAN_EXTID, դիմակ); // Դիմակ 1-ը կիրառվում է 2-5 m_can.init_Filt ֆիլտրի համար (0, CAN_EXTID, filterId); m_can.init_Filt (1, CAN_EXTID, filterId); m_can.init_Filt (2, CAN_EXTID, filterId); m_can.init_Filt (3, CAN_EXTID, filterId); m_can.init_Filt (4, CAN_EXTID, filterId); m_can.init_Filt (5, CAN_EXTID, filterId);

Ստուգեք CAN գրադարանի ծածկագիրը և CAN վերահսկիչի փաստաթղթերը ՝ ֆիլտր + դիմակ տեղադրելու ավելի մանրամասն տեղեկությունների համար:

Կարող եք նաև կարգաբերել CAN վերահսկիչը `ընդմիջում բարձրացնելու համար, երբ հաղորդագրություն է ստացվում (որը չի զտվում): (Ներառված չէ վերը նշված օրինակում, բայց իմ ծրագրում դրա համար կա որոշակի ծածկագիր): Այս դեպքում այն իրականում որևէ արժեք չի ավելացնում և կարող է շփոթեցուցիչ լինել, եթե դուք սովոր չեք ծրագրավորմանը:

Այսպիսով, դա ծրագրաշարի նախատիպն էր ամփոփում: Բայց մեզ անհրաժեշտ է նաև կոդ սիմուլյատորի տախտակի համար.

lastSentTime = 0

minDelayTime = 70 setup () {կարգավորել A0-A5 կապերը որպես ելքային կապեր, կարգավորել D4-D7 կապերը ՝ որպես ներածական ներքին քաշիչով մուտքագրման կապում: init CAN} loop () {send "junk" can msg set activeButton = none for each button {if button is pressed {set activeButton = button}} if activeButton! = none {if now> lastSentTime + minDelayTime {send button command can message } set lastSentTime = now} inval = կարդալ A7 կապը foreach (cmd) {if (min <inval <max) {led on} else {led off}} սպասել 1 ms}

Սա անընդհատ կուղարկի «անպիտան» CAN հաղորդագրություններ մոտավորապես յուրաքանչյուր ms, իսկ մինչ կոճակը սեղմվում է համապատասխան հրամանը `յուրաքանչյուր 70 ms:

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

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

Եթե ցանկանում եք ստուգել իմ ծրագրերը, դրանք կարող եք ներբեռնել այստեղ ՝

  • CAN հաղորդագրությունների գրանցման ծրագիր
  • Theրագիր սիմուլյատորի տախտակի համար
  • Նախատիպի / վերջնական տախտակի ծրագիր

Դուք պետք է տեղյակ լինեք, որ այդ ծրագրերն իրականում չեն համընկնում այստեղի կեղծ կոդի հետ, դրանք պարունակում են շատ «լրացուցիչ» նյութեր, որոնք իրականում անհրաժեշտ չեն, և եթե ծանոթ չեք օբյեկտիվ կողմնորոշված ծրագրավորմանը, հավանաբար մի փոքր դժվար կլինի կարդալ.

Քայլ 7: Վերջնական սարքավորում

Վերջնական սարքավորում
Վերջնական սարքավորում
Վերջնական սարքավորում
Վերջնական սարքավորում
Վերջնական սարքավորում
Վերջնական սարքավորում

Երբ գոհ եք ձեր ծրագրից (հիշեք, որ նախատիպը մեքենայում փորձարկեք սիմուլյատորի տախտակով վերջնական փորձարկումից հետո) ժամանակն է կառուցել իրական սարքավորում:

Այստեղ դուք ունեք երեք տարբերակ.

  • Արագ և կեղտոտ - միացրեք իրերը միասին PCB- ի նախատիպի տախտակի վրա:
  • Hardcore DIY - փորագրեք ձեր սեփական PCB- ն:
  • Theույլ միջոց - պատվիրեք պրոֆեսիոնալ PCB ՝ բաղադրիչները միացնելու համար:

Եթե չեք շտապում, կարող եմ խորհուրդ տալ վերջին տարբերակը: Եթե Ձեզ անհրաժեշտ է միայն այսպիսի փոքր PCB, ապա Չինաստանից պատվիրելը շատ էժան է: (Եվ ապա, հավանաբար, դուք կստանաք տասը կտոր կամ մոտավորապես այնպես, որ կարողանաք թույլ տալ զոդման որոշ սխալներ):

PCB- ներ պատվիրելու համար հարկավոր է ուղարկել ձեր դիզայնը Gerber ձևաչափով: Դրա համար կան տարբեր ծրագրային ապահովումներ: Ես օգտագործեցի Eagle- ը, որը կարող եմ խորհուրդ տալ: Դուք կարող եք ակնկալել մի քանի ժամ այն սովորելու համար, բայց հետո այն լավ է աշխատում: Նման փոքր տախտակների համար կարող եք օգտագործել անվճար:

Theգույշ եղեք դիզայն պատրաստելիս: Չեք ուզում չորս շաբաթ սպասել առաքման ՝ պարզելու համար, որ սխալ եք արել:

(Եթե դուք ունեք լավ զոդման հմտություններ, կարող եք նախագծել մակերեսին ամրացված բաղադրիչների համար և ստանալ իսկապես փոքր ադապտեր: Ես դա չեմ արել):

Ապա պատվիրեք օրինակ ՝ https://www.seeedstudio.com/fusion_pcb.html: Հետևեք հրահանգներին, թե ինչպես ձևավորել Gerber ֆայլերը ձեր դիզայնից: Կարող եք նաև ստանալ արդյունքի նախադիտում `ապահովելու համար, որ այն նորմալ է:

(Ի վերջո, ես պետք է ընտրեի այլ դիմադրիչներ R4-R7- ի համար, քան ներկայացված են սխեմատիկ պատկերում: Փոխարենը ես օգտագործեցի 2k, 4.7k, 6.8k և 14.7k):

Եվ հիշեք. Մի շփոթեք Atmega կապի համարակալումը Arduino կապի համարակալման հետ:

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

Քայլ 8: Մեքենայի տեղադրում

Մեքենայի տեղադրում
Մեքենայի տեղադրում
Մեքենայի տեղադրում
Մեքենայի տեղադրում

Հիմա ամենահետաքրքիր հատվածին `տեղադրեք այն ձեր մեքենայի մեջ և սկսեք օգտագործել այն: (Դրա համար պատյան պատրաստելուց / գնելուց հետո):

Եթե դուք արդեն ամբողջությամբ փորձարկել եք ձեր մեքենայի նախատիպը, ապա ամեն ինչ պետք է կատարյալ աշխատի:

(Ինչպես նշեցի ավելի վաղ, ես դա չեմ արել, ես ստիպված էի փոխարինել որոշ ռեզիստորներ և որոշ փոփոխություններ կատարել իմ ծրագրում):

Նաև հաշվի առեք, արդյոք այն պետք է տեղադրեք ստերեոյի հետևում, թե այլուր: Ես գտա մի լավ տեղ իմ ձեռնոցների տուփի վերևում, որտեղ ես կարող եմ հասնել ձեռնոցի տուփի ներսից ՝ առանց որևէ բան առանձնացնելու: Դա կարող է օգտակար լինել, եթե որոշեմ ավելի ուշ բարելավել այն:

Վերջապես, իմ կոճակները կրկին աշխատում են: Ինչպե՞ս կարող էի գոյատևել երկու ամիս առանց նրանց:

Քայլ 9. Ապագա բարելավումներ

Ինչպես նշվեց, եթե ես պատրաստեմ դրա 2.0 տարբերակը, ես ավելի մեծ ճկունության համար 4066B- ը կփոխարինեմ այլ բանով (հավանաբար թվային պոտենցիոմետր):

Կան նաև շատ այլ բաներ, որոնք կարող եք անել: Օրինակ ՝ ավելացրեք bluetooth մոդուլ և ստեղծեք հեռախոսի կառավարման ծրագիր ձեր հեռախոսի համար: Կամ GPS մոդուլ, այնուհետև, երբ մոտ եք տանը, կարող եք ինքնաբերաբար բարձրացնել ձայնը և ուղարկել «ներքևի պատուհանները» CAN հաղորդագրությունը, որպեսզի ձեր բոլոր հարևանները կարողանան վայելել ձեր հիանալի երաժշտությունը:

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