Trong hướng dẫn này, chúng tôi sẽ phát triển một mạch sử dụng cảm biến FLEX, Arduino Uno và động cơ Servo. Dự án này là một hệ thống điều khiển servo trong đó vị trí trục servo được xác định bằng độ uốn hoặc uốn cong hoặc độ lệch của cảm biến FLEX.
Đầu tiên chúng ta hãy nói một chút về động cơ servo. Động cơ Servo được sử dụng ở những nơi cần chuyển động hoặc vị trí trục chính xác. Chúng không được đề xuất cho các ứng dụng tốc độ cao. Chúng được đề xuất cho các ứng dụng tốc độ thấp, mô-men xoắn trung bình và vị trí chính xác. Những động cơ này được sử dụng trong các máy cánh tay robot, hệ thống điều khiển và điều khiển chuyến bay. Động cơ servo được sử dụng trong các hệ thống nhúng như máy bán hàng tự động, v.v.
Động cơ servo có sẵn ở các hình dạng và kích thước khác nhau. Một động cơ servo sẽ chủ yếu có dây, một dây dành cho điện áp dương, dây nối đất và dây cuối cùng dành cho cài đặt vị trí. Dây ĐỎ được kết nối với nguồn, dây Đen được nối với đất và dây VÀNG được kết nối với tín hiệu.
Động cơ servo là sự kết hợp của động cơ DC, hệ thống điều khiển vị trí, bánh răng. Vị trí của trục của động cơ DC được điều chỉnh bởi thiết bị điện tử điều khiển trong servo, dựa trên tỷ lệ làm việc của tín hiệu PWM ở chân SIGNAL.
Nói một cách đơn giản, thiết bị điện tử điều khiển điều chỉnh vị trí trục bằng cách điều khiển động cơ DC. Dữ liệu liên quan đến vị trí của trục được gửi qua chân SIGNAL. Dữ liệu vị trí tới điều khiển phải được gửi dưới dạng tín hiệu PWM thông qua chân Tín hiệu của động cơ servo.
Tần số của tín hiệu PWM (Điều chế độ rộng xung) có thể thay đổi tùy theo loại động cơ servo. Điều quan trọng ở đây là TỶ LỆ NHIỆM VỤ của tín hiệu PWM. Dựa trên NHIỆM VỤ NÀY, thiết bị điện tử điều khiển điều chỉnh trục. Để trục được di chuyển đến 9o đồng hồ, TURN ON RATION phải là 1 / 18.ie. 1 mili giây 'thời gian BẬT' và 17 mili giây 'thời gian TẮT' trong tín hiệu 18 ms.
Để trục được di chuyển đến đồng hồ 12o, thời gian BẬT của tín hiệu phải là 1,5ms và thời gian TẮT phải là 16,5ms. Tỷ lệ này được giải mã bởi hệ thống điều khiển trong servo và nó điều chỉnh vị trí dựa trên nó.
PWM này ở đây được tạo bằng cách sử dụng ARDUINO UNO. Vì vậy, bây giờ chúng ta biết rằng, chúng ta có thể điều khiển trục động cơ servo bằng cách thay đổi tỷ lệ nhiệm vụ của tín hiệu PWM do Arduino Uno tạo ra. UNO có một chức năng đặc biệt cho phép chúng tôi cung cấp vị trí của SERVO mà không làm ảnh hưởng đến tín hiệu PWM. Tuy nhiên, điều quan trọng là phải biết mối quan hệ khẩu phần PWM - vị trí servo. Chúng tôi sẽ nói thêm về nó trong phần mô tả.
Bây giờ hãy nói về CẢM BIẾN FLEX. Để giao tiếp cảm biến FLEX với ARDUINO UNO, chúng tôi sẽ sử dụng tính năng ADC (Chuyển đổi tương tự sang kỹ thuật số) 8 bit để thực hiện công việc. Cảm biến FLEX là một bộ chuyển đổi thay đổi điện trở của nó khi hình dạng của nó bị thay đổi. Cảm biến FLEX dài 2,2 inch hoặc bằng ngón tay. Nó được hiển thị trong hình.
Cảm biến Flex là một bộ chuyển đổi thay đổi điện trở của nó khi bề mặt tuyến tính bị uốn cong. Do đó có tên cảm biến flex. Nói một cách đơn giản, điện trở của đầu cực cảm biến tăng lên khi nó bị uốn cong. Điều này được hiển thị trong hình dưới đây.
Sự thay đổi về điện trở này không có tác dụng gì trừ khi chúng ta có thể đọc được chúng. Bộ điều khiển trong tầm tay chỉ có thể đọc các cơ hội về điện áp và không kém hơn, đối với điều này, chúng ta sẽ sử dụng mạch phân áp, với điều đó chúng ta có thể suy ra sự thay đổi điện trở khi thay đổi điện áp.
Bộ phân áp là một mạch điện trở và được thể hiện trong hình. Trong mạng điện trở này, chúng ta có một điện trở không đổi và điện trở khác. Như trong hình, R1 ở đây là điện trở không đổi và R2 là cảm biến FLEX hoạt động như một điện trở.
Điểm giữa của nhánh được lấy để đo. Với sự thay đổi của R2, chúng tôi có sự thay đổi ở Vout. Vì vậy, với điều này, chúng tôi có một điện áp thay đổi theo trọng lượng.
Bây giờ điều quan trọng cần lưu ý ở đây là, đầu vào được bộ điều khiển thực hiện để chuyển đổi ADC thấp nhất là 50µAmp. Hiệu ứng tải của bộ chia điện áp dựa trên điện trở này rất quan trọng vì dòng điện được rút ra từ Vout của bộ chia điện áp làm tăng tỷ lệ phần trăm lỗi tăng lên, bây giờ chúng ta không cần phải lo lắng về hiệu ứng tải.
CẢM BIẾN FLEX khi bị bẻ cong điện trở của nó sẽ thay đổi. Với đầu dò này được kết nối với mạch phân áp, chúng ta sẽ có điện áp thay đổi với FLEX trên đầu dò. Điện áp biến đổi này là FED đến một trong các kênh ADC, chúng tôi sẽ có một giá trị kỹ thuật số liên quan đến FLEX.
Chúng tôi sẽ khớp giá trị kỹ thuật số này với vị trí servo, với điều này chúng tôi sẽ có điều khiển servo bằng flex.
Các thành phần
Phần cứng: Arduino Uno , Nguồn điện (5v), tụ 1000 uF, tụ 100nF (3 cái), điện trở 100KΩ, SERVO MOTOR (SG 90), điện trở 220Ω, cảm biến FLEX.
Phần mềm: Atmel studio 6.2 hoặc Aurdino hàng đêm.
Sơ đồ mạch và giải thích
Các sơ đồ mạch cho điều khiển động cơ servo bằng cảm biến FLEX được hiển thị ở bên dưới hình.
Điện áp trên cảm biến không hoàn toàn tuyến tính; nó sẽ là một ồn ào. Để lọc tạp âm, người ta đặt các tụ điện trên mỗi điện trở trong mạch chia như hình vẽ.
Ở đây chúng ta sẽ lấy điện áp được cung cấp bởi bộ chia (điện áp biểu thị tuyến tính trọng lượng) và cấp nó vào một trong các Kênh ADC của Arduino UNO. Chúng tôi sẽ sử dụng A0 cho việc này. Sau khi khởi tạo ADC, chúng tôi sẽ có giá trị kỹ thuật số đại diện cho cảm biến bị bẻ cong. Chúng tôi sẽ lấy giá trị này và khớp nó với vị trí servo.
Để điều này xảy ra, chúng tôi cần thiết lập một số hướng dẫn trong chương trình và chúng tôi sẽ nói về chúng chi tiết bên dưới.
ARDUINO có sáu kênh ADC, như trong hình. Trong đó, một hoặc tất cả chúng đều có thể được sử dụng làm đầu vào cho điện áp tương tự. UNO ADC có độ phân giải 10 bit (vì vậy các giá trị nguyên từ (0- (2 ^ 10) 1023)). Điều này có nghĩa là nó sẽ ánh xạ điện áp đầu vào từ 0 đến 5 vôn thành các giá trị nguyên từ 0 đến 1023. Vì vậy, với mọi (5/1024 = 4,9mV) trên mỗi đơn vị.
Ở đây chúng ta sẽ sử dụng A0 của UNO.
Chúng ta cần biết một vài điều.
|
Trước hết, các kênh UNO ADC có giá trị tham chiếu mặc định là 5V. Điều này có nghĩa là chúng tôi có thể cung cấp điện áp đầu vào tối đa là 5V để chuyển đổi ADC ở bất kỳ kênh đầu vào nào. Vì một số cảm biến cung cấp điện áp từ 0-2,5V, với tham chiếu 5V, chúng tôi nhận được độ chính xác thấp hơn, vì vậy chúng tôi có hướng dẫn cho phép chúng tôi thay đổi giá trị tham chiếu này. Vì vậy, để thay đổi giá trị tham chiếu mà chúng tôi có (“analogReference ();”) Bây giờ chúng tôi để nó như.
Theo mặc định, chúng tôi nhận được độ phân giải ADC tối đa của bo mạch là 10bits, độ phân giải này có thể được thay đổi bằng cách sử dụng lệnh (“analogReadResolution (bits);”). Thay đổi độ phân giải này có thể hữu ích cho một số trường hợp. Bây giờ chúng tôi để nó như.
Bây giờ nếu các điều kiện trên được đặt thành mặc định, chúng ta có thể đọc giá trị từ ADC của kênh '0' bằng cách gọi trực tiếp hàm "analogRead (pin);", ở đây "pin" đại diện cho chân mà chúng ta đã kết nối tín hiệu tương tự, trong trường hợp này là sẽ là "A0".
Giá trị từ ADC có thể được lấy thành một số nguyên là “int SENSORVALUE = analogRead (A0); ”, Bằng lệnh này, giá trị sau khi ADC được lưu trữ trong số nguyên“ SENSORVALUE ”.
Bây giờ hãy nói về SERVO, UNO có một tính năng cho phép chúng ta điều khiển vị trí của servo chỉ bằng cách đưa ra giá trị độ. Giả sử nếu chúng ta muốn servo ở mức 30, chúng ta có thể trực tiếp đại diện cho giá trị trong chương trình. Tệp tiêu đề SERVO xử lý tất cả các tính toán tỷ lệ nhiệm vụ trong nội bộ.
#include
Servo servo; servo.attach (3); servo.write (độ); |
Câu lệnh đầu tiên đại diện cho tệp tiêu đề để điều khiển SERVO MOTOR.
Câu lệnh thứ hai là đặt tên cho servo; chúng tôi để nó dưới dạng bản thân servo.
Câu lệnh thứ ba nêu rõ nơi kết nối chân tín hiệu servo; đây phải là chân PWM. Ở đây chúng tôi đang sử dụng mã PIN3.
Câu lệnh thứ tư đưa ra các lệnh để định vị động cơ servo và theo độ. Nếu nó được cho là 30, động cơ servo sẽ quay 30 độ.
Bây giờ sg90 có thể di chuyển từ 0-180 độ, chúng tôi có kết quả ADC 0-1024
Vì vậy, ADC xấp xỉ sáu lần VỊ TRÍ SERVO. Vì vậy, bằng cách chia kết quả ADC cho 6, chúng ta sẽ nhận được vị trí bàn tay SERVO gần đúng.
Với điều này, chúng ta sẽ có giá trị vị trí servo được cung cấp cho động cơ servo, giá trị này tương ứng với uốn hoặc uốn. Khi cảm biến flex này được gắn trên găng tay, chúng ta có thể điều khiển vị trí servo bằng chuyển động của tay.