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 Lực, Arduino Uno và động cơ servo. Nó sẽ là một hệ thống điều khiển servo trong đó vị trí trục servo được xác định bởi trọng lượng có trên cảm biến lực. Trước khi đi sâu hơn, chúng ta hãy nói về servo và các thành phần khác.
Độ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ũng được sử dụng trong một số máy in và máy fax.
Độ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.
Như thể hiện trong hình bên dưới, để 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' ở tín hiệu 18 mili giây.
Để 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 UNO tạo ra.
Bây giờ chúng ta hãy nói về cảm biến lực hoặc cảm biến trọng lượng.
Để giao tiếp cảm biến FORCE với ARDUINO UNO, chúng tôi sẽ sử dụng tính năng 8 bit ADC (Analog to Digital Conversion) trong arduno una.
Cảm biến FORCE là một bộ chuyển đổi thay đổi điện trở của nó khi có áp lực tác động lên bề mặt. Cảm biến FORCE có nhiều kích cỡ và hình dạng khác nhau.
Chúng tôi sẽ sử dụng một trong những phiên bản rẻ hơn vì chúng tôi không cần nhiều độ chính xác ở đây. FSR400 là một trong những cảm biến lực rẻ nhất trên thị trường. Hình ảnh của FSR400 được hiển thị trong hình dưới đây.
Bây giờ điều quan trọng cần lưu ý là FSR 400 rất nhạy theo chiều dài, lực hoặc trọng lượng phải được tập trung vào mê cung ở giữa mắt của cảm biến, như thể hiện trong hình.
Nếu tác dụng lực không đúng thời điểm, thiết bị có thể bị hỏng vĩnh viễn.
Một điều quan trọng khác cần biết rằng, cảm biến có thể điều khiển dòng điện ở phạm vi cao. Vì vậy, hãy ghi nhớ các dòng điện trong khi cài đặt. Ngoài ra, cảm biến có giới hạn về lực là 10Newtons. Vì vậy, chúng tôi có thể áp dụng chỉ 1Kg trọng lượng. Nếu đặt trọng lượng cao hơn 1Kg, cảm biến có thể hiển thị một số sai lệch. Nếu nó tăng hơn 3Kg. cảm biến có thể bị hỏng vĩnh viễn.
Như đã nói trước đó, cảm biến này được sử dụng để cảm nhận sự thay đổi của áp suất. Vì vậy, khi trọng lượng được đặt lên trên cảm biến FORCE, điện trở sẽ thay đổi đáng kể. Khả năng chống lại trọng lượng của FS400 được thể hiện trong biểu đồ dưới đây:
Như trong hình trên, điện trở giữa hai tiếp điểm của cảm biến giảm theo trọng lượng hoặc độ dẫn giữa hai tiếp điểm của cảm biến tăng lên.
Điện trở của một dây dẫn thuần cảm được cho bởi:
Ở đâu, p- Điện trở suất của dây dẫn
l = Chiều dài của dây dẫn
A = Diện tích của vật dẫn.
Bây giờ hãy xem xét một dây dẫn có điện trở “R”, nếu một số áp lực được đặt trên đầu của dây dẫn, diện tích trên dây dẫn giảm và chiều dài của dây dẫn tăng lên do áp suất. Vì vậy, theo công thức, điện trở của dây dẫn phải tăng lên, vì điện trở R tỷ lệ nghịch với diện tích và cũng tỷ lệ thuận với chiều dài l.
Vì vậy, với điều này đối với một dây dẫn dưới áp suất hoặc trọng lượng, điện trở của dây dẫn tăng lên. Nhưng sự thay đổi này là nhỏ so với sức đề kháng tổng thể. Để có một sự thay đổi đáng kể, nhiều dây dẫn được xếp chồng lên nhau.
Đây là những gì xảy ra bên trong Cảm biến lực được hiển thị trong hình trên. Khi nhìn kỹ, người ta có thể thấy nhiều đường bên trong cảm biến. Mỗi dòng này đại diện cho một dây dẫn. Độ nhạy của cảm biến nằm ở số dây dẫn.
Nhưng trong trường hợp này, điện trở sẽ giảm theo áp suất vì vật liệu được sử dụng ở đây không phải là chất dẫn điện thuần túy. FSR ở đây là các thiết bị có màng dày polyme (PTF) mạnh mẽ. Vì vậy, đây không phải là những thiết bị vật liệu dẫn điện thuần túy. Chúng được tạo thành từ một vật liệu, thể hiện sự giảm sức cản khi lực tác dụng lên bề mặt của cảm biến tăng lên.
Vật liệu này cho thấy các đặc tính như được thể hiện trong đồ thị của FSR.
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 đó 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 FORCE 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.
Bây giờ khi lực tác dụng lên CẢM BIẾN LỰC, điện áp ở đầu bộ chia sẽ thay đổi chân này khi được kết nối với kênh ADC của UNO, chúng ta sẽ nhận được một giá trị số khác với ADC của UNO, bất cứ khi nào lực trên cảm biến thay đổi.
Giá trị kỹ thuật số ADC này được khớp với tỷ lệ nhiệm vụ của tín hiệu PWM, vì vậy chúng tôi có điều khiển vị trí SERVO liên quan đến lực tác dụng lên cảm biến.
Các thành phần
Phần cứng: UNO, nguồn điện (5v), tụ 1000uF, tụ 100nF (3 cái), điện trở 100KΩ, SERVO MOTOR (SG 90), điện trở 220Ω, cảm biến lực FSR400.
Phần mềm: Atmel studio 6.2 hoặc aurdino hàng đêm.
Sơ đồ mạch và giải thích hoạt động
Các sơ đồ mạch cho điều khiển động cơ servo bằng cảm biến lực được thể hiện trong hình bên dưới.
Đ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 tiếng ồn, người ta đặt một tụ điện trên mỗi điện trở trong mạch phân chia như hình bên.
Ở đâ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. Sau khi chuyển đổi, chúng tôi sẽ lấy giá trị kỹ thuật số đó (đại diện cho trọng lượng) và liên hệ nó với giá trị PWM và cung cấp tín hiệu PWM này cho động cơ SERVO.
Vì vậy, với trọng lượng, chúng ta có giá trị PWM thay đổi tỷ lệ nhiệm vụ của nó tùy thuộc vào giá trị kỹ thuật số. Giá trị kỹ thuật số càng cao thì tỷ lệ nhiệm vụ của PWM càng cao. Vì vậy, với tín hiệu PWM tỷ lệ nhiệm vụ cao hơn, trục servo sẽ đạt được xa bên phải hoặc bên trái theo hình được cung cấp trong phần giới thiệu.
Nếu trọng lượng thấp hơn, chúng tôi sẽ có tỷ lệ nhiệm vụ PWM thấp hơn và theo hình giới thiệu, servo sẽ vươn ra xa bên phải.
Với điều này, chúng tôi có quyền kiểm soát vị trí SERVO bằng TRỌNG LƯỢNG hoặc LỰC LƯỢNG.
Để đ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 Arduino 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 ”.
PWM của UNO có thể đạt được ở bất kỳ chân nào được ký hiệu là “~” trên bảng mạch PCB. Có sáu kênh PWM trong UNO. Chúng tôi sẽ sử dụng mã PIN3 cho mục đích của mình.
analogWrite (3, VALUE); |
Từ điều kiện trên ta có thể lấy trực tiếp tín hiệu PWM tại chân tương ứng. Tham số đầu tiên trong ngoặc là để chọn số chân của tín hiệu PWM. Tham số thứ hai là để viết tỷ lệ nhiệm vụ.
Giá trị PWM của Arduino Uno có thể được thay đổi từ 0 đến 255. Với “0” là thấp nhất đến “255” là cao nhất. Với 255 là tỷ lệ nhiệm vụ, chúng tôi sẽ nhận được 5V ở PIN3. Nếu tỷ lệ nhiệm vụ được đưa ra là 125, chúng tôi sẽ nhận được 2,5V ở PIN3.
Bây giờ chúng ta hãy nói về điều khiển động cơ servo, Arduino 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ộ. Bạn có thể tìm hiểu thêm về điều khiển động cơ servo với arduino tại đây.
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. Do đó, chúng ta có một tín hiệu PWM có tỷ lệ nhiệm vụ thay đổi tuyến tính với WEIGHT hoặc FORCE. Điều này được cấp cho động cơ servo, chúng ta có thể điều khiển động cơ servo bằng cảm biến lực.