DC: Direct Current
2.6 Giao thức UART
2.6.1 Giới thiệu
UART được viết tắt là “ Universal Asynchronous Receiver/Transmitter”, nó là một vi mạch sẵn có trong một vi điều khiển nhưng không giống như một giao thức truyền thông(I2C & SPI). Chức năng chính của UART là truyền dữ liệu nối tiếp.
Hình 2.12 Giao thức UART
2.6.2 Truyền thông UART
Ở giao tiếp này thì có 2 loại UART có sẵn là truyền UART và nhận UART và giao tiếp giữa 2 loại này có thể được thực hiện trực tiếp với nhau. Để thực hiện điều này thì chỉ cần 2 dây cáp để giao tiếp giữa 2 UART. Luồng dữ liệu sẽ từ cả 2 chân truyền Tx và chân nhận Rx. Trong UART thì việc truyền dữ liệu từ chân Tx UART sang chân Rx UART có thể thực hiện không đồng bộ
XXVIII
Hình 2.13 Truyền thông UART
Start Bit
Start Bit còn được gọi là bit đồng bộ hóa, một đường truyền dữ liệu không hoạt động được điều khiển ở mức điện áp cao. Để bắt đầu truyền dữ liệu, truyền UART sẽ kéo đường dữ liệu từ mức điện áp cao là 1 xuống mức điện áp thấp là 0, nó bắt đầu đọc các bit trong khung dữ liệu ở tần số của tốc độ truyền.
Khung dữ liệu
Các bit dữ liệu bao gồm dữ liệu thực được truyền từ người gửi đến người nhận. Khung dữ liệu có độ dài nằm trong khoảng từ 5 đến 8 bit. Nếu bit chẳn lẻ không được sử dụng thì chiều dài khung dữ liệu có thể dài 9 bit.
Bit chẳng lẻ
Bit chẳng lẻ cho phép người nhận đảm bảo dữ liệu được thu thập có đúng hay không. Đây là một hệ thống kiểm tra lỗi cấp thấp và bit chẵn lẻ có sẵn trong hai phạm vi như chẳn lẻ- chẳng cũng như chẳn lẻ- lẻ. Thực tế bit này không được sử dụng rộng rãi nên không bắt buộc.
Bit dừng
Nằm ở phần cuối của gói dữ liệu. Bit này dài khoảng 2 bit nhưng thường chỉ sử dụng 1 bit. UART giữa đường dữ liệu ở mức điện áp cao để dừng sóng.
2.6.3 Ưu, nhược điểm
XXIX
Chỉ dùng 2 dây để truyền dữ liệu. Tín hiệu CLK không cần thiết.
UART bao gồm 1 bit chẵn lẻ để cho phép kiểm tra lỗi.
Sắp xếp dữ liệu có thể được sửa đổi miễn là cả 2 đều được thiết lập cho nó.
Nhược điểm:
Kích thước khung dữ liệu tối đa 9 bit. Nó không hỗ trợ nhiều hệ thống phụ
Tốc độ truyền của mỗi UART phải ở mức 10% của nhau.
2.6.4 Ứng dụng
UART thường được sử dụng trong có bộ vi điều khiển cho các yêu cầu chính xác và chúng cũng có sẵn trong các thiết bị liên lạc khác nhau như giao tiếp không dây, thiết bị định vị GPS, module Bluetooth,…
2.7 Module tránh chướng ngại vật bằng phản quang2.7.1 Mô tả 2.7.1 Mô tả
Module tránh chướng ngại vật bằng phản quang dùng ánh sáng hồng ngoại để phát hiện khoảng cách, module gồm một cặp máy phát và thu hồng ngoại, máy phát ra tia hồng ngoại ở một tần số nhất định. Cảm biến có thể chỉnh khoảng cách báo mong muốn thông qua biến trở.
XXX
Hình 2.14 Module tránh chướng ngại vật
2.7.2 Các thông số kỹ thuật
Nguồn điện cung cấp 3.3 - 5VDC. Khoảng cách phát hiện 2- 30cm. Thời gian phản hồi ~2ms.
Điều khiển khoảng cách thông qua biến trở.
Khả năng phát hiện đối tượng: trong suốt hoặc đục. So sánh sử dụng IC 393, làm việc ổn định.
Led hiển thị ngõ ra màu đỏ. Kích thước 3.2 x 1.4cm.
Khi có vật cản sẽ xuất ra mức thấp, khi không có vật cản sẽ xuất ra mức cao.
XXXI
2.7.3 Sơ đồ chân
Module tránh chướng ngại vật bằng phản quang có 3 chân được sắp xếp từ trái qua phải.
Hình 2.15 Sơ đồ chân module tránh chướng ngại vật
Chân thứ nhất: là chân ngõ ra, khi có vật cản sẽ xuất ra ở mức thấp, khi không có vật cản sẽ ở mức cao.
Chân giữ: là GND, nguồn âm 0VDC.
Chân cuối cùng: là VCC, nguồn dương 5VDC.
2.7.4 Ưu điểm
Khoảng cách phát hiện xa, giá rẻ, lắp ráp dễ dàng, sử dụng tiện lợi. Tương đối thích hợp với các dòng điều khiển như PIC, Arduino.
XXXII
chướng ngại vật, xe tránh chướng ngại vật, đếm đường ống và theo dõi vạch đen trắng
2.8 Mạch hạ áp DC LM2596 3A 2.8.1 Mô tả
Module có 2 đầu vào In, Out, 1 biến trở để chỉnh áp đầu ra. Người dùng chỉnh điện áp thích hợp ở đầu vào từ 4-35V, điện áp đầu ra từ 1.25-30V, dòng Max 3A
XXXIII
Hình 2.16 Module hạ áp LM2596
Hình 2.17 Sơ đồ kết nối của LM2596
Lưu ý khi sử dụng
Cấp nguồn điện ngược sai cực sẽ làm hư hỏng mạch
Không nên sử dụng ngỏ ra tải là động cơ, nên sử dụng các tải thuần trở
2.8.2 Các thông số kỹ thuật
IC chính: LM2596.
Điện áp đầu vào: từ 3 đến 30V.
Điện áp đầu ra: điều chỉnh trong khoảng 1.5V đến 30V. Dòng đầu ra tối đa: 3A.
Hiệu suất: 92%. Công suất: 15W. Trọng lượng: 30g.
XXXIV
Tần số xung: 150 KHz. Kích thước: 53mm x 26mm.
2.9 Động cơ Servo SG90 2.9.1 Mô tả
SG90 là một động cơ servo với mô-men xoắn 1.6 kg/cm. Động cơ quay từ 0 đến 180 độ dựa trên chu kì hoạt động của sóng PWM được cung cấp cho chân tín hiệu của nó.
Servo trong tiếng Anh có nghĩa là hệ thống điều khiển và phản hồi, thuật ngữ servo này thường được sử dụng trong nhiều ứng dụng như là van servo, động cơ ac servo, động cơ dc servo.
Hình 2.18 Động cơ servo SG90
Tín hiệu PWM tạo ra nên có tần số 50Hz và chu kỳ PWM phải là 20ms. Trong đó thời gian đúng giờ có thể thay đổi từ 1 đến 2ms. Vì vậy, khi on-time là 1 ms, động cơ sẽ ở 0 độ và khi 1.5ms thì động cơ sẽ ở 90 độ và khi 2ms thì động cơ sẽ ở 180 độ. Vì vậy, bằng cách thay đổi thời gian đúng giờ từ 1 đến 2ms, động cơ có thể điều khiển từ 0 đến 180 độ.
XXXV
Hình 2.19 Tín hiệu PWM
Hình 2.20 Điều khiển động cơ servo
2.9.2 Các thông số kỹ thuật
Điện áp hoạt động là: 4.8- 5VDC. Lực kéo ( mô-men xoắn) là: 1.8Kg/cm.
XXXVI Kích thước sản phẩm: 22.2 x 11.8 x 32mm. Nhiệt độ làm việc: 0 đến 55 độ C. Góc xoay: 0- 180 độ. Trọng lượng: 9g. 2.9.3 Sơ đồ chân
Hình 2.21 Sơ đồ chân động cơ servo
Động cơ servo SG90 có 3 màu dây:
Màu cam: Tín hiệu PWM được đưa vào dây này để điều khiển động cơ. Màu đỏ: dây nguồn.
Màu đen: dây GND.
2.10 Motor giảm tốc 2.10.1 Mô tả
Motor giảm tốc được định nghĩa là động cơ điện có tốc độ thấp, tốc độ đã giảm đi nhiều( có thể là 1/2, 1/3, 1/4, 1/5, 1/8,…) so với động cơ thường ở cùng công suất và số cực.
Motor còn có một mô tơ điện gắn với một hộp giảm tốc. Chúng có tác dụng giảm số vòng quay, tăng mô-men xoắn được ứng dụng nhiều trong các máy móc công nghiệp.
XXXVII
không sợ giật điện.
Hình 2.22 Động cơ giảm tốc
2.10.2 Thông số kỹ thuật
Điện áp cấp: 12-24VDC. Dòng điện không tải: 50mA. Moment xoắn: 6.3 Kg/cm. Đường kính động cơ: 24.4mm. Đường kính trục: 4mm.
Chiều dài trục: 9mm.
Chiều dài động cơ( không gồm trục và hộp số): 30.8mm.
2.11 Nguồn Adapter 12V 5A2.11.1 Mô tả 2.11.1 Mô tả
Nguồn adapter 12V 5A/3A có công dụng chuyển đổi từ nguồn 220V xoay chiều thành nguồn 12V một chiều để cung cấp nguồn cho các thiết bị như
XXXVIII
Camera, Led, LCD…, có thể sử dụng thay thế cho các thiết bị có đầu vào bằng hoặc nhỏ hơn 12V-2A.
Hình 2.23 Nguồn Adapter 12VDC
2.11.2 Các thông số kỹ thuật
Điện áp đầu vào: 100- 240VAC. Tần số đầu vào: 50-60Hz. Điện áp đầu ra: 12V 2A. Chân cắm: 5.5-2.5mm. Công suất: 120W.
2.12 Module Relay 2.12.1 Mô tả
Module Relay 1 Kênh 5V với opto cách ly nhỏ gọn, có opto và transitor cách ly giúp cho việc sử dụng trở nên an toàn với bo mạch chính, mạch để sử dụng đóng ngắt nguồn điện công suất cao AC hoặc DC, có thể chọn đóng khi kích
XXXIX
mức cao hoặc mức thấp bằng Jumper.
Gồm 3 tiếp điểm đóng ngắt: NC( thường đóng), NO( thường hở) và COM( chân chung) được cách ly hoàn toàn với bo mạch chính, ở trạng thái bình thường chưa kích thì NC sẽ mắc nối tiếp với COM, khi có trạng thái kích thì COM sẽ chuyển sang nối với NO và ngắt kết nối với NC.
Hình 2.24 Module Relay
2.12.2 Các thông số kỹ thuật
Điện áp nuôi: 5VDC.
Dòng tiêu thụ khoảng 80mA.
Có đèn báo đóng ngắt trên mỗi Relay.
Có thể chọn tín hiệu mức 0 và 1 thông qua jumper.
Điện thế đóng ngắt tối đa: AC250V ~ 10A hoặc DC30V ~ 10A. Kích thước: 5 x 2.6 x 1.9cm.
Trọng lượng: 17g.
2.12.3 Sơ đồ mạch
XL
bằng Jumper. Ưu điểm của mạch này là cách ly hoàn toàn về điện giữa vi điều khiển với relay tải. Điều này giúp cho vi điều khiển loại được một số nhiễu không mong muốn khi hoạt động.
Hình 2.25 Sơ đồ mạch Relay
2.13 Băng chuyền 2.13.1 Mô tả
Băng chuyền là một thiết bị vận chuyển dùng để vận chuyển các đồ vật từ điểm này sang điểm khác, từ vị trí A sang vị trí B. Thay vì vận chuyển sản phẩm bằng sức người gây tốn thời gian, chi phí nhân công cao, giảm hiệu suất công việc thì băng chuyền có thể giải quyết điều đó. Nó giúp tiết kiệm sức lao động, số lượng nhân công, giảm thời gian và tăng năng suất lao động. Tóm lại băng chuyền là một trong những bộ phận không thể thiếu trong dây chuyền sản xuất, láp ráp của các nhà máy, xí nghiệp, góp phần tạo nên môi trường sản xuất
XLI
năng động, khoa học mang lại hiệu quả kinh tế cao.
Hình 2.26 Băng chuyền
2.13.2 Cấu tạo
Khung băng chuyền: Thường được làm bằng khung nhôm định hình, thép sơn inox hoặc tĩnh điện.
Bộ điều khiển băng chuyền: PLC, biến tần, Cảm biến, Rơ-le,…
Mặt băng tải thường làm bằng belt hoặc con lăn, thường là dây băng PVC hoặc dây băng PU.
Con lăn kéo và con lăn đỡ làm bằng thép mạ kẽm hoặc nhôm. Băng tải truyền động bằng xích hoặc đai.
Động cơ giảm tốc.
2.13.3 Ứng dụng
Được ứng dụng trong các nghành sản xuất, lắp ráp linh kiện điện tử, láp ráp ô tô, xe máy,…
XLII
Vận chuyền hàng hóa đóng gói sản phẩm,…
CHƯƠNG 3. THIẾT KẾ HỆ THỐNG 3.1 Yêu cầu hệ thống
Quét mã QR, phân loại được các sản phẩm. Phân loại đúng sản phẩm và số lượng.
Giám sát số lượng, tên sản phẩm đó thông qua màn hình. Giao diện điều khiển trên Visual dễ nhìn và dễ sử dụng. Chi phí thấp, dễ sử dụng, dễ lắp đặt.
Đảm bảo thẩm mỹ và an toàn kĩ thuật.
3.2 Sơ đồ khối Máy tính C#(COM) Module đọc QR code Điều khiển Relay( động cơ băng tải)
XLIII
Hình 3.1 Sơ đồ khối hệ thống
Khối Module đọc QR code:
Dùng module GM 65 quét và thu hình ảnh mã QR của sản phẩm và truyền dữ liệu vào Arduino thông qua giao tiếp UART.
Khối Máy tính C#:
Dùng để cấp nguồn cho Arduino, giám sát điều khiển phân loại và điều khiển servo gạt sản phẩm.
Khối điều khiển Relay:
Dùng để kích nguồn 12V cho băng tải thông qua Arduino.
Khối cảm biến:
Dùng 3 cảm biến tiệm cận đặt tại các servo để đếm số lượng sản phẩm và phân loại.
Khối servo:
Dùng để đưa sản phẩm phân loại vào ô chứa. ARDUINO MEGA Servo 1 CB vật cản 3 Servo 3 CB vật cản 2 CB vật cản 1 Servo 2 UART3 I/O I/O I/O I/O UART1 11
XLIV
3.3 Lưu đồ giải thuật
XLV
CHƯƠNG 4. THI CÔNG HỆ THỐNG 4.1 Giao diện chính hệ thống
XLVI
Hình 4.1 Giao diện hệ thống
XLVII
Hình 4.2 Thi công băng chuyền, cảm biến, servo
XLVIII
Hình 4.3 Thi công Arduino
4.4 Thi công Module quét mã GM65
Hình 4.4 Thi công Module GM65
XLIX
Hình 4.5 Thi công mô hình hoàn chỉnh
CHƯƠNG 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 Kết quả đạt được
- Hoàn thành cơ bản mô hình phân loại sản phẩm theo QR code. - Mô hình hoạt động tương đối ổn định.
L
5.2 Những mặt còn hạn chế
- Công suất động cơ quá nhỏ nên không thể phân loại được những sản phẩm có khối lượng lớn.
- Do kinh nghiệm còn hạn chế nên chưa hoàn thành tốt hết công dụng của mô hình.
- Phân loại sản phẩm không liên tục, đợi sản phẩm phân loại xong mới đến phân loại sản phẩm khác.
- Tốc độ phân loại còn thấp nên không phân loại được nhiều sản phẩm. - Phải có mã QR vừa đủ kích thước thì module mới có thể đọc được. - Giao thức UART có khoảng cách truyền ngắn.
5.3 Hướng phát triển
- Kết hợp thêm cánh tay robot để vận chuyển sản phẩm.
- Kết hợp thêm cơ sở dữ liệu thêm, xóa, sửa sản phẩm cần phân loại. - Phân loại được liên tục các sản phẩm.
- Thiết kế và nghiên cứu để đọc được tất cả các kích thước của mã QR.
TÀI LIỆU KHAM KHẢO Tiếng việt:
[1] Nguyễn Hoàng Hà - Nguyễn Văn Trung.Giáo trình Visual
Studio. Huế. 2008.
[2] Phạm Quang Huy – Phạm Quang Hiển – Vũ Trọng Luật. Lập trình với
C#. NXB Thanh Niên. Websites:
[3] Tài liệu Visual Studio: http://visualcpp.net/visual-studio-la-gi-gioi-
thieu-phan- mem-visual-studio
LI
[5] Website: Mã QR – Wikipedia
[6] Website: Module quét mã 1D 2D QR GM65 [7] Website: Ardino IDE – Wikipedia
[8] Website: Cảm biến tiệm cận – Wikipedia [9] Website: Arduino Mega – Wikipedia
Trang 52
PHỤ LỤC Phụ lục I Mã nguồn cho chương trình
Chương trình Arduino: #include <Servo.h> Servo myservo_1; Servo myservo_2; Servo myservo_3; #define servoPin_1 9 #define servoPin_2 8 #define servoPin_3 10 #define BANGCHUYEN 22 #define CB_1 2 #define CB_2 3 #define CB_3 4
Trang 53 void setup() { Serial.begin(9600); Serial3.begin(9600); myservo_1.attach(servoPin_1); myservo_2.attach(servoPin_2); myservo_3.attach(servoPin_3); pinMode(BANGCHUYEN, OUTPUT); pinMode(CB_1, INPUT); pinMode(CB_2, INPUT); pinMode(CB_3, INPUT); myservo_1.write(0); myservo_2.write(0); myservo_3.write(0); } bool HLoai1 = 0; bool HLoai2 = 0; bool HLoai3 = 0;
Trang 54
String S; int dem = 0; void loop() { if (Serial3.available()) { char c = Serial3.read(); S += c; dem++; if (dem >= 9) {
if (HLoai1 == 0 && HLoai2 == 0 && HLoai3 == 0) { Serial.println(S); } S = ""; dem = 0; } } if (Serial.available()) {
Trang 55 char c = Serial.read(); if (c == '1') { HLoai1 = 1; } if (c == '2') { HLoai2 = 1; } if (c == '3') { HLoai3 = 1; } if (c == 'K') { digitalWrite(BANGCHUYEN, 1); } if ( c == 'D') { digitalWrite(BANGCHUYEN, 0); } } if (HLoai1 == 1) {
Trang 56
if (digitalRead(CB_1) == 0)
{
delay(300); // ??
for (int i = 0; i < 90; i++) { myservo_1.write(i); delay(3);
}
for (int i = 90; i > 0; i--) { myservo_1.write(i); delay(3); } HLoai1 = 0; } } if (HLoai2 == 1) { if (digitalRead(CB_2) == 0) {
Trang 57
delay(300);
for (int i = 0; i < 90; i++) { myservo_2.write(i); delay(3);
}
for (int i = 90; i > 0; i--) { myservo_2.write(i); delay(3); } HLoai2 = 0; } } if (HLoai3 == 1) { if (digitalRead(CB_3) == 0) { delay(300);
for (int i = 0; i < 90; i++) { myservo_3.write(i);
Trang 58
delay(3);
}
for (int i = 90; i > 0; i--) { myservo_3.write(i); delay(3); } HLoai3 = 0; } } }
Chương trình cho Visual:
InitializeComponent();
serialPort1.DataReceived += SerialPort1_DataReceived; // khai báo kết nối công COM
string[] BaudRate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" }; // dang sách tốc độ đường truyền
comboBox2.Items.AddRange(BaudRate); // add danh sách tốc độ đường truyền vào comboBox
comboBox2.SelectedIndex = 3; // chon vị tri ban đâu using System;
Trang 59 using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.IO.Ports; using System.Xml; namespace PHAN_LOAI_SANG_PHAM_QRCODE {
public partial class Form1 : Form
{
public Form1() {
}
private void SerialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e) // đọc data vdk gưi lên
Trang 60
{
string line = serialPort1.ReadLine(); // đọc 1 chuỗi (string) từ vdk gửi lên
this.BeginInvoke(new LineReceivedEvent(xuly), line); // chưa hiểu
}
private void Form1_Load(object sender, EventArgs e)