Satura rādītājs:

Servodriver-Board ar Python-GUI un Arduino: 5 soļi
Servodriver-Board ar Python-GUI un Arduino: 5 soļi

Video: Servodriver-Board ar Python-GUI un Arduino: 5 soļi

Video: Servodriver-Board ar Python-GUI un Arduino: 5 soļi
Video: Gesture-Controlled Servo with Python and Arduino #electronics #arduinotraining 2024, Novembris
Anonim
Servodriver-Board ar Python-GUI un Arduino
Servodriver-Board ar Python-GUI un Arduino

Veidojot prototipus vai veidojot lidmašīnu modeļus, jūs bieži saskaraties ar problēmu, ka jums ir jāpārbauda servo ceļojums vai jāiestata servos vidējā stāvoklī.

Ja jūs nevēlaties izveidot visu savu RC sistēmu vai pārbaudīt, cik tālu jūs varat nospiest servo vai kur atrodas vidējā pozīcija, šī plāksne ir paredzēta jums! Tas ļauj pārvietot servo uz noteiktām pozīcijām vai arī ceļosim turp un atpakaļ.

Tas darbojas pārsteidzoši labi, pat ar 6 servos, kas cilpā brauc no vienas pozīcijas uz otru.

Tas ir arī jauks projekts, lai uzzinātu par saziņu starp Python-GUI un Arduino, izmantojot Serial.

1. darbība. Kas jums nepieciešams…

Šim projektam jums būs nepieciešams:

Aparatūra

  • Arduino nano ar kabeli. Es izmantoju klonu, un Python kods patiesībā sagaida klona CH340 mikroshēmu
  • Prototipēšanas dēlis. Pietiek ar 7x5 cm
  • Apmēram 2, 54 mm galvenes un tapas
  • 1-6 servos
  • Servo barošanas avots (es izmantoju akumulatoru ar 4 baterijām)

Programmatūra

  • Python 3:
  • USB draiveris CH340 mikroshēmām: vienkārši atrodiet google, lai meklētu CH340 draiverus
  • Arduino IDE:

2. solis: dēļa lodēšana

Dēļa lodēšana
Dēļa lodēšana

Lodēšana faktiski ir taisni uz priekšu saskaņā ar Fritzing uz attēla. Vienkārši pārliecinieties, ka varat viegli pieslēgt servos pie 3 kontaktu rindām.

  • Trīs tapu rindas ir piestiprinātas pie Arduino nano digitālās tapas 3, 5, 6, 9, 10 un 11.
  • Sarkanais vads ir pievienots Arduino 5V tapai
  • Melnais vads ir savienots ar Arduino GND tapu
  • Adatu pāris zem 3 kontaktu rindām ir paredzēts tipiska RC uztvērēja barošanas avota pievienošanai, jūs varat pievienot savienotājus, kā vēlaties, piemēram, skrūvējamos spailes, XT savienotājus, JST vai… vai…

Personīgi man patīk sieviešu virsrakstu rindas, kurās ievietot Arduino, bet tas ir atkarīgs no jums.

Lūdzu, ņemiet vērā, ka īsās sieviešu galvenes ir džemperis, kas ļauj piegādāt servo, izmantojot Arduino 5V avotu testēšanas nolūkos. Ja jūs to pārspīlējat, Arduino atiestatīs un zaudēs pareizo tempu. Tie ir jāizņem, pirms tiek pievienots cits barošanas avots.

3. darbība: Arduino iestatīšana

Instalējiet Arduino IDE un mirgo Arduino nano ar pievienoto skici.

4. darbība: Python iestatīšana

Python iestatīšana
Python iestatīšana

Pēc lejupielādes instalējiet Python 3. Noteikti atzīmējiet opciju, lai izveidotu mainīgo "PATH".

Izmantojot pip, jums jāinstalē vēl divas paketes. Lai to izdarītu, nospiediet taustiņu "Windows", ierakstiet "cmd" un nospiediet "Enter". Komandu uzvednē ierakstiet šādas komandas:

  • pip instalēt sēriju
  • piip instalēt pyserial
  • pip instalēt tkinter

Kā redzat, man ir nepieciešami sērijas moduļi, kā arī pyserial, kas, visticamāk, nav visefektīvākais, jo pyserial vajadzētu aizstāt sērijas. Tomēr tas darbojas, un es tikai sāku mācīties;).

Atveriet Python-Script IDE un palaidiet to vai palaidiet to tieši no termināļa.

Nolaižamajā izvēlnē varat izvēlēties vienu no diviem režīmiem-"Go Straight" un "Ping Pong":

  • Iet taisni: pirmajā kolonnā ievadiet servo pozīciju mikrosekundēs un nospiediet "Sākt", lai servo pārvietotos uz norādīto pozīciju.
  • Pingpongs: otrajā un trešajā kolonnā ievadiet apakšējo robežu un augšējo robežu. Tā ir apakšējā un augšējā pozīcija, starp kurām servo iet atpakaļ un atpakaļ. Slejā "Ping Pong Time" varat norādīt laiku milisekundēs, kādu servo gaidīs, kad būs sasniedzis augšējo vai apakšējo pozīciju. Nospiediet "Sākt", un servo sāks kustēties šurpu turpu, nospiediet "Stop" un servo apstāsies.

5. solis: kur notiek maģija

Visbeidzot, bet ne mazāk svarīgi, es vēlos norādīt uz kādu informāciju par kodu tiem, kuri vēlas iekļūt sērijveida komunikācijā starp Python un Arduino.

Kas notiek programmā Python?

Pirmkārt, programma pārbauda, kas ir pievienots šīs rindas COM portiem, un saglabā to sarakstā:

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

Tad tas cilpa sarakstu, līdz atrod bēdīgi slaveno CH340 mikroshēmu, saglabā to un pēc tam izveido sērijas savienojumu pēc for-loop. Ņemiet vērā, ka for-loop pārtrūkst, tiklīdz tiek atrasts pirmais CH340.

par p in self. COMPortsList: ja "CH340" p [1]: # Meklē Arduino Clone self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

Sērijas savienojums tiek izveidots ar COM portu ar 57600 bitu pārraides ātrumu.

Un ko dara Arduino kods? Tā kā Arduino ir tikai viens COM ports, sērijas savienojums ir tikai viena līnija:

Sērijas sākums (57600);

Tagad mēs varam izmantot abas ostas, lai sazinātos. Šajā gadījumā tikai ziņojumi no Python uz Arduino. Šeit ziņojumi tiek sūtīti no Python. Sērijas savienojums pēc noklusējuma pārraida baitus. Tas ir arī ātrākais datu nosūtīšanas veids, un, cik es zinu, tas joprojām ir diezgan izplatīts. Tātad servo numura inti (lai Arduino zina, kuru servo pārvietot) un pozīcija mikrosekundēs tiek pārvērsta par baitu.

Komanda = structure.pack ('> B', self. Place) # Int-mainīgais "self. Place" tiek pārvērsts par baitu

self. Ser.write (Komanda) # Baita rakstīšana Serial-Port Command = int (self. ServoPos.get ()) // 10 # Ievades nolasīšana no lauka un ievadiet int Command = structure.pack (' > B ', komanda) # Int pagriešana baitā. Ser.write (komanda) # Baita rakstīšana seriālajā portā

Arī datu parsēšana prasa laiku (piemēram, četru baitu "1", "2", "3" un "0" interpretēšana kā int 1230, nevis kā četras dažādas rakstzīmes), un labāk to darīt ne Arduino.

Arduino pusē nosūtītā informācija tiek uztverta šādi:

if (Serial.available ()> 1) {// Ja ir pieejami sērijas dati, tad tiek ievadīta cilpa c = Serial.read (); // Pirmais baits (servo skaits) tiek saglabāts mainīgajā Micros = Serial.read (); // Šeit tiek saglabāta servo pozīcija Micros = Micros * 10; }

Ieteicams: