You are on page 1of 61

DEGREE DỰ ÁN CƠ KỸ THUẬT,

TRONGchu kỳ đầu tiên, 15 CREDITS

Stockholm 2017 ,

Automatic Color Mixer


Một phương pháp để được công nhận màu tự động và nhân rộng

MAX Lindgren MAX

Thiel

KTH ROYAL HỌC VIỆN CÔNG NGHỆ TRƯỜNG KỸ THUẬT CÔNG NGHIỆP VÀ QUẢN

Automated Color Mixer

Một phương pháp để được công nhận màu tự động và nhân rộng

MAX Lindgren
MAX Thiel

Luận văn tốt nghiệp cử nhân tại ITM


Supervisor: Pouya Mahdavipour
Examiner: Nihad Subasic

TRITA MMK 2017: 32 MDAB 650


trừu tượng

Trong suốt lịch sử màu sắc đã là một cách quan trọng để cơ thể sống để báo hiệu
một cái gì đó để môi trường xung quanh. Ví dụ, màu sắc của lá hoặc cánh hoa của
một nhà máy đã được con đường mà nhà máy giao tiếp với môi trường xung quanh
của nó ví dụ để thu hút côn trùng lây lan DNA của nó, hoặc để báo hiệu rằng nó là
độc hại. Động vật cũng đã được sử dụng màu sắc để gây ấn tượng với giới tính khác
hoặc để dọa loài động vật khác để ở lại còn sống và lây lan DNA của họ. Người ta có
thể cho rằng màu sắc trong một số trường hợp là rất quan trọng và đã đóng một vai
trò quan trọng trong quá trình tiến hóa. Điều này có thể không phải là trường hợp
ngày hôm nay cho con người chúng ta, nhưng tầm quan trọng và sử dụng màu sắc
vẫn là rất trọng yếu không thể fi trong xã hội ngày nay.

Mục đích của dự án này là xây dựng một strator demon- rằng có thể kết hợp
một màu sắc mà nó được như là đầu vào từ người dùng. Sử dụng điều khiển tự
động máy có thể fi đầu tiên kết hợp một màu sắc và sau đó bù đắp cho bất kỳ lỗi
nào giống như một con người sẽ làm gì để có được kết quả đúng. Để có thể làm
được điều này cảm biến màu mà đọc màu RGB được sử dụng. Mức erent di ff sau
đó được dịch sang một mô hình màu khác gọi là HSV, sau đó được sử dụng để
pha trộn các màu fi cuối cùng.

Hiệu suất của hệ thống đã được thử nghiệm bằng cách cho phép một bộ
cảm biến quét thẻ màu mẫu, tính toán bao nhiêu mỗi màu chính để đổ vào hỗn
hợp. Sơn hỗn hợp sau đó được sơn lên một mảnh giấy những gì còn lại để khô
trước khi quét. Các erence di ff trong màu sắc đã được ghi nhận sau khi pha trộn
fi đầu tiên và hệ thống tiếp tục điều chỉnh cho bất kỳ sai lệch cho đến khi một
kết quả tốt đã đạt được. Kết quả của các cuộc thử nghiệm là phải mất một số
tiền tối đa của ba hỗn hợp để có được trong vòng 0,8% giá trị tham khảo. Trong
một nửa số các bài kiểm tra người biểu tình đã đạt được một kết quả tốt sau khi
rất fi đầu tiên pha trộn.
Sammanfattning

Automatisk färgblandare

FARG har genom historien varit ett e ff ektivt s¨att att signa- Lera n˚agot đến tội
lỗi omgivning. Đến exempel har f¨arger Pa blad hos blommor och v¨axter
fungerat som v¨axters s¨att att kommunisera med tội omgivning. Antingen cho
att locka đến sig insekter cho att sprida sitt DNA eller cho att hãng Sigma nalera
giftighet. Djur har anv¨ant sig av f¨arger cho att im- ponera Pa det Andra k¨onet
och d¨arigenom kunna Fora sitt DNA vidare. Man skulle kunna argumentera cho
att FARG har nửa en viktig cuộn i evolutionen. Đối với m¨anniskan AR det i
dagsl¨aget inte riktigt lika viktigt evolution¨art, đàn ông vikten av och
anv¨andningen av FARG har en stor betydelse i Dagens samh¨alle. Numera fi
NNS FF f¨arga det arer som tillhandah˚aller MASKINER som kan Lata Kunden
sj¨alv v¨alja sơ lược vilken FARG den vill ha och med hj¨alp av maskinerna
blanda upp DENNA.

Syftet med Detta Projekt AR att konstruera en mekatro- nisk konstruktion


som kan ta indata i hình av f¨argval Fran en anv¨andare. Genom anv¨andandet
av reglerteknik sau maskinen Forst blanda f¨argen en f¨orsta Gang och sedan
kom- pensera cho eventuella fel sơ lược som en m¨anniska skulle. Cho att
uppn˚a Detta anv¨ands en f¨argsensor som Laser av f¨argen som RGB och
sedan ¨overs¨atter Detta đến f¨argmodellen HSV som anv¨ands cho att
best¨amma blandningens volympropor - tioner.

Cho att testa systemet lats en cảm biến Lasa av ett f¨argkort och ber¨akna
Hur mycket av vardera prim¨arf¨arg att Halla i blandningen. Den blandade
f¨argen applicerades senare Pa ett papper och lats torka innan avl¨asning.
Skillnaden i ny- ans efter f¨orsta beredningen noterades och systemet fortsat- te
att korrigera eventuella fel tills erh¨olls resultat ett áo ngực. Resultatet av alla thử
var att det tog h¨ogst tre bland- ningar cho att komma inom 0,8% Fran
referensnyansen. Tôi h¨alften av testerna erh¨olls áo ngực resultat redan efter
den tiella đầu rất blandningen.
Lời cảm ơn

Chúng tôi muốn gửi lời cảm ơn Pouya Mahdavipour giám sát, hướng dẫn và phản hồi trong suốt dự án này. Chúng
tôi cũng xin cảm ơn Sta ff một Qvarnstr¨om và tất cả các trợ lý khóa học khác để được giúp đỡ với các thành phần,
máy và nhiều hơn nữa. Và cuối cùng nhưng không kém, tất cả các học sinh khác trong phòng thí nghiệm cho tất cả
các hỗ trợ tinh thần và phản hồi trong suốt học kỳ này.

Max Lindgren, Max Thiel


Hoàng gia Viện Công nghệ, Stockholm, tháng 5 năm 2017
Nội dung

1. Giới thiệu 1
1.1 Bối cảnh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Mục đích. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Phạm vi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1,4 Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Lý thuyết 5
2.1 màu trộn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 RGB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2 CMYK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.3 HSV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . số 8

2.2 Medium. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Thiết kế kết cấu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Controller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Biểu 13
3.1 Giả định và cân nhắc. . . . . . . . . . . . . . . . . . . . . 13
3.2 Phần mềm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Electronics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3.1 Arduino UNO. . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3.2 Grove - I2C Màu Sensor. . . . . . . . . . . . . . . . . . . . 15
3.3.3 Van điện tử. . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4 Cơ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4.1 Van. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4.2 Lầu Năm Góc. . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Kết quả và kết luận 19


4.1 Kết quả. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2 Thảo luận. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.1 Các vấn đề Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.2 Nguồn Lỗi có thể xảy ra. . . . . . . . . . . . . . . . . . . . . . 21
4.2.3 Hiệu suất hệ thống. . . . . . . . . . . . . . . . . . . . . . . 22
4.3 Kết luận. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5 Làm việc trong tương lai và cải tiến 25
5.1 cải thiện ngay. . . . . . . . . . . . . . . . . . . . . . . . 25
5.2 Tầm nhìn tương lai. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Tài liệu tham khảo 27

Phụ lục 27

Một mã Arduino 29

đang B Python 43
danh mục

Các từ viết tắt

CAD Máy tính hỗ trợ thiết kế

CMYK Cyan, đỏ tươi, vàng, chìa khóa

HSV Huế, độ bão hòa, giá trị

MOSFET kim loại-oxide-bán dẫn fi lĩnh-e ff vv transistor RGB

Đỏ lục lam

Biểu tượng

điều hành chút chuyển trái


Danh mục các hình

2.1 Đồ thị biểu diễn của mô hình màu RGB, tạo sử dụng phần mềm Adobe Photoshop. . . . . . . . . . . . . . .
.................... 6
2.2 Đồ thị biểu diễn của mô hình màu CMYK, tạo sử dụng phần mềm Adobe Photoshop. . . . . . . . . . . . . .
..................... 7
2.3 Đồ thị biểu diễn của mô hình màu HSV, tạo sử dụng todesk Au- Maya và Adobe Photoshop. . . . . . . .
............. số 8

2.4 mô hình CAD của thiết kế cấu trúc, tạo ra sử dụng Cạnh ST8 rắn. . . . 10

3.1 Sơ đồ luồng mô tả các nguyên tắc chính của phần mềm, tạo sử dụng Adobe Illustrator.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Công tắc nguồn mạch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 Hình ảnh của một nền tảng điện từ. . . . . . . . . . . . . . . . . . . . . . 16
3.4 Cài đặt của việc xây dựng fi cuối cùng. . . . . . . . . . . . . . . . . . . . . . . 17

4.1 vòng tròn màu bao gồm các mẫu màu được sử dụng như tài liệu tham khảo. . . . . . . 19
4.2 Đồ thị mô tả lề lỗi của đầu tiên kết hợp fi cho một loạt các mẫu, tạo ra sử dụng Microsoft Excel 2011..
.................... 20
4.3 mẫu tham khảo ở dưới cùng của mỗi cọc. Gần nhất với tài liệu tham khảo là kết quả fi cuối cùng. Trên
đầu trang của mỗi đống là sự pha trộn đầu tiên. . . . . . . . . . . 20
4.4 Một biểu đồ hiển thị phần của sơn màu xanh trong hỗn hợp ban đầu, phụ thuộc vào màu sắc đầu vào,
tạo ra sử dụng Microsoft Excel 2016. . . . . . . . . . . 22
Chương 1

