Talaan ng mga Nilalaman:

Servodriver-Board Na May Python-GUI at Arduino: 5 Mga Hakbang
Servodriver-Board Na May Python-GUI at Arduino: 5 Mga Hakbang

Video: Servodriver-Board Na May Python-GUI at Arduino: 5 Mga Hakbang

Video: Servodriver-Board Na May Python-GUI at Arduino: 5 Mga Hakbang
Video: Глобальные тренды 2020 — от Agile до IoT / Java Tech Talk 2024, Nobyembre
Anonim
Servodriver-Board Na May Python-GUI at Arduino
Servodriver-Board Na May Python-GUI at Arduino

Kapag gumagawa ng prototyping o pagbuo ng mga modelo ng eroplano, madalas mong mahahanap ang problema, na kailangan mong suriin ang paglalakbay ng servo o itakda ang servos sa kalagitnaan ng posisyon.

Kung sakaling hindi mo sanay na buuin ang iyong buong RC-system o pagsubok, kung gaano kalayo ang maaari mong itulak ang servo o kung saan ang midposition, kung gayon ang board na ito ay para sa iyo! Pinapayagan kang ilipat ang servo sa tinukoy na mga posisyon o maglakbay tayo pabalik-balik.

Gumagawa ito ng nakakagulat na mabuti, kahit na may 6 na servos na karera mula sa isang posisyon patungo sa isa pa sa loop.

Gayundin, magandang proyekto ito upang malaman ang tungkol sa komunikasyon sa pagitan ng Python-GUI at Arduino gamit ang Serial.

Hakbang 1: Ano ang Kailangan Mo …

Para sa proyektong ito, kakailanganin mo ang sumusunod:

Hardware

  • Arduino nano na may cable. Gumamit ako ng isang clone, at ang Python code ay talagang inaasahan ang isang CH340-chip ng isang clone
  • Isang prototyping board. Tama na ang 7x5cm
  • Ilang 2, 54mm na mga header at pin
  • 1-6 servos
  • Suplay ng kuryente para sa mga servos (Gumamit ako ng isang batterypack na may 4 na baterya)

Software

  • Python 3:
  • Isang USB-Driver para sa CH340-chips: google lang para sa mga driver para sa mga driver ng CH340
  • Arduino IDE:

Hakbang 2: Paghihinang sa Lupon

Paghinang sa Lupon
Paghinang sa Lupon

Ang paghihinang ay talagang tuwid na pasulong ayon sa Fritzing sa larawan. Siguraduhin lamang, na maaari mong mai-hook up ang mga servos nang madali sa mga 3-pin-row.

  • Ang 3-pin-row ay nakakabit sa digital pin 3, 5, 6, 9, 10 at 11 ng Arduino nano.
  • Ang pulang kawad ay nakakabit sa 5V-pin ng Arduino
  • Ang itim na kawad ay konektado sa GND-pin ng Arduino
  • Ang pares ng mga pin sa ibaba ng 3-pin-row ay nilalayon upang maglakip ng isang tipikal na supply ng kuryente ng RC-receiver, maaari kang magdagdag ng mga konektor ayon sa gusto mo, tulad ng mga terminal ng pag-screw, XT-Connectors, JST o… o…

Sa personal, gusto ko ang mga hanay ng mga babaeng header upang ilagay ang Arduino, ngunit nasa sa iyo iyon.

Mangyaring tandaan, na ang mga nakaikling babaeng header ay isang lumulukso, na magbibigay sa iyo ng supply ng servo gamit ang 5V-source ng Arduino para sa mga layuning pagsubok. Kung sobra mo itong pinagmanahan, ire-reset at maluwag ng Arduino ang tamang bilis. DAPAT na silang alisin, bago mag-attach ng isa pang supply ng kuryente.

Hakbang 3: Pag-set up ng Arduino

I-install ang Arduino IDE at i-flash ang Arduino nano na may kalakip na sketch.

Hakbang 4: Pag-set up ng Python

Pag-set up ng Python
Pag-set up ng Python

I-install ang Python 3 pagkatapos i-download ito. Tiyaking suriin ang pagpipilian upang lumikha ng isang "PATH" -variable.

Kailangan mong mag-install ng dalawa pang mga pakete gamit ang pip. Para doon, pindutin ang "Windows" -key, i-type ang "cmd" at pindutin ang "enter". Sa prompt ng utos i-type ang mga sumusunod na utos:

  • pip install serial
  • i-install ang piip sa pyserial
  • pip install tkinter

Tulad ng nakikita mo, kailangan ko ng mga module na serial pati na rin ang pyserial, na malamang na hindi ang pinaka mahusay, yamang dapat palitan ng pyserial ang serial. Gayunpaman ito ay gumagana at nagsisimula pa lamang akong malaman;).

Buksan ang Python-Script sa IDE at patakbuhin ito, o patakbuhin ito diretso mula sa terminal.

Sa drop-down na menu, maaari kang pumili sa pagitan ng dalawang mga mode, "Go Straight" at "Ping Pong":

  • Pumunta diretso: Magpasok ng isang Servo-Position sa mga microsecond sa unang haligi at pindutin ang "Start" upang ilipat ang servo sa tinukoy na posisyon.
  • Ping Pong: Magpasok ng isang mas mababang hangganan at isang itaas na hangganan sa pangalawa at pangatlong haligi. Iyon ang mas mababa at itaas na posisyon, sa pagitan ng kung saan ang servo ay babalik-balik. Sa haligi na "Ping Pong Time" maaari mong tukuyin ang isang oras sa milliseconds, na maghihintay ang servo kapag naabot nito ang itaas o ang mas mababang posisyon. Pindutin ang "Start" at ang servo ay magsisimulang ilipat pabalik-balik, pindutin ang "Itigil" at ang servo ay titigil.

Hakbang 5: Kung saan Mangyayari ang Magic

Huling ngunit hindi pa huli, nais kong ituro ang ilan sa mga detalye sa code para sa mga, na nais na makakuha ng isang maliit na serial komunikasyon sa pagitan ng Python at Arduino.

Ngayon, ano ang nangyayari sa programang Python?

Una sa lahat, susuriin ng programm, kung ano ang nakakabit sa mga COM-port sa linyang ito at nai-save ito sa isang listahan:

self. COMPortsList = list (serial.tools.list_ports.comports ())

Pagkatapos ay mag-loop ito sa listahan hanggang sa makahanap ito ng isang kilalang-kilala CH340-chip, nai-save ito at pagkatapos ay nagtatatag ng isang serial connection pagkatapos ng for-loop. Tandaan, na ang for-loop ay masisira sa sandaling matagpuan ang unang CH340.

para sa p sa sarili. COMPortsList: kung "CH340" sa p [1]: # Naghahanap ng sarili na Arduino Clone. COMPort = p [0] masira pa: ipasa ang sarili. Ser = serial. Serial (self. COMPort, 57600)

Ang serial connection ay itinatag sa COM-port na may baudrate na 57600.

At ano ang ginagawa ng Arduino code? Kaya, dahil ang Arduino ay may isang COM-Port lamang, ang serial na koneksyon ay isang linya lamang:

Serial.begin (57600);

Ngayon, maaari naming gamitin ang parehong mga port upang makipag-usap. Sa kasong ito, ang mga mensahe lamang mula sa Python hanggang sa Arduino. Ipinadala ang mga mensahe dito mula sa Python. Ang serial na koneksyon ay nagpapadala ng mga byte bilang isang default. Iyon din ang pinakamabilis na paraan ng pagpapadala ng data at sa pagkakaalam ko ay medyo kalat din. Kaya't ang mga ints para sa bilang ng servo (kaya alam ng Arduino kung aling servo ang lilipat) at ang posisyon sa microseconds ay ginawang isang byte.

Command = struct.pack ('> B', self. Place) # Ang int-variable na "self. Place" ay ginawang isang byte

self. Ser.write (Command) # Pagsusulat ng byte sa Serial-Port Command = int (self. ServoPos.get ()) // 10 # Pagbasa ng Input mula sa patlang at lumiko sa int Command = struct.pack (' > B ', Command) # Pagbukas ng int sa isang byte na sarili. Ser.write (Command) # Pagsusulat ng byte sa Serial-Port

Gayundin, ang pag-parse ng data ay tumatagal ng oras (halimbawa ng pagbibigay kahulugan ng apat na byte na "1", "2", "3" at "0" bilang int 1230, hindi bilang apat na magkakaibang mga char) at mas mahusay na gawin iyon hindi sa Arduino.

Sa panig ng Arduino, ang impormasyong ipinadala ay kukuha ng sumusunod:

kung (Serial.available ()> 1) {// Kung magagamit ang serial data, pagkatapos ay ipinasok ang loop c = Serial.read (); // Ang unang byte (bilang ng servo) ay nai-save sa isang variable na mikropono = Serial.read (); // Ang posisyon ng servo ay nai-save dito mikroso = mikros * 10; }

Inirerekumendang: