Სარჩევი:

Servodriver-Board Python-GUI და Arduino: 5 ნაბიჯი
Servodriver-Board Python-GUI და Arduino: 5 ნაბიჯი

ვიდეო: Servodriver-Board Python-GUI და Arduino: 5 ნაბიჯი

ვიდეო: Servodriver-Board Python-GUI და Arduino: 5 ნაბიჯი
ვიდეო: Python GUI for Arduino Servo Motor Control 2024, ივლისი
Anonim
Servodriver-Board Python-GUI და Arduino
Servodriver-Board Python-GUI და Arduino

პროტოტიპების გაკეთებისას ან თვითმფრინავების მოდელის მშენებლობისას, თქვენ ხშირად შეხვდებით პრობლემას, რომ თქვენ უნდა შეამოწმოთ სერვო მგზავრობა ან სერვოები შუა პოზიციაზე დააყენოთ.

თუ არ აპირებთ თქვენი მთელი RC სისტემის ან ტესტის შექმნას, რამდენად შორს შეგიძლიათ დააყენოთ servo ან სად არის შუალედური პოზიცია, მაშინ ეს დაფა თქვენთვისაა! ეს საშუალებას გაძლევთ გადაიტანოთ სერვო მითითებულ პოზიციებზე, ან წავიდეთ უკან და უკან.

ის საოცრად კარგად მუშაობს, თუნდაც 6 სერვოსთან ერთად, რომლებიც რბოლებიდან ერთი პოზიციიდან მეორეზე მიდიან.

ასევე, ეს არის კარგი პროექტი, რომ გაეცნოთ Python-GUI და Arduino– ს შორის კომუნიკაციას სერიალის გამოყენებით.

ნაბიჯი 1: რაც გჭირდებათ…

ამ პროექტისთვის დაგჭირდებათ შემდეგი:

ტექნიკა

  • არდუინო ნანო კაბელით. მე გამოვიყენე კლონი და პითონის კოდი რეალურად ელოდება კლონის CH340 ჩიპს
  • პროტოტიპის დაფა. 7x5 სმ საკმარისია
  • ზოგიერთი 2, 54 მმ სათაურები და ქინძისთავები
  • 1-6 პორცია
  • სერვერების კვების წყარო (მე გამოვიყენე ბატარეის პაკეტი 4 ბატარეით)

პროგრამული უზრუნველყოფა

  • პითონი 3:
  • USB- დრაივერი CH340- ჩიპებისთვის: უბრალოდ google- ისთვის მძღოლები CH340 დრაივერებისთვის
  • Arduino IDE:

ნაბიჯი 2: გამგეობის შედუღება

გამგეობის გამგეობა
გამგეობის გამგეობა

შედუღება ფაქტიურად პირდაპირ წინ მიდის სურათზე Fritzing- ის მიხედვით. უბრალოდ დარწმუნდით, რომ თქვენ შეგიძლიათ მიირთვათ სერვისები მარტივად 3 პინ-რიგზე.

  • 3 პინიანი მწკრივი მიმაგრებულია ციფრული პინ 3, 5, 6, 9, 10 და 11 არდუინოს ნანოზე.
  • წითელი მავთული მიმაგრებულია არდუინოს 5V- პინზე
  • შავი მავთული უკავშირდება არდუინოს GND- პინს
  • წყვილ ქინძისთავები 3 ქინძისთავების ქვემოთ არის დამაგრებული ტიპიური RC მიმღების დენის წყაროსთვის, შეგიძლიათ დაამატოთ კონექტორები, როგორც გსურთ, როგორიცაა ტერმინალების ხრახნი, XT- კონექტორები, JST ან… ან…

პირადად მე, მომწონს მწკრივების რიგები, რათა არდუინო ჩადოს, მაგრამ ეს შენზეა დამოკიდებული.

გთხოვთ გაითვალისწინოთ, რომ მოკლებული ქალი სათაურები არის მხტუნავი, რომელიც საშუალებას გაძლევთ მიაწოდოთ სერვო არდუინოს 5V წყაროს ტესტირების მიზნით. თუ მას ძალიან დაძაბავთ, არდუინო გადატვირთავს და კარგავს სწორ ტემპს. ისინი უნდა მოიხსნას, სანამ სხვა დენის წყაროს მიამაგრებთ.

ნაბიჯი 3: არდუინოს დაყენება

დააინსტალირეთ Arduino IDE და მიამაგრეთ Arduino nano თანდართული ესკიზით.

ნაბიჯი 4: პითონის დაყენება

პითონის დაყენება
პითონის დაყენება

გადმოწერეთ Python 3. დარწმუნდით, რომ შეამოწმეთ ვარიანტი "PATH"-ცვლადი.

თქვენ უნდა დააინსტალიროთ კიდევ ორი პაკეტი pip– ის გამოყენებით. ამისათვის დააჭირეთ ღილაკს "Windows", ჩაწერეთ "cmd" და დააჭირეთ "enter". ბრძანების სტრიქონში ჩაწერეთ შემდეგი ბრძანებები:

  • პიპის ინსტალაციის სერია
  • piip დააინსტალირეთ pyserial
  • pip დააინსტალირეთ tkinter

როგორც ხედავთ, მე მჭირდება მოდულები სერიული, ასევე პიისერიული, რომელიც, სავარაუდოდ, არ არის ყველაზე ეფექტური, ვინაიდან სერიული უნდა შეიცვალოს პიისერიულმა. მიუხედავად ამისა, ის მუშაობს და მე მხოლოდ სწავლას ვიწყებ;).

გახსენით Python-Script IDE– ში და გაუშვით იგი, ან გაუშვით პირდაპირ ტერმინალიდან.

ჩამოსაშლელ მენიუში შეგიძლიათ აირჩიოთ ორი რეჟიმიდან "Go Go Straight" და "Ping Pong":

  • გადადით პირდაპირ: შეიყვანეთ სერვო პოზიცია მიკროწამებში პირველ სვეტში და დააჭირეთ ღილაკს "დაწყება", რათა სერვო გადავიდეს მითითებულ პოზიციაზე.
  • პინგ პონგი: შეიყვანეთ ქვედა და ზედა საზღვარი მეორე და მესამე სვეტში. ეს არის ქვედა და ზედა პოზიცია, რომელთა შორის სერვო უკან და უკან ბრუნდება. სვეტში "პინგ -პონგის დრო" შეგიძლიათ მიუთითოთ დრო მილიწამებში, რომ სერვო დაელოდება როდესაც მიაღწევს ზედა ან ქვედა პოზიციას. დააჭირეთ ღილაკს "დაწყება" და სერვო დაიწყებს უკან და უკან მოძრაობას, დააჭირეთ "გაჩერებას" და სერვო გაჩერდება.

ნაბიჯი 5: სად ხდება მაგია

ბოლო, მაგრამ არანაკლებ მნიშვნელოვანი, მინდა აღვნიშნო კოდის ზოგიერთი დეტალი მათთვის, ვისაც სურს ჩაერთოს სერიულ კომუნიკაციაში პითონსა და არდუინოს შორის.

ახლა რა ხდება პითონის პროგრამაში?

უპირველეს ყოვლისა, პროგრამა ამოწმებს, თუ რა არის მიმაგრებული COM პორტებში ამ ხაზში და ინახავს მას სიაში:

self. COMPortsList = სია (serial.tools.list_ports.comports ())

შემდეგ ის იმოძრავებს სიაში, სანამ არ აღმოაჩენს ცნობილ CH340 ჩიპს, შეინახავს მას და შემდეგ ამყარებს სერიულ კავშირს for-loop– ის შემდეგ. გაითვალისწინეთ, რომ for-loop იშლება როგორც კი პირველი CH340 მოიძებნება.

for p in self. COMPortsList: თუ "CH340" in p [1]: # ეძებს Arduino Clone self. COMPort = p [0] შესვენება სხვაგან: გაივლის თვითმმართველობას. Ser = სერიული. სერიული (self. COMPort, 57600)

სერიული კავშირი დამყარებულია COM პორტთან ერთად baudrate 57600.

და რას აკეთებს არდუინოს კოდი? ისე, რადგან Arduino– ს აქვს მხოლოდ ერთი COM პორტი, სერიული კავშირი მხოლოდ ერთი ხაზია:

სერიული. დასაწყისი (57600);

ახლა, ჩვენ შეგვიძლია გამოვიყენოთ ორივე პორტი კომუნიკაციისთვის. ამ შემთხვევაში, მხოლოდ შეტყობინებები პითონიდან არდუინოსკენ. შეტყობინებები იგზავნება აქ პითონიდან. სერიული კავშირი ნაგულისხმევად გადასცემს ბაიტებს. ეს არის ასევე მონაცემების გაგზავნის ყველაზე სწრაფი გზა და რამდენადაც მე ვიცი, ის ჯერ კიდევ საკმაოდ გავრცელებულია. ასე რომ, სერვის ნომრის ints (ასე რომ არდუინომ იცის, რომელი სერვო უნდა გადავიდეს) და მიკროწამებში პოზიცია ბაიტად იქცევა.

ბრძანება = struct.pack ('> B', self. Place) # შიდა ცვლადი "self. Place" გადაიქცევა ბაიტად

self. Ser.write (Command) # დაწერეთ ბაიტი Serial-Port Command = int (self. ServoPos.get ()) // 10 # ველიდან შეყვანის წაკითხვა და int ბრძანების = ساختار.პაკეტი (' > B ', ბრძანება) # int- ის გადაქცევა ბაიტში. Ser.write (Command) # სერიის პორტზე ბაიტის წერა

ასევე, მონაცემების გაანალიზებას დრო სჭირდება (მაგალითად, ოთხი ბაიტის "1", "2", "3" და "0" ინტერ 1230 ინტერპრეტაციით, არა როგორც ოთხი განსხვავებული სიმბოლო) და უმჯობესია ამის გაკეთება არ Arduino- ზე.

არდუინოს მხარეს, გაგზავნილი ინფორმაცია მიიღება შემდეგნაირად:

თუ (Serial.available ()> 1) {// თუ სერიული მონაცემები ხელმისაწვდომია, მაშინ მარყუჟი შეიყვანება c = Serial.read (); // პირველი ბაიტი (servo ნომერი) ინახება ცვლადი Micros = Serial.read (); // სერვოს პოზიცია ინახება აქ Micros = Micros * 10; }

გირჩევთ: