3.1. YỀU CẦU ĐỀ TÀI
Một cảm biến màu sắc để phân biệt màu sản phẩm. Một loadcell để phân loại sản phẩm theo khối lượng.
Gồm 2 băng tải: một băng tải đưa sản phẩm vào, một băng tải đưa sản phẩm ra. Cần gạt, đẩy để phân loại sản phẩm.
3.2. THIẾT KẾ ĐIỀU KHIỂN
Nhấn START: cấp điện, động cơ chạy, băng tải 1 quay kéo vật di chuyển, vật
được đưa lên cân. Cảm biến 1 phát hiện → động cơ đẩy 1 quay đưa vật lên cân, khi động cơ 1 chạm vào cơng tắc hành trình → đảo chiều động cơ 1, chạm cơng tắc hành trình tại vị trí ban đầu→ dừng động cơ 1.
Ðọc giá trị khối lượng→ động cơ servo sẽ quay cần gạt về bên loại 1 hoặc loại 2 tuỳ thuộc vào khối lượng của vật so với khối lượng đặt trước.
Ðọc màu sắc → động cơ đẩy 2 quay thuận (đưa vật lên băng chuyền 2), động cơ 2 chạm cơng tắc hành trình → đảo chiều động cơ 2. Động cơ 2 chạm vào cơng tắc hành trình tại vị trí ban đầu → dừng động cơ 2.
Vật được đưa lên phân loại, nếu là màu đỏ thì khi đi qua cảm biến 2 phát hiện sẽ cho quay động cơ gạt 1, động cơ gạt 1 chạm vào cơng tắc hành trình → đảo chiều động cơ gạt 1, động cơ gạt 1 chạm cơng tắc hành trình ở vị trí ban đầu→ dừng động cơ gạt 1.
Tương tự nếu là màu xanh thì cảm biến 3 tác động điều khiển động cơ gạt 2, màu sắc khác đỏ và xanh lục thì sẽ cho chạy thẳng , 2 động cơ gạt ko tác động.
Nhấn STOP: dừng băng tải 1.
Hình 3.1: Sơ đớ khới hệ thớng.
Khối vi xử lý: Arduino 2560 xử lý các tín hệu thu được và điều khiển các thiết bị. Arduino Ethernet shield: Kết nối với arduino 2560 để hiển thị và điều khiển hệ
thống thông qua webserver. Khối đo khối lượng:
- Loadcell dùng để cân sản phẩm.
- Mạch khuếch đại dùng để khuếch đại tín hiệu từ loadcell đưa vào khối xử lý.
Khối cảm biến màu: cảm biến màu để phân biệt màu sắc. Khối cảm biến phát hiện vật, công tắc:
- Cảm biến hồng ngoại: sẽ cho biết khi nào có vật ngang qua, thơng qua vi điều khiển có thể điều khiển các động cơ kéo băng tải hay động cơ thanh gạt thông qua mạch điều khiển động cơ.
- Cơng tắc hành trình: phát tín hiệu cho vi điều khiển khi bị động cơ tác động. Khối công suất:
- Mạch điều khiển băng tải: đóng ngắt băng tải và cách ly bo điều khiển với động cơ và nguồn điện có cơng suất lớn.
Khối động cơ: động cơ băng tải, động cơ đẩy, động cơ gạt, động cơ servo.
Ở đây những người thực hiện sử dụng bộ nguồn của máy tính để làm nguồn cung cấp cho tồn hệ thống vì tính ổn định cao của nó cũng như các mức điện áp khác nhau mà nó cung cấp.
3.4. THIẾT KẾ HỆ THỐNG
3.4.1. KHỐI XỬ LÝ
Trong hệ thống sản xuất tự động, vai trò của vi điều khiển ngày càng quan trọng.
Hiện nay trên thị trường có rất nhiều dòng vi điều khiển , xử lý như : vi điều khiển họ 8051, PIC, AVR, ARM…Và nhóm chọn board Arduino mega 2560 sử du ̣ng chip ATmega2560 thuô ̣c ho ̣ vi điều khiển AVR để làm bộ xử lý và điều khiển trung tâm vì : Ngồi những dịng vi điều khiển , vi xử lý quen thuộc như 8051, PIC thì nhóm
muốn mở rộng thêm kiến thức về board Arduino mega 2560 sử du ̣ng chip ATmega2560 thuô ̣c ho ̣ vi điều khiển AVR.
Board Arduino mega 2560 có thể tìm mua dễ dàng, giá thành không quá đắt. Cộng đồng Arduino phát triển ngày càng mạnh trên thế giới, nhiều ứng dụng có sẵn thuận lợi cho việc nghiên cứu.
Trình biên dịch, cơng cụ lập trình phổ biến và các tính năng khơng ngừng phát triển đáp ứng nhu cầu của người sử dụng.
3.4.2. KHỐI ĐO KHỐI LƢỢNG A. Loadcell:
Qua nghiên cứu và khảo sát các loại Loadcell hiện đang có trên thị trường kết hợp với mục đích phù hợp với đề tài thiết kế hệ thống định lượng nên người thực hiện đã nghiên cứu và sử dụng loadcell MAVIN NA1 dạng thanh, vì nó phù hợp theo thiết kế cơ khí, tải trọng phù hợp và độ chính xác tương đối cao.
Cơng thức tính điện áp ngõ ra loadcell:
Trong đó:
VS : Điện ấp nguồn cung cấp [V] S: Độ nhạy [mV/V]
m: Khối lượng vật cân [kg]
M: Khối lượng cực đại của loadcell [kg]
Loadcell có khối lượng cực đại là 3kg, độ nhạy loadcell là 2mV/V, vật cần cân có khối lượng 1kg, điện áp cung cấp là 5V, ta có:
Do điện áp ra của loadcell quá nhỏ nên ta phải sử dụng mạch khuếch đại để khuếch đại tín hiệu trước khi đưa vào vi xử lý.
B. Mạch khuếch đại dùng INA 125
Khối khuếch đại: dùng IC INA 125 (nguồn 12V). Tín hiệu từ loadcell được đưa vào chân số 6, số 7 của IC, những người thực hiện lựa chon nguồn cung cấp cho loadcell hoạt động được lấy từ trong IC INA125 đổ ra thông qua chân số 4 và 15 (có thể lựa chọn nguồn khác thơng qua cách đấu nối). Tín hiệu mà IC nhận được là điện áp [mV] từ loadcell sẽ được IC khuếch đại lên để vi điều khiển có thể đọc được giá trị điện áp này. Ngõ ra tại chân số 10, 11 là tín hiệu sau khi khuếch đại sẽ được đưa vào chân Analog của Arduino để xử lý và chuyển đổi.
Tính tốn hệ sớ khuếch đại:
Do: Nguồn cung cấp = 5V Độ nhạy của loadcell là 2mV/V
Nên áp ra tối đa của loadcell là: 5V*2mV/V = 10mV Hình 3.2: Sơ đồ khới khuếch
Chọn Vref = 5V
Chọn kênh ADC 0 ở chế độ đơn kênh. Ta có:
*1024
Vin ADC
Vref
Trọng lượng tối đa 3kg ứng với 1024 mức. Vậy điện áp ra lớn nhất của loadcell Vin = 5V
Cần khuếch đại tín hiệu đầu ra của Loadcell là 10mV lên 5V. Vậy hệ số khuếch đại là: G = 5V/10mV = 500 (*)
Mà ta có: 4 60 G K G R RG = 121Ω. Do ngõ vào ADC Vcc = là 0÷5V Ta có: ef *1024 in r V ADC V Nên: Nmax = (5/5)*1024 = 1024
Hình 3.3: Biểu đồ liên hệ giữa khới lượng và giá trị ADC. [6]
Có: 0 kg <–> N = 0
m = M = 3 Kg <–> N = Nmax = 1024 Vậy ta có cơng thức liên hệ
Hình 3.4: Mạch khuếch đại tín hiệu từ Loadcell.
3.4.3. KHỐI CÔNG SUẤT
A. Mạch điều khiển chiều quay động cơ
Hình 3.5: Mạch điều khiển chiều quay động cơ.
Nguyên lí hoạt động: cấp nguồn 5VDC cho chân số 9 là nguồn nuôi cho IC hoạt động, chân số 4 VS là chân cấp nguồn cho động cơ. Hai động cơ đều chạy với nguồn VS. Chân số 6 và 11 là hai chân Enable, 2 chân cho phép hoạt động, 2 chân này nếu được tích cực mức cao sẽ cho phép IC hoạt động. Chân số 5 và số 7 lấy tín
thấp, chân số 7 tích cực mức cao thì động cơ chạy thuận ngược lại sẽ quay nghịch – nguyên lý cầu H. Ngõ ra chân số 2 và số 3 sẽ được nối với động cơ 1 và chân số 13 và 14 sẽ nối với động cơ 2.
B. Mạch điều khiển động cơ băng tải
Hình 3.6: Mạch điều khiển động cơ băng tải.
Nguyên lí hoạt động: Tín hiệu từ vi điều khiển chân 22 được đưa vào chân số 1 của optotransistor. Nếu tích cực mức cao thì opto dẫn, mức thấp thì khơng dẫn. Opto dẫn thì kích cho FET dẫn và cho dịng điện chạy qua làm quay động cơ.
3.5. SƠ ĐỒ NGUYÊN LÝ CỦA HỆ THỐNG
3.6. MẠCH SAU KHI HOÀN THÀNH 3.6.1. MẠCH KHUẾCH ĐẠI 3.6.1. MẠCH KHUẾCH ĐẠI
Hình 3.8: Mạch khuếch đại đã thi công.
3.6.2. MẠCH ĐẢO CHIỀU ĐỘNG CƠ
3.6.3. MẠCH ĐIỀU KHIỂN BĂNG TẢI
Hình 3.10: Mạch điều khiển băng tải.
3.6.4. ARDUINO ETHERNET SHIELD KẾT NỐI VỚI ARDUINO 2560
3.7. HÌNH ẢNH THỰC TẾ MƠ HÌNH
3.8. ĐÁNH GIÁ SAI SỐ
Từ sơ đồ khối ta thấy: Sai số của hệ thống bao gồm sai số của cảm biến, sai số của bộ khuếch đại, sai số của ADC, sai số của vi điều khiển. Nhưng sai số của vi điều khiển là rất nhỏ có thể bỏ qua, vì vậy ta cịn 3 thành phần sai số:
Sai số của hệ thống: 2 2 2
1 2 3
Trong đó:
1
: là sai số của cảm biến 2
: là sai số của ADC 3
: là sai số của bộ khuếch đại
Sai số cảm biến:
Sai số của cảm biến thường do nhiệt độ gây ra. Khi nhiệt độ thay đổi sẽ làm điện trở cảm biến thay đổi gây ra sai số, nhiệt độ làm việc là 0oc tới 50oc
Sai số của nhà sản xuất:1= 0,1%
Sai số của ADC:
Sai số lượng tử: Đây là sai số hệ thống, giá trị của sai số lượng tử bằng một nửa của giá trị điện áp đặt vào để làm thay đổi một đơn vị của mã đầu ra
Sai số do điện áp Uref: Sai số này sinh ra do nguồn tham chiếu bị thay đổi. (sai số này đã bị triệt tiêu khi điện áp cấp cho Uref cũng là điện áp cấp cho cầu)
Các yếu tố ảnh hưởng đến độ chính xác của ADC:
Mạch so sánh: Khoảng chuyển tiếp của tín hiệu là một yếu tố gây ra sai số bởi vì hai tín hiệu phải sai lệch một giá trị nhất định thì điện thế ra của mạch mới chuyển trạng thái. Ngồi ra ở một mức điện áp khác nhau có một mức chuyển tiếp khác nhau tạo ra sự khơng tuyến tính của mạch so sánh. Bộ so sánh cũng bị tác động của nhiệt độ.
Độ phân giải: Độ phân giải càng cao thì sai số càng thấp ảnh hưởng của bộ dao động: khi xung nhịp đặt vào thay đổi thì độ chính xác bị kém đi sai số tổng của ADC:
10
1/ 2 =0,097% 2=0,097%
Sai số khuếch đại:
Mạch khuếch đại sử dụng INA125 có sai số là: 3 0,01%
Chƣơng 4: THIẾT KẾ PHẦM MỀM 4.1. YÊU CẦU THIẾT KẾ
Hệ thống thiết kế bao gồm các phần yêu cầu sau: Phân loại màu sản phẩm theo 2 loại: Đỏ, xanh lá.
Sản phẩm màu đỏ có 2 loại là sản phẩm đỏ đạt chuẩn và sản phẩm đỏ không đạt chuẩn. 2 loại sản phẩm này phân theo 2 đường.
Sản phẩm màu xanh có 2 loại là sản phẩm xanh đạt chuẩn và sản phẩm xanh không đạt chuẩn. 2 loại sản phẩm này phân theo 2 đường.
Sản phẩm được nhận dạng theo màu rồi tới khối lượng. Sau khi hoàn thành gồm 4 loại sản phẩm.
4.2. GIẢI PHÁP THỰC HIỆN
Giải pháp:
Chia các hệ thống thành từng giai đoạn. Xử lý từng giai đoạn.
Xử lý các công đoạn chi tiết cho từng giai đoạn.
4.3. GIAO DIỆN WEBSERVER
4.4. LƢU ĐỒ CHƢƠNG TRÌNH
4.4.1. LƢU ĐỒ CHƢƠNG TRÌNH CHÍNH
Yêu cầu: Quá trình được chia nhỏ thành 5 giai đoạn, từng giai đoạn sẽ thực hiện 1 nhiệm vụ
riêng, các chương trình con xử lí các giai đoạn.
Hình 4.2: Lưu đồ chương trình chính.
Chương trình chính được chia thành 5 giai đoạn, từ khi hoạt động sản phẩm sẽ được xác định vị trí qua các cảm biến hồng ngoại, khi vật tới giai đoạn nào thì sẽ thực hiện chương trình con của giai đoạn đó.
4.4.2. LƢU ĐỒ CHƢƠNG TRÌNH CON ĐƢA SẢN PHẨM VÀO BÀN CÂN
4.4.3. LƢU ĐỒ CHƢƠNG TRÌNH CON CÂN VÀ ĐỌC MÀU
4.4.4. LƢU ĐỒ CHƢƠNG TRÌNH CON ĐƢA SẢN PHẨM VÀO BĂNG TẢI 2
4.4.5. LƢU ĐỒ CHƢƠNG TRÌNH CON ĐƢA SẢN PHẨM VÀO THÙNG
4.4.6. LƢU ĐỒ CHƢƠNG TRÌNH CON GẠT SẢN PHẨM VÀO THÙNG MÀU XANH
4.4.7. LƢU ĐỒ CHƢƠNG TRÌNH CON GẠT SẢN PHẨM VÀO THÙNG MÀU ĐỎ
Chƣơng 5: KẾT QUẢ NGHIÊN CỨU 5.1. KẾT QUẢ 1: 5.1. KẾT QUẢ 1:
Sau thực hiện đề tài “Giám sát và phân loại sản phẩm theo màu sắc dùng kit arduino” đề tài đã hồn thành các nội dung chính như sau:
Về arduino 2560:
Tìm hiểu sơ lược về arduino 2560.
Tìm hiểu và phân tích ứng dụng của arduino 2560. Viết được chương trình của từng phần riêng biệt.
Về websever:
Giám sát được thông qua webserver.
5.1. KẾT QUẢ 2:
Về thiết kế mơ hình:
Tìm hiểu đặc tính của các linh kiện sử dụng.
Thiết kế các module như: module khếch đại tín hiệu analog dùng trong loadcell, mạch đảo chiều động cơ.
Chƣơng 6: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 6.1. KẾT LUẬN
Đề tài đã thực hiện được chạy theo các bước cơ bản, điều khiển chạy được từng phần. Nhưng vẫn cịn mắc một số lỗi trong q trình vận hành do sai số của thiết bị và do nhiễu. Nhóm đã hồn thành đúng mục tiêu và tiến độ đề ra.
6.2. HƢỚNG PHÁT TRIỂN ĐỀ TÀI
Có thể phát triển thêm chức năng thông báo số lượng sản phẩm hoặc trong q trình chạy bị lỗi bằng giọng nói.
Phát triển thêm theo hướng phân loại nhiều sản phẩm cùng lúc và liên tục để tăng năng suất quá trình phân loại.
TÀI LIỆU THAM KHẢO SÁCH THAM KHẢO:
[I] Thầy Lê Chí Kiên, “Giáo trình Đo lường cảm biến”, ĐH Sư phạm Kỹ thuật Tp.HCM.
[II] Loadcell technical information. [III] Datasheet L298.
[IV] Datasheet IRF 540.
TRANG WEB THAM KHẢO:
[1] http://canchatluong.com/loadcell-mavin/.html [2] http://www.stdio.vn/articles/read/320/dieu-khien-dong-co-servo-voi-adruino [3] http://dientu4u.blogspot.com/.html [4] https://www.arduino.cc/ [5] https://startingelectronics.org/.html [6]http://www.alldatasheet.com/datasheet-pdf/pdf/56681/BURR- BROWN/INA125.html [7] http://www.giacandientu.com/ PHỤ LỤC CHƢƠNG TRÌNH CON: Webserver: void giaodien() {
EthernetClient client = server.available(); if(client = true)
{
while(client.connected()) {
{
char c=client.read();
//Đọc char bởi yêu cầu HTTP if(readString.length()<100) {
//Lưu trữ các ký tự vào chuỗi readString+=c; //In C } //================================================= //Request HTTP Stop: if(c=='\n'){
Serial.println(readString);//In ra serial monitor
client.println("HTTP/1.1 200 OK");//Tạo 1 trang mới client.println("Content-Type: text/html");
client.println("Refresh: 5"); client.println();
client.println("<HTML>"); client.println("<HEAD>");
client.println("<TITLE>He Thong Dieu Khien Thiet Bi Bang
Arduino 2560 - Ethernet Shield Arduino</TITLE>"); client.println("</HEAD>");
client.println("<BODY>"); client.println("<CENTER>");
client.println("<center> <p> <h2 style=\"color: #EE0000\" >DO AN TOT NGHIEP</h2></p>"); client.println("<center> <p> <h2 style=\"color: #000000\" >HUYNH THANH THOAI</h2></p>"); client.println("<center> <p> <h2 style=\"color: #000000\" >PHAM CONG DUC</h2></p>");
>KHOA:DIEN-DIEN TU</h2></p>");
client.println("<h3>******************************
******************************</h3>"); client.println("<center> <p> <h2 style=\"color:
#990000\">DIEU KHIEN THIET BI</h2></p>");
//============================================================ client.println("<a href=\"/button1on\"> <button
style=\"width:100px;height:40px\"> <font size=\"0.5\">ON </font> </button> </a>");
client.println("<a href=\"/button1off\"> <button style=\"width:100px;height:40px\"> <font size=\"0.5\">OFF </font> </button> </a> <br/><br/>");
//============================================================ client.println("<center> <p> <h2 style=\"color: #990000\" >SO SAN PHAM</h2></p>");
client.println("<p> <h2 style=\"color: #FF0000\"> MAU DO:"); client.println(maudo);
client.println("</p>");
client.println("<p> <h2 style=\"color: #00FF00\" >MAU XANH LA:");
client.println(xanhla); client.println("</p>"); client.println("<br/>"); client.println("<br/>"); client.println("<br/>"); client.println("</BODY>"); client.println("</HTML>"); delay(1); //Stop Client:
client.stop();
Serial.println("client disconnected");
//================================================= //DIEU KHIEN QUA NHAN LENH DIEU KHIEN:
if(readString.indexOf("button1on")>0) { digitalWrite(22, HIGH); } //================================================= if(readString.indexOf("button1off")>0) { digitalWrite(22 ,LOW); } //================================================= readString=""; } //================================================= } } } } Màu sắc: int color() { digitalWrite(s2,LOW); digitalWrite(s3,LOW);
red = pulseIn( out,digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s3,HIGH);
blue = pulseIn( out,digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s2,HIGH);
/* Serial.print("R Intensity:"); Serial.print(red, DEC); Serial.print("G Intensity:"); Serial.print(green,DEC); Serial.print("B Intensity:"); Serial.print(blue, DEC); */
if ( red > 10 && red < 40) {
Serial.println(" - (red Color) "); xuatmau = 1;//red maudo++; delay (1000); }