Lưu đồ giải thuật

Một phần của tài liệu THIẾT KẾ HỆ THỐNG PHÂN LOẠI XOÀI, CÓ CODE 2 (Trang 44)

DC: Direct Current

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) {

comboBox1.DataSource = SerialPort.GetPortNames(); // quét tất cả cổng COM của máy tính đang kết nối đổ vào comboBox

}

private delegate void LineReceivedEvent(string line); // chưa hiểu

int l1 = 0, l2 = 0, l3 = 0;

private void xuly(string line) // xữ ly data được gưi lên

{

tb_data.Text = line.TrimEnd(); // chưa hiểu TrimEnd

if (line.TrimEnd() == "12345678") // nêu là "12345678" thì gưi lại VDK là sô "1" và công thêm hiên thi số lương

Trang 61

serialPort1.Write("1"); // truyen số 1 xuống lại arduino ?? hỏi lại

l1++; // cộng dồn số lượng sản phẩm

txt_l1.Text = l1.ToString(); // hiển thị số 1

Invoke(new MethodInvoker(() =>

lxt_l1.Items.Add(DateTime.Now.ToLongTimeString()))); // hiển thị thời gian thực datetime

}

if (line.TrimEnd() == "ABCDEFGH") // nêu là

"ABCDEFGH" thì gưi lại VDK là sô "2" và công thêm hiên thi số lương { serialPort1.Write("2"); l2++; txt_l2.Text = l2.ToString(); Invoke(new MethodInvoker(() =>

lxt_l2.Items.Add(DateTime.Now.ToLongTimeString()))); }

if (line.TrimEnd() == "TTTTTTTT") // nêu là "TTTTTTTT" thì gưi lại VDK là sô "3" và công thêm hiên thi số lương

{

serialPort1.Write("3"); l3++;

txt_l3.Text = l3.ToString();

Trang 62

lxt_l3.Items.Add(DateTime.Now.ToLongTimeString()))); }

}

private void timer1_Tick(object sender, EventArgs e) // chưa hiểu sao phải ghi ở timer1 mà k phải ở chỗ button

{

if (!serialPort1.IsOpen) // nếu chưa kết nối hiên thi "Chưa kết nối" và ẩn nút ngắt kết nối

{

button1.Enabled = true; button2.Enabled = false; label2.Text = ("Chưa kết nối"); label2.ForeColor = Color.Red; }

else if (serialPort1.IsOpen) // nếu đã kết nối hiên thi "Đã kết nối" và ẩn nút kết nối

{

button1.Enabled = false; button2.Enabled = true; label2.Text = ("Đã kết nối"); label2.ForeColor = Color.Blue; }

Trang 63

}

private void Form1_FormClosing(object sender,

FormClosingEventArgs e) // chưa hiểu hàm này

{ if(serialPort1.IsOpen) { serialPort1.Write("D"); } }

private void groupBox2_Enter(object sender, EventArgs e) {

}

private void comboBox1_SelectedIndexChanged(object sender,

EventArgs e)

{

}

Trang 64

{

}

private void button1_Click(object sender, EventArgs e) {

if (!serialPort1.IsOpen) // kiêm tra kết nối công com chưa nêu chưa thí tiến hành kết nối cổng COM đã chon

{

serialPort1.PortName = comboBox1.Text; serialPort1.BaudRate =

Convert.ToInt32(comboBox2.Text);

serialPort1.Open();

serialPort1.Write("K"); // truyền tín hiệu K xuống vdk

} }

private void button2_Click(object sender, EventArgs e) {

serialPort1.Write("D");

serialPort1.Close(); // ngắt kết nối với cổng COM

} }

Trang 65

Một phần của tài liệu THIẾT KẾ HỆ THỐNG PHÂN LOẠI XOÀI, CÓ CODE 2 (Trang 44)

Tải bản đầy đủ (DOC)

(65 trang)
w