Giới thiệu

Chương này nhằm mục đích để thảo luận về những suy nghĩ và ý tưởng đóng vai trò là cơ sở của dự án cơ điện tử
này cũng như mục đích và mục tiêu tổng thể của dự án và phương pháp sử dụng để đạt được chúng.

1.1 Bối cảnh

Ý chí để tạo di màu ff erent là như cũ như thời gian. Tầm quan trọng của màu sắc có trong suốt lịch sử đã không thể fi signi trên nhiều cấp độ di ff

erent, chủ yếu là nó đã phục vụ như một cách để sinh vật sống để báo hiệu một cái gì đó để môi trường xung quanh. Ví dụ, màu sắc của một nhà

máy lá hoặc cánh hoa đã được cách mà nhà máy giao tiếp với môi trường xung quanh để thu hút côn trùng và lây lan DNA của nó, hoặc để báo hiệu

rằng nó là độc hại. Chiến lược này cũng đã được hữu ích trong cùng một cách trong thế giới động vật. Màu sắc của một con vật có thể đóng vai trò

như một cách để gây ấn tượng với giới tính khác, cảm giác lo sợ động vật khác hoặc được sử dụng như tuổi camou fl để tránh kẻ thù. Nói cách khác

màu sắc đã phục vụ một vai trò quan trọng trong quá trình tiến hóa trong suốt lịch sử. Điều này có thể không có được các trường hợp cho loài người

về mặt sinh học, mặc dù màu sắc vẫn đóng một vai trò quan trọng về mặt văn hóa và kinh tế. Màu sắc và thiết kế của những quần áo đã, và vẫn còn

ở mức độ nào là một tuyên bố và biện pháp của những người giàu có hoặc đứng trong xã hội. Điều này có thể không được như rõ ràng trong xã hội

ngày nay nhưng màu sắc đóng vai trò một vai trò lớn như một cách để thể hiện động sản và hương vị. Điều này không chỉ gắn liền với thời trang và

quần áo, nhưng để tất cả các loại biểu thức thị giác, ví dụ như nghệ thuật và trang trí nội thất. Sơn cửa hàng hiện nay thường sử dụng máy móc tiên

tiến để sơn phù hợp với màu sắc. tuy nhiên điều này vẫn là một quá trình khá tham gia đòi hỏi nhiều máy móc tiên tiến và đắt tiền như quang phổ [1],

máy rút tự động và máy trộn [2]. Sau đây là những câu hỏi nghiên cứu đã xem xét trong dự án này. một tuyên bố và biện pháp của những người giàu

có hoặc đứng trong xã hội. Điều này có thể không được như rõ ràng trong xã hội ngày nay nhưng màu sắc đóng vai trò một vai trò lớn như một cách

để thể hiện động sản và hương vị. Điều này không chỉ gắn liền với thời trang và quần áo, nhưng để tất cả các loại biểu thức thị giác, ví dụ như nghệ

thuật và trang trí nội thất. Sơn cửa hàng hiện nay thường sử dụng máy móc tiên tiến để sơn phù hợp với màu sắc. tuy nhiên điều này vẫn là một quá

trình khá tham gia đòi hỏi nhiều máy móc tiên tiến và đắt tiền như quang phổ [1], máy rút tự động và máy trộn [2]. Sau đây là những câu hỏi nghiên

cứu đã xem xét trong dự án này. một tuyên bố và biện pháp của những người giàu có hoặc đứng trong xã hội. Điều này có thể không được như rõ

ràng trong xã hội ngày nay nhưng màu sắc đóng vai trò một vai trò lớn như một cách để thể hiện động sản và hương vị. Điều này không chỉ gắn liền

với thời trang và quần áo, nhưng để tất cả các loại biểu thức thị giác, ví dụ như nghệ thuật và trang trí nội thất. Sơn cửa hàng hiện nay thường sử dụng máy móc tiên tiến để sơn phù hợp vớ

1
CHƯƠNG 1. GIỚI THIỆU

1.2 Mục đích

Báo cáo này nhằm fi nd một mô hình màu đó hoạt động tốt khi tự động hoá sự pha trộn của màu sắc và từ đó xây
dựng một phương pháp để làm điều đó trong thực tế. Nó tiếp tục đặt mục tiêu thực hành cả tically đánh giá tính
hiệu quả của phương pháp được lựa chọn. Khái niệm về màu sắc pha trộn từ lâu dường như là một vấn đề rất thực
tế, đặc biệt là khi nói về sơn acrylic hoặc các loại sơn sử dụng chủ yếu với số lượng nhỏ cho các ứng dụng như
nghệ thuật. Xu hướng để miniaturize máy trước đó công nghiệp để sử dụng máy tính để bàn là một nguồn cảm
hứng để xem nếu một cái gì đó tương tự có thể được thực hiện cho trộn màu tự động. Ứng dụng, giống như những
người đề cập trước đó, thường sử dụng màu cơ bản khác hơn ví dụ như một máy in. Do một mô hình tổng quát hơn
là một lợi thế.

• trạng thái của nghệ thuật về phương pháp để nhân rộng tự động màu sử dụng bộ erent di ff của màu cơ
bản là gì?

• Mà các phương pháp là chi phí-e ff ective trong thực tế?

• Làm thế nào chính xác có thể de fi định nghĩa và đo lường trong bối cảnh các phương pháp được lựa chọn?

• Cho rằng một chi phí-e phương pháp ff ective đã được chọn, tính chính xác trong sự sao chép màu tự
động là gì?

1.3 Phạm vi

Người biểu tình rằng sẽ được xây dựng trong dự án này là để có thể kết hợp bất kỳ màu sắc có thể được sơn sử
dụng. Điều này có nghĩa rằng hầu hết các quang phổ nhìn thấy được sẽ được bảo hiểm. Tuy nhiên, do những
hạn chế thời gian của dự án này strator demon- không có ý định trở thành một sản phẩm hoàn toàn tự động. Ví
dụ các số đo cảm biến là để được thực hiện bằng tay cũng như sự pha trộn của các màu sắc pha trộn bởi
những người biểu tình. Điều này là để đảm bảo tập trung đủ được đưa vào việc xây dựng các phương pháp cần
thiết để đánh giá hiệu suất của người biểu tình và hệ thống như một toàn thể.

2
1.4. PHƯƠNG PHÁP

1,4 Phương pháp

Một người biểu tình sẽ được xây dựng với các container cho mỗi màu chính cá nhân. Một cảm biến kết nối với
một Arduino sẽ đọc một màu sắc và tính toán bao nhiêu màu để đổ vào hỗn hợp. Để đánh giá hiệu suất của hệ
thống các giá trị RGB từ cảm biến màu sắc sẽ được chuyển đổi thành ba số nguyên thể hiện màu sắc trong mô
hình màu HSV. Người biểu tình pha trộn màu sắc, quét hỗn hợp và đền bù cho bất kỳ sai lệch so với các dữ liệu
tham khảo HSV. Nếu dữ liệu thu thập từ các màu sắc hỗn hợp là đủ gần để các tài liệu tham khảo quá trình này
dừng lại và người biểu tình đã sẵn sàng để đọc màu khác. Để đánh giá xem người biểu tình thực hiện tốt đủ các
yêu cầu sau được thiết lập:

• Tuyệt đối di ff erence từ tài liệu tham khảo trong mỗi số nguyên HSV phải nằm trong phạm vi 5%.

• Số lượng điều chỉnh đã được ít hơn fi ve.

3
chương 2

Học thuyết

Chương này dùng để nói về những lý thuyết cơ bản cần thiết để tạo ra một tioning biểu tình func- ở phần cuối
của dự án này.

2.1 màu Trộn

Có rất nhiều mô hình erent di ff khi nói đến màu sắc pha trộn. Từ ý tưởng của dự án tập trung vào trộn màu
được cung cấp từ một bộ tùy ý các màu cơ bản và cũng vì mục đích tại ứng dụng desktop ngụ ý việc sử dụng
các cảm biến và các thành phần giá rẻ và thường có sẵn, ba di mô hình ff erent đã được lựa chọn và đánh giá
trong suốt dự án .

5
CHƯƠNG 2. LÝ THUYẾT

2.1.1 RGB

RGB là viết tắt của Red, Green và Blue và là một mô hình màu phụ gia. Bằng cách thêm một lượng di ff erent của mỗi
màu cá nhân có thể bao gồm một phổ rộng. Một lời giải thích thị giác cơ bản của các nguyên tắc được thể hiện trong fi
Hình vẽ 2.1. Này được sử dụng rộng rãi trong công nghệ hiển thị như TV, màn hình máy tính và điện thoại di động mà
còn trong các thiết bị nhằm mục đích nắm bắt phương tiện truyền thông như máy quét và máy ảnh kỹ thuật số [3].
Giống như các thiết bị cần chú ý cuối cùng bộ cảm biến màu sắc được sử dụng trong dự án này mang lại cho kết quả
của nó trong RGB. Tuy nhiên, RGB là phụ gia có nghĩa là nó áp dụng cho thêm vào bước sóng của ánh sáng, trộn sơn
hoặc sắc tố hoạt động trên nguyên tắc khác. Khi trộn sơn của hai di màu ff erent những gì đang thay đổi là có bước
sóng được hấp thụ. Các bước sóng mà không được hấp thụ tức là những gì là tái fl ected, là màu nhận thức.

Hình 2.1. Đồ thị biểu diễn của mô hình màu RGB, tạo sử dụng phần mềm Adobe Photoshop.

6
2.1. MÀU TRỘN

2.1.2 CMYK

CMYK là viết tắt của Cyan, Magenta, Yellow và Key (Black) và là một mô hình phối màu hấp thụ. Mô hình này
được sử dụng chủ yếu trong in ấn và giả định rằng màu trắng được sử dụng như một cơ sở để mà màu sắc sau
đó được áp dụng. Bằng cách thêm vào các sắc tố erent di ff hơn bước sóng được hấp thu [3]. Hình 2.2 minh họa
cách CMYK làm việc. Mô hình màu này dường như để làm việc tương đối tốt cho dự án này nhưng vì sự lựa
chọn của di ff erent màu cơ bản phương pháp thứ ba xem xét là một fi t tốt hơn.

Hình 2.2. Đồ thị biểu diễn của mô hình màu CMYK, tạo sử dụng phần mềm Adobe Photoshop.

7
CHƯƠNG 2. LÝ THUYẾT

2.1.3 HSV

Cả mô hình màu RGB hoặc CMYK vẻ lý tưởng cho dự án này. Do đó mô hình khác đã được điều tra. HSV là
viết tắt của Hue, Saturation và Value, nó đôi khi cũng được gọi là HSB nơi B là viết tắt của độ sáng thay vì giá
trị. Mô hình này là một Remapping của mô hình màu RGB vào mông đít được điều phối trụ và đã được tạo ra để
bắt chước cách một nghệ sĩ pha trộn màu sắc [4]. Đây bản đồ sắc như một góc trên một vòng tròn màu. Độ bão
hòa trở thành khoảng cách từ trung tâm và giá trị trở thành Hight dọc theo xi lanh, điều này được thể hiện trực
quan trong fi Hình vẽ

2.3. Đây hoạt động rất tốt cho dự án này vì nó làm cho nó dễ dàng để phá vỡ quá trình trộn thành những bước ff
erent di. Huế có thể fi đầu tiên được xuất hiện bằng cách trộn các màu cơ bản, sau đó bão hòa và giá trị có thể
được xuất hiện bằng cách thêm màu trắng và màu đen tương ứng.

Hình 2.3. Đồ thị biểu diễn của mô hình màu HSV, tạo sử dụng todesk Au- Maya và Adobe Photoshop.

Việc chuyển đổi sử dụng trong dự án này là một chuyển đổi số nguyên dựa trên thiết kế bởi Vladimir Chernov,
Jarmo Alander và Vladimir Bochko [5]. Mô hình này được chọn vì tối ưu hóa và mất ít chuyển đổi của nó. Nó
cũng có thể, vì giữ tất cả các giá trị là số nguyên, làm cho nó dễ dàng hơn để chuyển qua các Arduinos cation
communi- nối tiếp. thực hiện này có RGB 24-bit như là đầu vào (8 bit cho mỗi kênh). Nó ra giá trị là một số
nguyên từ 0 đến 255, độ bão hòa là 0 hoặc trong khoảng 257-65.535 và màu sắc như 0 đến 393222. Việc
chuyển đổi được thực hiện bằng chín bước sau đây.

1. Tìm tối đa ( M), tối thiểu ( m) và trung bình ( c) Red ( R), Màu xanh lá ( G)
và Blue ( B).
M = max ( R, G, B) (2.1)

m = min ( R, G, B) (2.2)

c = giữa ( R, G, B) (2.3)

số 8
2.2. TRUNG BÌNH

2. Gán giá trị gia tăng ( V) với M


V=M (2.4)

3. Tính erence di ff ( d) giữa M và m.

d=M-m (2.5)

4. Nếu d là bằng 0 sau đó gán S với 0 và trở lại. H là fi unde định nghĩa trong trường hợp này,
chúng tôi chọn trong việc thực hiện của chúng tôi để cung cấp cho nó một giá trị mặc định là 0.

5. Xác định chỉ số ngành ( TÔI).



•• 0, nếu M = R và m = B
••
••
•• 1, nếu M = G và m = B
••

2, nếu M = G và m = R
I= (2.6)
•• 3, nếu M = B và m = R
••
••
•• 4, nếu M = B và m = G
••

5, nếu M = R và m = G

6. Tính bão hòa ( S).

16) - 1
S = (d (2.7)
V

7. Tính toán phần phân đoạn của màu sắc ( F).

16
F = (c - m) +1 (2.8)
d

8. Invert F cho chỉ số ngành lẻ, điều này được thực hiện bằng cách trừ F từ mép
liên tục dài ( E) mà có một giá trị của 65.537.

nếu I = 1 hoặc I = 3 hoặc I = 5 rồi F = E - F (2.9)

9. Tính sắc ( H).


H=E·I+F (2.10)

2.2 Medium

Một số phương tiện erent di ff được coi là trong suốt dự án. Ví dụ; màu thực phẩm, mực in, sơn dầu dựa, và sơn
acrylic. Do hạn chế về kinh tế và khung thời gian chặt chẽ một giải pháp đơn giản và rẻ tiền được yêu cầu. Các
giải pháp phát hiện là sử dụng sơn acrylic và mỏng với nước. Giải pháp này vừa rẻ và dễ sử dụng. Màu hòa tan
một cách nhanh chóng mà làm cho nó lý tưởng cho thử nghiệm ban đầu.

9
CHƯƠNG 2. LÝ THUYẾT

2.3 Thiết kế kết cấu

Môi trường sử dụng trong dự án này là acrylic sơn sở thích trộn với nước. Này được thực hiện để cung cấp cho
các sơn có độ nhớt thấp để cho phép nó fl ow qua thấp ống đường kính silicone. Ý tưởng về việc xây dựng là
phải có thùng chứa cho mỗi màu sắc di ff erent sử dụng. Ở dưới cùng của mỗi thùng chứa một ống được gắn
cho phép cho uid fl để fl ow qua. Các container được đặt ở phía trên cùng của việc xây dựng để cho phép sơn
để fl ow bằng trọng lực một mình. Để kích hoạt fl ow từ ống một solenoid được kết nối với một cánh tay lò xo để
tạo một van. sau đó các van được điều khiển từ một Arduino. Các ống được dẫn xuống một container mà màu
sắc được trộn lẫn. Một slide mẫu sau đó có thể được chuẩn bị và được đo bằng cảm biến màu sắc. Các phép
đo mẫu được so sánh với các màu tham khảo và điều chỉnh sự pha trộn được thực hiện.

Hình 2.4. mô hình CAD của thiết kế cấu trúc, tạo ra sử dụng Cạnh ST8 rắn.

10
2.4. CONTROLLER

2.4 Bộ điều khiển

Bộ điều khiển phản hồi được sử dụng trong dự án sau một nguyên tắc rất đơn giản. Các tín hiệu tham chiếu là
màu được đo bằng cảm biến màu sắc. Tín hiệu này chứa thông tin về các mức erent di ff của RGB trong màu
đo. Điều này sau đó được chuyển thành HSV. Tùy theo những nguyên cơ sở hỗn hợp này được quyết định.

• Nếu giá trị còn thấp, cơ sở của hỗn hợp sẽ có màu đen.

• Nếu giá trị cao và độ bão hòa thấp, cơ sở của hỗn hợp sẽ có màu trắng.

• Nếu giá trị cao và độ bão hòa cao, các cơ sở sẽ là màu sắc và sẽ fi đầu tiên được trộn từ các màu cơ
bản.

Một sự pha trộn ban đầu được đổ và sau đó đo, để bù đắp cho bất kỳ lỗi máy sẽ thêm nhiều màu sắc cần thiết
để mang lại cho nó gần gũi hơn với các tài liệu tham khảo. Lượng bổ sung phụ thuộc vào erence di ff trong màu
sắc, độ bão hòa và giá trị tương ứng. Bộ điều khiển dự định là do đó một bộ điều khiển tỷ lệ thuận.

11
Chương 3

người đi biểu tình

Chương này nhằm mục đích trình bày các thành phần thoi vàng cần thiết để xây dựng một máy trộn tioning
màu func-.

3.1 Giả định và cân nhắc

Những điểm sau đây đã được đưa vào xem xét khi xây dựng người biểu tình:

• Rót sơn cần được điều khiển riêng cho mỗi màu.

• Các hạn chế kinh tế đối với dự án có nghĩa là một sự thay thế rẻ hơn để mua van solenoid đã được tìm
thấy.

• Các ống dùng để vận chuyển sơn lỏng cần phải có một đường kính bên trong phù hợp và đủ đàn hồi để
ép đóng để ngăn chặn các fl ow.

• Các vị trí của hộp đựng sơn phải đủ cao để cho phép một thậm chí fl ow.

13
CHƯƠNG 3. Biểu

3.2 Phần mềm

Trái tim và não của người biểu tình là UNO Arduino. Arduino kiểm soát đổ của di ff erent màu vào trộn. Trong fi
Hình vẽ 3.1 owchart fl của phần mềm dựa Arduino được trình bày:

Hình 3.1. Sơ đồ luồng mô tả các nguyên tắc chính của phần mềm, tạo sử dụng Adobe Illustrator.

Một căn cứ chương trình máy tính để chụp giao tiếp nối tiếp từ Arduino được viết ra. Nó được sử dụng để giúp
đỡ với gỡ lỗi và đến nay thị màu sắc bắt bởi các cảm biến. Phần mềm này được tuy nhiên không cần thiết cho
hoạt động của máy.

3.3 Điện tử

Phần này nhằm mục đích giới thiệu và giải thích các linh kiện điện tử di ff erent được sử dụng trong việc xây
dựng các biểu tình

3.3.1 Arduino UNO

Arduino UNO là một vi điều khiển có thể lập trình có thể được sử dụng cho tất cả các loại dự án. Nó có một số
đầu ra kỹ thuật số và đầu vào chân cũng như đầu vào analog [6].

14
3.3. THIẾT BỊ ĐIỆN TỬ

3.3.2 Grove - I2C Màu Sensor

The Grove - I2C Màu Sensor sử dụng trong dự án này là một bộ cảm biến màu quang nhằm người có sở thích và các nhà sản
xuất [7]. Phần trung tâm của sản phẩm này là bộ cảm biến màu sắc kỹ thuật số TCS3414 [8].

3.3.3 điện tử Van

Trừ từ Arduino và cảm biến hệ thống sử dụng fi đã solenoid điều khiển bởi fi đã MOSFETs. Những chứa một
diode fl yback nội nhưng vì sự thay đổi trong hiện tại trong cuộn dây lớn của solenoid khi quay o ff có thể dẫn
đến điện áp lớn gai khác fl diode lại y đã được thêm vào mỗi mạch. Các solenoid được cung cấp bởi một nguồn
năng lượng erent di ff hơn Arduino kể từ khi họ yêu cầu cả hai một điện áp cao hơn nhiều và hiện tại hơn có thể
được cung cấp thông qua các Arduino nó tự.

Hình 3.2. mạch công tắc điện

15
CHƯƠNG 3. Biểu

3.4 Cơ

Phần này nhằm mục đích để nói về việc xây dựng các nents compo- cơ khí thoi vàng của người biểu tình.

3.4.1 Van

Các van được làm từ gỗ và đã được thực hiện bằng tay. Một lỗ được khoan thông qua phần dưới cùng mà ống
có thể fi t qua. Cánh tay được xây dựng bằng thép để đảm bảo nó có thể mất sự căng thẳng gây ra bởi mùa
xuân và vẫn đủ mỏng để ép ống đóng. Solenoid là khóa tại chỗ bởi hai ốc vít M2 có vị trí có thể điều chỉnh trên
bảng phụ ở dưới cùng của fi Hình vẽ 3.3 dưới đây để cho phép một chuyển động trơn tru. Vị trí của lò xo đó kéo
cánh tay mà ép các ống đã được điều chỉnh. Này để ngăn chặn bất kỳ đi qua uid fl trong khi đảm bảo solenoid
vẫn có thể kéo cánh tay cho phép sơn đi qua.

Hình 3.3. Hình ảnh của một nền tảng điện từ

16
3.4. CƠ KHÍ

3.4.2 Lầu Năm Góc

Do nhu cầu thiết kế ban đầu cho fi ve van và ổn định trong việc xây dựng các thao diễn một giải pháp đối xứng
có cảm giác như cách đơn giản nhất để đạt được một kết quả tốt. Đầu tiên của tất cả các thành phần trong đó
được tạo ra trong CAD sử dụng phần nhô ra với độ dày tương tự như berboard fi. Sử dụng lỗ mộng và mộng
khớp toàn bộ xây dựng có thể được lắp ráp và tháo rời dễ dàng. Việc xây dựng fi NAL có thể được nhìn thấy
dưới đây trong fi Hình vẽ 3.4.

Hình 3.4. Thiết lập của việc xây dựng fi NAL

17
Chương 4

Kết quả và kết luận

Chương này nhằm mục đích để nói về kết quả của dự án này và hiệu suất của người biểu tình. Kết quả cũng sẽ
được thảo luận liên quan đến câu hỏi nghiên cứu đặt ra cho dự án này.

4.1 Kết quả

Để kiểm tra hiệu suất của hệ thống và thao diễn một loạt các thẻ mẫu đã được thực hiện để phục vụ như tín
hiệu tham khảo cho hệ thống. Các bài kiểm tra mà nơi thực hiện theo phương pháp mô tả dưới đây. Một thẻ
mẫu, như đã thấy trong fi Hình vẽ 4.1, đã được quét và người biểu tình tính toán bao nhiêu mỗi màu cá nhân để
đổ vào rồi trộn đều.

Hình 4.1. vòng tròn màu bao gồm các mẫu màu được sử dụng như tài liệu tham khảo.

19
CHƯƠNG 4. KẾT QUẢ VÀ KẾT LUẬN

Kết quả sau đó được sơn lên một mảnh giấy những gì còn lại để khô trước khi quét. Các erence di ff trong màu
sắc đã được ghi nhận sau khi pha trộn fi đầu tiên và hệ thống tiếp tục làm việc cho đến khi một kết quả tốt đã đạt
được. Số lượng điều chỉnh cũng đã được ghi nhận. Các kết quả có thể nhìn thấy dưới đây trong fi Hình vẽ 4.2.

Hình 4.2. Graph mô tả lề lỗi của đầu tiên kết hợp fi cho một loạt các mẫu, tạo ra sử dụng Microsoft Excel 2011.

Trong fi Hình vẽ 4.3 là một đại diện trực quan của kết quả xét nghiệm được hiển thị.

Hình 4.3. mẫu tham khảo ở dưới cùng của mỗi cọc. Gần nhất với tài liệu tham khảo là kết quả fi cuối cùng. Trên đầu trang
của mỗi đống là sự pha trộn đầu tiên.

20
4.2. THẢO LUẬN

4.2 Thảo luận

Phần này dùng để trình bày một số vấn đề gặp phải trong dự án này như wel l như một cuộc thảo luận chung
của các kết quả liên quan đến câu hỏi nghiên cứu đặt ra.

4.2.1 Các vấn đề Input

Các cảm biến màu sắc được sử dụng trong dự án này có những khó ffi di đọc một phạm vi tương đối rộng của màu
sắc. Vấn đề này rõ rệt nhất là cho màu sắc với màu đỏ trong uences fl. Kể từ khi bộ cảm biến màu không cho kết
quả đáng tin cậy cho một số các mẫu, màu sắc đã được thử nghiệm phải được thu hẹp xuống để đánh giá hiệu suất
của hệ thống. Kể từ khi dữ liệu cảm biến tốt đã được mua lại cho tất cả các màu sắc khác nhau, giữa các màu cơ
bản vàng và xanh da trời các cuộc thử nghiệm đã được tiến hành trong quang phổ này.

4.2.2 Nguồn Lỗi có thể xảy ra

Các cụ chỉ được sử dụng để thu thập dữ liệu trong dự án này là bộ cảm biến màu sắc. Màu rằng cảm biến đọc
lon di ff er tùy nước để vẽ tỷ lệ trong các giải pháp sơn được sử dụng trong máy tính, bất thường trong sơn áp
dụng cho các mẫu và ánh sáng lấp lánh dù nó khi quét màu.

21
CHƯƠNG 4. KẾT QUẢ VÀ KẾT LUẬN

Hiệu suất 4.2.3 Hệ thống

Độ lệch chấp nhận được quyết định bởi thực nghiệm kiểm tra một loạt các màu sắc nhận bởi nhiều quét các
mẫu màu mà nhìn trực quan thống nhất. Các phương pháp chuyển đổi sử dụng cho màu sắc với một loạt các
0-393.222, làm cho này một tion devia- dưới 0,8% của toàn bộ quy mô. Một chút ít hơn một nửa quy mô này có
thể được sản xuất với hai màu cơ bản được sử dụng trong dự án này. Độ lệch chấp nhận là chỉ hơn 1,8% của
dãy màu sắc được sử dụng.

Tại fi đầu tiên tỷ lệ pha trộn đúng tuyến tính được sử dụng cho sự pha trộn đầu tiên. Điều này dường như để
làm việc tốt cho một nửa màu xanh của màu vàng để phổ màu xanh. Tuy nhiên, chúng tôi thấy rằng đối với màu
sắc gần gũi hơn với cuối vàng của quang phổ này đã kết thúc việc tạo ra một màu quá xanh và lượng sơn vàng
cần thiết để điều chỉnh nó cho màu sắc đúng là nhiều để tuyệt vời. Để giải quyết vấn đề này công thức cho tỷ lệ
đã được điều chỉnh và một biểu đồ của phiên bản fi NAL được trình bày trong fi Hình vẽ 4.4.

Hình 4.4. Một biểu đồ hiển thị phần của sơn màu xanh trong hỗn hợp ban đầu, phụ thuộc vào màu sắc đầu vào, tạo ra
sử dụng Microsoft Excel 2016.

Hiệu suất tổng thể của người biểu tình là khá dễ chịu. Nhìn vào kết quả chính xác sau khi pha trộn fi đầu tiên là
thấp hơn so với tỷ lệ phần trăm lợi nhuận lỗi cho phép.

22
4.3. KẾT LUẬN

4.3 Kết luận

Những phần sau sẽ phục vụ để thảo luận về các kết quả liên quan đến tions nghiên cứu ques- đặt ra trong mục
1.2.

trạng thái của nghệ thuật về mặt phương pháp luận cho màu replica- tự động hóa tion sử dụng bộ erent
di ff của màu cơ bản là gì? Tại dòng thời gian tự động sao chép màu vẫn là khá một quá trình tham gia. Giống
như đã nêu trong phần 1.1 nó thường đòi hỏi nhiều di ff erent máy đắt tiền. Khi nói đến vấn đề sử dụng bộ erent
di ff của màu cơ bản mô hình màu HSV được tạo ra để bắt chước cách một nghệ sĩ pha trộn sơn [4]. Mô hình
này được do áp dụng trong dự án này làm cơ sở cho phương pháp phát triển.

Mà các phương pháp là chi phí-e ff ective trong thực tế? Khi con- ống dẫn nghiên cứu cho none dự án này
của các phương pháp phát hiện dường như chi phí e ff ective. Các sản phẩm được sử dụng nói chung là rất tốn
kém, một ter spectrophotome- sử dụng trong một cửa hàng sơn, tương tự cho các cảm biến được sử dụng trong
dự án này, có thể có giá từ vài trăm đô la lên đến vài ngàn. do đó dự án này cố gắng sử dụng một giải pháp
cảm biến rẻ hơn nhiều. Một cảm biến từ Seeed Studio, nhằm hơn ở người có sở thích và các nhà sản xuất đã
được lựa chọn.

Làm thế nào chính xác có thể de fi ned và đo lường trong bối cảnh các phương pháp được lựa chọn? Căn
cứ vào mô hình màu được lựa chọn cho dự án này, HSV, tính chính xác của mô hình có thể được đo bằng erence
di ff về giá trị màu sắc giữa các mẫu thử nghiệm và tham khảo.

Cho rằng một chi phí-e phương pháp ff ective đã được chọn, họ nhánh do cha phó coi sóc ac- của nó
trong sự sao chép màu tự động là gì? Phương pháp được sử dụng trong dự án này được dựa trên đọc màu
trộn bởi người biểu tình có nghĩa là tính chính xác của dự án này chủ yếu dựa vào tính chính xác của cảm biến.
Độ chính xác của cảm biến đã được thực nghiệm tìm thấy bằng cách tiến hành một số phép đo trên cùng một
mẫu để xem có bao nhiêu giá trị màu sắc đa dạng. Độ lệch càng thấp càng 3000, ít hơn 0,8% so với quy mô màu
sắc, từ màu sắc tài liệu tham khảo đã được tìm thấy để làm việc.

23
Chương 5

Làm việc trong tương lai và cải tiến

Chương này nhằm mục đích để nói về những cải tiến có thể để người biểu tình và tầm nhìn của dự án như một
toàn thể.

5.1 cải tiến ngay

Với một cảm biến tốt hơn và / hoặc chuyển đổi tốt hơn từ cảm biến thô để RGB, nó sẽ có thể để có được kết quả
tốt khi quét màu sắc của bất kỳ màu sắc. Tốt hơn trong trường hợp này có nghĩa là quá trình chuyển đổi trong dữ
liệu cảm biến giữa các mẫu erent di ff của màu sắc tương tự như nhiều liên tục trên toàn bộ quang phổ so với bộ
cảm biến và chuyển đổi hiện đang sử dụng. Tính đến bây giờ điều này chủ yếu là cần thiết cho màu sắc với màu
đỏ trong uences fl. chuyển trơn tru trong dữ liệu cảm biến giữa các mẫu tương tự trực quan là cần thiết để duy trì
ectiveness e ff của phương pháp phát triển trong dự án này.

Khi phần màu sắc của mô hình màu HSV được bao phủ hoàn toàn, độ bão hòa và giá trị có thể được đưa
vào xem xét. Nếu đọc tốt cho các giá trị có thể thu được phương pháp này có thể được mở rộng phạm vi ban
đầu của dự án và gần như bất kỳ màu nào ta có thể bắt chước được.

5.2 Tầm nhìn tương lai

Do thời gian và nguồn lực nhiều hơn những gì hiện đang vận hành bằng tay có thể được tự động, điều này có
thể dẫn đến cả hai kết quả chính xác hơn và một quá trình thử nghiệm nhanh hơn mà sử dụng lên ít sơn cho
mỗi mẫu để quét. Một cải tiến có thể sẽ được cho máy tính để lưu dữ liệu cho kết quả thành công và làm thay
đổi phương pháp trộn để cho phép cho một kết quả fi đầu tiên tốt hơn và hiệu suất nhanh hơn.

25
Tài liệu tham khảo

[1] X-Rite “trang web của x-nghi thức, nhà sản xuất của quang phổ,” năm 2017,
[Accessed 21-May-2017]. [Trực tuyến]. Sẵn: http://www.xrite.com/products? ngành = RetailPaint & sort = 4
& pagesize = 6

[2] S. Systems, “trang web của hệ thống sprayquick, nhà sản xuất sơn
chứa dung dịch và máy trộn,”năm 2017, [Accessed 21-May-2017]. [Trực tuyến]. Sẵn:

http://www.sprayquicksystems.co.uk/products [3] AC Frery và T. Perciano, Giới thiệu về xử lý hình ảnh Sử

dụng R: Learning
bởi ví dụ. Springer London, 2013. [4] A. Smith, “Màu gam đổi cặp,” ACM SIGGRAPH Graph- Computer

ics, vol. 12, không có. 3, tr. 12-19, August 1978.

[5] V. Chernov, J. Alander, và V. Bochko, “Integer dựa trên be- chuyển đổi chính xác
tween rgb và không gian hsv màu” Máy tính và Kỹ thuật Điện, vol. 46, pp. 328-337, August năm 2015.

[6] Arduino, “Trang web cho hội đồng quản trị uno Arduino,” năm 2017, [Accessed 21-May-2017].
[Trực tuyến]. Sẵn: http://www.arduino.org/products/boards/arduino-uno [7] S. studio, “Wiki trang cho khu

rừng - cảm biến màu I2C,” năm 2017, [Accessed 21-Mây


2017]. [Trực tuyến]. Sẵn: http://wiki.seeed.cc/Grove-I2C Màu Sensor / [8] TAOS,

"Bảng dữliệu vì tcs3404 và tsc3414 kỹ thuật số màu


cảm biến,” năm 2011, [Accessed 21-May-2017]. [Trực tuyến]. Avail-
thể: https://raw.githubusercontent.com/SeeedDocument/Grove-I2C Màu Sensor / master / res /
TCS3404 TCS3414-A.pdf

27
Phụ lục A

đang Arduino

/ * //////////////////////////////////////////// // Màu Automated máy trộn


//
// Một dự án cử nhân ngành cơ điện tử //
// Tác giả: Max Lindgren và Max Thiel //
// TRITA MMK 2017: 32 MDAB 650 //
//////////////////////////////////////////// * /

# bao gồm <Wire.h>


# bao gồm <GroveColorSensor.h>
# bao gồm <Registers.h>
# bao gồm <Utilities.h>
# bao gồm <Math.h>

// kết nối Sensor. // dây -> Arduino pin //


VÀNG, SCL -> A5 // TRẮNG, SDA -> A4 //
RED, VCC -> 5V // BLACK, GND -> GND

// ranh giới giá trị Huế cho vàng -> phổ màu xanh với các thiết lập sử dụng.
# định nghĩa YB_RANGE_LOWER_BOUND 62500
# định nghĩa YB_RANGE_UPPER_BOUND 226.000

# định nghĩa YB_RANGE_SIZE (YB_RANGE_UPPER_BOUND - YB_RANGE_LOWER_BOUND)

// Độ lệch acceped giá trị màu sắc.


# định nghĩa WORKING_ERROR_MARGIN 3000

// Có bao nhiêu mili giây để đổ trong tổng số cho hỗn hợp ban đầu.

29
PHỤ LỤC A. Arduino MÃ

# định nghĩa INITIAL_FLUID_AMOUNT 4000


// Thời gian tối đa được phép đổ khi điều chỉnh sự pha trộn.
# định nghĩa MAX_ADJUST_FLUID_AMOUNT 2000
// Thời gian cho phép tối thiểu để đổ khi điều chỉnh sự pha trộn, // experimentaly tìm thấy một cách nhất quán
cho một giọt.
# định nghĩa MIN_ADJUST_FLUID_AMOUNT 75

// sử dụng trong hsv chuyển đổi,


// quang phổ màu sắc được chia thành sáu phần. // Đây là kích thước của nhịp giá trị cho mỗi phần.

# định nghĩa HEXAGONAL_EDGE_LENGTH 65.537

// id Nút pin.
enum Nút {SCAN_PIN = 2,

ACCEPT_PIN};

// LED pin id.


enum LEDPins {GREEN_PIN

= 4,
YELLOW_PIN,
RED_PIN};

// id Van pin.
enum ValvePins
{YELLOW_VALVE_PIN = 9,

BLUE_VALVE_PIN,
RED_VALVE_PIN,
BLACK_VALVE_PIN,
WHITE_VALVE_PIN};

// Hoa của máy.


enum MachineState {STARTUP,

AWAITING_COLOR,
INITIALIZING_MIX, đo lường,

30
ADJUSTING_MIX};

// flags Bit mà đèn LED với ánh sáng.


enum LEDBitFlags {GREEN_LED = 1 <<

0,
YELLOW_LED = 1 << 1, RED_LED =
1 << 2,
ALL_LEDS = GREEN_LED | YELLOW_LED | DẪN MÀU ĐỎ };

// Trả về khoảng cách màu sắc khoảng cách từ YB_RANGE_UPPER_BOUND (màu xanh) // như một phần nhỏ của YB_RANGE_SIZE.

phao bluedist ( unsigned dài sắc) { phao TP = (( phao ) (YB_RANGE_SIZE - (hue -

YB_RANGE_LOWER_BOUND))) / YB_RANGE_SIZE;

trở về quận; }

// Trả về phần sơn màu xanh tho đổ tức là phần màu vàng là: // 1 - bluefract (màu sắc)

phao bluefract ( unsigned dài sắc) { gấp đôi frac = -bluedist (Huế);

trở về min (frac + 1, exp (frac * 7 + 3)); };

// Một mẫu hàm trả về giữa ba giá trị.


bản mẫu < lớp học T> const T & giữa ( const T & a, const T & b, const T & c) { trở về (A <max (b, c))? max (a, min (b, c)): max (b,

c); };

// Chức năng này sẽ chuyển đổi một màu trong RGB để cùng màu trong HSV // (màu sắc, độ bão hòa, giá trị).

khoảng trống rgbtohsv ( int đỏ, int màu xanh lá , int màu xanh da trời ,

unsigned dài & Màu sắc, unsigned dài & Bão hòa, int unsigned & giá trị) { // Tính toán max, min và giữa các màu xanh lá cây và

màu xanh đỏ.


unsigned dài M = max (đỏ, max (màu xanh lá cây, xanh dương));
unsigned dài m = min (đỏ, min (màu xanh lá cây, xanh dương));
unsigned dài c = mid (đỏ, xanh lá cây, xanh dương);

31
PHỤ LỤC A. Arduino MÃ

// Gán giá trị.


value = M;

// Tính toán sự khác biệt giữa max và min.


unsigned dài diff = M - m;
nếu (Diff == 0) {bão hòa = 0;

màu sắc = 0;
trở về ; }

// Xác định chỉ số ngành.


unsigned dài I = 0;
nếu (M == đỏ) I = (m == xanh)? 0: 5;
else if (M == xanh) I = (m == xanh)? 1: 2;
khác I = (m == đỏ)? 3: 4;

// Tính bão hòa.


bão hòa = ((diff << 16) - 1) / giá trị;

// Tính phần phân đoạn của màu sắc.


unsigned dài F = ((c - m) << 16) / diff + 1;

// Inverse F cho chỉ số ngành lẻ.


nếu (I == 1 || tôi == 3 || tôi == 5)
F = HEXAGONAL_EDGE_LENGTH - F;

// Tính toán số nguyên dựa sắc.


màu sắc = HEXAGONAL_EDGE_LENGTH * I + F; }

// Lớp chính của máy.


lớp học ColorMixer { công cộng :

// chức năng công cộng.

// Constructor.
ColorMixer ();
// Destructor.
~ColorMixer ();

32
// gọi trong vòng lặp chính Arduino.
khoảng trống chạy ();

riêng tư :
// chức năng cá nhân.

// Thiết lập trạng thái của máy.


khoảng trống setstate (bang MachineState);
// Đưa cờ bit và biến các đèn LED và tắt cho phù hợp.
khoảng trống setLEDs ( int unsigned LEDBitFlags);
// Liệu quét bằng cách sử dụng cảm biến.
// Cung cấp kết quả thô như một mảng ints, 8 dài // và sắc như đưa unsigned dài.

khoảng trống scanColor ( int * Thô, unsigned dài & Màu sắc);

// chức năng Nhà nước, từng được gọi là từ chạy phụ thuộc vào trạng thái hiện tại.
khoảng trống khởi tạo ();
khoảng trống awaitColor ();
khoảng trống initializeMix ();
khoảng trống đo lường ();

khoảng trống adjustMix ();

// các thành viên cá nhân // Tình trạng


máy.
MachineState m_state;
// Con trỏ tới lớp cảm biến.
GroveColorSensor * m_pColorSensor;
// Gắn cờ để theo dõi nếu quét đã được thực hiện.
bool m_read;
// Gắn cờ sử dụng để lặp qua tất cả các van cho // sơ tán không khí lúc khởi động.

int m_initializingColor;

// Giữ dữ liệu cảm biến thô của màu tham khảo quét.
int m_raw [8];
// Giữ sắc màu tham khảo quét.
unsigned dài m_hue;
// Giữ sắc màu hỗn hợp quét.
unsigned dài m_measuredhue;
// Giữ lượng mili giây van đã được // mở tại tổng cho sự pha trộn hiện hành.

unsigned dài m_mixedamount; };

33
PHỤ LỤC A. Arduino MÃ

// Constructor, thiết lập giá trị mặc định cho tất cả các thành viên và // khởi tạo chân Arduino, nối tiếp và
dây (IC2).
ColorMixer :: ColorMixer (): m_state
(STARTUP)
, m_pColorSensor (0)
, m_read ( sai )
, m_initializingColor (YELLOW_VALVE_PIN)
, m_raw {0,0,0,0,0,0,0,0}
, m_hue (0)
, m_measuredhue (0)
, m_mixedamount (0)
{PinMode (GREEN_PIN, OUTPUT);

pinMode (YELLOW_PIN, OUTPUT); pinMode (RED_PIN,


OUTPUT); pinMode (SCAN_PIN, INPUT); pinMode
(ACCEPT_PIN, INPUT); pinMode (YELLOW_VALVE_PIN,
OUTPUT); pinMode (BLUE_VALVE_PIN, OUTPUT); pinMode
(RED_VALVE_PIN, OUTPUT); pinMode (BLACK_VALVE_PIN,
OUTPUT); pinMode (WHITE_VALVE_PIN, OUTPUT); Serial.begin
(9600); Wire.begin (); }

// Destructor, giải phóng bất kỳ bộ nhớ được phân bổ.


ColorMixer :: ~ ColorMixer () { // Miễn phí bộ nhớ phân bổ

nếu (M_pColorSensor)
xóa bỏ m_pColorSensor; }

// chức năng Nhà nước, được các máy đã sẵn sàng để quét một màu để trộn. // chức năng bổ sung là chút để đi trực tiếp vào ĐO nhà nước
// để làm cho nó có thể tiếp tục trộn một sự pha trộn đã bắt đầu.

khoảng trống ColorMixer :: khởi tạo () { // Thiết lập các

cảm biến
nếu (! M_pColorSensor) {setstate

(STARTUP);
m_pColorSensor = Mới GroveColorSensor ();

34
m_pColorSensor -> ledStatus = 1; chậm trễ (1000);

// Đặt đèn LED trạng thái


setLEDs (GREEN_LED | RED_LED);

// In hướng dẫn để nối tiếp.


Serial.println ( "Di tản không khí từ hệ thống" );

Serial.println ( "Mở van trên pin:" ); Serial.println (m_initializingColor); }

// Mở van bằng cách ấn một nút để sơ tán tất cả // không khí trong ống silicone.

nếu (M_initializingColor <= WHITE_VALVE_PIN) { // Mở nếu nút được nhấn, nếu

không chặt chẽ.


// Signal với đèn LED.
int mở = digitalRead (SCAN_PIN)!;
nếu (mở)
{DigitalWrite (m_initializingColor, CAO);

setLEDs (ALL_LEDS); } khác

{DigitalWrite (m_initializingColor, LOW);

setLEDs (GREEN_LED | RED_LED); }

// Nếu nút khác được nhấn di chuyển sang van sau, // hoặc nếu được thực hiện, chọn những gì nhà nước phải đi
đến. // m_read được sử dụng để đảm bảo rằng điều này không được kích hoạt // nhiều hơn một lần mà không
phát hành các nút trong -between.

int ! Chấp nhận = digitalRead (ACCEPT_PIN);


nếu (Chấp nhận &&! M_read) {m_read = thật

;
digitalWrite (m_initializingColor, LOW); setLEDs (GREEN_LED |
RED_LED); m_initializingColor ++; Serial.println ( "Air sơ tán!" );

nếu (M_initializingColor <= WHITE_VALVE_PIN) {

35
PHỤ LỤC A. Arduino MÃ

Serial.println ( "Chuyển sang van trên pin:" ); Serial.println (m_initializingColor); } khác

{Serial.println ( "Khởi tạo đã hoàn tất!" ); Serial.println (

"Chọn tình trạng: [L] ĐO / [R] AWAITING_COLOR" ); m_read = sai ; } Chậm trễ (500); } else if (! Chấp

nhận)

m_read = sai ; } // Ở đây những gì nhà nước để chuyển sang được chọn

// ([L] ĐO / [R] AWAITING_COLOR)

// Nếu [L] được nhấn cảm biến hiện một quét và tiết kiệm mà // như tài liệu tham khảo, máy ép liên tục sẽ làm lại
quá trình quét. // Sau này [R] phải được ép để chấp nhận và // thiết lập nhà nước để đo lường.

khác
{ int trái = digitalRead (SCAN_PIN)!;

int đúng = digitalRead (ACCEPT_PIN)!;

nếu (đúng) { nếu (M_read)

setstate (ĐO);
khác
setstate (AWAITING_COLOR); } else if (trái)

{ScanColor (m_raw, m_hue);

m_mixedamount = INITIAL_FLUID_AMOUNT; m_read = thật ; }}}

// chức năng nhà nước, nút trái được nhấn để // quét một màu được sử dụng như một
tài liệu tham khảo.

36
// Nút ngay sau đó có thể được ép để // di chuyển sang trạng thái
INITIALIZING_MIX.
khoảng trống ColorMixer :: awaitColor () { int ! Quét = digitalRead

(SCAN_PIN);
nếu (quét)
{ScanColor (m_raw, m_hue);

m_read = thật ; }

int ! Chấp nhận = digitalRead (ACCEPT_PIN);


nếu (Chấp nhận && m_read)
{Setstate (INITIALIZING_MIX); }}

// chức năng Nhà nước, đổ sơn để thử và phù hợp với màu sắc tham khảo. // Nếu sắc quét không nằm trong

// sử dụng phổ nhà nước được thiết lập trở lại AWAITING_COLOR.
khoảng trống ColorMixer :: initializeMix () { nếu (M_hue> = YB_RANGE_LOWER_BOUND && m_hue <=

YB_RANGE_UPPER_BOUND)
{ // Xác định tỷ lệ màu xanh để sơn màu vàng đổ.

phao bluequota = bluefract (m_hue);


phao yellowquota = 1.0f - bluequota;
char printbuffer [64] = "" ;

// Đổ vàng
int pourtime = round (INITIAL_FLUID_AMOUNT * yellowquota); sprintf (printbuffer, "Đổ vàng cho% d mili giây." ,
Pourtime);

Serial.println (printbuffer); digitalWrite (YELLOW_VALVE_PIN, CAO);


chậm trễ (pourtime);

digitalWrite (YELLOW_VALVE_PIN, LOW); m_mixedamount + =


pourtime;

// Đổ màu xanh
pourtime = round (INITIAL_FLUID_AMOUNT * bluequota); sprintf (printbuffer, "Đổ màu xanh cho% d mili giây." , Pourtime);
Serial.println (printbuffer);

37
PHỤ LỤC A. Arduino MÃ

digitalWrite (BLUE_VALVE_PIN, CAO); chậm trễ (pourtime);

digitalWrite (BLUE_VALVE_PIN, LOW); m_mixedamount + =


pourtime;

// Chuyển sang ĐO nhà nước.


setstate (ĐO); } khác

{Serial.println ( "Quét màu không nằm trong phạm vi làm việc!" ); setstate (AWAITING_COLOR); }}

// chức năng Nhà nước, đo khoảng cách giữa các // đổ hỗn hợp là từ sắc tham khảo. // Nếu nó nằm trong độ lệch chấp
nhận đi đến // AWAITING_COLOR nhà nước để bắt đầu một sự pha trộn mới. // Nếu nó không nằm trong độ lệch chấp
nhận đi đến // ADJUSTING_MIX nhà nước để đổ sơn hơn và điều chỉnh màu sắc.

khoảng trống ColorMixer :: đo lường () { // màu Scan khi nút trái được nhấn.

int ! Quét = digitalRead (SCAN_PIN);


nếu (quét) { int liệu [8];

scanColor (thô, m_measuredhue); Serial.println


(m_measuredhue); m_read = thật ; }

// Nếu có một màu quét khi nút phải được nhấn, // kiểm tra độ lệch và chuyển sang trạng thái // AWAITING_COLOR
hoặc ADJUSTING_MIX cho phù hợp.

int ! Chấp nhận = digitalRead (ACCEPT_PIN);


nếu (Chấp nhận && m_read) { Dài diff = m_hue - m_measuredhue;

diff = abs (diff);


bool done = diff <= WORKING_ERROR_MARGIN;
char printbuffer [64] = "" ; sprintf (printbuffer, "Looking for sắc:% lu Got sắc:.% Lu." ,

38
m_hue, m_measuredhue); Serial.println (printbuffer);
chậm trễ (500);

sprintf (printbuffer, "Màu so sánh:.% Ld tắt% s" , Diff, (thực hiện? "Làm xong!" : "Điều chỉnh!" )); Serial.println
(printbuffer); chậm trễ (500);

nếu (làm xong)

setstate (AWAITING_COLOR);
khác
setstate (ADJUSTING_MIX); }}

// chức năng Nhà nước, đổ thêm sơn vào trộn.


// Bao nhiêu là phụ thuộc vào độ lệch trong màu sắc từ các tài liệu tham khảo, // nơi trong quang phổ tham chiếu là và // gì màu sơn
được đổ.

khoảng trống ColorMixer :: adjustMix () { Dài diff = m_hue -

m_measuredhue;
// Xác định số mili giây để đổ, // với MAX_ADJUST_FLUID_AMOUNT ràng buộc trên.

int pourtime = min (tròn ( phao (Abs (diff))


/ YB_RANGE_SIZE * m_mixedamount), MAX_ADJUST_FLUID_AMOUNT);
int pin = YELLOW_VALVE_PIN;
nếu (Diff> = 0)
{Pin = BLUE_VALVE_PIN;

// màu xanh đang được đổ


// Nếu tham chiếu là gần cuối vàng của quang phổ, // sử dụng ít sơn amouts nhỏ màu xanh với màu sắc của alter làm rất
nhiều ở đây.
pourtime * = 0.2f + min (1.f, (1.f - bluedist (m_hue)) * 4.f) * 0.8f; } // pourtime tối thiểu, đảm bảo ít nhất một giọt đổ.

pourtime = max (pourtime, MIN_ADJUST_FLUID_AMOUNT);


char printbuffer [64] = "" ; sprintf (printbuffer,

"Việc điều chỉnh hỗn hợp, đổ cho% d mili giây từ van trên pin% d." , Pourtime, pin);

Serial.println (printbuffer); digitalWrite (pin, CAO);


chậm trễ (pourtime);

39
PHỤ LỤC A. Arduino MÃ

digitalWrite (pin, LOW); m_mixedamount + =


pourtime;

// Di chuyển trở lại ĐO nhà nước.


setstate (ĐO); }

// Máy chức năng chính, được gọi là từ vòng Arduino. // Gọi chức năng nhà nước tương ứng cho trạng thái hiện
tại.
khoảng trống ColorMixer :: chạy () { công

tắc điện (M_state) {


trường hợp STARTUP: khởi tạo (); phá vỡ ;
trường hợp AWAITING_COLOR: awaitColor (); phá vỡ ;
trường hợp INITIALIZING_MIX: initializeMix (); phá vỡ ;
trường hợp ĐO: đo lường (); phá vỡ ;
trường hợp ADJUSTING_MIX: adjustMix (); phá vỡ ; }}

// Thiết lập máy về trạng thái nhất định,


// đặt đèn LED tương ứng và reset bất kỳ thành viên cần thiết.
khoảng trống ColorMixer :: setstate (bang MachineState) { công tắc điện (tiểu bang) {

trường hợp STARTUP:

setLEDs (ALL_LEDS); Serial.println ( "Nhà nước thiết lập: STARTUP" );

phá vỡ ;
trường hợp AWAITING_COLOR:
setLEDs (GREEN_LED); m_read = sai ; m_mixedamount = 0; Serial.println ( "Nhà nước
thiết lập: AWAITING_COLOR" );

phá vỡ ;
trường hợp INITIALIZING_MIX:
setLEDs (YELLOW_LED); Serial.println ( "Bộ nhà nước: INITIALIZING_MIX" );

phá vỡ ;
trường hợp ĐO LƯỜNG:
setLEDs (GREEN_LED | YELLOW_LED); m_read = sai ; m_measuredhue =
0; Serial.println ( "Nhà nước thiết lập: ĐO" );

40
phá vỡ ;
trường hợp ADJUSTING_MIX:
setLEDs (YELLOW_LED); Serial.println ( "Nhà nước thiết lập: ADJUSTING_MIX" );

phá vỡ ;
} M_state = nhà nước; }

// Bật hoặc tắt đèn LED tương ứng với cờ chút nào.
khoảng trống ColorMixer :: setLEDs ( int unsigned đèn LED)
{DigitalWrite (GREEN_PIN, đèn LED & GREEN_LED);

digitalWrite (YELLOW_PIN, (LED & YELLOW_LED) >> 1); digitalWrite (RED_PIN, (LED &
RED_LED) 2 >>); }

// Đọc màu bằng cách sử dụng cảm biến màu sắc.


khoảng trống ColorMixer :: scanColor ( int * Thô, unsigned dài & Màu sắc) { int đỏ, xanh lá cây, xanh dương =

0;
int unsigned value = 0;
unsigned dài bão hòa = 0;
m_pColorSensor -> readRGB (& đỏ, & màu xanh lá cây, và màu xanh, thô); chậm trễ (300);

đỏ = thô [2] + 256 * liệu [3]; màu xanh lá cây = thô [0]
+ 256 * liệu [1]; màu xanh = liệu [4] + 256 * liệu [5];

// Tweak các giá trị, thực hiện để làm cho vàng -> công việc phổ xanh tốt hơn.
đỏ = red * 1,35;
màu xanh = màu xanh + pow (max (màu xanh -130, 0), 1,02);

// Yếu tố đánh giá cao xuống để làm cho giá trị cao nhất ở hầu hết 255.
int Cmax = max (đỏ, xanh lá cây); Cmax = max
(Cmax, xanh dương);
nếu (Cmax> 255) { phao yếu tố = 255.0f / Cmax;

đỏ = round (đỏ * yếu tố); màu xanh lá cây = round


(màu xanh lá cây * yếu tố); màu xanh = round (màu
xanh * yếu tố); }

// Chuyển đổi màu RGB để HSV.

41
PHỤ LỤC A. Arduino MÃ

rgbtohsv (đỏ, xanh lá cây, xanh dương, màu sắc, độ bão hòa, giá trị);

// Chuyển đọc dữ liệu qua serial.


char printbuffer [80] = "" ; sprintf (printbuffer,

"Màu sắc,% d,% d,% d,% lu,% lu,% u,% d,% d,% d,% d,% d,% d,% d,% d" , Đỏ, xanh lá cây, xanh
dương, màu sắc, độ bão hòa, giá trị,

liệu [0], liệu [1], liệu [2], liệu [3], liệu [4], liệu [5], liệu [6], liệu [7]); Serial.println (printbuffer); m_pColorSensor -> clearInterrupt
(); }

// Con trỏ trỏ tới các lớp học chính.


ColorMixer * g_pColorMixer = NULL;

khoảng trống thiết lập() {

// Tạo thể hiện của các lớp học chính.


nếu (! G_pColorMixer) {g_pColorMixer = Mới ColorMixer (); }}

khoảng trống loop () { // Gọi chức năng chạy trên các thể hiện của lớp chính.

g_pColorMixer -> run (); }

42
Phụ lục B

mã Python

""" /////////////////////////////////////////// // Màu Automated máy trộn


//
// Một dự án cử nhân ngành cơ điện tử //
// Tác giả: Max Lindgren và Max Thiel //
// TRITA MMK 2017: 32 MDAB 650 //
/////////////////////////////////////////// """

nhập khẩu nối tiếp


nhập khẩu thời gian

từ Tkinter nhập khẩu *

# Chức năng này sẽ trả về giá trị giữa trong số ba đầu vào.
def giữa (a, b, c):
max lợi nhuận (A, phút (B, c)) nếu (A < max (B, c)) max khác (B, c)

# chức năng chuyển đổi cho một màu được đưa ra trong RGB để một màu trong HSV.
def rgbtohsv (đỏ, xanh lá cây, xanh dương):
# Tính max, min và giữa các màu xanh lá cây và màu xanh đỏ.
M = max (Đỏ, max (Màu xanh lá cây, xanh dương)) m = phút (Đỏ, phút

(Màu xanh lá cây, xanh dương)) c = mid (đỏ, xanh lá cây, xanh

dương)

# Gán giá trị.


value = M

# Tính toán sự khác biệt giữa max và min.


diff = M - m
nếu (Diff == 0):
trở về 0, 0, giá trị

43
PHỤ LỤC B. PYTHON MÃ

# Xác định chỉ số ngành


I=0
nếu (M == đỏ):
I = 0 nếu (M == xanh) khác 5
elif (M == xanh):
I = 1 nếu (M == xanh) khác 2
khác :
I = 3 nếu (M == đỏ) khác 4

# tính bão hòa


bão hòa = ((diff << 16) - 1) // giá trị

# Tính phần phân đoạn của màu sắc


F = ((c - m) << 16) // d + 1

# E là độ dài cạnh hình lục giác


E = 65.537

# F Inverse cho chỉ số ngành lẻ


nếu (I == 1 hoặc là Tôi == 3 hoặc là Tôi == 5):
F=E-F

# Tính số nguyên dựa Huế


màu sắc = E * I + F
trở về màu sắc, độ bão hòa, giá trị

# chức năng chuyển đổi cho một màu được đưa ra trong HSV đến một màu sắc trong RGB.
def hsvtorgb (màu sắc, độ bão hòa, giá trị):
nếu bão hòa == 0 hoặc là giá trị == 0:
trở về 0, 0, 0

# tính diff
diff = ((bão hòa * giá trị) >> 16) + 1

# Tính m, giá trị tối thiểu của R, G và B


m = value - diff

# E là độ dài cạnh hình lục giác


E = 65.537

# Xác định khu vực chỉ số màu sắc và tính thành phần trung lưu.
nếu màu sắc <E:
trở về giá trị, ((sắc * diff) >> 16) + m, m
elif Huế> = E và màu sắc <2 * E:

44
trở về (((2 * E - Huế) * diff) >> 16) + m, giá trị, m
elif Huế> = 2 * E và màu sắc <3 * E:
trở về m, giá trị, (((hue - E * 2) * diff) >> 16) + m
elif Huế> = 3 * E và màu sắc <4 * E:
trở về m, (((E * 4 - màu sắc) * diff) >> 16) + m, giá trị
elif Huế> = 4 * E và màu sắc <5 * E:
trở về (((Hue - E * 4) * diff) >> 16) + m, m, giá trị
elif Huế> = 5 * E:
trở về giá trị, m, (((E * 6 - màu sắc) * diff) >> 16) + m

# lớp học chính, giữ Tkinter và giao diện nối tiếp.


lớp học ColorDisplay:
def __init __ (tự):
# Init tất cả thành viên
self.root = Không self.rgbframe =
Không self.rawframe = Không
self.hsvframe = Không
self.hueframe = Không self.ser =
None

def __del __ (tự):


# Hãy chắc chắn rằng sê-ri là khép kín.
nếu self.ser:
self.ser.close () self.ser = None

def hiển thị (tự):


# Hiển thị Tkinter, chạy mainloop
self.root = Tk ()
# Thêm cập nhật cho các vòng lặp Tkinter.
self.root.after (0, self.update) self.root [ "chiều rộng" ] = 960
self.root [ "Chiều cao" ] = 540

self.root.resizable (width = False, height = False) self.createframes (); self.root.mainloop


()

def createframes (tự):


# Tạo bốn khung màu.
self.rgbframe = Frame (self.root, bg = "trái cam" ) Self.rgbframe [ "chiều rộng" ] = Self.root [ "chiều
rộng" ] / 4 self.rgbframe [ "Chiều cao" ] = Self.root [ "Chiều cao" ] Self.rgbframe.pack (bên =
LEFT)

45
PHỤ LỤC B. PYTHON MÃ

self.tweakframe = Frame (self.root, bg = "màu xanh da trời" ) Self.tweakframe [ "chiều rộng" ] =


Self.root [ "chiều rộng" ] / 4 self.tweakframe [ "Chiều cao" ] = Self.root [ "Chiều cao" ]
Self.tweakframe.pack (bên = LEFT) self.hsvframe = Frame (self.root, bg = "màu xanh lá" )
Self.hsvframe [ "chiều rộng" ] = Self.root [ "chiều rộng" ] / 4 self.hsvframe [ "Chiều cao" ] = Self.root
[ "Chiều cao" ] Self.hsvframe.pack (bên = LEFT) self.hueframe = Frame (self.root, bg = "màu
vàng" ) Self.hueframe [ "chiều rộng" ] = Self.root [ "chiều rộng" ] / 4 self.hueframe [ "Chiều cao" ] =
Self.root [ "Chiều cao" ] Self.hueframe.pack (bên = LEFT)

def setcolor (tự, đỏ, xanh lá cây, xanh dương,


màu sắc, độ bão hòa, giá trị, tweakr, tweakg,
tweakb):
# Đặt màu của rgbframe.
rgbcolor = "#% 02x% 02x% 02x" % (Đỏ, xanh lá cây, xanh dương) self.rgbframe [ "Bg" ] =
Rgbcolor

# Đặt màu của tweakframe.


tweakcolor = "#% 02x% 02x% 02x" % (Tweakr, tweakg, tweakb) self.tweakframe [ "Bg" ] = Tweakcolor

# Tính toán và thiết lập màu sắc của hsvframe.


r, g, b = hsvtorgb (màu sắc, độ bão hòa, giá trị) hsvcolor = "#% 02x% 02x% 02x" %
(R, g, b) self.hsvframe [ "Bg" ] = Hsvcolor

# Tính toán và thiết lập màu sắc của hueframe.


r, g, b = hsvtorgb (màu sắc, 65535, 255) huecolor = "#% 02x% 02x% 02x"
% (R, g, b) self.hueframe [ "Bg" ] = Huecolor

# giá trị In ra cửa sổ Console.


in ( "Tinh chỉnh" + Tweakcolor + "Rgb:" + Rgbcolor +
"HSV trong rgb:" + Hsvcolor + "Huế:" + str (Màu sắc) +
"- Huế trong rgb:" + Huecolor)

def initSerial (tự):


# Cố gắng thiết lập kết nối nối tiếp với Arduino.
nếu không self.ser:
thử : Self.ser = serial.Serial (port = 'COM4' , \

46
baudrate = 9600, \
chẵn lẻ = serial.PARITY_NONE, \ stopbits =
serial.STOPBITS_ONE, \ bytesize = serial.EIGHTBITS, \
timeout = 0)

in ( "kết nối với: " + Self.ser.portstr)


ngoại trừ serial.SerialException như e:
nếu self.ser:
self.ser.close () self.ser = None

# Đọc dữ liệu từ kết nối seria.


def readSerial (tự):
seq = []

nếu self.ser:
thử : Startread = time.time ()

vì char trong self.ser.read ():


seq.append ( chr (Char))
trong khi len (Seq)> 0:
vì char trong self.ser.read ():
seq.append ( chr (Char))

# Kết thúc mua lại khi ngắt dòng nhận được.


nếu seq [-1] == '\ N' :
# Tham gia dữ liệu vào một chuỗi duy nhất và
# tước ngắt dòng.
joined_seq = '' .tham gia( str (V) vì v trong seq) joined_seq.strip ();

# Chia chuỗi ở mọi dấu phẩy.


data = joined_seq.split ( '' )
# Đọc dữ liệu.
self.readData (dữ liệu)
phá vỡ elif startread - time.time ()> 10:

in (
"Timeout readSerial, mất hơn 10 giây."
)
in (
"Dữ liệu nhận được:" + '' .tham gia( str (V) vì v trong seq)
)
phá vỡ

47
PHỤ LỤC B. PYTHON MÃ

# Nếu kết nối nối tiếp thất bại,


# đóng nó và thiết lập các thành viên là None.
# Điều này sẽ làm cho chương trình thử
# tái -establish kết nối.
ngoại trừ serial.SerialException như e:
nếu self.ser:
self.ser.close () self.ser = None

def readData (tự, dữ liệu):


# Nếu một màu "gói" được nhận, đọc màu sắc,
# khác in ra màn hình.
nếu dữ liệu [0] == "màu" :
in ( '' .tham gia( str (V) + '' vì v trong dữ liệu)) self.readColor (dữ liệu [1:])

khác : in ( '' .tham gia( str (V) vì v trong dữ liệu))

# Nội dung đã nhận được hơn màu nối tiếp và


# bộ màu sắc của khung cho phù hợp.
def readColor (tự, rgbhue):
nếu len (Rgbhue) == 14:
# Kết hợp các giá trị màu sắc liệu cho đại diện trực quan.
r = int (Rgbhue [8]) + 256 * int (Rgbhue [9]) g = int (Rgbhue [6]) + 256 * int (Rgbhue
[7]) b = int (Rgbhue [10]) + 256 * int (Rgbhue [11])

Cmax = max (R, g, b)


nếu Cmax> 255:
yếu tố = 255 / Cmax r = r * yếu tố g
= g * yếu tố b = b * yếu tố r = int (R) g = int
(G) b = int (B)

# Hãy thiết lập màu của khung.


self.setcolor ( int (Rgbhue [0]),
int (Rgbhue [1]),
int (Rgbhue [2]),
int (Rgbhue [3]),
int (Rgbhue [4]),

48
int (Rgbhue [5]),
r, g, b)

# In một số dữ liệu ra màn hình.


in ( "Thô:% s" % Rgbhue [3])
in (Rgbhue [8])
in (Rgbhue [9])
in (Rgbhue [6])
in (Rgbhue [7])
in (Rgbhue [10])
in (Rgbhue [11])
in (Rgbhue [12])
in (Rgbhue [13])

def cập nhật (tự):


# Cố gắng thiết lập kết nối nối tiếp.
self.initSerial ()

# Cố gắng đọc dữ liệu qua kết nối nối tiếp.


self.readSerial ()

# Hãy chắc chắn rằng bản cập nhật được gọi là vòng lặp lại tiếp theo.
self.root.after (1, self.update)

def chủ yếu ():


# Khởi động chương trình.
CD = ColorDisplay ()
CD.show ()

nếu __name__ == '__chủ yếu__ ' :


# Gọi chính!
chủ yếu()

49
TRITA MMK 2017: 32 MDAB 650

www.kth.se

You might also like