Khối điều khiển:

Một phần của tài liệu Đồ án cánh tay robot phân loại sản phẩm dựa theo màu sắc (Trang 34)

Khối điều khiển được xây dựng trên board Arduino Uno R3 với trung tâm là vi điều khiển Atmega328. Đây là một board điều khiển tiên tiến, người lập trình có nhiều thuận lợi khi thao tác với board như sử dụng ngôn ngữ lập trình C để lập trình, cộng đồng hỗ trợ đông đảo, có sẵn nhiều thư viện để việc lập trình vi điều khiển trở nên dễ dàng hơn.

Mạch Arduino Unolà dòng mạch Arduino phổ biến, khi mới bắt đầu làm quen, lập trình với Arduino thì mạch Arduino thường nói tới chính là dòng Arduino UNO và R3 là thế hệ thứ 3 của vi điều khiển này.

Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là ATmega8, ATmega168, ATmega328. Trong đề tài này mạch Uno em sử dụng dùng vi điều khiển ATmega328. Bộ não này có thể xử lí những tác vụ đơn giản như điều khiển đèn LED nhấp nháy, điều khiển động cơ, xử lí tín hiệu cho xe điều khiển từ xa, làm một trạm đo nhiệt độ - độ ẩm và hiển thị lên màn hình LCD hay lên webserver…

Máy tính Khối diều Động cơ servo

Hình 2.3.Arduino Uno R3 trong thực tế

Hình 2.4.Sơ đồ chân của Arduino Uno R3

Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V. Thường thì cấp nguồn bằng pin vuông 9V là hợp lí nhất nếu bạn không có sẵn nguồn từ cổng USB. Nếu cấp nguồn vượt quá ngưỡng giới hạn trên, bạn sẽ làm hỏng Arduino UNO.

Các chân năng lượng:

+ GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn dùng các

thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau.

+ 3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.

+ Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của

nguồn với chân này và cực âm của nguồn với chân GND.

+ IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở

chân này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy bạn không được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp nguồn.

+ RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc

chân RESET được nối với GND qua 1 điện trở 10KΩ.

Một vài thông số của Arduino UNO R3

Bảng 2.1.Các thông số của Arduino Uno R3

Vi điều khiển ATmega328 họ 8bit

Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB)

Tần số hoạt động 16 MHz

Dòng tiêu thụ khoảng 30mA

Điện áp vào khuyên dùng 7-12V DC Điện áp vào giới hạn 6-20V DC

Số chân Digital I/O 14 (6 chân hardware PWM) Số chân Analog 6 (độ phân giải 10bit) Dòng tối đa trên mỗi chân I/O 30 mA

Dòng ra tối đa (5V) 500 mA

Dòng ra tối đa (3.3V) 50 mA

Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng bởi bootloader

SRAM 2 KB (ATmega328) (adsbygoogle = window.adsbygoogle || []).push({});

EEPROM 1 KB (ATmega328)

 Arduino UNO không có bảo vệ cắm ngược nguồn vào. Do đó bạn phải hết sức cẩn thận, kiểm tra các cực âm – dương của nguồn trước khi cấp cho Arduino UNO. Việc làm chập mạch nguồn vào của Arduino UNO sẽ biến nó thành một miếng nhựa chặn giấy. mình khuyên bạn nên dùng nguồn từ cổng USB nếu có thể.

 Các chân 3.3V và 5V trên Arduino là các chân dùng để cấp nguồn ra cho các thiết bị khác, không phải là các chân cấp nguồn vào. Việc cấp nguồn sai vị trí có thể làm hỏng board. Điều này không được nhà sản xuất khuyến khích.

 Cấp nguồn ngoài không qua cổng USB cho Arduino UNO với điện áp dưới 6V có thể làm hỏng board.

 Cấp điện áp trên 13V vào chân RESET trên board có thể làm hỏng vi điều khiển ATmega328.

 Cường độ dòng điện vào/ra ở tất cả các chân Digital và Analog của Arduino UNO nếu vượt quá 200mA sẽ làm hỏng vi điều khiển.

 Cấp điệp áp trên 5.5V vào các chân Digital hoặc Analog của Arduino UNO sẽ làm hỏng vi điều khiển.

 Cường độ dòng điện qua một chân Digital hoặc Analog bất kì của Arduino UNO vượt quá 40mA sẽ làm hỏng vi điều khiển. Do đó nếu không dùng để truyền nhận dữ liệu, bạn phải mắc một điện trở hạn dòng.

Bộ nhớ:

Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:

32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ nhớ

Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộ nhớ này đâu.

2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khai báo khi

lập trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM. Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thành thứ mà bạn phải bận tâm. Khi mất điện, dữ liệu trên SRAM sẽ bị mất.

1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory):

đây giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và ghi dữ liệu của mình vào đây mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM.

Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện trở này không được kết nối).

Một số chân digital có các chức năng đặc biệt như sau:

2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết

Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác.

Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác.

LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.

 Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V - 2.5V với độ phân giải vẫn là 10bit. Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.

Lập trình cho Arduino:

Các thiết bị dựa trên nền tảng Arduino được lập trình bằng ngôn riêng. Ngôn ngữ này dựa trên ngôn ngữ Wiring được viết cho phần cứng nói chung. Và Wiring lại là một biến thể của C/C++. Một số người gọi nó là Wiring, một số khác thì gọi là C hay C/C++.

Đảm nhận vai trò nhận các tín việu điều khiển từ khối điều khiển để thực thi các lệnh tạo nên các hoạt động của cánh tay robot. Servo được sử dụng trong hệ thống là servo sg90

Hình 2.5.Servo SG90 trong thực tế

Hình 2.6.Cơ cấu bên trong Servo SG90

Servo là một dạng động cơ điện đặc biệt. Không giống như động cơ thông thường cứ cắm điện vào là quay liên tục, servo chỉ quay khi được điều khiển (bằng xung PPM) với góc quay nằm trong khoảng bất kì từ 0o - 180o. Mỗi loại servo có kích thước, khối lượng và cấu tạo khác nhau. Có loại thì nặng chỉ 9g (chủ yếu dùng trên máy bay mô mình), có loại thì sở hữu một momen lực bá đạo (vài chục Newton/m), hoặc có loại thì khỏe và chắc chắn,... (adsbygoogle = window.adsbygoogle || []).push({});

Động cơ servo được thiết kế những hệ thống hồi tiếp vòng kín. Tín hiệu ra của động cơ được nối với một mạch điều khiển. Khi động cơ quay, vận tốc và vị trí sẽ được hồi tiếp về mạch điều khiển này. Nếu có bầt kỳ lý do nào ngăn cản chuyển động quay của động cơ, cơ cấu hồi tiếp sẽ nhận thấy tín hiệu ra chưa đạt được vị trí mong muốn. Mạch điều khiển tiếp tục chỉnh sai lệch cho động cơ đạt được điểm chính xác. Tiếp đến là thông số quan trọng nhất, đó là mô-men xoắn mà động cơ vận hành. Với servo SG90 thì mô-men xoắn là 1,8kg /cm có nghĩa là động cơ có thể kéo vật nặng 1,8kg khi bị treo ở khoảng cách 1cm. Vì vậy, nếu bạn treo tải ở mức 0,5cm thì động cơ có thể kéo tải 3,6kg tương tự nếu bạn treo tải ở mức 2cm thì chỉ có thể kéo 0,9kg. Dựa trên tải mà bạn

Cách sử dụng động cơ Servo SG90

Như chúng ta biết có ba dây đi ra từ động cơ này. Để làm cho động cơ này quay, chúng ta phải cấp nguồn cho động cơ với + 5V bằng cách sử dụng dây Đỏ và Nâu và gửi tín hiệu PWM đến dây màu Cam. Do đó, chúng ta cần một cái gì đó có thể tạo ra tín hiệu PWM để làm cho động cơ này hoạt động và ở trong hệ thống này là tín hiệu điều khiển từ Arduino. Bây giờ, làm thế nào để điều khiển hướng của động cơ? Để hiểu điều đó, hãy nhìn vào hình ảnh dưới đây

Từ hình ảnh, chúng ta có thể hiểu rằng tín hiệu PWM được tạo ra phải có tần số 50Hz, đó là khoảng thời gian PWM phải là 20ms. Trong đó On-Time có thể thay đổi từ 1ms đến 2ms. Vì vậy, khi thời gian bật là 1ms, động cơ sẽ ở 0 ° và khi 1,5ms thì động cơ sẽ là 90 °, tương tự khi là 2ms thì nó sẽ là 180 °. Vì vậy, bằng cách thay đổi thời gian bật từ 1ms đến 2ms, động cơ có thể được điều khiển từ 0 ° đến 180 °.

sử dụng

CHƯƠNG 3. XÂY DỰNG MÔ HÌNH ROBOT PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC

3.1. THIẾT KẾ

3.1.1.Yêu cầu kỹ thuật của thiết kế

- Băng tải:

+ Kích thước: 50cm x 6cm x 10cm + Gồm có:

- Động cơ DC 12 V tốc độ quay 10000 vòng/phút công suất 12W - Băng tải

- Khung, con lăn

Yêu cầu: Băng tải vận hành ổn định, mượt mà, đáp ứng lệnh dừng/chạy chính xác. - Cánh tay robot:

+ Công suất: 2W

+ Chiều dài cánh tay tối đa: 25cm

+ Góc quay tối đa: 180 độ

Yêu cầu: robot có 3 bậc tự do để thực hiện các thao tác định hướng khâu tác động cuối, xoay cánh tay quanh trục. Khẩu tác động cuối là một ngàm kẹp sản phẩm chắc chắn. Robot hoạt động chính xác, phản hồi tín hiệu điều khiển nhanh chóng.

- Khối nhận diện màu sắc: Nhận diện màu sắc nhanh chóng với thời gian nhận diện tối đa 1s. Dận nhiện màu sắc chính xác với khoảng cách tới vật dưới 1cm. Không bị ảnh hưởng bởi nguồn sáng bên ngoài dẫn đến nhận dạng sai lệch hoặc không nhận dạng được màu sắc

sử dụng

3.1.2.Sơ đồ khối

Hình 3.1.Sơ đồ khối của thiết kế

Sơ đồ khối thể hiện hệ thống gồm 2 phần chính:

Phần 1: Hệ thống điều khiển robot phân loại sản phẩm theo màu sắc. Bao gồm + Khối CPU phát lệnh điều khiển

+ Khối điều khiển là board Arduino Uno R3 thực thi lệnh điều khiển bằng cách thay đổi độ rộng xung tín hiệu gửi tới Servo để điều khiển góc quay servo

+ Khối servo thực thi lệnh từ khối điều khiển truyền tới.

+ Khối xử lý nhận dạng màu sắc được điều khiển bằng khối điều khiển bằng cách thay đổi các chế độ lọc màu sắc để tìm ra thành phần R, G, B sau đó gửi thông tin các thành phần R, G, B ngược về khối điều khiển để xử lý nhận dạng màu sắc.

Phần 2: Hệ thống băng tải vận chuyển sản phẩm cần phân loại. Bao gồm Motor điện một chiều được cấp nguồn từ nguồn tổ ong 12V/ 2A và nhận tín diệu điều khiển từ

sử dụng (adsbygoogle = window.adsbygoogle || []).push({});

3.2. THIẾT KẾ PHẦN CỨNG

3.2.1.Các linh kiện điện tử được sử dụng

Theo sơ đồ khối ở trên, ta sẽ lựa chọn các linh kiện để sử dụng trong hệ thống phù hợp với yêu cầu thiết kế

(1)Khối điều khiển:

Sử dụng Board Arduino Uno R3. Với Arduino Uno R3 đã được giới thiệu chi tiết ở phần xây dựng mô hình điều khiển robot. Trong mô hình này, em sẽ sử dụng các tính năng cụ thể của board bao gồm:

+Xử lý tín hiệu vào ra: sử dụng cả các chân truyền/nhận tín hiệu Analog và Digital để điều khiển các servo, motor và nhận tín hiệu truyền về từ cảm biến.

+Sử dụng bộ dao động 16Mhz để tạo độ trễ thông qua việc sử dụng hàm delay() có sẵn trong thư viện lập trình

+ Dùng các chân cấp nguồn 5V và các chân GND có sẵn trên board để cấp nguồn cho các cảm biến và các servo. Dòng điện tối đa trên các chân cấp nguồn 5V của Arduino là 500mA.

(2)Khối servo:

Sử dụng servo sg90 với khối lượng 9g, điện áp hoạt động là 4.7-6V, dòng điện qua servo khi hoạt động là 100mA nên có thể sử dụng chân cấp nguồn 5V của Board Arduino cấp nguồn cho 4 servo hoạt động. 3 servo đóng vai trò là 3 bậc hoạt động của cánh tay robot, servo còn lại với vai trò là điều khiển 2 ngàm kẹp tạo thành khâu tác động cuối của cánh tay robot.

Tiếp đến là thông số quan trọng nhất, đó là mô-men xoắn mà động cơ vận hành. Với servo SG90 thì mô-men xoắn là 1,8kg / cm có nghĩa là động cơ có thể kéo vật nặng 1,8kg khi bị treo ở khoảng cách 1cm. Vì vậy, nếu bạn treo tải ở mức 0,5cm thì động cơ có thể kéo tải 3,6kg tương tự nếu bạn treo tải ở mức 2cm thì chỉ có thể kéo 0,9. Dựa trên độ dài và khối lượng khung cánh tay robot mà có thể lựa chọn khối lượng tải cho phù hợp.

sử dụng

Sử dụng module cảm biến màu sắc TCS3200 để xử lý nhận dạng màu sắc của sản phẩm đang chạy trên băng truyền. Cảm biến màu TCS3200 tích hợp 1 dãy bộ dò ánh sáng quang bên trong, với mỗi cảm biến ứng với các màu đỏ, xanh lá, xanh dương. Các bộ lọc của mỗi màu được phân bố đều khắp cảm biến để loại bỏ sai lệch vị trí giữa các màu sắc. Bên trong cảm biến có bộ dao động tạo ra sóng vuông có tần số là tỷ lệ thuận với cường độ của màu sắc được lựa chọn.

Hình 3.2.TCS 3200 trong thực tế

sử dụng

Bảng 3.1.Chức năng các chân của TCS3200

Tên chân I/O Mô tả

S0, S1 (1, 2) I dùng để chọn tỉ lệ tần số đầu ra

OE (3) I cho phép xuất tần số ở chân OUT

GND (4) mass

VDD (5) nguồn 2,7-5,5V

OUT (6) O đưa ra tín hiệu tần số

S2, S3 (7, 8) I dùng để chọn kiểu photodiode

Tính năng

 Chuyển đổi cường độ ánh sáng thành tần số có độ phân giải cao.

 Lập trình lựa chọn bộ lọc màu sắc khác nhau và dạng tần số xuất ra.

 Dễ dàng giao tiếp với vi điều khiển.

 Điện áp đầu vào 2.7-5.5V. (adsbygoogle = window.adsbygoogle || []).push({});

Cấu tạo cảm biến màu

Hình 3.4.Các khối chức năng của TCS 3200

- Khối đầu tiên là mảng ma trận 8×8 gồm các photodiode.Bao gồm 16 photodiode

Một phần của tài liệu Đồ án cánh tay robot phân loại sản phẩm dựa theo màu sắc (Trang 34)