Съдържание:

Серводривърска платка с Python-GUI и Arduino: 5 стъпки
Серводривърска платка с Python-GUI и Arduino: 5 стъпки

Видео: Серводривърска платка с Python-GUI и Arduino: 5 стъпки

Видео: Серводривърска платка с Python-GUI и Arduino: 5 стъпки
Видео: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Ноември
Anonim
Серводривърска платка с Python-GUI и Arduino
Серводривърска платка с Python-GUI и Arduino

Когато правите прототипи или изграждате модели самолети, често срещате проблема, че трябва да проверите пътуването на серво или да настроите сервомоторите в средна позиция.

В случай, че не искате да изградите цялата си RC система или тест, докъде можете да натиснете серво или къде е средната позиция, тогава тази платка е за вас! Тя ви позволява да премествате серво в определени позиции или да пътуваме напред -назад.

Работи изненадващо добре, дори с 6 сервомотора, които се движат от една позиция на друга в цикъла.

Също така, това е хубав проект за научаване на комуникацията между Python-GUI и Arduino с помощта на Serial.

Стъпка 1: Какво ви трябва …

За този проект ще ви трябва следното:

Хардуер

  • Arduino nano с кабел. Използвах клонинг и кодът на Python всъщност очаква CH340-чип на клонинг
  • Съвет за прототипи. 7x5 см са достатъчни
  • Някои 2, 54 мм заглавки и щифтове
  • 1-6 серво
  • Захранване за сервомоторите (използвах комплект батерии с 4 батерии)

Софтуер

  • Python 3:
  • USB драйвер за чипове CH340: Просто потърсете в Google драйвери за драйвери CH340
  • Arduino IDE:

Стъпка 2: Запояване на дъската

Запояване на дъската
Запояване на дъската

Запояването всъщност е право напред според Fritzing на снимката. Просто се уверете, че можете лесно да свържете сервомоторите към 3-пиновите редове.

  • 3-пиновите редове са прикрепени към цифров пин 3, 5, 6, 9, 10 и 11 на Arduino nano.
  • Червеният проводник е прикрепен към 5V пина на Arduino
  • Черният проводник е свързан към GND-щифта на Arduino
  • Двойката щифтове под 3-пиновите редове са предназначени за свързване на типично захранване на RC-приемник, можете да добавяте конектори, както желаете, като например завинтване на клеми, XT-конектори, JST или … или …

Лично аз харесвам редици женски заглавки, в които да поставя Arduino, но това зависи от вас.

Моля, обърнете внимание, че късите женски заглавки са джъмпер, който ви позволява да захранвате серво, използвайки 5V източника на Arduino за целите на тестването. Ако го натоварите твърде много, Arduino ще се нулира и ще загуби правилното темпо. ТРЯБВА да бъдат премахнати, преди да се прикачи друго захранване.

Стъпка 3: Настройка на Arduino

Инсталирайте Arduino IDE и флашнете Arduino nano с приложената скица.

Стъпка 4: Настройка на Python

Настройка на Python
Настройка на Python

Инсталирайте Python 3, след като го изтеглите. Не забравяйте да проверите опцията за създаване на "PATH" -променлива.

Трябва да инсталирате още два пакета с помощта на pip. За целта натиснете клавиша „Windows“, въведете „cmd“и натиснете „enter“. В командния ред въведете следните команди:

  • pip install serial
  • piip инсталирайте pyserial
  • pip инсталирайте tkinter

Както можете да видите, имам нужда от модулите сериен, както и pyserial, което най -вероятно не е най -ефективният, тъй като pyserial трябва да замени серийния. Въпреки това работи и тепърва започвам да уча;).

Отворете Python-Script в IDE и го стартирайте или го стартирайте направо от терминала.

В падащото меню можете да избирате между два режима „Go Straight“и „Ping Pong“:

  • Отидете направо: Въведете Servo-позиция за микросекунди в първата колона и натиснете "Старт", за да накарате серво да се премести в определената позиция.
  • Пинг -понг: Въведете долна граница и горна граница във втората и третата колона. Това са долната и горната позиция, между които сервото ще се върти напред -назад. В колоната "Време за пинг -понг" можете да зададете време в милисекунди, което сервото ще чака, когато достигне горната или долната позиция. Натиснете "Старт" и сервото ще започне да се движи напред -назад, натиснете "Стоп" и сервото ще спре.

Стъпка 5: Където се случва магията

Не на последно място, искам да посоча някои от детайлите в кода за тези, които искат да влязат в малко серийна комуникация между Python и Arduino.

Какво се случва в програмата Python?

На първо място, програмата проверява какво е прикрепено към COM-портовете в този ред и го записва в списък:

self. COMPortsList = списък (serial.tools.list_ports.comports ())

След това той преминава през списъка, докато намери прословут CH340-чип, записва го и след това установява серийна връзка след for-цикъла. Имайте предвид, че for-цикълът се прекъсва веднага щом бъде намерен първият CH340.

for p в self. COMPortsList: if "CH340" in p [1]: # Търся Arduino Clone self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

Последователната връзка е установена с COM-порта с скорост на предаване 57600.

И какво прави кодът Arduino? Е, тъй като Arduino има само един COM-порт, серийната връзка е само един ред:

Serial.begin (57600);

Сега можем да използваме и двата порта за комуникация. В този случай само съобщения от Python към Arduino. Съобщенията се изпращат тук от Python. Серийната връзка предава байтове по подразбиране. Това е и най -бързият начин за изпращане на данни и доколкото знам също все още доста разпространен. Така че ints за номера на серво (така че Arduino знае кое серво да се премести) и позицията в микросекунди се превръщат в байт.

Command = struct.pack ('> B', self. Place) # Int-променливата "self. Place" се превръща в байт

self. Ser.write (Command) # Записване на байта в командата Serial-Port = int (self. ServoPos.get ()) // 10 # Четене на входа от полето и включване на int Command = struct.pack (' > B ', Command) # Превръщане на int в байт self. Ser.write (Command) # Записване на байта на Serial-Port

Също така, анализирането на данни отнема време (например тълкуването на четири байта "1", "2", "3" и "0" като int 1230, а не като четири различни символа) и е по -добре да го направите не на Arduino.

От страна на Arduino изпратената информация се събира, както следва:

if (Serial.available ()> 1) {// Ако са налични серийни данни, тогава цикълът се въвежда c = Serial.read (); // Първият байт (брой серво) се записва в променлива Micros = Serial.read (); // Позицията на серво се запаметява тук Micros = Micros * 10; }

Препоръчано: