İçindekiler:

Python-GUI ve Arduino ile Servo Sürücü Kartı: 5 Adım
Python-GUI ve Arduino ile Servo Sürücü Kartı: 5 Adım

Video: Python-GUI ve Arduino ile Servo Sürücü Kartı: 5 Adım

Video: Python-GUI ve Arduino ile Servo Sürücü Kartı: 5 Adım
Video: ChatGPT with Arduino Nano #arduino #chatgpt #technology #openAI #electronic 2024, Kasım
Anonim
Python-GUI ve Arduino ile Servo Sürücü Kartı
Python-GUI ve Arduino ile Servo Sürücü Kartı

Prototipleme yaparken veya model uçaklar inşa ederken, sıklıkla servo hareketini kontrol etmeniz veya servoları orta konuma ayarlamanız gereken bir sorunla karşılaşırsınız.

Tüm RC sisteminizi oluşturmak veya test etmek istemiyorsanız, servoyu ne kadar ileri itebileceğinizi veya orta konumun nerede olduğunu bilmiyorsanız, bu kart tam size göre! Servoyu belirtilen pozisyonlara hareket ettirmenizi veya ileri geri hareket etmenizi sağlar.

Döngüde bir konumdan diğerine yarışan 6 servo ile bile şaşırtıcı derecede iyi çalışıyor.

Ayrıca, Seri kullanarak Python-GUI ve Arduino arasındaki iletişimi öğrenmek için güzel bir proje.

Adım 1: İhtiyacınız Olan Şey…

Bu proje için aşağıdakilere ihtiyacınız olacak:

Donanım

  • Kablolu Arduino nano. Bir klon kullandım ve Python kodu aslında bir klonun CH340 yongasını bekliyor
  • Bir prototipleme tahtası. 7x5cm yeterli
  • Bazı 2, 54 mm başlık ve pimler
  • 1-6 servo
  • Servolar için güç kaynağı (4 pilli bir pil takımı kullandım)

Yazılım

  • Python 3:
  • CH340 yongaları için bir USB Sürücüsü: CH340 sürücüleri için sürücüler için google'a bakın
  • Arduino IDE:

Adım 2: Kartı Lehimleme

Kurulu Lehimleme
Kurulu Lehimleme

Lehimleme, resimdeki Fritzing'e göre aslında dümdüz. Sadece servoları 3 pimli sıralara kolayca bağlayabildiğinizden emin olun.

  • 3 pinli sıralar, Arduino nano'nun dijital pin 3, 5, 6, 9, 10 ve 11'e eklenir.
  • Kırmızı kablo Arduino'nun 5V pinine bağlanır
  • Siyah kablo Arduino'nun GND pinine bağlanır
  • 3 pimli sıraların altındaki pim çifti, tipik bir RC-alıcı güç kaynağını takmak içindir, vidalama terminalleri, XT-Konnektörler, JST veya… veya… gibi konektörleri istediğiniz gibi ekleyebilirsiniz.

Şahsen, Arduino'yu yerleştirmek için kadın başlıklarını severim, ama bu size kalmış.

Kısa devre dişi başlıkların, test amacıyla Arduino'nun 5V kaynağını kullanarak servo beslemenize izin veren bir jumper olduğunu lütfen unutmayın. Çok fazla zorlarsanız, Arduino sıfırlanacak ve doğru hızı kaybedecektir. Başka bir güç kaynağı bağlamadan önce bunlar ÇIKARILMALIDIR.

Adım 3: Arduino'yu Ayarlama

Arduino IDE'yi kurun ve ekli çizimle Arduino nano'yu flaşlayın.

Adım 4: Python'u Ayarlama

Python'u Kurma
Python'u Kurma

İndirdikten sonra Python 3'ü kurun. "YOL" değişkeni oluşturma seçeneğini işaretlediğinizden emin olun.

Pip kullanarak iki paket daha kurmanız gerekiyor. Bunun için "Windows" tuşuna basın, "cmd" yazın ve "enter" tuşuna basın. Komut isteminde aşağıdaki komutları yazın:

  • pip kurulum dizisi
  • piip kurulum pyserial
  • pip kurulum tkinter

