Tartalomjegyzék:

Servodriver-Board Python-GUI-val és Arduino-val: 5 lépés
Servodriver-Board Python-GUI-val és Arduino-val: 5 lépés

Videó: Servodriver-Board Python-GUI-val és Arduino-val: 5 lépés

Videó: Servodriver-Board Python-GUI-val és Arduino-val: 5 lépés
Videó: Arduino GUI Part 2 Servo Motor 2024, Július
Anonim
Servodriver-Board Python-GUI-val és Arduino-val
Servodriver-Board Python-GUI-val és Arduino-val

Amikor prototípusokat készít vagy repülőgép -modelleket épít, gyakran találkozik azzal a problémával, hogy ellenőriznie kell a szervo menetét, vagy középre kell állítania a szervókat.

Abban az esetben, ha nem szokta felépíteni a teljes RC-rendszerét vagy tesztelni, milyen messzire tudja tolni a szervót vagy hol van a középső pozíció, akkor ez a tábla az Ön számára! Lehetővé teszi, hogy a szervót meghatározott pozíciókba helyezze, vagy utazzunk oda -vissza.

Meglepően jól működik, még 6 szervóval is, amelyek egyik helyzetből a másikba száguldoznak a hurokban.

Ezenkívül szép projekt a Python-GUI és az Arduino közötti kommunikáció megismerése a Serial használatával.

1. lépés: Amire szüksége van…

Ehhez a projekthez a következőkre lesz szüksége:

Hardver

  • Arduino nano kábellel. Egy klónt használtam, és a Python kód valójában egy klón CH340 chipjét várja
  • Prototípus -tábla. 7x5 cm elég
  • Körülbelül 2, 54 mm -es fejlécek és csapok
  • 1-6 szervó
  • Tápegység a szervókhoz (4 akkumulátoros akkumulátorcsomagot használtam)

Szoftver

  • Python 3:
  • USB-illesztőprogram a CH340-chipekhez: Csak a google segítségével keresse meg a CH340-es illesztőprogramokat
  • Arduino IDE:

2. lépés: A panel forrasztása

A tábla forrasztása
A tábla forrasztása

A forrasztás valójában egyenesen előre halad Fritzing szerint a képen. Csak győződjön meg arról, hogy könnyen csatlakoztathatja a szervókat a 3 tűs sorokhoz.

  • A 3 tűs sorok az Arduino nano 3., 5., 6., 9., 10. és 11. digitális tűjéhez vannak rögzítve.
  • A piros vezeték az Arduino 5V-os csatlakozójához van rögzítve
  • A fekete vezeték az Arduino GND-tűjéhez van csatlakoztatva
  • A 3 tűs sorok alatti csappár tipikus RC-vevő tápegységet csatlakoztathat, tetszés szerint hozzáadhat csatlakozókat, például csavaros csatlakozókat, XT-csatlakozókat, JST-t vagy… vagy…

Személy szerint szeretem a női fejlécek sorait az Arduino beillesztésére, de ez rajtad múlik.

Kérjük, vegye figyelembe, hogy a rövidre zárott női fejrészek áthidalók, amelyek lehetővé teszik a szervó ellátását az Arduino 5V-os forrásából tesztelés céljából. Ha túlságosan megerőlteti, az Arduino visszaáll, és elveszíti a megfelelő tempót. Ezeket el kell távolítani, mielőtt másik tápegységet csatlakoztatna.

3. lépés: Az Arduino beállítása

Telepítse az Arduino IDE -t, és villanja fel az Arduino nano -t a mellékelt vázlattal.

4. lépés: A Python beállítása

A Python beállítása
A Python beállítása

Telepítse a Python 3 -at a letöltés után. Ellenőrizze a "PATH" változó létrehozásának lehetőségét.

További két csomagot kell telepítenie a pip használatával. Ehhez nyomja meg a "Windows" billentyűt, írja be a "cmd" parancsot, és nyomja meg az "Enter" billentyűt. A parancssorba írja be a következő parancsokat:

  • pip install soros
  • piip install pyserial
  • pip install tkinter

Amint látja, szükségem van a soros és a pyserial modulokra, ami valószínűleg nem a leghatékonyabb, mivel a pyserial -nak helyettesítenie kell a sorozatot. Ennek ellenére működik, és most kezdek tanulni;).

Nyissa meg a Python-Script fájlt az IDE-ben, és futtassa, vagy futtassa közvetlenül a terminálról.

A legördülő menüben két üzemmód közül választhat: "Go Straight" és "Ping Pong":

  • Menjen egyenesen: Írjon be egy szervo pozíciót mikroszekundumokban az első oszlopba, és nyomja meg a "Start" gombot, hogy a szervó a megadott pozícióba kerüljön.
  • Pingpong: Írjon be egy alsó és egy felső határt a második és a harmadik oszlopba. Ez az alsó és felső helyzet, amelyek között a szervó vissza -vissza mozog. A "Ping Pong idő" oszlopban ezredmásodpercben megadhatja azt az időt, amelyet a szervó várni fog, amikor elérte a felső vagy az alsó pozíciót. Nyomja meg a "Start" gombot, és a szervó elkezd mozogni ide -oda, nyomja meg a "Stop" gombot, és a szervó leáll.

5. lépés: Ahol a varázslat történik

Végül, de nem utolsósorban szeretnék rámutatni a kód néhány részletére azok számára, akik szeretnének bekapcsolódni egy soros kommunikációba a Python és az Arduino között.

Nos, mi történik a Python programban?

Először is, a program ellenőrzi, hogy mi tartozik a sor COM-portjaihoz, és menti egy listába:

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

Ezután végiglapozza a listát, amíg egy hírhedt CH340-chipet nem talál, elmenti, majd a for-loop után soros kapcsolatot létesít. Ne feledje, hogy a for-hurok megszakad, amint megtalálta az első CH340-et.

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

A soros kapcsolat a COM-porttal jön létre, 57600 baudrátával.

És mit csinál az Arduino kód? Nos, mivel az Arduino csak egy COM-porttal rendelkezik, a soros kapcsolat csak egy sor:

Sorozat.kezdet (57600);

Most mindkét portot használhatjuk a kommunikációhoz. Ebben az esetben csak a Pythonról az Arduino -hoz küldött üzenetek. Az üzeneteket ide küldi a Python. A soros kapcsolat alapértelmezés szerint bájtokat továbbít. Ez az adatküldés leggyorsabb módja is, és tudomásom szerint még mindig meglehetősen elterjedt. Tehát a szervó számának intsei (így az Arduino tudja, hogy melyik szervót kell mozgatni) és a helyzet mikroszekundumokban bájtra változnak.

Parancs = strukt.pack ('> B', self. Place) # Az "self. Place" int-változó bájtra változik

self. Ser.write (Parancs) # A bájt írása a soros portra Parancs = int (self. ServoPos.get ()) // 10 # A bemenet beolvasása a mezőből, és az int parancs beírása Command = szerkezet.pack (' > B ', Parancs) # Az int elforgatása bájtos önmagában. Ser.write (Parancs) # A bájt írása a soros porton

Az adatok elemzése is időt vesz igénybe (például négy bájt "1", "2", "3" és "0" értelmezése az int 1230, nem pedig négy különböző karakterként), és jobb, ha nem az Arduino -n.

Az Arduino oldalon az elküldött információkat a következőképpen vesszük fel:

if (Serial.available ()> 1) {// Ha soros adatok állnak rendelkezésre, akkor a ciklus beírása c = Serial.read (); // Az első bájt (szervo száma) egy változóba kerül mentésre Micros = Serial.read (); // A szervó pozíciója itt kerül mentésre Micros = Micros * 10; }

Ajánlott: