Мазмуну:

Python-GUI жана Arduino менен Servodriver-Board: 5 кадам
Python-GUI жана Arduino менен Servodriver-Board: 5 кадам

Video: Python-GUI жана Arduino менен Servodriver-Board: 5 кадам

Video: Python-GUI жана Arduino менен Servodriver-Board: 5 кадам
Video: 12V Bluetooth Relay to control AC or DC load using mobile Phone 2024, Ноябрь
Anonim
Python-GUI жана Arduino менен Servodriver-Board
Python-GUI жана Arduino менен Servodriver-Board

Прототиптештирүүдө же моделдик учактарды жасоодо, көбүнчө көйгөйгө туш болосуз, сиз servo саякатын текшерип же servosту орто абалга коюңуз.

Эгерде сиз RC-системаңызды же тестти бүткөрүүнү каалабасаңыз, сервону канчалык алыс түртө аласыз же орто позиция кайда, анда бул такта сиз үчүн! Бул сервону белгиленген кызматтарга жылдырууга же артка жана артка саякат кылууга мүмкүнчүлүк берет.

Бул таң калыштуу түрдө жакшы иштейт, ал тургай, бир позициядан экинчисине жарышып жүргөн 6 сервос менен.

Ошондой эле, Python-GUI менен Arduino ортосундагы Serialди колдонуу менен байланышуу жөнүндө билүү жакшы долбоор.

1 -кадам: Сизге эмне керек…

Бул долбоор үчүн сизге төмөнкүлөр керек болот:

Аппараттык

  • Arduino нано кабели менен. Мен клонду колдондум жана Python коду чындыгында клондун CH340-чипин күтөт
  • Прототип тактасы. 7х5 см жетиштүү
  • Кээ бир 2, 54мм баш жана казык
  • 1-6 сервос
  • Серво үчүн электр менен камсыздоо (мен 4 батарейкасы бар баттерпак колдондум)

Программалык камсыздоо

  • Python 3:
  • CH340 чиптери үчүн USB-драйвер: CH340 драйверлери үчүн драйверлер үчүн жөн гана Google
  • Arduino IDE:

2 -кадам: Тактага ширетүү

Тактага ширетүү
Тактага ширетүү

Сүрөттөгү Фритзингге ылайык, ширетүү чындыгында түз алдыга жылат. Серволорду 3-пин-катарга оңой эле туташтыра аларыңызды текшериңиз.

  • 3-пин-саптар Arduino наносунун 3, 5, 6, 9, 10 жана 11 санариптик пинине тиркелет.
  • Кызыл зым Arduino 5V-пин туташтырылган
  • Кара зым Arduino GND-пинине туташкан
  • 3-пин-катар астындагы төөнөгүчтөр кадимки RC-кабыл алуучу электр менен камсыздоону туташтырууга арналган, сиз каалагандай туташтыргычтарды кошо аласыз, мисалы, терминалдар, XT-Connectors, JST же… же…

Жеке мен, Arduino'ду киргизген аялдардын баш катарын жакшы көрөм, бирок бул сеники.

Көңүл буруңуз, кыска аялдын баш аттары секирүүчү, бул сервисти Arduino 5V булагын тестирлөө максатында жеткирүүгө мүмкүндүк берет. Эгерде сиз аны өтө эле чыңдасаңыз, Arduino баштапкы абалга келет жана ылдамдыгын жоготот. Башка электр менен камсыздоону туташтыруудан мурун, аларды алып салуу КЕРЕК.

3 -кадам: Arduino орнотуу

Arduino IDE орнотуп, тиркелген эскиз менен Arduino наносун жаркылдатыңыз.

4 -кадам: Python орнотуу

Python орнотуу
Python орнотуу

Жүктөп алгандан кийин Python 3 орнотуңуз. "ЖОЛ" өзгөрмөсүн түзүү үчүн параметрди текшерүүнү унутпаңыз.

Пипти колдонуу менен дагы эки пакетти орнотушуңуз керек. Бул үчүн "Windows" баскычын басып, "cmd" терип, "кирүү" баскычын басыңыз. Буйрук сабында төмөнкү буйруктарды териңиз:

  • pip орнотуу сериялык
  • piip pyserial орнотуу
  • tkinter орнотуу

Көрүнүп тургандай, мага сериялуу модулдар керек, жана бул эң натыйжалуу эмес, анткени pyserial серияны алмаштырышы керек. Ошентсе да ал иштейт жана мен жаңы үйрөнө баштадым;).

Python-Scriptти IDEде ачыңыз жана аны иштетпеңиз же аны терминалдан түз иштетиңиз.

Ачылуучу менюда сиз эки режимдин бирин тандай аласыз, "Түз жүр" жана "Пинг-понг":

  • Түз барыңыз: Биринчи графага микросекунддарда Серво-позицияны киргизиңиз жана сервону көрсөтүлгөн позицияга жылдыруу үчүн "Старт" баскычын басыңыз.
  • Пинг -понг: Экинчи жана үчүнчү тилкеде төмөнкү чекти жана жогорку чекти киргизиңиз. Бул servo артка жана артка кете турган төмөнкү жана жогорку абал. "Пинг -понг убактысы" графасында сервис жогорку же төмөнкү абалга жеткенде күтө турган убактысын миллисекунд менен көрсөтсөңүз болот. "Старт" баскычын басыңыз жана серво ары -бери жыла баштайт, "Токто" баскычын басыңыз жана серво токтойт.

5 -кадам: Сыйкыр болгон жерде

Акыр -аягы, мен Python менен Arduino ортосунда бир аз сериялык байланышка кирүүнү каалагандар үчүн коддогу айрым деталдарды белгилегим келет.

Эми, Python программасында эмне болот?

Биринчиден, программа бул линиядагы COM-портторуна эмне тиркелгенин текшерет жана тизмеге сактайт:

self. COMPortsList = тизме (serial.tools.list_ports.comports ())

Андан кийин ал белгилүү CH340-чипин тапмайынча тизмеден өтөт, аны сактап калат жана фор-циклден кийин сериялык байланышты орнотот. Эскертүү, биринчи CH340 табылганда for-loop үзүлөт.

for in in. COMPortsList: if "CH340" in p [1]: # Arduino Clone self. COMPort = p [0] тыныгуу башка: pass self. Ser = serial. Serial (self. COMPort, 57600)

Сериялык байланыш COM порту менен 57600 бод ылдамдыгы менен түзүлөт.

Жана Arduino коду эмне кылат? Ооба, Arduinoдо бир гана COM-порт болгондуктан, сериялык туташуу бир гана линия:

Serial.begin (57600);

Эми биз байланыш үчүн эки портту колдоно алабыз. Бул учурда, Pythonдон Arduinoго келген билдирүүлөр гана. Билдирүүлөр бул жерге Pythonдон жөнөтүлөт. Сериялык туташуу байттарды демейки катары өткөрөт. Бул ошондой эле маалыматтарды жөнөтүүнүн эң ылдам жолу жана мен билгендей дагы эле кеңири таралган. Ошентип, servo санынын инттери (ошондуктан Arduino кайсы сервону жылдырууну билет) жана микросекунддардагы абал байтка айланат.

Command = struct.pack ('> B', self. Place) # "self. Place" int өзгөрмөсү байтка айланат

self. Ser.write (Command) # Байтты Serial-Port Commandга жазуу = int (self. ServoPos.get ()) // 10 # Талаадагы Кирүүнү окуу жана int Command = struct.pack (' > B ', Command) # Int byt in self. Ser.write (Command) # Серияны портко байтты жазуу

Ошондой эле, маалыматтарды талдоо убакытты талап кылат (мисалы, "1", "2", "3" жана "0" деген төрт байтты int 1230 катары чечмелөө, төрт башка символ катары эмес) жана муну Arduinoдо эмес, жакшы.

Arduino тарабында, жөнөтүлгөн маалымат төмөнкүчө алынат:

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

Сунушталууда: