Tải bản đầy đủ (.pdf) (25 trang)

báo cáo cảm biến màu sắc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.68 MB, 25 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CƠ KHÍ

---

---

BÁO CÁO PROJECT

PHÂN BIỆT SẢN PHẨM DỰA
THEO MÀU SẮC
Học phần: Cảm biến và hệ thống đo
GVHD: Bùi Thanh Lâm
Sinh viên thực hiện
Trịnh Hồng Anh ( Trưởng nhóm )
Lê Trường Sơn

Nguyễn Ngọc Huy

Nguyễn Trường An

Hồng Văn Thoan

Khóa: K16
Mã lớp: 20222ME6044006

Năm học: 2022 - 2023


MỞ ĐẦU ...................................................................................................................3


PHẦN I CÁCH LẮP ĐẶT VÀ CẤU TẠO, NGUYÊN LÝ HOẠT ĐỘNG
CỦA CÁC BỘ PHẬN ĐƯỢC SỬ DỤNG TRONG PROJECT ..........................4
1

Module cảm biến màu TCS 3200 ...................................................................................................... 4

2

Relay(Rơ-le):...................................................................................................................................... 7

3

Cảm biến ánh sáng: ........................................................................................................................... 9

4

Động cơ Servo: .................................................................................................................................. 9

5

Bảng mạch điều khiến Adruino UNO R3 ......................................................................................... 11

PHẦN II NGUYÊN LÝ HOẠT ĐỘNG .............................................................16
1

Nguyên lí ......................................................................................................................................... 16

2

Sơ đồ mạch ..................................................................................................................................... 16


3

Code chương trình .......................................................................................................................... 17

PHẦN III

VIDEO SẢN PHẨM ........................................................................24

PHẦN IV

KẾT QUẢ .........................................................................................25

1

Đã đạt được .................................................................................................................................... 25

2

Chưa đạt được ................................................................................................................................ 25

PHẦN V TÀI LIỆU THAM KHẢO ..................................................................25


MỞ ĐẦU

Trong các nhà máy, phân xưởng, xí nghiệp, nơi có số lượng hàng hóa lớn, trong
cơng việc phân loại sản phẩm, nếu dùng theo cách thông thường là cho các nhân
cơng phân loại sản phẩm thì sẽ tốn rất nhiều nhân công và hiệu quả sẽ không được
cao. Vậy cho nên chúng em đã tìm hiểu, nghiên cứu, phương pháp phân loại sản

phẩm dựa theo màu sắc giúp cho việc phân loại sản phẩm sẽ được thực hiện theo
một cách máy móc, cơng nghiệp, giảm nhân lực và tăng năng xuất cho việc sản xuất.
Bài nghiên cứu sử dụng cảm biến TCS 3200 nhận biết màu sắc , cảm biến hồng
ngoại nhận biết vật cản, relay trung gian, động cơ servo, vi điều khiển Arduino UNO
R3 trên môi trường code Arduino mơ phỏng quy trình vận hành của dự án.


PHẦN I CÁCH LẮP ĐẶT VÀ CẤU TẠO, NGUYÊN LÝ HOẠT ĐỘNG
CỦA CÁC BỘ PHẬN ĐƯỢC SỬ DỤNG TRONG PROJECT
1 Module cảm biến màu TCS 3200
Module cảm biến màu TCS3200 là một module cảm biến phát hiện đầy đủ
màu sắc, bao gồm cả cảm biến TCS3200 với khả năng nhận biết 3 màu cơ bản
RGB và 4 led màu trắng. Các TCS3200 có thể phát hiện và đo lường gần như
tất cả màu sắc có thể nhìn thấy. Các bộ lọc màu bên trong TCS3200 được
phân bố đều khắp các mảng để loại bỏ sai lệch vị trí giữa các điểm màu. Bên
trong là một bộ dao động tạo ra sóng vng ở ngõ ra tỉ lệ với cường độ màu
sắc.




Cấu tạo:


Sơ đồ chân

Tên chân

Mô tả


S1,S0 (1,2)

Ngõ vào chọn tỉ lệ tần số ngõ ra

OE (3)

Ngõ vào cho phép xuất tần số ở chân OUT (tích cực mức thấp)

GND (4)

Chân nối đất

VDD (5)

Chân cấp nguồn (2,7 – 5,5V)

OUT (6)

Ngõ ra là tần số thay đổi phụ thuộc cường độ và màu sắc.

S2, S3 (7,8) Ngõ vào chọn loại photodiode
 Thông số kỹ thuật


·

Chuyển đổi cường độ ánh sáng thành tần số có độ phân giải cao.




·
ra.

Lập trình lựa chọn bộ lọc màu sắc khác nhau và dạng tần số xuất



·

Giao tiếp trực tiếp với vi điều khiển.



·

Điện áp 2.7 – 5.5V.



·

Kích thước: 28.4 x 28.4mm.



·

Tần số ngõ ra có độ rộng xung 50%




·

Tần số tỉ lệ với ánh sáng có cường độ và màu sắc khác nhau.



·

Tần số ngõ ra nằm trong khoảng 2 Hz- 500KHz.



Nguyên lý hoạt động



Cảm biến màu TCS3200 gồm 2 khối như hình vẽ phía dưới:



Khối đầu tiên là mảng ma trận 8×8 gồm các photodiode. Photodiode đơn giản
là một linh kiện bán dẫn chuyển đổi ánh sáng thành dịng điện.



*

16 photodiode có thể lọc màu đỏ (red)





*

16 photodiode có thể lọc màu xanh lá (green)



*

16 photodiode có thể lọc màu xanh dương (blue)



*

16 photodiode trắng khơng lọc (clear)



Bản chất của 4 loại photodiode trên như là các bộ lọc ánh sáng có màu sắc
khác nhau. Khi lựa chọn một bộ lọc màu nào nó sẽ cho phép chỉ nhận biết 1
màu và các màu khác sẽ bị chặn. Ví dụ, khi lựa chọn bộ lọc màu xanh lá
(green) thì chỉ có ánh sáng tới màu xanh lá mới có thể được thơng qua, màu
đỏ và màu xanh dương sẽ bị chặn lại như hình minh họa bên dưới. Vì vậy,
chúng ta có thể nhận được cường độ ánh sáng màu xanh lá. Tương tự như vậy,
khi lựa chọn các bộ lọc màu khác thì chúng ta có thể nhận được ánh sáng màu
đỏ (red) hoặc màu xanh dương (blue).




Tại một thời điểm chỉ có 1 bộ lọc màu được chọn. Việc chọn bộ lọc màu được
thực hiện thông qua 2 chân S2 và S3 như bảng dưới đây.

S2 S3 Loại bộ lọc
L

L

Red

L

H

Blue

H

L

Clear (no filter)

H

H

Green




Khối thứ hai trong cảm biến màu TCS3200 là bộ chuyển đổi dòng điện sang
tần số. Các giá trị đọc từ photodiode được chuyển đổi thành sóng vng có
tần số tỷ lệ thuận với cường độ ánh sáng phản xạ khỏi bề mặt của vật thể. Cuối
cùng, chúng ta dùng vi điều khiển đề đọc sóng vng ngõ ra và lấy kết quả
màu sắc.



Các chân S0 và S1 được sử dụng để điều chỉnh tần số đầu ra. Nó có thể được
chia tỷ lệ thành các giá trị đặt trước sau: 2%, 20% hoặc 100%. Các bộ vi điều
khiển khác nhau có cấu hình cho bộ định thời khác nhau. Chức năng chia tỷ
lệ tần số về cơ bản cho phép ngõ ra của cảm biến được tối ưu hóa cho các bộ
vi điều khiển khác nhau.




S0 S1 Tỷ lệ tần số ngõ ra
L

L

Power down

L

H


2%

H

L

20%

H

H

100%



Tần số ngõ ra của module cảm biến màu TCS3200 trong khoảng 2 Hz ~ 500
kHz. Tần số ngõ ra có dạng xung vuông với tần số khác nhau tương ứng với
màu sắc và cường độ sáng là khác nhau.



Chúng ta có thể lựa chọn tỉ lệ tần số ngõ ra ở các mức khác nhau như bảng
trên cho phù hợp với phần cứng đo tần số .

2 Relay(Rơ-le):
Là công tắc điện tử có khả năng bật tắt một dịng có cường độ lớn hơn nhiều so với
dịng đang vận hành. Có thể hiểu đơn giản, relay như một đòn bẩy điện, có tác dụng
chuyển mạch. Relay được bật vận hành bằng 1 dịng điện có cường độ nhỏ nhưng
có khả năng bật giúp các thiết bị khác sử dụng dịng có cường độ lớn hơn nhiều so

với dòng hiện hành.




Cấu tạo:

