Mundarija:

Python-GUI va Arduino bilan xizmat ko'rsatuvchi karta: 5 qadam
Python-GUI va Arduino bilan xizmat ko'rsatuvchi karta: 5 qadam

Video: Python-GUI va Arduino bilan xizmat ko'rsatuvchi karta: 5 qadam

Video: Python-GUI va Arduino bilan xizmat ko'rsatuvchi karta: 5 qadam
Video: PYTHON 🐍 DASTURLASH TILIDA OVOZLI DASTUR | GAPIRADIGAN DASTUR | JARVIS 2024, Noyabr
Anonim
Python-GUI va Arduino bilan xizmat ko'rsatuvchi karta
Python-GUI va Arduino bilan xizmat ko'rsatuvchi karta

Samolyotlarning prototipini yasash yoki qurishda siz tez -tez muammoga duch kelasiz, siz servo harakatini tekshirishingiz yoki servolarni o'rta holatiga qo'yishingiz kerak.

Agar siz butun RC-tizimni yoki testni tuzishni xohlamasangiz, servoni qanchalik uzoqqa surishingiz yoki o'rtadagi pozitsiyani qaerga qo'yishingiz mumkin, demak, bu taxta siz uchun! Bu sizga servolarni belgilangan joylarga ko'chirishga yoki orqaga va orqaga sayohat qilishga imkon beradi.

Bu ajablanarli darajada yaxshi ishlaydi, hatto 6 ta servo bilan ham, bir pozitsiyadan ikkinchisiga poygada.

Bundan tashqari, Python-GUI va Arduino o'rtasidagi Serial yordamida aloqa haqida bilish yaxshi loyihadir.

1 -qadam: Sizga nima kerak …

Ushbu loyiha uchun sizga quyidagilar kerak bo'ladi:

Uskuna

  • Arduino nano kabel bilan. Men klondan foydalandim va Python kodi aslida CH340-klonli chipni kutadi
  • Prototip taxtasi. 7x5 sm etarli
  • Ba'zi 2, 54 mm sarlavhalar va pinlar
  • 1-6 servo
  • Servo uchun quvvat manbai (men 4 ta batareyali akkumulyatordan foydalanardim)

Dasturiy ta'minot

  • Python 3:
  • CH340 chiplari uchun USB drayveri: CH340 drayverlari uchun haydovchilar uchun google
  • Arduino IDE:

2 -qadam: taxtani lehimlash

Kengashni lehimlash
Kengashni lehimlash

Lehimlash, rasmdagi Fritzingga ko'ra, to'g'ridan -to'g'ri oldinga siljiydi. Servolarni 3-pinli qatorlarga osongina ulashingiz mumkinligiga ishonch hosil qiling.

  • 3-qatorli qatorlar Arduino nanosining 3, 5, 6, 9, 10 va 11 raqamli pinlariga biriktirilgan.
  • Qizil sim Arduino 5V-piniga ulangan
  • Qora sim Arduino GND-piniga ulangan
  • 3-pinli qatorlar ostidagi pinlar odatiy RC-qabul qilgich quvvat manbasini ulash uchun mo'ljallangan, siz xohlaganingizcha ulagichlarni qo'shishingiz mumkin, masalan, vintli terminallar, XT-ulagichlari, JST yoki… yoki…

Shaxsan menga Arduino -ni joylashtirish uchun ayol boshli qatorlar yoqadi, lekin bu sizga bog'liq.

Shuni esda tutingki, qisqa tutashgan ayol sarlavhalar o'tish moslamasi bo'lib, sinov uchun Arduino 5V manbasidan foydalangan holda servo etkazib berishga imkon beradi. Agar siz uni haddan tashqari zo'riqtirsangiz, Arduino qayta tiklanadi va kerakli tezlikni yo'qotadi. Boshqa quvvat manbaiga ulanishdan oldin ularni olib tashlash kerak.

3 -qadam: Arduino -ni sozlash

Arduino IDE -ni o'rnating va biriktirilgan eskiz bilan Arduino nano -ni yoqing.

4 -qadam: Python -ni sozlash

Python -ni sozlash
Python -ni sozlash

Python 3 -ni yuklab olingandan so'ng uni o'rnating. "PATH" o'zgaruvchisini yaratish variantini tekshirganingizga ishonch hosil qiling.

Pip yordamida yana ikkita paketni o'rnatishingiz kerak. Buning uchun "Windows" tugmachasini bosing, "cmd" kiriting va "Enter" tugmasini bosing. Buyruq satriga quyidagi buyruqlarni kiriting:

  • pip ketma -ket o'rnatish
  • piip -ni o'rnatish
  • pip tkinter -ni o'rnating

Ko'rib turganingizdek, menga ketma -ket modullar ham kerak, bu eng samarali emas, chunki pyserial ketma -ket o'rnini bosishi kerak. Shunga qaramay, u ishlaydi va men endi o'rganishni boshlayman;).

Python-skriptni IDE-da oching yoki ishga tushirmang yoki to'g'ridan-to'g'ri terminaldan ishga tushiring.

Ochiladigan menyuda siz ikkita rejimdan birini tanlashingiz mumkin: "To'g'ridan-to'g'ri o'tish" va "stol tennisi":

  • To'g'ridan-to'g'ri o'ting: birinchi ustunga mikrosaniyalarda Servo pozitsiyasini kiriting va servo belgilangan joyga o'tishi uchun "Ishga tushirish" tugmasini bosing.
  • Ping Pong: Ikkinchi va uchinchi ustunga pastki chegarani va yuqori chegarani kiriting. Bu pastki va yuqori pozitsiya, ular orasida servo orqaga va orqaga o'tadi. "Ping -Pong vaqti" ustunida servo yuqori yoki pastki holatga kelganda kutib turadigan vaqtni millisekundlarda ko'rsatishingiz mumkin. "Ishga tushirish" tugmasini bosing va servo oldinga va orqaga siljiy boshlaydi, "To'xtatish" tugmasini bosing va servo to'xtaydi.

5 -qadam: Sehr qaerda

Oxir -oqibat, men Python va Arduino o'rtasida ketma -ket aloqa o'rnatmoqchi bo'lganlar uchun kodning ba'zi tafsilotlarini ko'rsatmoqchiman.

Endi Python dasturida nima bo'ladi?

Birinchidan, dastur ushbu satrda COM-portlarga biriktirilgan narsani tekshiradi va ro'yxatga saqlaydi:

self. COMPortsList = ro'yxat (serial.tools.list_ports.comports ())

Keyin u taniqli CH340-chipini topguncha ro'yxatni aylanib o'tib, uni saqlaydi va keyin ketma-ket ulanish o'rnatiladi. E'tibor bering, for-loop birinchi CH340 topilishi bilan uziladi.

for in in. COMPortsList: if "CH340" in p [1]: # Arduino Clone self qidiryapsiz. COMPort = p [0] boshqa tanaffus: pass. Ser = serial. Serial (self. COMPort, 57600)

Ketma-ket ulanish COM-porti bilan, 57600 bod tezligi bilan o'rnatiladi.

Va Arduino kodi nima qiladi? Xo'sh, Arduino-da faqat bitta COM-port borligi sababli, ketma-ket ulanish faqat bitta chiziqdan iborat:

Serial.begin (57600);

Endi biz muloqot qilish uchun ikkala portdan ham foydalanishimiz mumkin. Bunday holda, faqat Python -dan Arduino -ga xabarlar. Xabarlar bu erga Python -dan yuboriladi. Ketma -ket ulanish standart sifatida baytlarni uzatadi. Bu ma'lumot yuborishning eng tezkor usuli va men bilganimdek, hali ham keng tarqalgan. Shunday qilib, servo sonining intsi (shuning uchun Arduino qaysi servo harakatlanishini biladi) va mikrosaniyadagi pozitsiya baytga aylanadi.

Buyruq = struct.pack ('> B', self. Place) # "self. Place" int o'zgaruvchisi baytga aylanadi.

self. Ser.write (Buyruq) # Baytni Serial-Port buyrug'iga yozish = int (self. ServoPos.get ()) // 10 # Kirishni maydondan o'qish va int Command = struct.pack (' > B ', Buyruq) # intni baytda aylantirish. Ser.write (Buyruq) # Seriyani portga bayt yozish

Shuningdek, ma'lumotlarni tahlil qilish vaqt talab etadi (masalan, to'rt xil bayt "1", "2", "3" va "0" ni to'rt xil belgilar sifatida emas, balki int 1230 sifatida talqin qilish) va buni Arduino -da qilmagan ma'qul.

Arduino tomonida yuborilgan ma'lumotlar quyidagicha qabul qilinadi:

if (Serial.available ()> 1) {// Agar ketma -ket ma'lumotlar mavjud bo'lsa, u holda tsikl kiritiladi c = Serial.read (); // Birinchi bayt (servo soni) Micros = Serial.read () o'zgaruvchisiga saqlanadi; // Servo pozitsiyasi bu erda saqlanadi Micros = Micros * 10; }

Tavsiya: