You are on page 1of 8

NGUYỄN THÀNH TÂM:

PHÂN TÍCH MẠCH


SƠ ĐỒ MẠCH:

Giới thiệu:
-Phát hiện màu sắc là một lĩnh vực thú vị của ứng dụng công nghệ có các ứng dụng
trong nghệ thuật và thiết kế, tự động hóa và kiểm soát chất lượng, trong số các lĩnh vực
khác.
-Trong dự án này, chúng ta sẽ xem xét cách tạo ra một máy dò màu từ Arduino Uno,
màn hình LCD 16×2 và cảm biến màu TCS230 / TCS3200.
-Cấu hình này sẽ cho phép bạn nhận dạng và hiển thị màu sắc của một đối tượng được
đặt ở phía trước cảm biến một cách chính xác. Blog này thể hiện một cách tiếp cận
chính xác và hiệu quả trong việc phát hiện màu sắc trong môi trường xung quanh. Việc
MArobotics sử dụng cảm biến TCS230 và vi điều khiển Arduino cung cấp một cách tiếp
cận dễ tiếp cận và thích ứng cho các ứng dụng bao gồm tự động hóa công nghiệp.
PHÂN TÍCH MẠCH:
Có 3 bộ phận chính và các linh kiện nhỏ khác:

*3 bộ phận chính:
-Arduino Uno R3:
 Công dụng: Arduino Uno R3 là một bo mạch phổ biến được sử dụng trong nhiều
dự án điện tử. Nó cung cấp nhiều chân kết nối và có khả năng điều khiển các
thiết bị ngoại vi khác nhau.
 Ứng dụng: Arduino Uno R3 thường được sử dụng để xây dựng các dự án điện tử
như hệ thống tự động hoá nhà thông minh, thiết bị đo lường, robot, và các ứng
dụng IoT (Internet of Things).

-Cảm biến màu TCS3200:


 Công dụng: Cảm biến TCS3200 được sử dụng để phát hiện màu sắc của các vật
thể. Nó sử dụng một mảng bộ lọc màu RGB và bộ đếm tần số để xác định màu
sắc dựa trên tần số của ánh sáng được phát hiện.
 Ứng dụng: Cảm biến TCS3200 thường được sử dụng trong các ứng dụng như hệ
thống phân loại màu sắc, cảm biến màu cho robot hoặc máy in 3D, cũng như
trong việc điều khiển ánh sáng tự động dựa trên màu sắc.

-Màn hình LCD 16x2:


 Công dụng: Màn hình LCD 16x2 là một loại màn hình hiển thị ký tự sử dụng
công nghệ LCD. Nó có khả năng hiển thị 16 ký tự trên mỗi hàng và tổng cộng 2
hàng.
 Ứng dụng: Màn hình LCD 16x2 thường được sử dụng để hiển thị thông tin trong
các dự án điện tử như đồng hồ, bộ đếm, cảm biến dữ liệu, thông báo, và giao
diện người dùng trong các thiết bị điều khiển.
.

*Các linh kiện con:


-10k Variable Resistor (Biến trở biến 10k):
 Công dụng: Biến trở biến 10k được sử dụng để điều chỉnh mức độ điện trở trong
mạch điện. Khi bạn điều chỉnh biến trở, nó thay đổi giá trị điện trở và do đó thay
đổi dòng điện hoặc điện áp trong mạch.
 Ứng dụng: Thường được sử dụng để điều chỉnh độ sáng của đèn LED, tần số của
một mạch Oscillator, hoặc làm điều khiển động cơ DC.
-100R Resistor (Resistor 100 ohm):
 Công dụng: Resistor 100 ohm được sử dụng để giảm điện áp hoặc dòng điện
trong mạch điện. Nó giúp bảo vệ linh kiện khác khỏi quá tải và kiểm soát dòng
điện trong mạch.
 Ứng dụng: Thường được sử dụng trong mạch LED để giảm dòng điện và bảo vệ
LED khỏi quá nhiệt, hoặc trong mạch cảm biến như cảm biến ánh sáng.
-Male to Male Jumper Wires (Dây nối jumper Male to Male):
 Công dụng: Sử dụng để kết nối các chân của các linh kiện điện tử với nhau hoặc
với các chân của bo mạch (breadboard) hoặc mạch in (PCB).
 Ứng dụng: Thường được sử dụng trong quá trình prototyping, thử nghiệm và
phát triển mạch điện tử.
-Male to Female Jumper Wires (Dây nối jumper Male to Female):
 Công dụng: Dùng để kết nối các chân của các linh kiện điện tử với các chân của
bo mạch hoặc breadboard, trong đó một đầu cắm (male) và một đầu cắm
(female).
 Ứng dụng: Thường được sử dụng khi cần kết nối các linh kiện có chân không
cắm trực tiếp vào breadboard hoặc bo mạch.
-Hard Jumper Wire (Dây nối jumper Hard):
 Công dụng: Sử dụng để tạo kết nối cứng và ổn định giữa các linh kiện trên
breadboard hoặc mạch prototype.
 Ứng dụng: Thường được sử dụng để tạo kết nối chắc chắn giữa các điểm trong
mạch khi cần thiết.
-Các bước để có thể kết nối được Arduino uno R3 với cảm biến TCS3200, LCD16x2:

Bước 1: Kết nối cảm biến TCS3200:


 Sử dụng dây dẫn từ cảm biến TCS3200 đến bảng mạch.
 Kết nối chân OUT của cảm biến với một chân số học trên Arduino Uno R3.
 Kết nối các chân S0, S1, S2, và S3 của cảm biến với các chân khác trên Arduino
Uno R3.
 Cấp nguồn và kết nối đất cho cảm biến TCS3200 từ Arduino Uno R3.
Bước 2: Kết nối màn hình LCD 16x2:
 Sử dụng dây nối để kết nối các chân của màn hình LCD với bảng mạch.
 Kết nối các chân RS, E, D4, D5, D6, và D7 của màn hình LCD với các chân khác
trên Arduino Uno R3.
 Cấp nguồn và kết nối đất cho màn hình LCD từ Arduino Uno R3.
Bước 3: Kết nối biến trở biến 10k và điện trở 100 ohm:
 Sử dụng dây nối để kết nối các chân của biến trở với bảng mạch.
 Kết nối một chân của biến trở với một chân analog trên Arduino Uno R3.
 Kết nối resistor 100 ohm theo cách cần thiết trong mạch.
Bước 4: Sử dụng dây nối jumper:
 Sử dụng dây nối jumper để tạo kết nối giữa các linh kiện và Arduino Uno R3 trên
bảng mạch.

Sau khi kết nối các linh kiện và Arduino Uno R3 như vậy, bạn có thể viết mã Arduino để
đọc dữ liệu từ cảm biến TCS3200 và hiển thị kết quả lên màn hình LCD 16x2. Đồng thời,
bạn cũng có thể sử dụng giá trị điều chỉnh từ biến trở để điều chỉnh các tham số hoạt
động của mạch hoặc hiển thị thông tin điều chỉnh lên màn hình LCD.
*kết quả thực tế thực hiện các bước trên:

-Arduino Uno, hoạt động như bộ não của Máy dò màu, là yếu tố chính của dự án. Các giá trị của
màu đỏ, xanh lá cây và xanh dương được hiển thị trong dòng đầu tiên của màn hình LCD 16×2,
trong khi màu được phát hiện được hiển thị ở dòng thứ hai. Để xem tốt nhất, chiết áp 10k kiểm soát
mức độ tương phản của màn hình LCD. Chân cực dương 15 và chân cực âm 16, trong đó cực âm
được liên kết trực tiếp với mặt đất và cực dương được kết nối nối tiếp với điện trở 100 ohm để điều
chỉnh đèn nền, chịu trách nhiệm cho đèn nền của LCD.

- Chúng tôi đã đưa cảm biến màu TCS3200 vào cấu hình để thu thập dữ liệu màu. Các bài đọc màu
đỏ, xanh lá cây và xanh dương mà cảm biến này có thể cung cấp. Hệ thống sẽ xác định và hiển thị
màu sắc phù hợp dựa trên các biến này.

-Điều quan trọng cần nhớ là TCS230 và TCS3200 chia sẻ một giao thức chung, cho phép tự do lựa
chọn thành phần. Chân 8 trên Arduino được kết nối với chân "ra" của cảm biến, trong khi chân S0
và S1 được kết nối với chân 9 và 10, tương ứng. Hơn nữa, chân 11 và 12 được liên kết với S2 và
S3, tương ứng. Mục đang được quét được chiếu sáng bởi bốn đèn LED, được phát hiện bởi
TCS3200. Tần số của ánh sáng phản xạ dao động trên phổ RGB. Để xác định màu sắc và cho phép
nhận dạng màu sắc chính xác, hệ thống xử lý các tần số này.

*Arduino IDE Code:


1. #include <LiquidCrystal.h>
2. LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
3. #define outPin 8
4. #define s0 9
5. #define s1 10
6. #define s2 11
7. #define s3 12
8. boolean DEBUG = true;
9. // Variables
10. int red, grn, blu;
11. String color ="";
12. long startTiming = 0;
13. long elapsedTime =0;
14. void setup(){
15. Serial.begin(9600)
16. pinMode(s0, OUTPUT);
17. pinMode(s1, OUTPUT);
18. pinMode(s2, OUTPUT);
19. pinMode(s3, OUTPUT);
20. pinMode(outPin, INPUT); //out from sensor becomes input to arduino
21. // Setting frequency scaling to 100%
22. digitalWrite(s0,HIGH);
23. digitalWrite(s1,HIGH);
24. lcd.begin(16, 2);
25. lcd.clear();
26. lcd.setCursor (3,0);
27. lcd.print("Welcome To");
28. lcd.setCursor (1,1);
29. lcd.print("Color Detector");
30. delay(2000);
31. lcd.clear();
32. startTiming = millis();
33. }
34. void loop(){
35. getColor();
36. if(DEBUG)printData();
37. elapsedTime = millis()-startTiming;
38. if (elapsedTime > 1000) {
39. showDataLCD();
40. startTiming = millis();
41. }
42. }
43. /* read RGB components */
44. void readRGB(){
45. red = 0, grn=0, blu=0;
46. int n = 10;
47. for (int i = 0; i < n; ++i){
48. //read red component
49. digitalWrite(s2, LOW);
50. digitalWrite(s3, LOW);
51. red = red + pulseIn(outPin, LOW);
52. //read green component
53. digitalWrite(s2, HIGH);
54. digitalWrite(s3, HIGH);
55. grn = grn + pulseIn(outPin, LOW);
56. //let's read blue component
57. digitalWrite(s2, LOW);
58. digitalWrite(s3, HIGH);
59. blu = blu + pulseIn(outPin, LOW);
60. }
61. red = red/n;
62. grn = grn/n;
63. blu = blu/n;
64. }
65. /***************************************************
a. Showing captured data at Serial Monitor
66. ****************************************************/
67. void printData(void){
68. Serial.print("red= ");
69. Serial.print(red);
70. Serial.print(" green= ");
71. Serial.print(grn);
72. Serial.print(" blue= ");
73. Serial.print(blu);
74. Serial.print (" - ");
75. Serial.print (color);
76. Serial.println (" detected!");
77. }
78. ///***************************************************
79. //* Showing capured data at LCD
80. //****************************************************/
81. void showDataLCD(void){
82. lcd.clear();
83. lcd.setCursor (0,0);
84. lcd.print("R");
85. lcd.print(red);
86. lcd.setCursor (6,0);
87. lcd.print("G");
88. lcd.print(grn);
89. lcd.setCursor (12,0);
90. lcd.print("B");
91. lcd.print(blu);
92. lcd.setCursor (0,1);
93. lcd.print("Color: ");
94. lcd.print(color);
95. }
96. void getColor(){
97. readRGB();
98. if(red>7 && red<11 && grn>17 && grn<23 && blu>13 && blu<18) color = "RED";
99. else if(red>17 && red<21 && grn>11 && grn<15 && blu>12 && blu<18) color =
"GREEN";
100. else if(red>22 && red<28 && grn>11 && grn<16 && blu>6 && blu<10) color = "BLUE";
101. else if(red>4 && red<8 && grn>6 && grn<10 && blu>9 && blu<13) color = "YELLOW";
102. else if(red>5 && red<8 && grn>4 && grn<8 && blu>3 && blu<7) color = "WHITE";
103. else if(red>28 && red<36 && grn>25 && grn<34 && blu>20 && blu<29) color =
"BLACK";
104. else color = "NO_COLOR";
105. }

*Giải thích code:


-Khai báo thư viện và biến:
 #include <LiquidCrystal.h>: Đây là thư viện dùng để tương tác với màn hình
LCD.
 LiquidCrystal lcd(2, 3, 4, 5, 6, 7); : Khởi tạo một đối tượng lcd để điều
khiển màn hình LCD, với các chân kết nối được chỉ định.
 #define outPin 8, #define s0 9, #define s1 10, #define s2 11, #define s3