Bản chất của relay là 1 nam châm điện và hệ thống các tiếp điểm đóng cắt, được
thiết kế theo kiểu modem dễ dàng lắp đặt sử dụng. Cấu tạo cơ bản của relay sẽ bao
gồm 3 khối cơ bản:





Khối tiếp thu - Nơi tiếp nhận tín hiệu đầu vào và chuyển đổi chúng
thành đại lượng cần thiết, cung cấp tín hiệu cho khối trung gian.



Khối trung gian - Cơ cấu tiếp nhận tín hiệu thơng tin từ khối tiếp thu và
biến chúng thành đại lượng cần thiết cho relay tác động



Khối chấp hành - Khối thực hiện nhiệm vụ được cấp từ khối trung gian,
phát tín hiệu cho mạch điều khiển.

Ngun lý hoạt động:



Khi dịng điện cơng suất nhỏ chạy qua mạch điện thứ nhất sẽ kích hoạt
nam châm điện, tạo ra từ trường, tín hiệu. Từ trường này sẽ thu hút 1
tiếp điểm để kích hoạt mạch điện thứ 2, cho phép thiết bị kết nối sử
dụng dịng có cường độ lớn hơn rất nhiều.




Khi dòng điện bị ngắt, nam châm ngừng hoạt động, không tạo ra thị
trường. Lúc này, tiếp điểm sẽ bị lực kéo của lò xo ban đầu kéo về vị trí
cũ, tương ứng với mạch điện thứ 2 bị ngắt.

3 Cảm biến ánh sáng:
Cảm biến ánh sáng là một thiết bị có khả năng phát hiện và đo lượng ánh sáng môi
trường xung quanh.



Cấu tạo: Cảm biến CDS bao gồm hai tấm kim loại dẫn điện được nối
với một tấm CdS. CdS là một chất bán dẫn có khả năng điện trở biến
đổi theo mức độ chiếu sáng.



Nguyên lý hoạt động:

Khi ánh sáng chiếu vào tấm CdS, độ dẫn điện của nó thay đổi.
Điều này là do photons trong ánh sáng kích thích các electron
trong CdS, tăng cường sự di chuyển của chúng và làm tăng số

lượng electron tự do. Do đó, độ dẫn điện của CdS tăng lên và
điện trở của nó giảm.



Khi cảm biến CDS được kết nối với một mạch điện, sự thay đổi
điện trở của CdS sẽ dẫn đến sự thay đổi điện áp trên nó. Mạch
điện sử dụng thơng số này để tính tốn mức độ chiếu sáng.

4 Động cơ Servo:




Cấu tạo và nguyên lý hoạt động:

-Động cơ servo yêu cầu ta phải cấp nguồn (2 dây) và nhận điều khiển
từ mạch chính (1 dây), mỗi dây thường được đánh màu như sau:
·
Đỏ: nhận điện nguồn, tuỳ vào loại động cơ mà giá trị này có thể
khác nhau
·

Đen/Nâu: nối với cực âm của mạch

·

Vàng/Cam: nhận tín hiệu từ mạch điều khiển

-Động cơ servo là sự kết hợp của động cơ DC, hệ thống điều khiển vị

trí, bánh răng. Vị trí của trục của động cơ DC được điều chỉnh bởi các
thiết bị điện tử điều khiển trong servo, dựa trên tỷ số nhiệm vụ (duty
ratio) của tín hiệu PWM ở chân SIGNAL.
-Nói một cách đơn giản điện tử điều khiển điều chỉnh vị trí trục bằng
cách điều khiển động cơ DC. Dữ liệu liên quan đến vị trí của trục được
gửi qua chân SIGNAL. Dữ liệu vị trí để điều khiển phải được gửi dưới
dạng tín hiệu PWM thơng qua chân tín hiệu (SIGNAL) của động cơ
servo.


-Tần số của tín hiệu PWM (Pulse Width Modulated) có thể thay đổi tùy
theo loại mô tơ servo. Điều quan trọng ở đây là hệ số nhiệm vụ (DUTY
RATIO) của tín hiệu PWM. Dựa trên hệ số nhiệm vụ này, các thiết bị
điện tử điều khiển điều chỉnh trục.
-Trong một mơ tơ servo analog thơng thường, tín hiệu PWM với
khoảng thời gian 20 ms được sử dụng để điều khiển động cơ. Tín hiệu
20 ms có tần số 50 Hz.
-Chiều rộng của xung được thay đổi giữa 1 và 2 ms để điều khiển vị trí
trục động cơ.
·

Độ rộng xung 1ms sẽ làm cho trục servo dừng ở vị trí 0 độ.

·
Độ rộng xung 1,5ms sẽ khiến trục servo được đặt ở vị trí 90 độ,
vị trí chính giữa hành trình của nó.
·

Độ rộng xung 2ms sẽ khiến trục servo nằm ở vị trí 180 độ.


Thay đổi độ rộng xung giữa 1ms và 2ms sẽ di chuyển trục servo thay
đổi từ 0 độ đến 180 độ. Bạn có thể đặt trục động cơ ở bất kỳ góc độ
nào mà bạn mong muốn bằng cách điều chỉnh độ rộng xung cho phù
hợp.
5 Bảng mạch điều khiến Adruino UNO R3




Cấu tạo và nguyên lý hoạt động:

 Một vài thông số của Arduino UNO R3
Vi điều khiển

ATmega328 họ 8bit

Điện áp hoạt động

5V DC (chỉ được cấp qua cổng USB)

Tần số hoạt động

16 MHz

Dòng tiêu thụ

khoảng 30mA

Điện áp vào khuyên dùng


7-12V DC

Điện áp vào giới hạn

6-20V DC

Số chân Digital I/O

14 (6 chân hardware PWM)

Số chân Analog

6 (độ phân giải 10bit)


Dòng tối đa trên mỗi chân I/O 30 mA
Dòng ra tối đa (5V)

500 mA

Dòng ra tối đa (3.3V)

50 mA

Bộ nhớ flash

32 KB (ATmega328) với 0.5KB dùng bởi bootloader

SRAM


2 KB (ATmega328)

EEPROM

1 KB (ATmega328)

 Vi điều khiển
Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là ATmega8,
ATmega168, ATmega328. Bộ não này có thể xử lí những tác vụ đơn giản như điều
khiển đèn LED nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, làm một trạm đo
nhiệt độ - độ ẩm và hiển thị lên màn hình LCD,… hay những ứng dụng khác mà bạn
đã được xem ở đây.
 Năng lượng
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài
với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V. Thường thì cấp nguồn
bằng pin vng 9V là hợp lí nhất nếu bạn khơng có sẵn nguồn từ cổng USB. Nếu
cấp nguồn vượt quá ngưỡng giới hạn trên, bạn sẽ làm hỏng Arduino UNO.
 Các chân năng lượng


GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi
bạn dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những
chân này phải được nối với nhau.



5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.




3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là
50mA.



Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối
cực dương của nguồn với chân này và cực âm của nguồn với chân GND.



IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể
được đo ở chân này. Và dĩ nhiên nó ln là 5V. Mặc dù vậy bạn không


được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó khơng
phải là cấp nguồn.


RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương
đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ.



Arduino UNO khơng có bảo vệ cắm ngược nguồn vào. Do đó bạn phải
hết sức cẩn thận, kiểm tra các cực âm – dương của nguồn trước khi cấp
cho Arduino UNO. Việc làm chập mạch nguồn vào của Arduino UNO
sẽ biến nó thành một miếng nhựa chặn giấy. mình khuyên bạn nên dùng
nguồn từ cổng USB nếu có thể.




Các chân 3.3V và 5V trên Arduino là các chân dùng để cấp nguồn ra
cho các thiết bị khác, không phải là các chân cấp nguồn vào. Việc cấp
nguồn sai vị trí có thể làm hỏng board. Điều này khơng được nhà sản
xuất khuyến khích.



Cấp nguồn ngồi khơng qua cổng USB cho Arduino UNO với điện áp
dưới 6V có thể làm hỏng board.



Cấp điện áp trên 13V vào chân RESET trên board có thể làm hỏng vi
điều khiển ATmega328.



Cường độ dòng điện vào/ra ở tất cả các chân Digital và Analog của
Arduino UNO nếu vượt quá 200mA sẽ làm hỏng vi điều khiển.



Cấp điệp áp trên 5.5V vào các chân Digital hoặc Analog của Arduino
UNO sẽ làm hỏng vi điều khiển.



Cường độ dòng điện qua một chân Digital hoặc Analog bất kì của
Arduino UNO vượt quá 40mA sẽ làm hỏng vi điều khiển. Do đó nếu

khơng dùng để truyền nhận dữ liệu, bạn phải mắc một điện trở hạn
dòng.

Lưu ý:

 Bộ nhớ
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:


32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ
trong bộ nhớ Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB
trong số này sẽ được dùng cho bootloader nhưng đừng lo, bạn hiếm khi
nào cần quá 20KB bộ nhớ này đâu.



2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn
khai báo khi lập trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì
càng cần nhiều bộ nhớ RAM. Tuy vậy, thực sự thì cũng hiếm khi nào


bộ nhớ RAM lại trở thành thứ mà bạn phải bận tâm. Khi mất điện, dữ
liệu trên SRAM sẽ bị mất.


1KB cho EEPROM (Electrically Eraseble Programmable Read Only
Memory): đây giống như một chiếc ổ cứng mini – nơi bạn có thể đọc
và ghi dữ liệu của mình vào đây mà không phải lo bị mất khi cúp điện
giống như dữ liệu trên SRAM.


 Các cổng vào/ra
Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2
mức điện áp là 0V và 5V với dịng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi chân
đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328
(mặc định thì các điện trở này khơng được kết nối).
Một số chân digital có các chức năng đặc biệt như sau:


2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận
(receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với
thiết bị khác thơng qua 2 chân này. Kết nối bluetooth thường thấy nói
nơm na chính là kết nối Serial không dây. Nếu không cần giao tiếp
Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết



Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM
với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng
hàm analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được
điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V
và 5V như những chân khác.



Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngồi
các chức năng thơng thường, 4 chân này còn dùng để truyền phát dữ
liệu bằng giao thức SPI với các thiết bị khác.




LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi
bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được
nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ
sáng.
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín
hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V.
Với chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu
khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân
này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ
0V → 2.5V với độ phân giải vẫn là 10bit.


PHẦN II NGUYÊN LÝ HOẠT ĐỘNG
1 Nguyên lí
Sau khi cấp nguồn cho mạch, ban đầu khi chưa có vật đi qua cảm biến ánh sáng, hệ
thống chưa hoạt động.
Khi có vật cản đi qua cảm biến ánh sáng, 1 đèn của cảm biến sẽ tắt ( đã phát hiện
vật cản) sau đó cảm biến ánh sáng sẽ gửi thơng tin về arduino, Aruino tiếp nhận
thông tin truyền đến Relay trung gian ( đèn xanh relay sáng) để kích hoạt cảm biến
màu sắc TCS3200, lúc này 4 led đơn trắng của TCS 3200 sẽ sáng và bắt đầu phân
tích mẫu vật trước mặt. Sau khi đã phân tích xong 4 led đơn của nó sẽ tắt, tín hiệu
được truyền về arduino. Arduino nhận tín hiệu xác định màu sắc theo dải màu đã
được code sẵn và hiện lên màn hình, đồng thời gửi tín hiệu đến động cơ servo góc
quay theo màu sắc mà nó nhận biết được. Và sau một thời gian Servo sẽ quay trở
lại vị trí ban đầu để tiếp tục chuẩn bị cho lần hoạt động tới.
2 Sơ đồ mạch


3 Code chương trình
#include <TimerOne.h>

#include <ServoTimer2.h>
ServoTimer2 servo2;
#define IR2 5
#define S0

8

#define S1

7

#define S2

3

#define S3

4

#define OUT 2
#define RELAY 12
#define LED 9
int g_count = 0;

// count the frequecy

int g_array[3];
value

// store the RGB


int g_flag = 0;
queue

// filter of RGB

float g_SF[3];
Scale factor

// save the RGB

unsigned char ketqua = 0;
unsigned char black = 0, white = 0, other = 0;
int goc;
void TSC_Init()
{
pinMode(S0, OUTPUT); // set ouput, input
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);


pinMode(OUT, INPUT);
digitalWrite(S0, LOW);// OUTPUT FREQUENCY SCALING 2%
digitalWrite(S1, HIGH);
}
// Select the filter color
void TSC_FilterColor(int Level01, int Level02)
{
if(Level01 != 0)

Level01 = HIGH;
if(Level02 != 0)
Level02 = HIGH;
digitalWrite(S2, Level01);
digitalWrite(S3, Level02);
}
void TSC_Count()
{
g_count ++ ;
}
void TSC_Callback()
{
switch(g_flag)
{
case 0:
//

Serial.println("->WB Start");

TSC_WB(LOW, LOW);
Red
break;

//Filter mau


case 1:
g_array[0] = g_count;
TSC_WB(HIGH, HIGH);
Green

break;
case 2:
g_array[1] = g_count;
TSC_WB(LOW, HIGH);
break;
case 3:
g_array[2] = g_count;
TSC_WB(HIGH, LOW);
break;
default:
g_count = 0;
break;
}
}
void TSC_WB(int Level0, int Level1)
{
g_count = 0;
g_flag ++;
TSC_FilterColor(Level0, Level1);
Timer1.setPeriod(1000000);
}
void setup()
{
pinMode(IR2, INPUT);

//Filter mau


pinMode(RELAY, OUTPUT);
pinMode(LED, OUTPUT);

servo2.attach(11);
TSC_Init();

// ket noi servo vao chan 10

//khoi dong cam bien mau

Serial.begin(9600);
Timer1.initialize();

// defaulte is 1s

Timer1.attachInterrupt(TSC_Callback); // gan ham vao ngat tran timer1
attachInterrupt(0, TSC_Count, RISING); //gan ham vao ngat canh len chan out
cua cam bien mau
delay(4000);
for(int i=0; i<3; i++)
// Serial.println(g_array[i]);
g_SF[0] = 255.0/ g_array[0]; //R lay thong so moi truong
g_SF[1] = 255.0/ g_array[1] ;
g_SF[2] = 255.0/ g_array[2] ;

//G lay thong so moi truong
//B lay thong so moi truong

on_bangtai();
off_led();
return_servo(); // test servo va cho ve vi tri ngoai bang tai
}
void loop(){

if(digitalRead(IR2) == 1){
while(ketqua == 0){
delay(220);
off_bangtai();


delay(500);
on_led();
g_flag = 0;
delay(4000);
Serial.println("R");Serial.println(g_array[0]);
Serial.println("G");Serial.println(g_array[1]);
Serial.println("B");Serial.println(g_array[2]);
Serial.println(digitalRead(IR2));
if(g_array[0]> 200 && g_array[0]< 500 && g_array[0] > (g_array[1]) &&
g_array[0] < g_array[2]) {
//black++;
//black_servo();
servo2.write(30);
goc = servo2.read();
Serial.print("Góc hiện tại: "); Serial.println(goc);
ketqua = 1;
Serial.print("RED");//Serial.print(black);Serial.print("W");Serial.print(white);
Serial.print("O");Serial.println(other);
}
else {
other++;
ketqua = 1;
//Serial.print("B");Serial.print(black);Serial.print("W");Serial.print(white);Ser
ial.print("O");Serial.println(other);

}
if(g_array[0]> 520 && g_array[0]< 1000 && g_array[0] > (g_array[1]) &&
g_array[0] < g_array[2]){
ketqua = 1;
//white++;
//white_servo();


servo2.write(90);
goc = servo2.read();
Serial.print("Góc hiện tại: "); Serial.println(goc);
Serial.print("NÂU");//Serial.print(black);Serial.print("W");Serial.print(white);
Serial.print("O");Serial.println(other);
}
else {
other++;
ketqua = 1;
//Serial.print("B");Serial.print(black);Serial.print("W");Serial.print(white);Ser
ial.print("O");Serial.println(other);
}
off_led();
}
}
if(ketqua == 1){
ketqua = 0;
on_bangtai();
off_led();
delay(4000);
return_servo();
}

}
void off_bangtai(){
digitalWrite(RELAY, LOW);
// Serial.println("OFF BTAI");
}
void on_bangtai(){


digitalWrite(RELAY, HIGH);
// Serial.println("ON BTAI");
}
void on_led(){
digitalWrite(LED, HIGH);
// Serial.println("ON LED");
}
void off_led(){
digitalWrite(LED, LOW);
// Serial.println("OFF LED");
}
//void black_servo(){
//delay(2000);
// Serial.println("red servo");
//}
/*void white_servo(){
servo2.write(1500);
delay(2000);
// Serial.println("green servo");
}*/
void return_servo(){
update_servo(1000,1000);

}
void update_servo(unsigned char ser1, unsigned char ser2)
{
servo2.write(ser2);
delay(2000);
}


PHẦN III VIDEO SẢN PHẨM


PHẦN IV KẾT QUẢ
1 Đã đạt được
Dựng được code để khởi chạy cho sản phẩm
Sản phẩm chạy đúng theo quy trình, ngun lí hoạt động, cảm biến màu sắc TCS
3200 nhận biết màu đúng theo dải màu đã được quy định
2 Chưa đạt được
Động cơ servo chưa hoạt động đúng theo code chương trình đã được khởi tạo sẵn

PHẦN V TÀI LIỆU THAM KHẢO
/> /> />

×