GIỚI THIỆU
Tính cấp thiết của đề tài
Trong thời đại hiện đại, cùng với sự tiến bộ của các lĩnh vực khoa học kỹ thuật và kỹ thuật điện tử, việc sử dụng hệ thống điều khiển tự động đã trở thành yếu tố quan trọng trong mọi lĩnh vực như khoa học kỹ thuật, quản lý và công nghiệp tự động hóa Điều này đòi hỏi chúng ta phải hiểu và áp dụng điều khiển tự động một cách hiệu quả để đóng góp vào sự phát triển khoa học kỹ thuật toàn cầu nói chung và trong việc phát triển kỹ thuật điều khiển tự động nói riêng.
Dựa trên những trải nghiệm từ việc tham quan các doanh nghiệp có dây chuyền sản xuất, chúng tôi đã nhìn thấy nhiều quá trình tự động trong quá trình sản xuất Một trong những quá trình tự động hóa trong sản xuất là quá trình phân loại nông sản và thực phẩm sử dụng công nghệ xử lý ảnh.
Sau khi tham khảo và nghiên cứu về các đề tài và nghiên cứu trước đó, nhóm chúng tôi đã quyết định lựa chọn đề tài: "Thiết kế và xây dựng một hệ thống băng tải để phân loại cà chua dựa trên màu sắc và khối lượng".
Ý nghỉa khoa học và thực tiễn của đề tài
Nhóm nghiên cứu đã thành công trong việc thiết kế và chế tạo một hệ thống phân loại cà chua dựa trên màu sắc và khối lượng Hệ thống này đạt được một sự hoàn thiện về mặt cơ điện tử, kết hợp sự tích hợp của cơ khí, điện tử và tin học Đề tài này sẽ đóng vai trò là tài liệu tham khảo quan trọng, hỗ trợ tốt cho công tác đào tạo, nghiên cứu và ứng dụng, cũng như đóng góp vào sự phát triển của ngành khoa học và ứng dụng thực tế trong các nhà máy sản xuất.
Hệ thống này có những ưu điểm vượt trội, bao gồm sự ổn định trong quá trình hoạt động, tính linh hoạt và khả năng dễ dàng thay đổi các thông số đầu vào thông qua việc lập trình điều khiển linh hoạt Đặc biệt, hệ thống này đạt được mức độ chính xác cao trong việc phân loại cà chua.
Mục tiêu nghiên cứu của đề tài
Mô hình đã được thiết kế thành công, đạt đầy đủ các yếu tố cần thiết, bao gồm tính thẩm mĩ, độ chắc chắn và khả năng hoạt động ổn định Mô hình có thể mô phỏng toàn bộ các chức năng của một hệ thống thực tế.
Hệ thống này có khả năng phân loại sản phẩm dựa trên màu sắc và khối lượng, và hiển thị số lượng sản phẩm trên màn hình hiển thị Nó sử dụng băng chuyền để thực hiện quá trình phân loại và cung cấp chức năng cài đặt mức độ khối lượng cho quá trình này.Hơn nữa, hệ thống có khả năng điều khiển và giám sát thông qua màn hình cảm ứng.
Đối tượng và phạm vi nghiên cứu
Thu thập kiến thức về việc lựa chọn và phân loại cà chua, cũng như nắm vững ứng dụng của công nghệ xử lý ảnh trong việc phân tích đối tượng trong bài toán phân loại sản phẩm.
Tiếp cận và tìm hiểu về việc sử dụng Arduino và quá trình lập trình Arduino trong một ứng dụng thực tế.
Khám phá và nghiên cứu về máy tính nhúng Raspberry.
Kết hợp các thiết bị và linh kiện điện tử thành một mô hình hoàn chỉnh bằng cách lắp ráp chúng lại với nhau.
Phương pháp nghiên cứu
Ứng dụng tri thức đã học vào quá trình thiết kế và chế tạo một mô hình thực tế có khả năng áp dụng vào các tình huống thực tế Áp dụng kiến thức đã được học và thu thập từ các nguồn thông tin bên ngoài vào quá trình tính toán và thiết kế để đảm bảo hoạt động hiệu quả của băng tải.
Thực hiện mô phỏng với sản phẩm thực tế và tải trọng thực tế để đánh giá độ hoàn thiện và khả thi của dự án.
Kết cấu của Đồ án tốt nghiệp
Đồ án tốt nghiệp bao gồm 6 chương Trong đó:
Chương 2 trình bày tổng quan về đề tài.
Chương 3 nói về cơ sở lý thuyết của các lĩnh vực liên quan.
Chương 4 đề cập đến phương hướng và cách giải quyết vấn đề.
Chương 5 thực hiện thiết kế và tính toán.
Chương 6 trình bày đến phần chạy thử nghiệm mô hình thực tế và đưa ra kết quả.
TỔNG QUAN NGHIÊN CỨU ĐỀ TÀI
Nguyên tắc phân loại cà chua
2.2.1 Phân loại theo kích thước
Phân loại cà chua dựa trên kích thước giúp tạo sự đồng đều trong quả cà chua sau khi được chọn lọc, mang lại một diện mạo hấp dẫn và hợp ý với sở thích của người tiêu dùng. Tuy nhiên, việc phân loại theo kích thước không đảm bảo chất lượng của quả cà chua và không thể phân biệt được quả chín và quả chưa chín.
Hình 2 2: Dây chuyền phân loại cà chua theo kích thước
2.2.2 Phân loại theo màu sắc
Phân loại cà chua dựa trên màu sắc đảm bảo chất lượng và giúp việc bảo quản cà chua trở nên dễ dàng hơn, cung cấp thông tin về thời gian bảo quản phù hợp Mặc dù không đảm bảo việc chọn lọc các quả cà chua theo đồng đều và hấp dẫn như các nguyên tắc phân loại khác, việc phân loại theo màu sắc vẫn được coi là nguyên tắc quan trọng nhất trong việc đảm bảo chất lượng, vì chất lượng luôn được ưu tiên hàng đầu.
Hình 2 3: Dây chuyền phân loại cà chua theo màu sắc 2.2.3 Phân loại theo khối lượng
Giống như việc phân loại theo kích thước, phân loại cà chua theo khối lượng cũng nhằm đạt được sự đồng đều trong quả cà chua sau khi được lựa chọn Điểm khác biệt là nguyên tắc này dựa trên việc đo đạc khối lượng của quả cà chua Tuy nhiên, cũng giống như các nguyên tắc phân loại khác, phân loại theo khối lượng không đảm bảo chất lượng của quả sau khi được phân loại
Hình 2 4: Dây chuyền phân loại cà chua theo khối lượng
Tổng quan về phương pháp xử lý ảnh
Lĩnh vực xử lý ảnh là một lĩnh vực khoa học và công nghệ đầy tiềm năng Mặc dù nó được coi là một ngành khoa học mới so với nhiều lĩnh vực khác, nhưng tốc độ phát triển của nó là rất nhanh, đồng thời thúc đẩy sự phát triển của các trung tâm nghiên cứu và ứng dụng, đặc biệt là sự xuất hiện của máy tính đặc biệt được thiết kế cho việc xử lý ảnh.
Xử lý ảnh là một lĩnh vực sử dụng công nghệ để tăng cường và xử lý các hình ảnh được thu thập từ các thiết bị như máy ảnh, webcam Do đó, xử lý ảnh đã được áp dụng và phát triển trong nhiều lĩnh vực quan trọng như sau:
Trong lĩnh vực quân sự: xử lý và nhận dạng hình ảnh quân sự.
Trong lĩnh vực giao tiếp người máy: nhận dạng hình ảnh, xử lý âm thanh, đồ họa. Trong lĩnh vực an ninh và bảo mật: nhận diện khuôn mặt, nhận diện vân tay, mẫu mắt Trong lĩnh vực giải trí: trò chơi điện tử.
Trong lĩnh vực y tế: xử lý ảnh y sinh, chụp X-quang, MRI
Phương pháp xử lý ảnh bắt đầu từ việc nâng cao chất lượng và phân tích hình ảnh Một ứng dụng đầu tiên đã được biết đến là việc nâng cao chất lượng ảnh được truyền từ Luân Đôn đến New York vào những năm 1920 Các vấn đề liên quan đến nâng cao chất lượng ảnh bao gồm phân bố mức sáng và độ phân giải của ảnh Việc nâng cao chất lượng ảnh đã tiến triển mạnh mẽ vào khoảng những năm 1955, đặc biệt sau Thế chiến II khi máy tính phát triển nhanh chóng và tạo điều kiện thuận lợi cho xử lý ảnh số Vào năm 1964, máy tính đã có khả năng xử lý và nâng cao chất lượng ảnh từ mặt trăng và vệ tinh Ranger 7 của Mỹ, bao gồm việc làm nổi đường biên và lưu trữ ảnh Từ năm 1964 đến nay, các phương pháp xử lý, nâng cao chất lượng và nhận dạng ảnh đã phát triển không ngừng Các phương pháp trí tuệ nhân tạo như mạng nơ-ron nhân tạo, thuật toán xử lý hiện đại và cải tiến, công cụ nén ảnh ngày càng được áp dụng rộng rãi và mang lại nhiều kết quả khả quan hơn.
Tiếp theo ta sẽ xét các bước cần thiết trong quá trình xử lý ảnh Đầu tiên, ảnh tự nhiên từ thế giới bên ngoài được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước đây, ảnh thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR) Gần đây với sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo Mặt khác ảnh có thể được quét từ vệ tinh chụp trực tiếp bằng máy quét ảnh Hình dưới đây mô tả các bước cơ bản trong xử lý ảnh.
Hình 2 5: Các bước cơ bản trong xử lý ảnh 2.3.1 Thu nhận ảnh (Image Acquisition) Ảnh có thể được thu nhận thông qua máy ảnh màu hoặc đen trắng Thông thường, ảnh thu được từ máy ảnh là dạng ảnh tương tự (sử dụng camera ống kiểu CCIR với tần số quét 1/25, tức mỗi ảnh được quét thành 25 dòng) Ngoài ra, cũng có loại máy ảnh đã số hóa (như cảm biến CCD - Charge-Coupled Device) sử dụng photodiode để đo cường độ sáng tại từng điểm ảnh.
Máy ảnh thông thường thường sử dụng phương pháp quét dòng, tạo ra ảnh hai chiều. Chất lượng của ảnh thu được phụ thuộc vào thiết bị thu, cũng như điều kiện môi trường như ánh sáng và phong cảnh.
2.3.2 Tiền xử lý ảnh (Image processing)
Khi ảnh được thu nhận, có thể tồn tại nhiễu và độ tương phản thấp, do đó cần thực hiện các bước tiền xử lý để cải thiện chất lượng Chức năng chính của quá trình tiền xử lý là loại bỏ nhiễu và tăng độ tương phản, nhằm làm cho ảnh trở nên rõ nét hơn.
Phân đoạn ảnh là quá trình tách một hình ảnh đầu vào thành các vùng riêng biệt để thực hiện phân tích và nhận dạng Ví dụ, để nhận dạng chữ (hoặc mã vạch) trên các sản phẩm trong cửa hàng siêu thị để phân loại Đây là giai đoạn phức tạp và khó khăn nhất trong quá trình xử lý ảnh, có thể dễ dàng gây lỗi và ảnh hưởng đến độ chính xác của quá trình nhận dạng ảnh.
2.3.4 Biểu diễn ảnh (Image Representation)
Các điểm ảnh trong vùng ảnh đã được phân đoạn được kết hợp với các mã liên kết của các vùng lân cận tạo thành phần sau phân đoạn Việc chuyển đổi dữ liệu này thành dạng phù hợp là cần thiết để tiếp tục xử lý bằng máy tính Việc lựa chọn các thuộc tính để biểu diễn ảnh được gọi là trích xuất đặc trưng (Feature Extraction), trong đó các đặc tính của ảnh được mô tả dưới dạng thông tin định lượng hoặc được sử dụng như cơ sở để phân biệt đối tượng này với các đối tượng khác trong ảnh.
2.3.5 Nhận dạng ảnh và nội suy ảnh (Image Recognition and Interpretation)
Nhận dạng ảnh là quá trình xác định và xử lý ảnh để tìm ra thông tin cụ thể Thông thường, quá trình này thực hiện bằng cách so sánh ảnh đầu vào với các mẫu chuẩn đã được học (hoặc lưu trữ) trước đó Nội suy là quá trình suy luận và đưa ra kết quả dựa trên thông tin đã được nhận dạng.
Ví dụ, một dãy số và các dấu gạch ngang trên một phong bì thư có thể được nội suy thành một số điện thoại Có nhiều phương pháp phân loại ảnh khác nhau Theo lý thuyết về nhận dạng ảnh, các mô hình toán học của ảnh được phân loại thành hai loại cơ bản là:
+ Nhận dạng dựa trên các tham số.
+ Nhận dạng dựa trên cấu trúc.
Hiện nay, có nhiều ứng dụng phổ biến trong khoa học và công nghệ sử dụng các phương pháp nhận dạng đối tượng, bao gồm nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn bản, nhận dạng vân tay, nhận dạng mã vạch, nhận dạng khuôn mặt, "
2.3.6 Cơ sở tri thức (Knowledge Base)
Như đã đề cập trước đó, ảnh là một đối tượng phức tạp với các yếu tố như đường nét, độ sáng, dung lượng điểm ảnh và môi trường thu ảnh gây ra nhiễu Trong quá trình xử lý và phân tích ảnh, việc đơn giản hóa các phương pháp toán học nhằm đảm bảo tính tiện lợi cho quá trình xử lý, đồng thời có mong muốn mô phỏng quy trình tiếp nhận và xử lý ảnh theo cách mà con người thực hiện Trong các bước xử lý này, nhiều phương pháp hiện nay đã áp dụng các kỹ thuật trí tuệ nhân tạo để tương tự với quy trình xử lý của con người Do đó, việc khai thác cơ sở tri thức đã được đề cao và áp dụng trong lĩnh vực này.
2.3.7 Mô tả quá trình Ảnh sau khi số hóa sẽ lưu vào bộ nhớ, hoặc truyền sang các khâu tiếp theo để phân tích Nếu lưu trữ ảnh trực tiếp từ các ảnh thô, đòi hỏi dung lượng bộ nhớ cực lớn và không hiệu quả theo quan điểm ứng dụng và công nghệ Thông thường, các ảnh được gọi là các đặc trưng ảnh như: biên ảnh, vùng ảnh.
CƠ SỞ LÝ THUYẾT
Lập trình Arduino
Arduino là một bo mạch vi điều khiển được tạo ra lần đầu vào năm 2005 bởi một nhóm giáo sư và sinh viên đến từ Ý Bo mạch này được thiết kế để cảm nhận và điều khiển nhiều đối tượng khác nhau Arduino có khả năng thực hiện nhiều tác vụ, từ thu thập tín hiệu từ các cảm biến đến điều khiển các thành phần như đèn, động cơ và nhiều đối tượng khác Ngoài ra, bo mạch Arduino cũng có khả năng kết nối với nhiều module khác nhau như module đọc thẻ từ, ethernet shield, sim900A và nhiều loại module khác, từ đó mở rộng khả năng ứng dụng của nó.
Arduino bao gồm một board mạch phần cứng được xây dựng dựa trên vi xử lý AVR Atmel 8 bit hoặc ARM, Atmel 32 bit Hiện có tổng cộng 6 phiên bản phần cứng của Arduino, tuy nhiên phiên bản phổ biến nhất và được sử dụng nhiều nhất là Arduino Uno và Arduino Mega.
Phần mềm được sử dụng để lập trình cho bo mạch Arduino được gọi là Arduino IDE.
Cổng USB trên bo mạch Arduino là chân cắm được sử dụng để tải mã lập trình từ máy tính lên chip điều khiển Ngoài ra, đó cũng là cổng giao tiếp serial cho phép truyền dữ liệu giữa chip điều khiển và máy tính.
Jack nguồn được sử dụng để cung cấp nguồn điện cho Arduino Mặc dù có thể sử dụng cổng USB để cấp nguồn, nhưng trong một số trường hợp, như khi thực hiện các dự án ngoài trời, cần sử dụng nguồn điện khác với mức điện áp từ 9V đến 12V.
Hàng header trên bo mạch Arduino bao gồm các chân số từ 0 đến 12, được sử dụng để truyền và nhận các tín hiệu số Ngoài ra, có cả chân đất (GND) và chân điện áp tham chiếu (AREF).
Hàng header thứ hai chủ yếu liên quan đến các chân nguồn và đất.
Hàng header thứ ba là các chân được sử dụng để nhập và xuất các tín hiệu analog, để đọc thông tin từ các thiết bị cảm biến.
Chip điều khiển AVR là bộ phận xử lý trung tâm của bo mạch Arduino Mỗi phiên bản Arduino khác nhau sẽ sử dụng một chip điều khiển AVR khác nhau Ví dụ, trong Arduino Uno, chip điều khiển sử dụng là ATMega328.
Hình 3 2: Cấu tạo của Arduino 3.1.3 Các loại Arduino phổ biến
Trái ngược với hầu hết các board mạch lập trình trước đây, Arduino không đòi hỏi một phần cứng đặc biệt để nạp mã lên board mà chỉ cần sử dụng cáp USB Đồng thời, phần mềmArduino IDE sử dụng một phiên bản cơ bản của ngôn ngữ lập trình C++, giúp quá trình học lập trình trở nên đơn giản hơn Dưới đây là một số loại Arduino phổ biến mà chúng ta có thể tổng hợp:
1 Arduino Uno Đây là board đơn giản nhất và rất thích hợp cho những người mới bắt đầu khám phá lĩnh vực này Nó có tổng cộng 14 chân dữ liệu số, trong đó có 6 chân đầu vào ở mức điện áp 5V, có khả năng phân giải lên đến 1024 mức, hoạt động ở tốc độ 16MHz và có thể được cấp nguồn từ 7V đến 12V Kích thước của board này là 5,5x7cm.
Bao gồm có đến 20 chân, trong đó có 7 chân có thể phát PWM Loại này có thiết kế khá nhỏ gọn, kích thước chỉ 5x2cm.
Có thể nói đây chính là loại board có kích thước nhỏ nhất chỉ 2x4cm, việc lắp đặt được thực hiện dễ dàng Arduino Nano pinout được tích hợp vi điều khiển ATmega328P giống với Arduino UNO
4 Arduino Pro Đây là một thiết kế mới mẻ khi chân số không có sẵn, tùy vào số chân bạn sử dụng để gắn trực tiếp và giúp tiết kiệm được khoảng không lớn, ta thường thấy hai loại có nguồn 3.3V và 5V.
Chân số lên đến 64, 14 chân có thể phát PWM, 4 cổng truyền tiếp cùng kích thước khá lớn 5x10cm.
Là board không có cổng nối USB dùng lập trình Được thiết kế tại một chip nhỏ điều khiển Kết nối qua COM ảo và có thể kết nối với chuột và bàn phím.
Board mạch Lily Pad Arduino là một công nghệ dệt điện tử có thể đeo được được mở rộng bởi Leah Sang Buechley, và được thiết kế một cách cẩn thận bởi dòng Lea Leah vàSparkFun Mỗi board được thiết kế một cách tưởng tượng với các miếng kết nối khổng lồ
& một mặt sau mịn màng để cho chúng được khâu vào quần áo bằng chỉ Arduino này cũng bao gồm I / O, nguồn và cả board cảm biến được chế tạo đặc biệt cho hàng dệt may điện tử.
Board mạch RedBoard Arduino có thể được lập trình bằng cáp USB Mini-B bằng Arduino IDE Nó sẽ hoạt động trên Windows 8 mà không phải sửa đổi cài đặt bảo mật của bạn Nó không đổi do chip USB hoặc FTDI chúng tôi sử dụng và nó hoàn toàn phẳng ở mặt sau Tạo nó rất đơn giản để sử dụng trong thiết kế dự án Chỉ cần cắm board, chọn tùy chọn menu để chọn Arduino UNO và bạn đã sẵn sàng để tải lên chương trình Bạn có thể điều khiển RedBoard qua cáp USB bằng giắc cắm thùng.
Ngoài ra, còn có thể kể đến: Arduino Diecimila, Arduino Duemilanove, Arduino Due,v.v.
Arduino có nhiều ứng dụng đa dạng trong cuộc sống hàng ngày và trong việc xây dựng các thiết bị điện tử chất lượng cao Có thể đề cập đến một số ứng dụng như sau:
Lập trình nhúng Raspberry Pi
3.2.1 Khái niệm về Raspberry Pi
Raspberry Pi là một máy tính có kích thước tương tự như iPhone và có giá 35USD,được cài đặt hệ điều hành Linux Chương trình này được thiết kế chủ yếu để giảng dạy tin học cho trẻ em Raspberry Pi được phát triển bởi Raspberry Pi Foundation - một tổ chức phi lợi nhuận với mục tiêu xây dựng hệ thống mà nhiều người có thể sử dụng trong các tác vụ tùy chỉnh khác nhau 3.2.1 Raspberry Pi được sản xuất bởi 3 công ty gốc
(OEM): Sony, Qsida và Egoman, và được phân phối chính bởi Element14, RS Components và Egoman.
Ban đầu, dự án Raspberry Pi được tạo ra với mục tiêu cung cấp một máy tính giá rẻ và có khả năng lập trình cho sinh viên, nhưng nó đã thu hút sự quan tâm của nhiều đối tượng người dùng khác nhau Raspberry Pi được xây dựng xung quanh chip SoC Broadcom BCM2835, một chip xử lý di động mạnh mẽ nhưng nhỏ gọn, bao gồm CPU, GPU, bộ xử lý âm thanh/video và các tính năng khác, tất cả được tích hợp trong một chip tiết kiệm năng lượng.
Raspberry Pi không thể hoàn toàn thay thế máy tính để bàn hoặc laptop Vì BCM2835 dựa trên kiến trúc ARM, nên nó không hỗ trợ mã x86/x64, và do đó không thể chạy hệ điều hành Windows trên nó Tuy nhiên, Raspberry Pi vẫn có thể chạy Linux và cung cấp các tiện ích như trình duyệt web, môi trường desktop và các tác vụ khác Raspberry Pi là một thiết bị đa năng đáng kinh ngạc với nhiều linh kiện phần cứng giá rẻ nhưng vô cùng phù hợp cho các hệ thống điện tử, dự án tự làm (DIY), thiết lập hệ thống tính toán giá rẻ cho việc học và trải nghiệm lập trình.
Hình 3 12: Sơ đồ cấu tạo Raspberry Pi
Raspberry Pi có hai phiên bản, gồm Model A và Model B, với giá lần lượt là 25$ và 35$ Tuy nhiên, Model B là phiên bản phổ biến hơn Model B đi kèm với các thành phần phần cứng và cổng giao tiếp như sau:
+ SoC (System on a Chip) hoạt động ở tốc độ 700MHz và bộ nhớ RAM 512MB 1 cổng HDMI để xuất âm thanh/video số.
+ 1 cổng video RCA để xuất video analog.
+ Jack headphone stereo 3.5mm để xuất âm thanh analog.
+ 2 cổng USB 1 đầu đọc thẻ nhớ SD để tải hệ điều hành.
+ 1 cổng Ethernet LAN để kết nối mạng 1 giao diện GPIO (General Purpose Input/Output) để tương tác với các thiết bị ngoại vi.
Model A cũng tương tự như Model B, tuy nhiên có một số khác biệt như sau:
+ Không có cổng Ethernet, vì vậy người dùng cần sử dụng bộ chuyển đổi USB Wi-Fi hoặc Ethernet nếu muốn kết nối mạng.
+ RAM có dung lượng 256MB.
3.2.3 Hệ điều hành và phần mềm
Tổng quan, Raspberry Pi hỗ trợ nhiều hệ điều hành Linux khác nhau, tuy nhiên, Ubuntu không được hỗ trợ chính thức vì CPU của Raspberry Pi sử dụng kiến trúc ARMv6 Dưới đây là một số bản phân phối Linux nhúng (embedded) phổ biến mà Raspberry Pi có thể chạy, bao gồm Raspbian, Pidora, openSUSE, OpenWRT và OpenELEC. a Raspbian Đây là một phiên bản Linux được xây dựng dựa trên Debian (tương tự Ubuntu) và có giao diện LXDE (khác với GNOME) Nó bao gồm đầy đủ trình duyệt web, trình phát media, công cụ và nhiều tính năng khác Tóm lại, hệ điều hành này được tạo ra để người dùng có thể sử dụng Raspberry Pi như một máy tính cá nhân.
Hình 3 13: Hệ điều hành Raspbian b Raspbmc
Có thể gọi đây là phiên bản Raspbian mà đã bỏ bớt giao diện LXDE và thay thế bằng XBMC Khi sử dụng độ phân giải 720P (chỉ áp dụng cho giao diện người dùng, trong khi phát phim vẫn hỗ trợ độ phân giải 1080P), Raspberry Pi được tăng tốc (CPU 1GHz, Ram
500, DSP 250, GPU 450) và được cung cấp điện áp cao hơn 5%, giúp đạt được tốc độ khung hình trên 60fps (nếu tắt Vsync, có thể lên tới 80fps) Hỗ trợ phim với định dạng và codec đa dạng, tuy nhiên codec VC-1 và MPEG2 yêu cầu phí để mua mã mở khóa Tuy nhiên, các phim HD hiện tại thường không sử dụng các codec này, vì vậy không cần phải lo lắng quá nhiều Âm thanh được hỗ trợ đầy đủ từ DTS-HD Master, DTS, Dolby, MP3, ACC, tuy nhiên để trải nghiệm âm thanh 5.1, cần sử dụng receiver Raspberry Pi cũng hỗ trợ phát phim từ nhiều nguồn như NFS, samba, USB, HDD (3TB), UPNP, và nhiều nguồn khác.
Hình 3 14: Hệ điều hành Raspbmc
Cảm biến trọng lượng Loadcell
Loadcell là một thiết bị đo lực được sử dụng để tạo ra tín hiệu điện có độ mạnh tỷ lệ với lực đo được Nó được áp dụng rộng rãi trong các ứng dụng cân và phụ thuộc vào khả năng đo lường của từng loại loadcell, sẽ có các loại tương ứng Trong lĩnh vực kỹ thuật, thiết bị này được sử dụng đa dạng trong các hệ thống yêu cầu xác định khối lượng hoặc lực, và các tín hiệu điện tạo ra từ loadcell sẽ được chuyển đến bộ xử lý để xử lý tiếp.
Hình 3 15: Tổng quan về Loadcell
Hình 3 16: Các loại Loadcell a Load Cell khí nén: Đó là một loại Loadcell hoạt động dựa trên nguyên lý khí nén Cấu trúc của nó bao gồm một màng co dãn được gắn vào một bề mặt để đo lường khối lượng.
Bộ điều chỉnh không khí được sử dụng để kiểm soát lưu lượng khí đến hệ thống và thiết bị đo áp suất Do đó, khi một vật được đặt lên loadcell, nó sẽ tự điều chỉnh để tạo ra một lực cân bằng với trọng lượng của vật.
Lượng không khí cần thiết để cân bằng với trọng lượng của vật sẽ được đo, và thiết bị đo áp suất sẽ chuyển đổi nó thành tín hiệu điện tương ứng.
Hình 3 17: Loadcell khí nén b Load Cell thủy lực:
Cảm biến thủy lực được sử dụng để đo lường chất lỏng (như nước hoặc dầu) Các loại loadcell này hoạt động tương tự như loại loadcell khí nén, nhưng thay vì sử dụng chất khí, chúng sử dụng áp suất của chất lỏng.
Khi tải được đặt lên bề mặt cân, piston tạo ra áp suất lên chất lỏng bên trong Áp suất của chất lỏng tăng tỉ lệ với lực (khối lượng) được đặt lên.
Sau khi áp suất được điều chỉnh, bạn có thể xác định chính xác lực hoặc khối lượng đặt lên loadcell thủy lực.
Các thông số áp suất có thể được hiển thị giống như máy đo áp suất thông thường hoặc có thể chuyển đổi thành tín hiệu điện bằng cảm biến áp suất. c Loadcell điện dung
Loại này hoạt động dựa trên nguyên lý điện dung, với khả năng lưu trữ điện Loadcell có cấu tạo từ 2 tấm phẳng song song, các tấm sẽ có điện và một khí tích đủ điện nó sẽ được lưu trữ giữa 2 tấm.
Khả năng chứa điện, điện dụng phụ thuộc vào độ rộng chữa 2 tấm phẳng Khi tải được đặt lên trên tấm phẳng, khe hở sẽ bị thu hẹp lại và nó làm thay đổi điện dụng, từ đó tính toán được khối lượng.
Hình 3 19: Loadcell điện dung d Loadcell biến dạng kế
Loại loadcell này rất phổ biến và được gọi là loadcell biến dạng kế, nó hoạt động bằng cách thay đổi điện trở khi bị biến dạng Điện trở tỉ lệ với ứng suất hoặc độ biến dạng khi tải được đặt lên loadcell, từ đó giúp tính toán chính xác Điện trở từ biến dạng kế có tính tuyến tính, cho phép nó được chuyển đổi thành lực và sau đó là trọng lượng nếu cần thiết.
Hình 3 20: Loadcell biến dạng kế
Cấu trúc của loadcell biến dạng kế bao gồm 4 cảm biến biến dạng được lắp ghép với nhau theo dạng mạch cầu Mạch cầu giúp đo điện trở không xác định bằng cách cân bằng hai cảm biến trong mạch cầu, trong đó có một thành phần không xác định Mạch cầu cho phép đo chính xác đến từng phần nhỏ nhất (mini gam).
Hình 3 21: Cấu tạo Loadcell biến dạng kế
Các phần mềm sử dụng
Hình 3 22: Giao diện khởi động Protues
Proteus là một phần mềm giúp mô phỏng hoạt động của mạch điện tử, kết hợp cả phần thiết kế mạch và viết chương trình điều khiển cho nhiều họ vi điều khiển phổ biến như MCS-51, PIC, AVR và nhiều họ vi điều khiển khác.
Proteus là phần mềm mô phỏng mạch điện tử do Lancenter Electronics phát triển, hỗ trợ mô phỏng cho phần lớn các linh kiện điện tử thông dụng, đặc biệt tập trung vào việc hỗ trợ MCU như PIC, 8051 (MCS-51), AVR và Motorola.
Proteus là một bộ công cụ chuyên về mô phỏng mạch điện tử, bao gồm hai chương trình chính: ISIS cho phép mô phỏng mạch và ARES dùng để thiết kế mạch in Proteus là công cụ mô phỏng mạnh mẽ và đa dạng, hỗ trợ nhiều loại Vi Điều Khiển phổ biến như PIC, 8051, dsPIC, AVR, HC11, MSP430, ARM7/LPC2000 và nhiều loại vi điều khiển khác Nó cũng hỗ trợ nhiều giao tiếp như I2C, SPI, CAN, USB, Ethernet và có khả năng mô phỏng cả mạch số và mạch tương tự một cách hiệu quả Proteus là công cụ đáng tin cậy để thiết kế và mô phỏng mạch điện tử, cung cấp giải pháp toàn diện cho các kỹ sư và nhà phát triển trong việc phát triển sản phẩm và hệ thống điện tử ISIS đã trải qua quá trình nghiên cứu và phát triển trong hơn 12 năm và đã có hơn 12000 người dùng trên toàn cầu Điểm mạnh của ISIS là khả năng mô phỏng hoạt động của các hệ vi điều khiển mà không cần sử dụng bất kỳ phần mềm phụ trợ nào Ngoài ra, ISIS cũng cho phép xuất file sang ARES hoặc các phần mềm vẽ mạch in khác để hoàn thiện quy trình thiết kế.
Trong lĩnh vực giáo dục, ISIS có ưu điểm là hình ảnh mạch điện đẹp, cho phép người dùng tùy chỉnh đường nét, màu sắc mạch điện và thiết kế theo các mạch mẫu (templates). Những khả năng khác của ISIS bao gồm:
+ Tự động sắp xếp đường mạch và vẽ điểm giao đường mạch.
+ Dễ dàng chọn đối tượng và thiết lập thông số cho đối tượng.
+ Xuất file thống kê linh kiện cho mạch.
+ Xuất ra file Netlist tương thích với các chương trình làm mạch in thông dụng. + Hỗ trợ thiết kế mạch điện lớn với hàng ngàn linh kiện từ các công cụ quản lý. + Thiết kế theo cấu trúc (hierarchical design).
+ Khả năng tự động đánh số linh kiện.
Qt là một bộ thư viện đa nền tảng được sử dụng để phát triển giao diện đồ họa người dùng, đặc biệt là các ứng dụng với các cửa sổ Ban đầu, Qt được viết bằng C++ và được thiết kế để sử dụng trong C++ Tuy nhiên, hiện nay người ta đã có thể sử dụng thư viện này với nhiều ngôn ngữ lập trình khác như Java hay Python.
Qt không chỉ là một thư viện đơn thuần mà thực tế là một tập hợp các thư viện, hay được gọi là "framework" – tức là một khung kiến trúc cung cấp nhiều công cụ giúp việc lập trình trở nên hiệu quả hơn Mặc dù Qt được thiết kế chủ yếu để tạo ra các cửa sổ, nhưng điều này không có nghĩa là các tính năng của nó bị hạn chế chỉ ở mức đó.
Qt bao gồm nhiều "module" (thư viện con) khác nhau, trong đó chúng ta có thể tìm thấy nhiều tính năng đa dạng như:
+ Module GUI: Sử dụng để tạo các cửa sổ và giao diện người dùng Đây là thành phần chính mà giáo trình tập trung giảng dạy.
+ Module OpenGL: Hỗ trợ tạo cửa sổ hiển thị đồ họa 3D được quản lý bằng OpenGL.
+ Module vẽ: Cho phép người dùng tự thiết kế hình dạng các cửa sổ 2D.
+ Module mạng: Cung cấp các công cụ để thao tác với hệ thống mạng, hỗ trợ tạo ứng dụng tán gẫu, tải tệp tin, vv.
+ Module SVG: Cho phép tạo hình ảnh và minh họa vectơ, tương tự như flash.
+ Module script: Hỗ trợ quản lý các ngôn ngữ kịch bản như Javascript để thêm các tính năng vào ứng dụng.
+ Module XML: Hỗ trợ thao tác với các tệp tin có cấu trúc theo XML một cách hiệu quả.
+ Module SQL: Cho phép truy cập vào các cơ sở dữ liệu như MySQL, Oracle,
Qt được xây dựng là một framework đa nền tảng, cho phép phát triển ứng dụng di động và máy tính bảng, máy tính cá nhân, hệ thống nhúng và nhiều nền tảng khác.
Hình 3 24: QT đa nền tảng
PHƯƠNG HƯỚNG VÀ CÁC GIẢI PHÁP
Thiết kế phần cứng
4.2.1 Lựa chọn thiết bị và linh kiện a Arduino nano
Chức năng: xử lý tín hiệu từ các cảm biến và điều khiển hoạt động của các thiết bị ngoại vi
Thông số kỹ thuật được thiết kế theo đúng chuẩn chân, kích thước của Arduino Nano chính hãng.
+ IC nạp và giao tiếp USB UART FT232RL.
+ Điện áp cấp: 5VDC cổng USB hoặc 6-9VDC chân Raw.
+ Mức điện áp giao tiếp GPIO: TTL 5VDC.
+ Số chân Digital: 14 chân, trong đó có 6 chân PWM.
+ Số chân Analog: 8 chân (hơn Arduino Uno 2 chân).
+ Flash Memory: 32KB (2KB Bootloader).
+ Tích hợp Led báo nguồn, led chân D13, LED RX, TX.
+ Tích hợp IC chuyển điện áp 5V LM1117.
+ Kích thước: 18.542 x 43.18mm b Raspbery PI 3 model B
Chức năng: đóng vai trò làm trung tâm xử lý ảnh và chạy giao diện Thông số kỹ thuật:
+ Chipset Broadcom BCM2837 chạy ở tốc độ 1,2 GHz + Bộ vi xử lý bốn nhân 64-bit ARM Cortex-A53
+ Bluetooth 4.1 (Năng lượng Cổ điển & Thấp)
+ Bộ xử lý đa phương tiện Videocore IV® lõi kép
+ Đầu nối microUSB cho nguồn điện 2,5 A
+ 1 cổng kết nối video / âm thanh HDMI
+ Đầu nối video / âm thanh RCA 1 x
+ Đầu nối hiển thị DSI
+ Khe cắm thẻ nhớ microSD
+ Kích thước: 85 x 56 x 17 mm c Camera PI v2
Chức năng: thu thập thông tin hình ảnh cho Raspberry xử lý
+ Camera Raspberry Pi V2 8MP dùng cho máy tính nhúng Raspberry Pi. + Cảm biến IMX219 từ Sony.
+ Độ phân giải camera: 3280 x 2464 pixel stills
+ Độ phân giải video: HD 1080p30, 720p60 and 640x480p90 video + Kích thước: 25mm x 23mm x 9mm
+ Giao diện: CSI d Màn hình cảm ứng 3.5 inch
Hình 4 6: Màn hình cảm ứng 3.5 inch
Chức năng: hiện thị thông tin và giao tiếp với người dùng
+ Kích thước màn hình LCD: 2.8 inch
+ Diện tích hiển thị: 57.6mm * 47.2mm
+ Độ sâu màu: 16-bit (65K màu)
+ Điện áp làm việc: 3.3V hoặc 5V
+ Một điện áp đèn nền: 3.3V
+ Loại màn hình cảm ứng: điện trở, màn hình cảm ứng kính + Kich thước module: 51mm * 82.6mm
+ Kích thước: 8.8x5cm e Động cơ L298
Chức năng: điều khiển bật tắt động cơ băng tải
+ Sử dụng IC công suất L298N (ST NEW)
+ Điện áp tín hiệu 5V/ 0mA-36mA
+ Điện áp hoạt động động cơ 5V-35V
+ Dòng điều khiển động cơ 2A/1 mạch cầu H
+ Nhiệt độ hoạt động -20 tới +135
+ Công suất đầu ra 1 cầu H 25W
+ Kích thước 43*43*27mm f Cảm biến loadcell 1kg
Hình 4 8: Cảm biến loadcell 1kg
Chức năng: đo khối lượng của vật
+ Dùng điện trở 10k kéo lên cho giao tiếp I2C
+ Dải đo: -40 … + 125 ° C cho nhiệt độ cảm biến chịu được và -70 … + 380 ° C cho nhiệt độ đối tượng đo
+ Độ chính xác cao 0,5 ° C so với nhiệt độ rộng (0 … + 50 ° C cho cả hiệu chuẩn
Ta và To) Độ chính xác cao (y tế)
+ Giao diện kỹ thuật số tương thích SMBus
+ Đầu ra PWM có thể tùy chỉnh để đọc liên tục g Cảm biến vật cản hồng ngoại IR01
Hình 4 9: Cảm biến vật cản hồng ngoại IR01
Chức năng: kiểm tra vật cản
+ Điện áp sử dụng: 3.3~5vDC
+ Nhận biết vật cản bằng ánh sáng hồng ngoại.
+ Tích hợp biến trở chỉnh khoảng cách nhận biết vật cản. + Kích thước: 3.2 x 1.4cm h USB to com PL2303
Hình 4 10: USB to com PL2303
Chức năng: kết nối giữa Raspberry và
Arduino Thông số kỹ thuật:
+ Điện áp 5V DC cấp trực tiếp từ cổng USB
+ Ngõ ra dạng UART gồm 2 chân TX, RX
+ Các chân gồm: GND, TX, RX, VCC, 3.3V
+ Với 3 led trên board: led báo nguồn, led RX, led TX. + Kích thước 15 x 31 mm ii Modul ổn áp 5V USB
Hình 4 11: Module ổn áp 5V USB
Chức năng: Hạ áp từ 12V xuống 5V cho Raspberry, Arduino và các cảm biến sử dụng Thông số kỹ thuật
+ Mạch giảm áp xung hiệu suất cao tần số 125Khz
+ Đầu vào tối đa: 6 - 36VDC.
+ Đầu ra cố định: 5VDC - 3A.
+ Đầu ra có dạng USB, 2 cổng USB.
+ Kích thước: 59x21x17mm j Nguồn Adapter 12V-2A
Chức năng: cấp nguồn cho bộ điều khiển, các cảm biến và động cơ servo
+ Điện áp đầu vào: 100V~ 240V | 50/60Hz ± 15%.
+ Bảo vệ: quá tải, quá áp, ngắn mạch.
+ Làm mát: bằng đối lưu không khí tự do.
+ Tuân thủ an toàn: CCC/FCC/CE
+ Nhiệt độ bảo quản: -20 ~ 60°C k Nguồn Adapter 12V-1A
Chức năng: cấp nguồn cho bộ điều khiển, các cảm biến và động cơ servo Thông số kỹ thuật:
+ Điện áp đầu vào: 100V~ 240V | 50/60Hz ± 15%.
+ Bảo vệ: quá tải, quá áp, ngắn mạch.
+ Làm mát: bằng đối lưu không khí tự do.
+ Tuân thủ an toàn: CCC/FCC/CE
Chức năng: cấp chuyển động cho băng tải
+ Trọng Lượng: 150g n Thẻ nhớ 32GB StanDick
Hình 4 15: Thẻ nhớ 32GB StanDick
Chức năng: lưu trữ hệ điều hành và là bộ nhớ lưu trữ dữ liệu của Raspberry PI Thống số kỹ thuật:
+ Nhiệt độ lưu trữ: -40°C (-40°F) đến 85°C (185°F)
+ Nhiệt độ hoạt động: -25°C (-13°F) đến 85°C (185°F)
Hình 4 16: Sơ đồ kết nối
Nguồn nuôi cho bộ điều khiển từ adapter có điện áp 9VDC – 2A sẽ được cho qua module giảm áp Buck để giảm xuống 5V và cấp cho Raspberry pi cùng với màn hình cảm ứng và camera.
Từ nguồn 9VDC – 2A đi qua IC ổn áp 7805 (U2) giảm áp xuống còn 5V để cung cấp cho động cơ Servo Arduino cũng lấy nguồn nuôi trực tiếp từ nguồn 9V này vào chân V- in.
Arduino và Raspberry kết nối với nhau thông qua một USB chuyển mạch, đây là USBPL2303 có tác dụng chuyển đổi mức logic từ giao tiếp USB sang UART.
Các jump cắm kết nối với cảm biến và động cơ Servo được bố trí ở rìa ngoài của mạch in giúp dễ dàng kết nối.
Thiết kế phần mềm
4.3.1 Bảng phân công tín hiệu
Loại ngõ Ký hiệu Địa chỉ Chú thích
Input CB0 D13 Cảm biến vật cản tại buồng chụp
CB1 D12 Cảm biến vật cản tại thùng 1
CB2 D11 Cảm biến vật cản tại thùng 2
LOADCELL A0, A1 Cảm biến đo khối lượng
Ouput OUT1 D7 Chân số 1 điều khiển động cơ băng tải
OUT2 D8 Chân số 2 điều khiển động cơ băng tải
SV1 D9 Động cơ Servo gạt cà chua số 1
SV2 D10 Động cơ Servo gạt cà chua số 2
Bảng 4 1: Bảng phân công tín hiệu
Hệ thống được điều khiển và giám sát thông qua màn hình cảm ứng.
Bắt đầu hoạt động bằng cách nhấn nút Start, sau đó băng tải sẽ chạy.
Cà chua được đặt lên đầu băng tải và khi chúng đi qua buồng chụp, cảm biến vật cản CB0 sẽ phát hiện.
Băng tải sẽ dừng lại và camera sẽ chụp ảnh để gửi về Raspberry Pi để tiến hành phân tích màu sắc.
Sau khi phân tích màu, Raspberry Pi sẽ gửi kết quả cho Arduino Đồng thời, cảm biến loadcell sẽ đọc khối lượng cà chua và tín hiệu sẽ được khuếch đại bởi module Hx711 trước khi được gửi đến Arduino.
Sau 2 giây dừng, băng tải tiếp tục chạy.
Nếu cà chua là loại chín nhẹ, khi đi qua cảm biến CB1, động cơ SV1 sẽ gạt cà chua xuống thùng chứa số 1 và số lượng quả chín nhẹ sẽ được đếm thêm 1.
Nếu cà chua là loại chín nặng, khi đi qua cảm biến CB2, động cơ SV2 sẽ gạt cà chua xuống thùng chứa số 2 và số lượng quả chín nặng sẽ được đếm thêm 1.
Nếu là quả xanh, cà chua sẽ được đưa xuống cuối băng tải và rơi vào thùng chứa số 3.
Số lượng quả xanh sẽ được đếm thêm 1.
Khai báo nang = 0, nhe = 0, xanh = 0
CB0 == 1 S Đ Dừng băng tải Đọc khối lượng Đọc màu sắc
Hình 4 18: Lưu đồ thuật toán 1
Hình 4 19: Lưu đồ thuật toán 2
CB0 Cảm biến vật cản tại buồng chụp, = 1 : có vật cản
CB1 Cảm biến vật cản tại thùng 1 chứa quả chín nhẹ, = 1 : có vật cản CB2 Cảm biến vật cản tại thùng 2 chứa quả chín nặng, = 1 : có vật cản nhe Biến lưu số lượng quả chín nhẹ nang Biến lưu số lượng quả chín nặng xanh Biến lưu số lượng quả chín xanh
Bảng 4 2: Giải thích ký hiệu trên lưu đồ thuật toán
ĐỀ XUẤT CÔNG NGHỆ TÍNH TOÁN, THIẾT KẾ
Thiết kế cơ khí
5.1.1 Tính toán và thiết kế băng tải
Hình 5 1: Mô hình băng tải
Trọng lượng trái cà chua lớn nhất = 0,25kg.
Trọng lượng dây đai băng tải = 0,2kg.
Ta có hệ số ma sát giữa vật liệu tấm trên cùng (nhựa kỹ thuật) và vật liệu đường ray dẫn hướng là à=0,15 (phụ lục II)
Ta chọn hệ số ma sỏt : à=0,15 Đường kính trục băng tải D = 34mm
Tốc độ yêu cầu của băng tải V = 2150 mm/phut
Tốc độ quay trục băng tải N1 = × = ×34 2150 ≈ 20 vòng/phút (2)
Chọn tỉ số truyền = 1 => Tốc độ quay hộp số N = N1 = 20 vòng/phút.
Vậy ta chọn loại động cơ có tốc độ vòng quay 20 vòng/phút và công suất > 0.9675w.
Chọn động cơ giảm tốc 12V RPM LS220 có công suất 12W và tốc độ quay 20 vòng/phút.
5.1.2 Tính toán chọn động cơ Servo
Nhiệm vụ của động cơ Servo trong mô hình là thực hiện một góc quay 60 0 để đưa cần gạt đến vị trí gạt quả trên băng tải.
Tốc độ quay yêu cầu: 0.8s/60 0
Khối lượng cần gạt: m = 0.15 kg
Chiều dài cần gạt: l = 12.8 cm
Momen quán tính vật thể quay: = × 2
Momen quán tính bộ phận chuyển động: : = × 2
Momen xoắn của động cơ: = 2 = 6.144 × 1.308 = 8.036 (7) Vậy ta chọn động cơ RC Servo
MG996R có momen xoắn 9.4-11 kg.cm (Thư viện dùng cho động cơ Servo MG996R tra phụ lục II)
Hình 5 2: Động cơ servo MG996R
5.1.2 Bản vẽ các hình chiếu của mô hình a Hình chiếu đứng
Hình 5 3: Bản vẽ hình chiếu đứng
Hình 5 4: Hình chiếu đứng của mô hình b Hình chiếu bằng
Hình 5 5: Bản vẽ hình chiếu bằng
Hình 5 6: Hình chiếu bằng của mô hình
Hình 5 7: Mô hình hoàn chỉnh mặt trước
Hình 5 8: Mô hình hoàn chỉnh mặt sau
Thiết kế giao diện
Bước 1: Khởi tạo giao diện.
Mở phần mềm QT Designer lên và chọn new, chọn Main Window để khởi tạo giao diện.
Hình 5 9: Giao diện QT Designer
Vào Property Editor hay đổi kích thước cho phù hợp bằng cách thay đổi thông số mục Width và Height trong bảng Qwidget.
Sau khi thay đổi xong ta được giao diện với nền xám.
Thay đổi màu nền cho giao diện bằng cách kích chuột phải vào nền, chọn Change Style Sheet.
Bảng lựa chọn hiện ra Tại Add Color chọn background-color
Hình 5 13: Chọn background- color Chọn màu sắc mong muốn
Bước 2 Tạo tiêu đề cho giao diện.
Tạo bản nền cho mục tiêu đề Tại mục Display Widgets chọn label.
Thêm một label hiển thị text là tên của hệ thống với màu sắc trùng với màu của bảng nền.
Hình 5 16: Tên tiêu đề đã được đặt
Bước 3 Tạo khung phân tách các phần trong giao diện.
Thêm lable để tạo khung phân tách các vùng trong giao diện.
Hình 5 17: Tạo thêm khung cho giao diện
Thêm 3 khung nữa và thay đổi kích thước và màu sắc các khung cho phù hợp với nền trong StyleSheet.
Hình 5 18: Các khung trong giao diện đã tạo
Bước 4 Thêm các bảng hiển thị hình ảnh.
Thêm một label hiển thị hình ảnh camera, chỉnh sửa tên và kích thước, màu sắc, vị trí cho bảng hiển thị này trong mục Property Editor.
Kết quả được bảng hiển thị hình ảnh từ camera.
Hình 5 19: Label hiển thị hình ảnh từ camera Tương tự thêm một label hiển thị kết quả xử lý ảnh.
Hình 5 20: Label hiển thị kết quả xử lý ảnh
Bước 5 Thêm các bảng hiển thị thông số.
Thêm một label hiển thị loại quả, đặt tên và kích thước, vị trí thích hợp.
Copy thêm một bảng và chỉnh sửa lại tên trại mục name để làm bảng hiển thị khối lượng.
Tương tự ta thêm các bảng hiển thị số lượng quả và đặt các nhãn tên bên trên chúng. Hoàn thành thêm các bảng hiển thị.
Hình 5 21: Giao diện cơ bản
Bước 6 Thêm các nút nhấn và thanh cài đặt khối lượng.
Tại mục Input Widgets chọn Horizontal Slider để tạo thanh trượt cài đặt khối lượng.
Chọn giá trị min max tại mục QAbstracSlider.
Hoàn thành thêm thanh cài đặt khối lượng.
Thêm một Label bên cạnh thanh cài đặt để hiển thị khối lượng cài đặt.
Hình 5 24: Giao diện sau khi cài thanh đặt khối lượng Tại mục Buttons chọn Push Button để tạo nút nhấn.
Thay đổi màu sắc trong Style Sheet.
Chỉnh text và kích thước như các Label ở trên cho phù hợp, hoàn thành việc thêm nút nhấn “Start/Stop”.
Tương tự hêm nút “Đặt” để xác nhận cài đặt khối lượng phân loại.
Tiếp tục thêm nút “Thoát” để thoát giao diện Hoàn thành giao diện giám sát và điều khiển.
Hình 5 26: Giao diện hoàn chỉnh
Xác định màu sắc cà chua bằng xử lý ảnh
ảnh Bước 1 Chụp mẫu. Đặt cà chua tại điểm xử lý trong buồng chụp, thiết lập ánh sáng chuẩn với trong quá trình hoạt động.
Tiến hành chụp ảnh và lưu lại kết quả, thay các quả khác và chụp lại hình ảnh.
Hình 5 27: Hình ảnh cà chua được đưa vào
Bước 2: Đọc màu sắc nền và tiến hành cắt nền Cắt lấy vùng ảnh trung tâm.
Hình 5 28: Vùng ảnh trung tâm
Dùng chương trình hiển thị màu sắc, tạo độ để xác định màu nền bằng cách đưa chuột đến các vị trí nền và đọc màu sắc tại vị trí đó.
Hình 5 29: Đọc giá trị màu của phần nền
Xác định nhiều điểm khác nhau và tiến hành ước lượng giá trị min max không gian màu của vùng nền.
Bước 3: Tách lấy vùng nền, vùng không phải nền sẽ là quả và được bôi đen.
Hình 5 30: Tách lấy vùng ảnh nền Đảo ngược lại vùng ảnh nền để tạo mặt nạ lấy vùng ảnh quả
Hình 5 31: Đảo lấy vùng ảnh quả Nhân ảnh mặt nạ với ảnh đầu vào để được ảnh tách lấy quả
Hình 5 32: Vùng ảnh quả được tách
Bước 4: Đọc giá trị Red màu sắc trung bình trong không gian RGB của ảnh, các điểm đen có không gian màu = (0,0,0) được lược bỏ và không tính vào kết quả đọc giá trị.
Thay quả xanh và và xác định giá trị Read.
Hình 5 33: Tiến hành các bước trên quả xanh
Như vậy ta xác định được gần đúng quả chín sẽ có giá trị R = 150 và quả xanh có R 4, hai giá trị này với các quả khác nhau sẽ có giao động kết quả Vậy khoảng xác định sẽ nằm giữa hai giá trị này, ta chọn giá trị quả xanh < 100 < quả chín.
Thời gian xử lý ảnh tính được là time = 0.05s.
CHẾ TẠO THỬ NGHIỆM – ĐÁNH GIÁ
Thực nghiệm hệ thống
Cài đặt khối lượng cà chua trên thanh trượt và nhấn nút “ Đặt” để cài đặt khối lượng phân loại. Đưa cà chua nên đầu băng tải, nhấn Start hệ thống bắt đầu hoạt động, băng tải chạy.
Khi đến buồng chụp hệ thống tiến hành chụp ảnh phân tích màu sắc và đọc khối lượng quả.
Hình 6 2: Đưa cà chua qua cảm biến và chụp ảnh
Hình 6 3: Thông tin quả cà chua 1 trên màn hình
Hình 6 4: Cần gạt đưa quả cà chua vào thùng số 1
Quả này có khối lượng 57g nhở hơn 60g cài đặt nên được xác định là quả chín nhẹ. Khi đi qua cảm biến CB1 sẽ được động cơ số 1 gạt xuống thùng chứa số 1 và tăng số lượng quả chín nhẹ thêm 1.
Hình 6 5: Thông tin quả cà chua 2 trên màn hình
Quả chín và có khối lượng bằng 76g lớn hơn khối lượng cài đặt là 60g nên thuộc quả chín nặng Khi đi qua cảm biến CB2 sẽ được động cơ gạt số 2 gạt xuống máng phân loại và đến số lượng quả chín nặng thêm 1.
Hình 6 6: Cần gạt đưa quả cà chua vào thùng số
2 Đưa quả xanh lên băng tải Phân tích màu sắc tại buồng chụp.
Hình 6 7: Quả cà chua đi qua cảm biến trên băng tải
Hình 6 8: Thông tin quả cà chua xanh trên màn hình
Quả xanh được đưa xuống cuối băng tải đi qua cảm biến CB3 và rơi xuống thùng chứa số 3, số lượng quả xanh được đếm lên 1.
Hình 6 9: Quả cà chua xanh được đưa xuống thùng số 3
Kết quả và đánh giá quá trình chạy thử nghiệm trên mô hình thật:
+ Các cảm biến hồng ngoại hoạt động tốt.
+ Thuật toán điều khiển chạy đúng theo yêu cầu đặt ra.
+ Độ nhạy của hệ thống tốt, ngay lập tức thực hiện các lệnh khi có tín hiệu đầu vào.
+ Làm việc ổn định, đạt đầy đủ các yêu cầu đề ra.
❖ Ý nghĩa khoa học và ứng dụng thực tiễn Ý nghĩa nghiên cứu: nhóm nghiên cứu đã thành công trong việc thiết kế và chế tạo hệ thống phân loại cà chua theo màu sắc và khối lượng, đây là một đề tài mang tính chất nghiên cứu mới và góp phần làm gia tăng kiến thức về ứng dụng của cơ khí, điện tử và tin học trong lĩnh vực này Kết quả nghiên cứu có thể trở thành tài liệu tham khảo cho các nghiên cứu tiếp theo về phân loại sản phẩm và ứng dụng của công nghệ trong lĩnh vực tương tự. Ý nghĩa đào tạo: kết quả của đề tài này có thể được sử dụng để phục vụ trong quá trình đào tạo sinh viên, giúp các sinh viên hiểu rõ hơn về cách thức hoạt động của hệ thống cơ điện tử và quá trình phân loại sản phẩm dựa trên màu sắc và khối lượng. Ứng dụng trong công nghiệp: Hệ thống phân loại cà chua theo màu sắc và khối lượng có thể áp dụng trong các nhà máy sản xuất cà chua để tăng hiệu suất và độ chính xác trong quá trình phân loại sản phẩm Điều này giúp tiết kiệm thời gian và công sức, đồng thời giảm thiểu lỗi phân loại và tăng cường chất lượng sản phẩm. Ứng dụng công nghệ IoT: Đề tài còn đề cập đến việc áp dụng công nghệ IoT (Internet of Things) để điều khiển và giám sát hệ thống từ xa Điều này mang lại sự linh hoạt và tiện lợi trong việc quản lý và điều khiển quá trình phân loại cà chua, đồng thời giúp giảm thiểu sự can thiệp thủ công và tăng cường tự động hóa trong quá trình sản xuất.
Tăng tốc độ xử lý: Mục tiêu là cải thiện tốc độ xử lý của hệ thống để tăng năng suất sản xuất.
Xây dựng kết cấu hoàn thiện: Tiếp tục nghiên cứu và phát triển kết cấu cơ khí, mạch điều khiển và động cơ để tạo ra một hệ thống hoàn thiện, phù hợp với yêu cầu thực tế của nhà máy sản xuất cà chua. Ứng dụng công nghệ IoT: Tiến xa hơn trong việc áp dụng công nghệ IoT để tăng cường tính linh hoạt và giám sát từ xa của hệ thống.
❖ Kết luận và đề nghị
Sau một thời gian nghiên cứu, tìm hiểu từ các môn học liên quan đề tài “Thiết kế và chế tạo băng tải phân loại cà chua theo màu sắc và khối lượng” của chúng em đã hoàn thành Trong quá trình thực hiện nhóm chúng em đã:
+ Trang bị thêm kiến thức về phân loại cà chua, ứng dụng của xử lý ảnh trong bài toán phân loại sản phẩm.
+ Tìm hiểu về Arduino và cách lập trình Arduino trong một ứng dụng thực tế.
+ Tìm hiểu về máy tính nhúng Raspberry.
+ Biết được cách sử dụng các thiết bị trong một đề tài phân loại sản phẩm.
Trong khoảng thời gian thực hiện đề tài có một số nội dung em chưa thể tối ưu do nhiều lí do khác nhau
Dù đã hoàn thiện mô hình, nhưng sẽ còn rất nhiều sai sót, mong được thầy/ cô hướng dẫn và nhận xét để chúng em có thể tiến sâu hơn và không chỉ dừng lại ở đồ án tốt nghiệp mà còn phát triển hơn trong tương lai.
Hoàn thành mô hình cho Đồ án tốt nghiệp, chúng em sẽ chú trọng hơn trong việc nâng cao điều khiển, tính đồng bộ chung của các linh kiện với nhau Hoàn thiện mô hình không chỉ ở phần điều khiển mà còn phần thiết kế.
[1] Tống Văn On, Hoàng Đức Hải - Họ vi điều khiển 8051 - NXBLao động- Xã hội; Xuất bản năm 2009
[2] TS Nguyễn Tất Bảo Thiện, KS Phạm Quang Huy - Lập trình hệ thống nhúng với Raspberry – NXB Thanh niên
[3] Hoàng Trang, Bùi Quốc Bảo - Lập trình hệ thống nhúng - NXB Đại học quốc gia TP
[4] Huỳnh Đắc Thắng - Kỹ thuật số thực hành - NXB KH-KT; Hà Nội 2006
[5] Phan Minh Thanh, Hồ Viết Bình – Giáo trình Công nghệ chế tạo máy – NXB Đại học quốc gia TP HCM 2013
[6] Th.S Nguyễn Trần Minh Nguyệt, KS Phạm Quang Huy - Xử lý ảnh với Arduino và Raspberry - NXB Thanh niên; TP HCM 30-5-2020
[7] Nguyễn Hồng Thái – Giáo trình SolidWorks
[8] Trường Kỹ Thuật Công Nghiệp Việt Nam-Hàn Quốc - Cảm biến III – NXB Lao Động-Xã Hội 2001
[9] TS Trần Minh Sơn, TS Lê Hoàng Minh, KS Phạm Quang Huy – Lập trình Arduino với IOT Hệ vạn vật kết nối – NXB Thanh niên
[10] TS Quách Thanh Hải, Th.S Lê Nguyễn Hồng Phong, KS Phạm Quang Huy – Giáo trình điện tử công suất Mạch biến đổi điện áp – NXB Thanh niên
[11] Nguyễn Đình Phú, Phạm Ngọc Anh – Giáo trình Vi xử lý – NXB Đại học quốc gia
[12] PGS.TS Nguyễn Ngọc Phương, PGS.TS Nguyễn Trường Thịnh – Sổ tay hệ thống
Cơ điện tử - NXB Đại học quốc gia TP HCM 2016
[13] Lê Thanh Đạo, Huỳnh Thị Thu Hiền, Phạm Quang Huy – Vẽ, Mô phỏng, Lập trình vi xử lý và vi điều khiển với Protues - NXB Đại học quốc gia TP HCM 2019
PHỤ LỤC I Code lập trình Arduino
HX711 scale(A1, A0); float hieuchinh = 1; float zero; float cannang; int m = 0, m_set = 0;
String dataa = ""; char mang[30]; char *token1, *token2, *token3, *token4; int loai = 0, st = 0, i = 0; int cng = 0, cnh = 0, xanh = 0, runn = 0;
/ put your setup code here, to run once: pinMode(CB1, INPUT_PULLUP); pinMode(CB2, INPUT_PULLUP); pinMode(CB3, INPUT_PULLUP); pinMode(CB4, INPUT_PULLUP); pinMode(L1, OUTPUT); pinMode(L2, OUTPUT); digitalWrite(L1, LOW); digitalWrite(L2, LOW); scale.set_scale(1771.01f); scale.tare(); zero = scale.get_units(1) * hieuchinh; cannang = scale.get_units(1) * hieuchinh - zero; m = (int)cannang; servo1.attach(9); servo2.attach(8); servo1.write(thu); servo2.write(thu); gui_du_lieu();
*******************// void serialEvent() { while (Serial.available()) { dataa = Serial.readStringUntil('\n'); dataa.toCharArray(mang, 20); token1 = strtok(mang, "|"); token2 = strtok(NULL, "|");
String st2(token2); if (st1 == "a") st = st2.toInt(); else if (st1 == "b") m_set = st2.toInt(); else if (st1 == "c") loai = st2.toInt();
*******************// void Auto() { if (st == 1) { digitalWrite(L2, HIGH); if (digitalRead(CB1) == 0) { delay(400); digitalWrite(L2, LOW); delay(1000); runn = 1; gui_du_lieu(); doc(6); delay(1000); runn = 0; gui_du_lieu(); while (digitalRead(CB1) == 0) { digitalWrite(L2, HIGH); delay(200);
} if (loai == 0) { if (m < m_set) { if (digitalRead(CB2) == 0) { servo1.write(gat); delay(5000); servo1.write(thu); cnh++; delay(200); gui_du_lieu();
} else { if (digitalRead(CB3) == 0) { servo2.write(gat); delay(5000); servo2.write(thu); cng++; delay(200); gui_du_lieu();
} else { if (digitalRead(CB3) == 0) { while (digitalRead(CB3) == 0) { delay(500);
} else { digitalWrite(L2, LOW); doc(1); gui_du_lieu(); delay(200);
*******************// void doc(int lan) { for (i = 0; i < lan; i++) { cannang = scale.get_units(1) - zero;
Code lập trình Raspberry from PyQt5 import QtWidgets,uic from PyQt5.QtWidgets import QApplication, QWidget, QPushButton,
QLabel, QVBoxLayout from PyQt5 import QtCore from PyQt5.QtGui import QIcon, QPixmap, QFont from PyQt5.QtCore import QTimer, QTime, Qt from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * import time import cv2 from time import sleep import numpy as np import array as arr import math import sys import serial import os from imutils.video import VideoStream from imutils import face_utils from PIL import Image import imutils from datetime import datetime
# - ser = serial.Serial('/dev/ttyUSB0',9600)
#ser = serial.Serial('COM1',baudrate = 9600, timeout = 1) print(ser.name) vs = VideoStream(src=0).start() cp = 0 m_save = 0; m = 0; cng = 0; cnh = 0; xanh 0; mang = []*10 loai = 0; runn = 0 st = 0; loai = 0 def Time(): global status_str global temp_str global temp global status global m_save, m_set, m, cng, cnh, xanh, loai, runn global st, loai m_set = call.Slider.value() call.lb_set.setText(str(m_set) + " Gam") call.lb_m.setText(str(m) + " Gam") call.lb_cng.setText(str(cng)) call.lb_cnh.setText(str(cnh)) call.lb_x.setText(str(xanh))
# Đọc ảnh từ camera frame = vs.read() frame = cv2.flip(frame,1)
# chỉnh kích thước ảnh để tăng tốc độ xử lý frame = imutils.resize(frame, width`0)
# Hiển thị các ảnh lên label liên tiếp như một video img = QImage(frame, frame.shape[1], frame.shape[0],
QImage.Format_RGB888).rgbSwapped() pix = QPixmap.fromImage(img) call.lb_im.setPixmap(pix) if st == 0:
80 call.STASTO.setStyleSheet("background-color: rgb(255, 0, 0)") elif st == 1: call.STASTO.setStyleSheet("background-color: rgb(85, 255, 0)")
# -Nhận dữ liệu - if(ser.in_waiting > 0): s = ser.readline() #Doc vao data data = s.decode() # decode s data = data.rstrip() # cut "\r\n" at last of string print(data) #In ra man hinh mang = data.split("|") m = mang[0] cng = int(mang[1]) cnh = int(mang[2]) xanh = int(mang[3]) runn = int(mang[4]) if runn == 1:
#img1 = cv2.imread("1.jpg",1) img1 = frame img1 = img1[73:416,75:504] min_color = np.array([90, 60, 0]) max_color = np.array([180, 120, 65]) maskk = cv2.inRange(img1, min_color, max_color) im_bw = cv2.threshold(maskk, 100, 255, cv2.THRESH_BINARY_INV)[1] final = cv2.bitwise_and(img1, img1, mask = im_bw) img2 = QImage(final, final.shape[1],final.shape[0],final.strides[0],
QImage.Format_RGB888).rgbSwapped() pix2 = QPixmap.fromImage(img2) call.lb_im_2.setPixmap(pix2) dem = 0
'''for y in range(0,343): for x in range(0,429): px = final[y][x]
R = R + px[2] if px[0] != 0 or px[1] != 0 or px[2] != 0: dem = dem + 1'''
#3print ("dem = ",dem) x = 0 y = 0 for i in range(0,5780): px = final[y][x]
R = R + px[2] if px[0] != 0 or px[1] != 0 or px[2] != 0: dem = dem + 1 if x < 425: x = x + 5 else : y = y + 5 x = 0
TB = R/dem if TB > 100: loai = 0 else : loai = 1
# - runn = 0 ser.write(b'c') ser.write(b'|'); ser.write(str(loai).encode()) ser.write(b'\r\n') if loai == 0: call.lb_mau.setText("QUẢ CHÍN") else: call.lb_mau.setText("QUẢ XANH")
# -# def thoat(): call.close() exit(app.exec())
# -# def dat(): ser.write(b'b') ser.write(b'|') ser.write(str(m_set).encode()) ser.write(b'\r\n') ser.flush()
# -# def stasto(): global st st = st + 1 if st >= 2: st = 0 ser.write(b'a') ser.write(b'|') ser.write(str(st).encode()) ser.write(b'\r\n') ser.flush()
# -# def doc_mau(): global loai loai = 1
# -# app=QtWidgets.QApplication([]) call=uic.loadUi("AUTO.ui") call.THOAT.clicked.connect(thoat) call.DAT.clicked.connect(dat) call.STASTO.clicked.connect(stasto) call.timer = QTimer() call.timer.timeout.connect(Time) call.timer.start(50) call.show() app.exec()
PHỤ LỤC II Bảng tra hệ số ma sát
Thư viện dùng cho Động cơ Servo MG996R
Servo myservo; // create servo object to control a servo void setup() { myservo.attach(9,600,2300); // (pin, min, max)
} void loop() { myservo.write(0); // tell servo to go to a particular angle delay(1000); myservo.write(90); delay(500); myservo.write(135); delay(500); myservo.write(180); delay(1500);