12: Định nghĩa các hằng số để xác định các chân kết nối với cảm biến và màn
hình.
 boolean DEBUG = true; : Biến boolean để xác định xem chương trình có sử dụng
chế độ debug hay không.
 int red, grn, blu;: Biến để lưu trữ giá trị của các thành phần màu RGB.
 String color ="";: Biến để lưu trữ màu được phát hiện.
-Hàm setup():
 Cài đặt các chân kết nối và khởi tạo màn hình LCD để hiển thị tin chào mừng.
 Khởi tạo biến startTiming để theo dõi thời gian.
-Hàm loop():
 Lặp lại việc đọc dữ liệu từ cảm biến và hiển thị kết quả lên màn hình LCD.
 Kiểm tra thời gian và hiển thị dữ liệu lên màn hình LCD mỗi giây.
-Hàm readRGB():
 Đọc giá trị màu RGB từ cảm biến TCS3200 và tính trung bình của nhiều lần đọc.
-Hàm printData() và Hàm showDataLCD():
 Hiển thị dữ liệu đọc được lên Serial Monitor và màn hình LCD.
-Hàm getColor():
 Xác định màu sắc của vật thể dựa trên các giá trị màu RGB đọc được.

Hay nói cách khác:


-Thư viện "LiquidCrystal", điều khiển màn hình LCD 16×2, lần đầu tiên được bao gồm
trong mã.
-Nó khởi tạo các chân của cảm biến màu TCS3200 cũng như màn hình LCD (chân 2
đến 7).
-Chân 8 của Arduino được liên kết với chân "ra" của cảm biến màu, trong khi các chân
từ 9 đến 12 được chỉ định cho các chân S0, S1, S2 và S3. Các giá trị RGB được gửi
đến màn hình nối tiếp bằng mã, theo mặc định đặt biến "DEBUG" thành "true".
- Bạn có thể đặt nó thành "true" nếu tất cả những gì bạn muốn màn hình hiển thị là các
giá trị RGB.
-Nếu không, hãy làm cho nó "sai". Phần thiết lập khởi tạo các chân từ S0 đến S3 cho
cảm biến màu và đặt màn hình nối tiếp thành tốc độ truyền 9600.
-Ngoài ra, mã sẽ xóa màn hình LCD, khởi tạo nó và hiển thị thông báo trong hai giây.
Biến "startTiming" chứa thời gian khởi động màn hình LCD.
- Phương thức "getColor()" được gọi bởi code trong phần loop. Chức năng này sử dụng
dữ liệu RGB mà nó nhận được từ cảm biến màu để xác định màu sắc và sau đó hiển
thị nó trên màn hình LCD. Biến "DEBUG" xác định xem dữ liệu này có được gửi đến
màn hình nối tiếp hay không.
Cứ sau 1000 mili giây, phương thức "showDataLCD()" được chạy để cập nhật và hiển
thị các giá trị và màu sắc RGB trên màn hình LCD.
-Giá trị RGB thu được từ cảm biến màu bằng phương pháp "readRGB ()" và màu sắc
và giá trị RGB được hiển thị trên màn hình nối tiếp bằng chức năng "printData ()".
-Câu lệnh điều kiện được sử dụng bởi phương thức "getColor()" để xác định màu sắc
tùy thuộc vào giá trị RGB.
-Để xác định màu sắc, ví dụ, nó so sánh các giá trị của màu đỏ, xanh lá cây và xanh
dương. Sau đó, khi một điều kiện nhất định được thỏa mãn, nó sẽ sửa đổi biến "màu".
Nó được trình bày làm thế nào để sửa đổi mã để thêm nhiều màu sắc hơn, chẳng hạn
như "màu đen".
-Bằng cách chỉ định một biến màu và cung cấp phạm vi giá trị RGB, nhiều màu hơn có
thể được thêm vào.
-Quy trình tải lên mã cuối cùng được mô tả, tập trung vào tầm quan trọng của việc hiệu
chỉnh cảm biến màu dựa trên mức độ ánh sáng xung quanh trong khu vực nó sẽ được
sử dụng.
-Với việc sử dụng các giá trị RGB cho từng màu sắc và điều chỉnh có điều kiện, Máy dò
màu sắc có thể phát hiện chính xác một số lượng lớn màu sắc. Quy trình hiệu chuẩn
đảm bảo cảm biến màu có thể phát hiện màu sắc chính xác và điều chỉnh theo các điều
kiện ánh sáng khác nhau.

You might also like