Mục lục:

Servodriver-Board Với Python-GUI và Arduino: 5 bước
Servodriver-Board Với Python-GUI và Arduino: 5 bước

Video: Servodriver-Board Với Python-GUI và Arduino: 5 bước

Video: Servodriver-Board Với Python-GUI và Arduino: 5 bước
Video: [PYTHON - ARDUINO]BÀI 5: ĐIỀU KHIỂN ĐỘNG CƠ SERVO BẰNG ARDUINO VÀ PYTHON 2024, Tháng mười một
Anonim
Servodriver-Board Với Python-GUI và Arduino
Servodriver-Board Với Python-GUI và Arduino

Khi thực hiện tạo mẫu hoặc chế tạo máy bay mô hình, bạn thường gặp vấn đề, đó là bạn phải kiểm tra hành trình của servo hoặc đặt servo ở vị trí giữa.

Trong trường hợp bạn không muốn xây dựng toàn bộ hệ thống RC của mình hoặc thử nghiệm, bạn có thể đẩy servo đi bao xa hoặc vị trí giữa ở đâu, thì bảng này là dành cho bạn! Nó cho phép bạn di chuyển servo đến các vị trí được chỉ định hoặc chúng ta hãy di chuyển qua lại.

Nó hoạt động tốt một cách đáng ngạc nhiên, ngay cả với 6 servo chạy đua từ vị trí này sang vị trí khác trong vòng lặp.

Ngoài ra, đây là một dự án tuyệt vời để tìm hiểu về giao tiếp giữa Python-GUI và Arduino bằng cách sử dụng Serial.

Bước 1: Những gì bạn cần…

Đối với dự án này, bạn sẽ cần những thứ sau:

Phần cứng

  • Arduino nano với cáp. Tôi đã sử dụng một bản sao và mã Python thực sự mong đợi một chip CH340 của một bản sao
  • Một bảng tạo mẫu. 7x5cm là đủ
  • Một số tiêu đề và chân 2, 54mm
  • 1-6 servo
  • Nguồn cung cấp cho Servos (Tôi đã sử dụng một bộ pin có 4 pin)

Phần mềm

  • Python 3:
  • Trình điều khiển USB cho chip CH340: Chỉ cần google để tìm trình điều khiển cho trình điều khiển CH340
  • Arduino IDE:

Bước 2: Hàn bảng

Hàn bảng
Hàn bảng

Quá trình hàn thực sự thẳng về phía trước theo Fritzing trên hình. Chỉ cần đảm bảo rằng bạn có thể dễ dàng kết nối các servo với các hàng 3 chân.

  • Các hàng 3 chân được gắn vào chân kỹ thuật số 3, 5, 6, 9, 10 và 11 của Arduino nano.
  • Dây màu đỏ được gắn vào chân 5V của Arduino
  • Dây màu đen được kết nối với chân GND của Arduino
  • Cặp chân bên dưới hàng 3 chân dùng để gắn nguồn cấp điện cho bộ thu RC điển hình, bạn có thể thêm các đầu nối tùy thích, chẳng hạn như thiết bị đầu cuối vặn vít, Đầu nối XT, JST hoặc… hoặc…

Cá nhân tôi thích hàng tiêu đề nữ để đặt Arduino vào, nhưng điều đó tùy thuộc vào bạn.

Xin lưu ý rằng các tiêu đề cái bị nối tắt là một jumper, cho phép bạn cung cấp servo bằng cách sử dụng nguồn 5V của Arduino cho mục đích thử nghiệm. Nếu bạn làm căng nó quá nhiều, Arduino sẽ thiết lập lại và mất nhịp độ phù hợp. PHẢI tháo chúng trước khi gắn nguồn điện khác.

Bước 3: Thiết lập Arduino

Cài đặt Arduino IDE và flash Arduino nano với bản phác thảo đính kèm.

Bước 4: Thiết lập Python

Thiết lập Python
Thiết lập Python

Cài đặt Python 3 sau khi tải xuống. Đảm bảo chọn tùy chọn để tạo biến "PATH".

Bạn cần cài đặt thêm hai gói bằng pip. Để làm điều đó, hãy nhấn phím "Windows", gõ "cmd" và nhấn "enter". Trong dấu nhắc lệnh, nhập các lệnh sau:

  • pip cài đặt nối tiếp
  • piip cài đặt pyserial
  • pip cài đặt tkinter

Như bạn có thể thấy, tôi cần nối tiếp mô-đun cũng như nối tiếp, điều này rất có thể không hiệu quả nhất, vì kim nối tiếp nên thay thế nối tiếp. Tuy nhiên, nó hoạt động và tôi chỉ mới bắt đầu tìm hiểu;).

Mở Python-Script trong IDE và chạy nó hoặc chạy nó trực tiếp từ thiết bị đầu cuối.

Trong menu thả xuống, bạn có thể chọn giữa hai chế độ, "Đi thẳng" và "Ping Pong":

  • Đi thẳng: Nhập Servo-Position tính bằng micro giây trong cột đầu tiên và nhấn "Bắt đầu" để làm cho servo di chuyển đến vị trí được chỉ định.
  • Ping Pong: Nhập ranh giới dưới và ranh giới trên vào cột thứ hai và thứ ba. Đó là vị trí dưới và trên, giữa đó servo sẽ quay đi quay lại. Trong cột "Thời gian Ping Pong", bạn có thể chỉ định thời gian tính bằng mili giây, mà servo sẽ đợi khi nó đạt đến vị trí trên hoặc dưới. Nhấn "Bắt đầu" và servo sẽ bắt đầu di chuyển qua lại, nhấn "Dừng" và servo sẽ dừng lại.

Bước 5: Nơi điều kỳ diệu xảy ra

Cuối cùng nhưng không kém phần quan trọng, tôi muốn chỉ ra một số chi tiết trong mã cho những người muốn tìm hiểu một chút về giao tiếp nối tiếp giữa Python và Arduino.

Bây giờ, điều gì xảy ra trong chương trình Python?

Trước hết, chương trình kiểm tra xem những gì được gắn vào các cổng COM trong dòng này và lưu nó vào danh sách:

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

Sau đó, nó lặp lại danh sách cho đến khi tìm thấy chip CH340 khét tiếng, lưu nó và sau đó thiết lập kết nối nối tiếp sau vòng lặp for. Lưu ý rằng vòng lặp sẽ phá vỡ ngay khi tìm thấy CH340 đầu tiên.

for p in self. COMPortsList: if "CH340" in p [1]: # Tìm kiếm bản sao Arduino self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

Kết nối nối tiếp được thiết lập với cổng COM có tốc độ truyền là 57600.

Và mã Arduino làm gì? Chà, vì Arduino chỉ có một Cổng COM nên kết nối nối tiếp chỉ có một dòng:

Serial.begin (57600);

Bây giờ, chúng ta có thể sử dụng cả hai cổng để giao tiếp. Trong trường hợp này, chỉ các thông báo từ Python đến Arduino. Các tin nhắn được gửi đến đây từ Python. Kết nối nối tiếp truyền các byte như một mặc định. Đó cũng là cách gửi dữ liệu nhanh nhất và theo như tôi biết thì nó vẫn còn khá phổ biến. Vì vậy, các int cho số servo (để Arduino biết servo nào sẽ di chuyển) và vị trí tính bằng micro giây được chuyển thành một byte.

Command = struct.pack ('> B', self. Place) # Biến int "self. Place" được biến thành byte

self. Ser.write (Command) # Viết byte trên Serial-Port Command = int (self. ServoPos.get ()) // 10 # Đọc Input từ trường và nhập int Command = struct.pack (' > B ', Command) # Tự biến int trong một byte. Ser.write (Command) # Ghi byte trên Serial-Port

Ngoài ra, việc phân tích dữ liệu cũng cần thời gian (ví dụ: diễn giải bốn byte "1", "2", "3" và "0" dưới dạng int 1230, không phải là bốn ký tự khác nhau) và tốt hơn là không nên làm điều đó trên Arduino.

Về phía Arduino, thông tin đã gửi được chọn như sau:

if (Serial.available ()> 1) {// Nếu dữ liệu nối tiếp có sẵn, thì vòng lặp được nhập c = Serial.read (); // Byte đầu tiên (số servo) được lưu vào một biến Micros = Serial.read (); // Vị trí của servo được lưu ở đây Micros = Micros * 10; }

Đề xuất: