Obsah:

Servodriver-Board s Python-GUI a Arduino: 5 kroků
Servodriver-Board s Python-GUI a Arduino: 5 kroků

Video: Servodriver-Board s Python-GUI a Arduino: 5 kroků

Video: Servodriver-Board s Python-GUI a Arduino: 5 kroků
Video: Python GUI for Arduino Servo Motor Control 2024, Červenec
Anonim
Servodriver-Board s Python-GUI a Arduino
Servodriver-Board s Python-GUI a Arduino

Při výrobě prototypů nebo stavbě modelů letadel se často setkáváte s problémem, že musíte zkontrolovat zdvih serva nebo nastavit serva do střední polohy.

V případě, že se nechystáte vybudovat celý svůj RC systém nebo testovat, jak daleko můžete tlačit na servo nebo kde je střed, pak je tato deska pro vás! Umožňuje vám přesunout servo do určených poloh nebo se vrátit zpět.

Funguje to překvapivě dobře, dokonce i se 6 servy, která ve smyčce závodí z jedné polohy do druhé.

Je to také pěkný projekt, který se dozví o komunikaci mezi Python-GUI a Arduino pomocí Serial.

Krok 1: Co potřebujete…

Pro tento projekt budete potřebovat následující:

Hardware

  • Arduino nano s kabelem. Použil jsem klon a Python kód ve skutečnosti očekává klon CH340
  • Prototypovací deska. 7x5 cm je dost
  • Asi 2, 54 mm záhlaví a kolíky
  • 1-6 serv
  • Napájení serv (použil jsem bateriový balíček se 4 bateriemi)

Software

  • Python 3:
  • Ovladač USB pro čipy CH340: Ovladače pro ovladače CH340 si stačí vygooglit
  • Arduino IDE:

Krok 2: Pájení desky

Pájení desky
Pájení desky

Pájení je ve skutečnosti přímo vpřed podle Fritzing na obrázku. Jen se ujistěte, že můžete snadno připojit serva k 3-pinovým řadám.

  • 3kolíkové řady jsou připojeny k digitálnímu kolíku 3, 5, 6, 9, 10 a 11 Arduino nano.
  • Červený vodič je připojen k 5V kolíku Arduina
  • Černý vodič je připojen ke kolíku GND Arduina
  • Dvojice kolíků pod 3pólovými řadami je určena k připojení typického napájecího zdroje přijímače RC. Konektory můžete libovolně přidávat, například šroubovací svorky, konektory XT, JST nebo … nebo …

Osobně se mi líbí řady ženských záhlaví, do kterých lze vložit Arduino, ale to je na vás.

Vezměte prosím na vědomí, že zkrácené ženské záhlaví jsou propojkou, která vám umožní dodávat servo pomocí 5V zdroje Arduino pro účely testování. Pokud to příliš namáháte, Arduino se resetuje a ztratí správné tempo. MUSÍ být odstraněny, než připojíte další napájecí zdroj.

Krok 3: Nastavení Arduina

Nainstalujte Arduino IDE a flashujte Arduino nano pomocí přiložené skici.

Krok 4: Nastavení Pythonu

Nastavení Pythonu
Nastavení Pythonu

Po stažení si nainstalujte Python 3. Nezapomeňte zaškrtnout možnost vytvořit proměnnou „PATH“.

Pomocí pip musíte nainstalovat další dva balíčky. Chcete-li to provést, stiskněte klávesu „Windows“, zadejte „cmd“a stiskněte „Enter“. Do příkazového řádku zadejte následující příkazy:

  • pip install serial
  • piip install pyserial
  • pip install tkinter

Jak vidíte, potřebuji moduly sériové i pyserial, což s největší pravděpodobností není nejúčinnější, protože pyserial by měl nahradit serial. Přesto to funguje a já se teprve začínám učit;).

Otevřete Python-Script v IDE a spusťte jej, nebo jej spusťte přímo z terminálu.

V rozbalovací nabídce si můžete vybrat ze dvou režimů „Go Straight“a „Ping Pong“:

  • Jděte rovně: Do prvního sloupce zadejte polohu servo v mikrosekundách a stisknutím tlačítka „Start“se servo přesune do určené polohy.
  • Ping Pong: Zadejte dolní hranici a horní hranici ve druhém a třetím sloupci. To je spodní a horní poloha, mezi kterými se servo vrátí zpět. Ve sloupci „Ping Pong Time“můžete zadat čas v milisekundách, po který bude servo čekat, až dosáhne horní nebo dolní polohy. Stiskněte „Start“a servo se začne pohybovat tam a zpět, stiskněte „Stop“a servo se zastaví.

Krok 5: Kde se kouzlo děje

V neposlední řadě chci poukázat na některé detaily v kódu pro ty, kteří se chtějí dostat do trochu sériové komunikace mezi Pythonem a Arduinem.

Co se nyní stane v programu Python?

Program nejprve zkontroluje, co je připojeno k portům COM v tomto řádku, a uloží jej do seznamu:

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

Poté prochází seznamem, dokud nenajde nechvalně známý čip CH340, uloží jej a poté naváže sériové připojení po smyčce for-loop. Pamatujte, že smyčka pro se přeruší, jakmile je nalezen první CH340.

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

Sériové připojení je navázáno s portem COM s přenosovou rychlostí 57 600.

A co dělá kód Arduino? Protože Arduino má pouze jeden COM port, sériové připojení je pouze jeden řádek:

Serial.begin (57600);

Nyní můžeme ke komunikaci použít oba porty. V tomto případě pouze zprávy z Pythonu do Arduina. Zprávy jsou zde odesílány z Pythonu. Sériové připojení standardně přenáší bajty. To je také nejrychlejší způsob odesílání dat, a pokud vím, také stále velmi rozšířený. Inty pro počet serv (takže Arduino ví, které servo se má přesunout) a pozice v mikrosekundách se změní na bajt.

Command = struct.pack ('> B', self. Place) # Proměnná int "self. Place" se změní na bajt

self. Ser.write (Command) # Zápis bajtu na Serial-Port Command = int (self. ServoPos.get ()) // 10 # Čtení vstupu z pole a zapnutí int Command = struct.pack (' > B ', Command) # Otočení int v bytovém self. Ser.write (Command) # Zápis bajtu na sériový port

Také analýza dat vyžaduje čas (například interpretovat čtyři bajty „1“, „2“, „3“a „0“jako int 1230, nikoli jako čtyři různé znaky) a je lepší to udělat ne na Arduinu.

Na straně Arduino jsou odeslané informace vyzvednuty následujícím způsobem:

if (Serial.available ()> 1) {// Pokud jsou k dispozici sériová data, pak je zadána smyčka c = Serial.read (); // První bajt (počet serv) je uložen do proměnné Micros = Serial.read (); // Zde se ukládá poloha serva Micros = Micros * 10; }

Doporučuje: