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

Servodriver-Board Python-GUI- ով և Arduino- ով. 5 քայլ
Servodriver-Board Python-GUI- ով և Arduino- ով. 5 քայլ

Video: Servodriver-Board Python-GUI- ով և Arduino- ով. 5 քայլ

Video: Servodriver-Board Python-GUI- ով և Arduino- ով. 5 քայլ
Video: Marlin Firmware - VScode PlatformIO Install - Build Basics 2024, Հուլիսի
Anonim
Servodriver-Board Python-GUI- ով և Arduino- ով
Servodriver-Board Python-GUI- ով և Arduino- ով

Նախատիպեր պատրաստելիս կամ մոդելային ինքնաթիռներ կառուցելիս հաճախ բախվում եք այն խնդրի հետ, որ դուք պետք է ստուգեք սերվո երթևեկությունը կամ սերվոները դրեք միջին դիրքում:

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

Այն զարմանալիորեն լավ է աշխատում, նույնիսկ 6 սերվոների դեպքում, որոնք օղակում մի դիրքից մյուսն են մրցում:

Բացի այդ, դա լավ նախագիծ է ՝ սովորելու Python-GUI և Arduino- ի միջև Serial- ի միջոցով:

Քայլ 1: Այն, ինչ ձեզ հարկավոր է…

Այս նախագծի համար ձեզ հարկավոր կլինի հետևյալը.

Սարքավորումներ

  • Arduino nano մալուխով: Ես օգտագործել եմ կլոն, և Python ծածկագիրը իրականում ակնկալում է կլոնի CH340- չիպ
  • Նախատիպային տախտակ: 7x5 սմ բավական է
  • Որոշ 2, 54 մմ վերնագրեր և կապում
  • 1-6 հատ
  • Սերվերի մատակարարում (ես օգտագործել եմ 4 մարտկոց ունեցող մարտկոց)

Ծրագրային ապահովում

  • Python 3:
  • USB- վարորդ CH340- չիպերի համար. Պարզապես google- ի համար CH340 վարորդների վարորդների համար
  • Arduino IDE ՝

Քայլ 2. Տախտակի զոդում

Sոդման խորհուրդը
Sոդման խորհուրդը

Soldոդումն իրականում ուղիղ առաջ է ՝ ըստ նկարի Ֆրիտզինգի: Պարզապես համոզվեք, որ դուք կարող եք հեշտությամբ միացնել սերվերը 3-փին շարքերում:

  • 3-պին-տողերը ամրացված են Arduino nano- ի թվային 3, 5, 6, 9, 10 և 11 թվին:
  • Կարմիր մետաղալարն ամրացված է Arduino- ի 5V- պինին
  • Սև մետաղալարը միացված է Arduino- ի GND- քորոցին
  • Եռանկյունի տողերի ներքևի զույգ կապերը նախատեսված են միացնելու տիպիկ RC ընդունիչի սնուցման աղբյուր, կարող եք միացումներ ավելացնել ըստ ձեր ցանկության, ինչպես պտուտակավոր տերմինալներ, XT- միակցիչներ, JST կամ… կամ…

Անձամբ ինձ դուր են գալիս Arduino- ն տեղադրելու համար կին վերնագրերի շարքերը, բայց դա ձեզանից է կախված:

Խնդրում ենք նկատի ունենալ, որ կարճաձև կանացի վերնագրերը ցատկող են, ինչը թույլ է տալիս ձեզ սերվո մատակարարել ՝ օգտագործելով փորձարկման նպատակով Arduino- ի 5V աղբյուրը: Եթե այն չափազանց լարեք, Arduino- ն կվերակայվի և կկորցնի ճիշտ տեմպը: Դրանք ՊԵՏՔ է հեռացվեն, նախքան մեկ այլ էլեկտրամատակարարում կցելը:

Քայլ 3: Arduino- ի կարգավորում

Տեղադրեք Arduino IDE- ն և կցեք ուրվագծով Arduino nano- ն:

Քայլ 4: Python- ի կարգավորում

Python- ի կարգավորում
Python- ի կարգավորում

Տեղադրեք Python 3 -ը այն ներբեռնելուց հետո: Համոզվեք, որ ստուգեք «PATH»-փոփոխական ստեղծելու տարբերակը:

Pip- ի միջոցով անհրաժեշտ է տեղադրել ևս երկու փաթեթ: Դրա համար սեղմեք «Windows»-ի ստեղնը, մուտքագրեք «cmd» և սեղմեք «enter»: Հրամանի տողում մուտքագրեք հետևյալ հրամանները.

  • pip տեղադրման սերիա
  • piip տեղադրել pyserial
  • pip տեղադրել tkinter

Ինչպես տեսնում եք, ինձ պետք են մոդուլների սերիական, ինչպես նաև պիզիերալ, որը, ամենայն հավանականությամբ, ամենաարդյունավետը չէ, քանի որ սերիալին պետք է փոխարինի պիզիերալը: Այնուամենայնիվ, այն աշխատում է, և ես նոր եմ սկսում սովորել;):

Բացեք Python-Script- ը IDE- ում և գործարկեք այն կամ գործարկեք այն անմիջապես տերմինալից:

Բացվող ընտրացանկում կարող եք ընտրել երկու ռեժիմի միջև ՝ «Գնալ ուղիղ» և «Պինգ պոնգ».

  • Գնացեք ուղիղ. Առաջին սյունակում մուտքագրեք Servo-Position միկրո վայրկյաններով և սեղմեք "Start" ՝ սերվոն տեղափոխելու համար նշված դիրքը:
  • Պինգ -պոնգ. Մուտքագրեք ստորին և վերին սահմաններ երկրորդ և երրորդ սյունակներում: Սրանք ստորին և վերին դիրքերն են, որոնց միջև servo- ն հետ ու ետ կգնա: «Պինգ պոնգի ժամանակը» սյունակում կարող եք նշել միլիվայրկյանների ժամանակը, երբ սերվոն կսպասի, երբ հասնի վերին կամ ստորին դիրքին: Կտտացրեք «Սկսել», և սերվոն կսկսի հետ ու առաջ շարժվել, կտտացրեք «Stop» և սերվոն կդադարի:

Քայլ 5. Որտեղ է տեղի ունենում կախարդանքը

Վերջին, բայց ոչ ամենակարևորը, ես ուզում եմ մատնանշել ծածկագրի որոշ մանրամասներ նրանց համար, ովքեր ցանկանում են մի փոքր սերիական հաղորդակցվել Python- ի և Arduino- ի միջև:

Հիմա, ի՞նչ է կատարվում Python ծրագրում:

Նախևառաջ ծրագիրը ստուգում է, թե ինչ է կցված այս տողում COM նավահանգիստներին և պահում այն ցուցակում.

self. COMPortsList = ցուցակ (serial.tools.list_ports.comports ())

Այնուհետև այն շրջանցում է ցանկը, մինչև չգտնի տխրահռչակ CH340 չիպը, պահում է այն և հաջորդական կապ հաստատում for-loop- ից հետո: Ուշադրություն դարձրեք, որ օղակի համար անջատվում է հենց առաջին CH340- ը հայտնաբերվելուն պես:

for p in self. COMPortsList: if "CH340" in p [1]: # Looking for a Arduino Clone self. COMPort = p [0] break other: pass self. Ser = serial. Serial (self. COMPort, 57600)

Սերիական կապը հաստատվում է COM- պորտի հետ ՝ 57600 բաուդրատով:

Իսկ ի՞նչ է անում Arduino ծածկագիրը: Դե, քանի որ Arduino- ն ունի միայն մեկ COM-Port, սերիական կապը միայն մեկ տող է.

Serial.begin (57600);

Այժմ, մենք կարող ենք օգտագործել երկու նավահանգիստները `հաղորդակցվելու համար: Հենց այս դեպքում միայն հաղորդագրություններ Python- ից Arduino- ին: Հաղորդագրություններն այստեղ ուղարկվում են Python- ից: Սերիական կապը բայթերը փոխանցում է որպես կանխադրված: Դա նաև տվյալների ուղարկման ամենաարագ միջոցն է, և որքանով ես տեղյակ եմ, այն դեռ բավականին տարածված է: Այսպիսով, սերվոյի թվի ints (այնպես, որ Arduino- ն գիտի, թե որ servo- ն տեղափոխել) և միկրովայրկյանների դիրքը վերածվում են բայտի:

Հրաման = struct.pack ('> B', self. Place) # «self. Place» ինտ-փոփոխականը վերածվում է բայտի

self. Ser. > B ', հրամանատարություն) # Int- ը բայթի մեջ վերածելը: Ser.write (Command) # շարանը-նավահանգստում բայտ գրելը

Բացի այդ, տվյալների վերլուծությունը ժամանակ է պահանջում (օրինակ ՝ «1», «2», «3» և «0» չորս բայթերը մեկնաբանել որպես int 1230, այլ ոչ թե որպես չորս տարբեր նշաններ), և ավելի լավ է դա անել ոչ Arduino- ով:

Arduino- ի կողմից ուղարկված տեղեկատվությունը վերցվում է հետևյալ կերպ.

եթե (Serial.available ()> 1) {// Եթե սերիական տվյալներ կան, ապա օղակը մուտքագրվում է c = Serial.read (); // Առաջին բայթը (սերվոյի թիվը) պահվում է փոփոխականի մեջ Micros = Serial.read (); // Սերվոյի դիրքը պահպանվում է այստեղ Micros = Micros * 10; }

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