58
Mạch nguồn: gồm 2 dòng, dòng 12V cấp cho động cơ, dòng 5V cấp cho các thiết bị và linh kiện còn lại.
Khối thu tín hiệu cân nặng: gồm loadcell và module chuyển đổi ADC 24bit loadcell HX711.
Khối cảm biến màu sắc: nhận biết màu sắc cà chua đã chin hay chưa chin để phân loại.
Khối cảm biến vị trí: phát hiện cà chua ở trước các máng phân loại. Màn hình LCD: hiển thị số lượng cà chua đạt chuẩn và không đạt chuẩn theo cân nặng hoặc màu sắc.
Khối động cơ: để quay tay gạt đưa cà chua vào băng tải hoặc tay gạt đưa cà chua xuống máng phân loại.
Nút bấm: để reset cân hoặc reset toàn bộ hệ thống.
Chuông báo: kêu lên khi khơi động, tắt hệ thống và khi cà chua được đẩy xuống máng phân loại.
3.3.2 Khối thu tín hiệu cân nặng (loadcell và module HX711)
Vì khối lượng của một quả cà chua thường dưới 300g nên nhóm đề tài dùng một module cảm biến căn nặng có giá trị đo tối da là 1kg (loadcell 1kg). Ngoài ra để thực hiện chuyển đổi tín hiệu cân nặng mà loadcell đo được về dạng tín hiệu số mà Arduino có thể xử lý, nhóm đề tài sử dụng thêm một module chuyển đổi tín hiệu từ dạng tương tự sang tín hiệu dụng số (HX711).
Module ADC HX711 là một module chuyển đổi analog sang digital 24- bit (phù hợp với tín hiệu cần nặng đầu vào tử loadcell), được thiết kế để chuyển đổi tín hiệu. HX711 có tính tích hợp cao, phản ứng nhanh, thời gian chuyển đổi tín hiệu ngắn, khả năng chống nhiễu, và độ tin cậy cao. Module còn được bày bản rộng rãi trên thị trường với giá cả phải chăng nên việc tiếp cận và sử dụng
59
module khá để dàng. Vì thế nhóm chúng em chọn module HX711 làm ADC giao tiếp giữa Arduino và loadcell.
Hình 3.15 Mạch kết nối của khối thu tín hiệu cân nặng
3.3.3 Màn hình hiển thị LCD
Màn hình LCD 16x2 có 8 chân dữ liệu (D0-D7) và 3 chân điều khiển (RS, RW, E). Do có quá nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng nhiều chân trên vi điều khiển nên ta chọn sử dụng module I2C LCD. Thay vì mất 6 chân vi điều khiển để kết nối với LCD 16x2(RS, EN, D6, D5 và D4) thì module I2C này chỉ cần 2 chân (SCL và SDA để kết nối với vi điều khiển).
Hình 3.16 Màn hình hiển thị LCD
3.3.4 Khối nguồn
Đầu vào của nguồn là 1 adapter 12V – một thiết bị điện tử dùng để chuyển đổi dòng điện có điện áp cao (220V) xuống dòng điện có điện áp thấp hơn (12V). Dòng 12V sau đó qua module buck LM2596 thành dòng 5V.
60
Đầu ra của mạch nguồn là 2 dòng 12V và 5V sẽ được cấp cho các thiết bị trong hệ thống.
Hình 3.17 Sơ đồ mạch nguồn
3.3.5 Khối cảm biến màu
Trong đề tài này nhóm chúng em lựa chọn cảm biến màu TCS3200 nhận biết màu sắc của cà chua. Vì giá thành của cảm biến này khá rẻ so với các linh kiện cùng loại, nhỏ gọn, chuyển đổi tín hiệu cường độ của từng phổ màu thành tần số xung.
Hình 3.18 Mạch cảm biến màu sắc
Khối color 1 gồm 2 chân đầu vào S2, S3 để lựa chọn 4 loại photodiode. Bản chất của 4 loại photodiode là các bộ lọc ánh sáng có màu sắc khác nhau. Có nghĩa nó chỉ tiếp nhận các ánh sáng có cùng màu với loại photo diode tương ứng và không tiếp nhận các ánh sáng có màu sắc khác.
61
Khối color 2 là bộ chuyển đổi dòng điện từ đầu ra khối thứ nhất thành tần số gồm 2 chân S0 và S1.
3.3.6 Cảm biến vị trí
Hình 3.19 Mạch cảm biến thu phát hồng ngoại
Cảm biến vị trí có chân 1 ký hiệu sen1 sẽ kết với với chân A2 của Arduino để xác định vị trí cà chua ở trước máng trượt phân loại cà chua xanh (chưa chín ).
Cảm biến vị trí có chân 1 ký hiệu sen2 sẽ kết với với chân A3 của Arduino để xác định vị trí cà chua ở trước máng trượt phân loại cà chua không đủ khối lượng.
3.3.7 Sơ đồ kết nối toàn hệ thống
Bảng 3.2: Bảng sơ đồ đấu nối
Chân arduino Chức năng
A0 Kết nối với nút nhấn reset loadcell
A1 Kết nối với khối âm thanh
A2, A3 Kết nối Arduino với cảm biến hồng
ngoại
A4, A5 Kết nối Arduino với i2c
D2, D3 Kết nối Arduino với mạch thu tín hiệu
khối lượng
D4, D7 Kết nối chân S0, S1 của cảm biến
62
D8 Kết nối với chân out cảm biến màu
D5, D6, D9 Kết nối với Servo 1, 2, 3.
D10 Kết nối với khối động cơ băng tải
D11, D12 Kết nối với chân S2, S3 của cảm biến
màu.
Hình 3.20: Sơ đồ kết nối hệ thống
3.4 Thi công hệ thống 3.4.1 Thiết kế mạch in 3.4.1 Thiết kế mạch in
3.4.1.1Giới thiệu phần mềm Altium Designer
Altium ngày nay đang là một trong những phần mềm vẽ mạch điện tử mạnh và được ưa chuộng ở Việt Nam.
63
Phần mềm thiết kế mạch tự động Altium Designer là một môi trường thiết kế điện tử đồng nhất, tích hợp cả thiết kế nguyên lý, thiết kế mạch in PCB, lập trình hệ thống nhúng và FPGA.
Hình 3.21 Giao diện phần mềm Altium Designer
Các điểm đặc trưng của Altium Designer:
➢ Giao diện thiết kế, quản lý và chỉnh sửa thân thiện, dễ dàng biên dịch, quản lý file, quản lý phiên bản cho các tài liệu thiết kế.
➢ Hỗ trợ mạnh mẽ cho việc thiết kế tự động, đi dây tự động theo thuật toán tối ưu, phân tích lắp ráp linh kiện. Hỗ trợ việc tìm các giải pháp thiết kế hoặc chỉnh sửa mạch, linh kiện, netlist có sẵn từ trước theo các tham số mới.
➢ Mở, xem và in các file thiết kế mạch dễ dàng với đầy đủ các thông tin linh kiện, netlist, dữ liệu bản vẽ, kích thước, số lượng…
➢ Hệ thống các thư viện linh kiện phong phú, chi tiết và hoàn chỉnh bao gồm tất cả các linh kiện nhúng, số, tương tự…
➢ Đặt và sửa đối tượng trên các lớp cơ khí, định nghĩa các luật thiết kế, tùy chỉnh các lớp mạch in, chuyển từ schematic sang PCB, đặt vị trí linh kiện trên PCB.
64
➢ Mô phỏng mạch PCB 3D, đem lại hình ảnh mạch điện trung thực trong không gian 3 chiều, hỗ trợ MCAD-ECAD, liên kết trực tiếp với mô hình STEP, kiểm tra khoảng cách cách điện, cấu hình cho cả 2D và 3D.
➢ Hỗ trợ thiết kế PCB sang FPGA và ngược lại.
3.4.1.2Thiết kế mạch.
Việc phong cách thiết kế mạch điện tử trên ứng dụng altium designer hoàn toàn có thể được tóm tắt gồm những bước như sau:
+ Đặt ra những nhu yếu bài toán. + Lựa chọn linh phụ kiện.
+ Thiết kế mạch nguyên tắc.
+ Lựa chọn những chân linh phụ kiện để chuyển sang mạch in Update mạch nguyên tắc sang mạch in.
+ Lựa chọn kích cỡ mạch in Sắp sếp những vị trí những loại linh phụ kiện như điện trở, tụ điện, …
+ Đặt kích thước các loại dây nối. + Đi dây trên mạch.
+ Kiểm tra toàn mạch.
65
3.4.2 Lập trình hệ thống.
3.4.2.1Lưu đồ giải thuật.
Lưu đồ là một loại sơ đồ biểu diễn một thuật toán hoặc một quá trình, biểu hiện các bước công việc dưới dạng các loại hình hộp khác nhau theo thứ tự được biểu diễn bởi các mũi tên. Sơ đồ này thể hiện giải pháp cho vấn đề cần giải quyết từng bước từng bước một.
a, Lưu đồ giải thuật cho chương trình chính
66
b, Lưu đồ giải thuật phân loại theo khối lượng và màu sắc
67
3.4.2.2Phần mềm lập trình cho vi điều khiển.
Trong đề tài này nhóm sử dụng phần mềm ARDUINO IDE vì nó tiện lợi, dễ sử dụng cũng như hỗ trợ tốt cho vi điều khiển.
❖ Hướng dẫn sử dụng ARDUINO IDE
− Bước 1: Tạo một thư mục để lưu các chương trình lập trình cho Arduino.
− Bước 2: Mở chương trình Arduino IDE có giao diện như hình:
Hình 3.25: Giao diện Arduino IDE
− Bước 3: Tiến hành chọn FILE, rồi OPEN để tạo file chương trình mới.
68
Hình 3.26: Chương trình đã viết
3.4.3 Lắp đặt hệ thống.
Sau khi tính toán và thiết kế mô hình dựa trên sơ đồ khối, nhóm đã thi công mô hình toàn hệ thống bao gồm băng chuyền vận chuyển cà chua, khối cảm biến khối lượng, khối cảm biến màu sắc, lắp ráp hệ thống điện, điện tử cho hệ thống.
Lắp ráp mạch điện tử giao tiếp với Arduino:
69
Hình 3.28: Mặt trước hệ thống
70 Danh sách linh kiện:
Bảng 3.3: Danh sách linh kiện
Tên linh kiện Số lượng
Cảm biến màu TCS3200 1 Arduino Nano V3 1 Cảm biến hồng ngoại 2 Cảm biến Loadcell 1 Module ADC HX711 1 LCD 1602 1
Module chuyển đổi I2C 1
71
CHƯƠNG 4: KẾT QUẢ VÀ ĐỊNH HƯỚNG PHÁT TRIỂN.
4.1 Kết quả thực nghiệm. 4.1.1 Kết quả nghiên cứu 4.1.1 Kết quả nghiên cứu
Trong vòng 2 tháng làm đồ án, nhóm nghiên cứu đã đạt được kết quả như sau:
❖ Nghiên cứu sâu hơn về Arduino Nano V3
❖ Nghiên cứu sử dụng được cảm biến màu sắc TCS 3200 và giao tiếp được với Arduino
❖ Nghiên cứu sử dụng được cảm biến hồng ngoại LM393
❖ Nghiên cứu, tìm hiểu một số hệ thống phân loại cà chua, phân loại sản phẩm ngoài thực tế
❖ Tìm hiểu và biết cách sử dụng phần mềm như phần mềm thiết kế mạch
Altium, phần mềm lập trình vi điều khiển Arduino IDE.
4.1.2 Kết quả thi công.
Qua quá trình thiết kế phần cứng, lựa chọn linh kiện, nhóm đã thực hiện kiểm tra kết nối các module, linh kiện với nhau và cho ra được mô hình phân loại cà chua theo màu sắc và khối lượng.
72
4.2 Đánh giá kết quả thu được.
Các nội dung mà nhóm đã đạt được trong khuôn khổ đồ án:
+ Trong 100 lần thử đã có 83 lần hệ thống xử lý đúng yêu cầu đặt ra. Suy ra hiệu suất của hệ thống nằm trong khoảng 83% ± 3%.
+ Kết quả đo khối lượng cà chua hiển thị lên LCD có độ chính xác trong khoảng ± 5%.
+ Tạo được hệ thống phân loại màu sắc và khối lượng hoàn thiện và dễ sử dụng.
Kết luận:
Trong hơn 2 tháng thực hiện đề tài với nhiều cố gắng và nỗ lực của nhóm cùng với sự hướng dẫn nhiệt tình của Tiến Sĩ Phan Đình Hiếu, đồ án của chúng em đã hoàn thành đúng thời gian yêu cầu đặt ra.
Các nội dung mà nhóm đã thực hiện được đó là thiết kế, thi công ra mô hình phân loại cà chua theo màu sắc và khối lượng. Tuy nhiên mô hình còn nhiều thiếu xót do phần tính toán còn nhiều thiếu sót. Nhìn chung đề tài chỉ dừng lại ở mức khá.
Trong quá trình làm đồ án, sinh viên đã rút ra được nhiều kinh nghiệm để tạo ra 1 sản phẩm hoàn thiện như: đầu tư thời gian, linh kiện trên thị trường, hiểu biết về các linh kiện, thiết kế bo mạch, lập trình hệ thống.
Kết quá nêu trên chỉ thực hiện được khoảng 90% so với mục tiêu đề ra vì còn 1 số lỗi trong quá trình hoạt động của hệ thống.
4.3 Hướng phát triển trong tương lai.
Một số hướng phát triển để hoàn thiện đề tài: + Kết nối với web sever giám sát thông số.
+ Thiết kế giao diện web để quản lý và điều khiển từ xa.
+ Mở rộng thêm các khâu: cấp cà chua tự động, khâu rửa, đóng thùng… + Sử dụng camera để nhận biết màu cà chua.
73
+ Mở rộng hệ thống để có thể phân loại thêm nhiều nông sản hoặc sản phẩm khác.
74
TÀI LIỆU THAM KHẢO
[1] PGS.TS Nguyễn Hữu Lộc, Cơ sở thiết kế máy, Nhà xuất bản Đại học Quốc Gia TP Hồ Chí Minh, 2005.
[2] Trịnh Chất, Lê Văn Uyển, Tính toán thiết kế hệ đẫn động cơ khi, tập một, Nhà xuất bản Giáo Dục, 2006.
[3] Nguyễn Trọng Hiệp, Chi tiết máy, Nhà xuất bản Giáo Dục, 2006. [4] Giáo trình Cảm biển và hệ thống đo lường, Đại học Công Nghiệp Hà
Nội.
[5] Giáo trình Chi tiết máy, Đại học Công Nghiệp Hà Nội.
[6] Giáo trình Thiết kế mạch điện tử, Đại học Công Nghiệp Hà Nội. [7] Ninh Đức Tốn, Sổ tay dung sai lắp ghép, Nhà xuất bản giáo dục. [8] https://www.alldatasheet.com
[9] Th.S Lê Văn Tiến Dũng, Điều khiển khí nén & thủy lực, Trường Đại học Kỹ thuật Công nghệ TP HCM. [10] https://mlab.vn/index.php?_route_=21025-huong-dan-su-dung- moudule-cam-bien-mau-sac-tcs3200.html [11] http://arduino.vn /bai-viet/233-su-dung-cam-bien-khoang-cach-hc- sr04 [12] http://arduino.vn/bai-viet/893-cach-dung-module-dieu-khien-dong- co-1298n-cau-h-de-dieu-khien-dong-co-de [13] http://robocon.vn/detail/ic5-ic-dem-dong-uln2803.html
75
PHỤ LỤC Thuật toán điều khiển hệ thống:
#include "HX711.h"
#include "LiquidCrystal_I2C.h" #include "Servo.h"
#define run_every(t) for(static uint16_t last_ ;\
(uint16_t)(uint16_t(millis())-last_) >=(t);\ last_ += (t)) #define LOADCELL_DOUT_PIN 2 #define LOADCELL_SCK_PIN 3 #define calibration_factor 900 HX711 scale;
volatile unsigned long count = 0;
volatile long pwm_ = 28; // cam bien mau
#define S0 4 #define S1 7 #define sensorOut 8 #define S2 11 #define S3 12 float weight[20]; //motor
76 #define mor 10 #define on 0 #define off 1 #define SDA A4 #define SCL A5 #define button A0 #define buzzer A1 #define sen1 A2 #define sen2 A3 Servo sv1, sv2, sv3; #define sv2_setup 80 #define sv3_setup 50 #define sv1_setup 130
#define sv1_move 60 // sen2 #define sv2_move 0
#define sv3_move 168
LiquidCrystal_I2C lcd(0x27, 16, 2); // Các tần số được đọc bởi các màu int redFrequency = 0;
int greenFrequency = 0; int blueFrequency = 0;
77 void sv_setup() { sv1.write(sv1_setup); sv2.write(sv2_setup); sv3.write(sv3_setup); }
void sv_move(byte i, byte time_) {
switch (i) { case 1:
for (int i = sv1_setup; i > sv1_move; i--) { sv1.write(i); delay(time_); } break; case 2:
for (int i = sv2_setup; i > sv2_move; i--) {
sv2.write(i); delay(time_); }
78 case 3:
for (int i = sv3_setup; i < sv3_move; i++) { sv3.write(i); delay(time_ + 2); } break; } }
unsigned long red; void setup() { digitalWrite(mor, off); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Phan loai"); lcd.setCursor(0, 1); lcd.print("ca chua"); //Serial.begin(115200);
sv1.attach(5); sv2.attach(6); sv3.attach(9);
pinMode(buzzer, OUTPUT); pinMode(button, INPUT); pinMode(mor, OUTPUT); pinMode(sen1, INPUT); pinMode(sen2, INPUT);
79 pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); // sensorOut là input pinMode(sensorOut, INPUT); // Thang đo tần số là 20% digitalWrite(S0, HIGH); digitalWrite(S1, LOW); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
scale.set_scale(calibration_factor); //This value is obtained by using the SparkFun_HX711_Calibration sketch
sv_setup();
for (int i = 0; i < 100; i++) { read_color_sensor(); red += redFrequency; } red = red / 100; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Can nang: "); lcd.setCursor(0, 1);
80 lcd.print("Mau sac: ");
sv1.detach(); sv2.detach(); sv3.detach(); }
float read_weight(void) { return (scale.get_units()); }
int xanh = 0, du_can = 0, thieu_can = 0; int color = 0; void read_color_sensor(void) { // Chọn đọc photodiodes đỏ (RED) digitalWrite(S2, LOW); digitalWrite(S3, LOW); // Đọc tần số
redFrequency = pulseIn(sensorOut, LOW); // Chọn đọc photodiodes xanh (GREEN) digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
// Đọc tần số
greenFrequency = pulseIn(sensorOut, LOW);
if (redFrequency - greenFrequency >= -45) { color = 0;
81 } else { //Serial.println("RED"); color = 1; } }
void lcd_print(byte col, byte row, String text, byte space = 3) {
lcd.setCursor(col, row); size_t lens = text.length(); lcd.print(text);
lcd.setCursor(lens + col, row); for (byte j = 0 ; j < space ; j++) {
lcd.print(" "); }
}
void loop() {
static unsigned long time_ = millis(); float weight_now=0;
float max_=0 ; // phan resset
82 { if (digitalRead(button) == LOW) { lcd.clear(); lcd.setCursor(0, 2); lcd.print("RESET MODE"); scale.tare(); // reset scale.set_scale(calibration_factor); delay(500);
float weight_ = read_weight(); lcd.setCursor(0, 0); lcd.print("Can nang: "); lcd.setCursor(10, 0); lcd.print(weight_); } /////
else { // neu k reset /// if(abs(read_weight()) > 1) { delay(120); for(int k = 0 ; k<20;k++) {
83 weight[k]= read_weight(); delayMicroseconds(500); } float tg; for(int u=0;u<20;u++) { for(int j = u+1;j<20;j++) { if(weight[j]>weight[u]) { tg=weight[j]; weight[j]=weight[u]; weight[u]=tg; } } } max_ = (weight[14]+weight[15])/2.0; // Serial.println(weight); if (max_ > 13.2) { // >5g delay(500);
84 sv1.attach(5); sv2.attach(6); sv3.attach(9); lcd.clear(); lcd_print(0, 0, "Weight:"); lcd_print(9, 0, String(max_)); lcd_print(0, 1, "Color:"); digitalWrite(buzzer, 1); delay(600); digitalWrite(buzzer, 0); sv_move(3, 5);
// neu nhu co vat thi cap phoo