Gördüğünüz gibi, pyserial'ın serinin yerini alması gerektiğinden, büyük olasılıkla en verimli olmayan pyserial'in yanı sıra seri modüllere de ihtiyacım var. Yine de işe yarıyor ve ben yeni öğrenmeye başlıyorum;).

Python-Script'i IDE'de açın ve çalıştırın veya doğrudan terminalden çalıştırın.

Açılır menüde, "Düz Git" ve "Ping Pong" olmak üzere iki mod arasından seçim yapabilirsiniz:

  • Düz Git: İlk sütunda mikrosaniye cinsinden bir Servo-Pozisyonu girin ve servonun belirtilen konuma hareket etmesini sağlamak için "Başlat"a basın.
  • Ping Pong: İkinci ve üçüncü sütuna bir alt sınır ve bir üst sınır girin. Bu, servonun ileri geri gideceği alt ve üst konumdur. "Ping Pong Süresi" sütununda, servonun üst veya alt konuma ulaştığında bekleyeceği milisaniye cinsinden bir süre belirleyebilirsiniz. "Başlat" a basın ve servo ileri geri hareket etmeye başlayacak, "Durdur" a basın ve servo duracaktır.

Adım 5: Büyünün Olduğu Yer

Son olarak, Python ve Arduino arasında biraz seri iletişim kurmak isteyenler için koddaki bazı ayrıntılara dikkat çekmek istiyorum.

Şimdi, Python programında ne oluyor?

Her şeyden önce, program bu satırdaki COM bağlantı noktalarına neyin bağlı olduğunu kontrol eder ve bir listeye kaydeder:

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

Ardından, kötü şöhretli bir CH340 yongası bulana kadar listede dolaşır, onu kaydeder ve for döngüsünden sonra bir seri bağlantı kurar. İlk CH340 bulunur bulunmaz for döngüsünün kırıldığını unutmayın.

p için self. COMPortsList: p[1]'de "CH340" ise: # Arduino Klonu arıyorsunuz self. COMPort = p[0] break else: pass self. Ser = serial. Serial(self. COMPort, 57600)

Seri bağlantı, 57600 baud hızına sahip COM-port ile kurulur.

Arduino kodu ne işe yarar? Arduino'nun yalnızca bir COM-Port'u olduğundan, seri bağlantı yalnızca bir satırdır:

Seri.başla(57600);

Artık her iki portu da iletişim kurmak için kullanabiliriz. Bu durumda, yalnızca Python'dan Arduino'ya mesajlar. Mesajlar buraya Python'dan gönderilir. Seri bağlantı varsayılan olarak bayt iletir. Bu aynı zamanda veri göndermenin en hızlı yolu ve bildiğim kadarıyla hala oldukça yaygın. Böylece servo sayısı (böylece Arduino hangi servonun hareket edeceğini bilir) ve mikrosaniye cinsinden konum bir bayta dönüştürülür.

Command = struct.pack('>B', self. Place) # "self. Place" int değişkeni bir bayta dönüştürülür

self. Ser.write(Command) # Seri Bağlantı Noktasına bayt yazma Komut = int(self. ServoPos.get())//10 # Girdiyi alandan okuma ve çevirme int Komut = struct.pack(' >B', Command) # Int'yi bir bayt self. Ser.write(Command) içinde çevirmek # Byte'ı Seri-Port'a yazmak

Ayrıca, verilerin ayrıştırılması zaman alır (örneğin, dört bayt "1", "2", "3" ve "0" ın int 1230 olarak yorumlanması, dört farklı karakter olarak değil) ve bunu Arduino'da yapmamak daha iyidir.

Arduino tarafında, gönderilen bilgiler aşağıdaki gibi alınır:

if(Serial.available()>1){ // Seri veri mevcutsa döngü girilir c = Serial.read(); // İlk bayt (servo sayısı) bir değişkene kaydedilir Micros = Serial.read(); // Servonun konumu buraya kaydedilir Micros = Micros * 10; }

Önerilen: