MỤC LỤC
LỜI MỞ ĐẦU
Việt Nam ta ngày một phát triển và giàu mạnh. Một trong
những thay đổi đáng kể là Việt Nam đã gia nhập WTO, một
bước ngoặt quan trọng thay đổi đất nước,để chúng ta - con
người Việt có cơ hội nắm bắt nhiều thành tựu vĩ đại của thế giới,
đặc biệt là về các lĩnh vực khoa học kĩ thuật nói chung và
ngành Cơ Điện Tử nói riêng .
1
Thế hệ trẻ chúng ta khơng tự mình phấn đấu học hỏi
khơng ngừng thì chúng ta sẽ sớm lạc hậu và nhanh chóng thụt
lùi. Nhìn ra được điều đó Trường “Đại Học Cơng Nghiệp Hà
Nội” đã sớm chủ trương hình thức đào tạo sâu rộng, từ thấp
đến cao. Để tăng chất lượng học tập của sinh viên nhà trường
nói chung và khoa Cơ Khí nói riêng đã tổ chức cho sinh viên
làm các Đồ Án đo lường và điều khiển nhằm tạo nên tảng vững
chắc cho sinh viên khi ra trường, đáp ứng nhu cầu tuyển dụng
việc làm.
Đề tài ứng dụng vi điều khiển trong đời sống thực tế rất
phong phú và đa dạng nhằm đáp ứng cho cuộc sống tiện nghi
của con người.Với mục đích tìm hiểu và đáp ứng những yêu cầu
trên chúng em đã lựa chọn một đề tài có tính ứng dụng trong
thực tế, nhưng khơng quá xa lạ đối với mọi người, đó là:
“Xây dựng hệ thống đếm sản phẩm sử dụng
quang”.
cảm biến
CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG
1.1. Giới thiệu chung
Ngày nay do sự phát triển của khoa học kỹ thuật đang tác
động đến các lĩnh vực, đặc biệt là lĩnh vực điện tử đã tạo ra
bước nhảy vọt vượt bậc trong nhiều lĩnh vực của đời sống xã
hội. Ngay cả trong sản xuất sản phẩm cũng đã áp dụng khoa
2
học công nghệ để đạt năng suất cao nhất. Là sinh viên năm ba
với những kiến thức đã được học em mong muốn tạo ra một hệ
thống tự động áp dụng trong cơng nghiệp. Đó là đề tài Đếm sản
phẩm sử dụng cảm biến quang. Với các nhà máy quy mô cùng
với số lượng sản phẩm sản xuất lớn nên chúng em mong muốn
nghiên cứu một hệ thống đếm sản phẩm tự động. Nhằm giúp
đạt được độ chính xác cao.
1.2. Các yêu cầu cơ bản
-
Mạch hoạt động đúng chức năng của đề tài.
Mạch hoạt động có độ ổn định và chính xác cao.
Thiết kế gọn nhẹ.
Giá thành phù hợp.
Dễ dàng lắp đặt, thi công, vận hành dễ dàng.
1.3. Phương pháp, phạm vi, giới hạn nghiên cứu
- Phương pháp thực hiện là dùng cảm biến quang để đếm số
lượng sản phẩm chạy trên bằng chuyền. Từ đó có biện pháp
điều chỉnh tốc độ của băng chuyền phù hợp với các yêu cầu cần
thiết.
- Phạm vi: ứng dụng cho các nhà máy sản xuất sản phẩm hay
các đơn vị vận chuyển hàng hóa .Và có giá thành thấp nên dễ
áp dụng ở quy mô lớn, giúp các nhà máy dễ dàng kiểm soát số
lượng sản phẩm cho phù hợp.
- Giới hạn nghiên cứu: nghiên cứu và thiết kệ hệ thống đếm và
hiển thị số lượng sản phẩm đêm được.
1.4. Ý nghĩa thực tiễn
- Giúp người sử dụng dễ dàng biết được số lượng sản phẩm đã
sản xuất.
- Giá thành rẻ, phù hợp cho các cơ sở, hộ nhỏ lẻ.
3
- Cung cấp hệ thống đếm sản phẩm giá thành thấp đến nhiều
đối tượng nhiều đối tượng nhỏ lẻ.
CHƯƠNG 2 : XÂY DỰNG MƠ HÌNH HỆ THỐNG
2.1 Cảm biến quang E3F-DS30C4
2.1.1 Giới thiệu
Lâu nay, chúng ta đã quen với việc sử dụng cảm biến siêu
âm để phát hiện vật cản, tuy nhiên điểm yếu của nó là dễ bị
nhiễu. Để khắc phục điểm yếu trên, đồ án đã sử dụng một
phương pháp phát hiện vật cản khác. Đó chính là sử dụng hồng
ngoại, mà cụ thể hơn là sử dụng cảm biến E3F-DS30C4 thường
ứng dụng cho các đặc tính Robot tránh vật cản, trên các dây
chuyền phát hiện sản phẩm, các bộ reminder đa chức
năng..v.v..
4
Cảm biến vật cản hồng ngoại E3F-DS30C4 dùng ánh sáng
hồng ngoại để xác định vật cản cho độ phản hồi nhanh và rất ít
nhiễu do sử dụng mắt nhận và phát tia hồng ngoại theo tần số
riêng biệt. Cảm biến có thể chỉnh khoảng cách hoạt động thơng
qua biến trở ở phần cuối thân cảm biến.
Hình 2.1: Cảm biến E3F-DS30C4
2.1.2 Thơng số kỹ thuật
• Điện áp hoạt động: 5VDC
• Khoảng cách hoạt động tối đa: ~80cm
• Dịng kích ngõ ra: 300mA
• Góc điểm: ~15°
• Thời gian hồi đáp: ~2ms
• Nhiệt độ mơi trường làm việc: -25°C~50°C
• Ngõ ra dạng NPN cực thu hở giúp tùy biến được điện áp ngõ
ra, trở treo lên áp bao nhiêu sẽ tạo thành điện áp ngõ ra bấy
nhiêu.
• Chất liệu vỏ cảm biến: Nhựa
• Hiển thị ngõ ra bằng Led
• Kích thước: 1.8cm (D) x 7.0cm (L)
2.1.3 Sơ đồ dây
5
E18-D80NK có cách nối dây tương đối đơn giản:
• Màu nâu: VCC, nguồn dương 5VDC
• Màu xanh dương: GND, nguồn âm 0VDC
• Màu đen: chân tín hiệu ngõ ra cực thu hở NPN, cần trở treo để
tạo mức cao
2.1.4 Kích thước
Hình 2.2: Kích thước E3F-DS30C4
2.2 Cảm biến vật cản hồng ngoại FM52
2.2.1 Giới thiệu
Cảm biến vật cản hồng ngoại có khả năng thích nghi với
mơi trường, có một cặp truyền và nhận tia hồng ngoại. Tia hồng
ngoại phát ra một tần số nhất định, khi phát hiện hướng truyền
có vật cản (mặt phản xạ), phản xạ vào đèn thu hồng ngoại, sau
khi so sánh, đèn màu xanh sẽ sáng lên, đồng thời đầu cho tín
hiệu số đầu ra (một tín hiệu bậc thấp).
Khoảng cách làm việc hiệu quả 2 ~ 5cm, điện áp làm việc là
3.3 V đến 5V. Độ nhạy sáng của cảm biến vật cản hồng
ngoại được điều chỉnh bằng chiết áp, cảm biến dễ lắp ráp, dễ
sử dụng,….
Có thể được sử dụng rộng rãi trong robot tránh chướng ngại
vật, xe tránh chướng ngại vật và dò đường….
6
Hình 2.3: Cảm biến hồng ngoại FM52
2.2.2 Thơng số kỹ thuật
•
•
•
•
•
•
Bộ so sánh sử dụng LM393, làm việc ổn định
Điện áp làm việc: 3.3V – 5V DC.
Khi bật nguồn, đèn báo nguồn màu đỏ sáng.
Lỗ vít 3 mm, dễ dàng cố định, lắp đặt.
Kích thước: 3.2cm * 1.4cm
Các mơ-đun đã được so sánh điện áp ngưỡng thông
qua chiết áp, nếu sử dụng ở chế độ thơng thường, xin
vui lịng khơng tự ý điều chỉnh chiết áp.
2.2.3 Sơ đồ cảm biến vật cản hồng ngoại FM52
7
Hình 2.4: Sơ đồ cảm biến vật cản hồng ngoại
FM52
Cổng giao tiếp:
•
•
•
VCC: điện áp chuyển đổi từ 3.3V đến 5V (có thể được
kết nối trực tiếp đến vi điều khiển 5V và 3.3V)
GND: GND ngoài
OUT: đầu ra kỹ thuật số (0 và 1)
2.3 Arduino Uno R3
2.3.1 Giới thiệu
Arduino là dòng mạch điện tử uy tín, tin cậy hàng đầu hiện
nay, đặc biệt là các dòng mạch Arduino UNO. Hiện nay, dòng
mạch này đã phát triển tới thế hệ thứ 3 (R3).
Sử dụng Chip Driver CH340G và chip chính là
ATmega328P-AU (SMD 32Pins) do đó có giá thấp hơn so với
phiên bản UNO R3 sử dụng chip nạp ATmega16U2 và chip chính
là ATmega328P-PU (TH HOLE 32PIN).
8
Hình 2.5: Arduino Uno R3
2.3.2 Ứng dụng của Arduino Uno R3:
Arduino UNO có thể sử dụng 3 vi điều khiển họ 8 bit AVR
là ATmega8, ATmega 168, ATmega328 (có sẵn trên kit). 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, sử dụng làm
trạm đo nhiệt độ, độ ẩm và hiện thị lên màn hình LCD, …
2.3.3 Thơng số kỹ thuật
•
Vi điều khiển: ATmega328 họ 8 bit
•
Điện áp hoạt động: 5V DC (chỉ sử dụng nguồn cấp qua
cổng USB)
•
Tần số hoạt động: 16 MHz
•
Dịng điện tiêu thụ: khoảng 30mA
•
Điện áp đầu vào khuyên dùng: 7-12V DC
9
•
Đ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 10 bit)
•
Dịng tối đa trên mỗi chân I/O: 30mA
•
Dịng ra tối đa (nguồn 5V): 500mA
•
Dịng ra tối đa (nguồn 3,3V): 50mA
•
Bộ nhớ Flash: 32KB (ATmega328) với 0.5KB dùng bởi
bootloader
•
SRAM: 2KB (ATmega328)
•
EEPROM: 1KB(ATmega328)
2.3.4 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ó luôn 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.
10
•
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Ω.
2.3.5 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.
2.3.6 Chú ý khi sử dụ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.
2.4 Động cơ DC Servo giảm tốc GA25
2.4.1 Giới thiệu
11
Động cơ DC Servo giảm tốc GA25 thường được sử dụng
trong các ứng dụng cần xác định tốc độ, vị trí, chiều quay của
động cơ DC: Robot mê cung, robot xe hai bánh tự cân bằng,...
Động cơ DC Servo thực tế là động cơ DC thường có gắn
thêm phần Encoder để có thể trả xung về vi điều khiển giúp
xác định vị trí, vận tốc,... Về cách điều khiển thì động cơ DC
Servo sử dụng Driver như động cơ DC thường để điều khiển
công suất động cơ, tốc độ và đảo chiều: L298, L293,..., chỉ có
điểm khác biệt là có thêm phần encoder để có thể hồi tiếp
(feedback) xung về Vi điều khiển, từ đó vi điều khiển tác động
lại động cơ qua mạch công suất sử dụng các thuật toán điều
khiển như PID,... để điều khiển tốc độ, vị trí,...
Hình 2.6: Động cơ ĐC Servo giảm tốc
2.4.2 Thơng số kỹ thuật
Điện áp cấp cho động cơ hoạt động : 3 - 12VDC
Điện áp cấp cho Encoder hoạt động: 3.3VDC
Đĩa Encoder 11 xung, hai kênh A-B.
Tỷ số truyền khi qua hộp giảm tốc: 1:34
Số xung khi qua hộp giảm tốc: 374 xung.
Đường kính động cơ: 25mm.
Đường kính trục : 4mm
Tốc độ khơng tải : 320 rpm
Dịng khơng tải : 80mA
Tốc độ có tải : 284 rpm Dịng khi có tải : 600mA
12
Mơmen : 1.88 kgf.cm
Cơng suất định mức : 13.2W
Dịng khi động cơ bị giữ : 2.29A
Mô men khi bị giữ : 7.96 kgf.cm
2.5 Động cơ servo SG90
2.5.1 Giới thiệu
Động cơ servo SG90 có kích thước nhỏ, là loại được sử
dụng nhiều nhất để làm các mơ hình nhỏ hoặc các cơ cấu kéo
không cần đến lực nặng.
Động cơ servo SG90 180 độ có tốc độ phản ứng nhanh,
các bánh răng được làm bằng nhựa nên cần lưu ý khi nâng tải
nặng vì có thể làm hư bánh răng, động cơ RC Servo 9G có tích
hợp sẵn Driver điều khiển động cơ bên trong nên có thể dễ
dàng điều khiển góc quay bằng phương pháp điều độ rộng xung
PWM.
Hình 2.7: Động cơ servo SG90
2.5.2 Thơng số kỹ thuật
•
•
•
•
•
Điện áp hoạt động: 4.8-5VDC
Tốc độ: 0.12 sec/ 60 deg (4.8VDC)
Lực kéo: 1.6 Kg.cm
Kích thước: 21x12x22mm
Trọng lượng: 9g.
13
2.6 Mạch điều khiển động cơ DC L298N
2.6.1 Giới thiệu
Mạch điều khiển động cơ DC L298N có khả năng điều khiển 2
động cơ DC, dòng tối đa 2A mỗi động cơ, mạch tích hợp diod
bảo vệ và IC nguồn 7805 giúp cấp nguồn 5VDC cho các module
khác (chỉ sử dụng 5V này nếu nguồn cấp <12VDC).
Mạch điều khiển động cơ DC L298N dễ sử dụng, chi phí thấp, dễ
lắp đặt, là sự lựa chọn tối ưu trong tầm giá.
Hình 2.8: Mạch điều khiển động cơ DC L298N
2.6.2 Thông số kỹ thuật
•
•
•
•
•
•
IC chính: L298 – Dual Full Bridge Driver
Điện áp đầu vào: 5~30VDC
Công suất tối đa: 25W 1 cầu (lưu ý cơng suất = dịng
điện x điện áp nên áp cấp vào càng cao, dịng càng
nhỏ, cơng suất có định 25W).
Dịng tối đa cho mỗi cầu H là: 2A
Mức điện áp logic: Low -0.3V~1.5V, High: 2.3V~Vss
Kích thước: 43x43x27mm
14
2.6.3 Sơ đồ mạch điều khiển động cơ DC L298N
Hình 2.9: Sơ đồ mạch điều khiển động cơ DC L298N
2.7 Nguồn tổ ong
2.7.1 Giới thiệu
- Sử dụng cho các mạch công suất
- Biến đổi nguồn điện xoay chiều AC thành nguồn điện một
chiều DC
- Thường thì sử dụng cho hệ thống tủ điều khiển tự động, trong
các mạch led hoặc hệ thống camera, ...
15
Hình 2.10: Nguồn tổ ong
2.7.2 Thơng số kỹ thuật
-
Điện Áp Vào: AC 110-220V
Điện Áp Ra: DC 12V
Dịng Out Max: 5A
Kích thước: 160x98x43MM
2.8 Màn hình LCD 1602
2.8.1 Giới thiệu
Màn hình LCD1602 xanh lá sử dụng driver HD44780, có
khả năng hiển thị 2 dịng với mỗi dịng 16 ký tự, màn hình
LCD có độ bền cao, rất phổ biến, nhiều code mẫu và dễ sử
dụng thích hợp cho những người mới học và làm dự án.
16
Hình 2.11: Màn hình LCD 1602
2.8.2 Thống số kỹ thuật
•
Điện áp hoạt động là 5 V.
•
Kích thước: 80 x 36 x 12.5 mm
•
Chữ đen, nền xanh lá
•
Khoảng cách giữa hai chân kết nối là 0.1 inch
•
Tiện dụng khi kết nối với Breadboard.
2.8.3 Ưu điểm của màn hình LCD1602
•
Tên các chân được ghi ở mặt sau của màn hình LCD hổ
trợ việc kết nối, đi dây điện.
•
Có đèn led nền, có thể dùng biến trở hoặc PWM điều
chình độ sáng để sử dụng ít điện năng hơn.
•
Có thể được điều khiển với 6 dây tín hiệu
•
Có bộ ký tự được xây dựng hổ trợ tiếng Anh và tiếng
Nhật.
CHƯƠNG 3: CHÊ TẠO VÀ THỬ NGHIỆM HỆ THỐNG
17
3.1 Giới thiệu
Hình 3.1: Mơ hình hệ thống
Đồ án “Xây dựng hệ thống đếm sản phẩm sử dụng cảm
biến quang” bằng việc thiết kế mơ hình phân loại sản phẩm
và sử dụng cảm biến quang cùng lập trình Arduino.
Khi sản phẩm trên băng tải đi qua cảm biến (E3FDS30C4) được thiết kế với động cơ Servo để phân loại sản
phẩm kết hợp với màn hình LCD để hiện thị số lượng sản phẩm,
giúp chúng ta phần nào hiểu được dây truyền phân loại sản
phẩm trong thực tế.
Hình 3.2: Mạch của hệ thống
18
3.2 Phần mềm thiết kế
3.2.1 Arduino
Arduino là môi trường phát triển tích hợp mã nguồn mở, cho
phép người dùng dễ dàng viết code và tải nó lên board mạch,
được viết bằng Java dựa trên ngơn ngữ lập trình và phần mềm
mã nguồn mở khác.
Hình 3.3: Phần mềm Arduino
Kể từ tháng 3 năm 2015, Arduino IDE (Intergrated Devalopment
Editor – môi trường phát triển thích hợp) đã được phổ biến tại
rất nhiều nơi với giao diện trực quan.
Ngôn ngữ phổ quát cho Arduino là C và C++. Do đó phần mềm
phù hợp với những người dùng quen thuộc các ngôn ngữ này.
Phần mềm gồm những mảng thư viện phong phú như: EEPROM,
Firmata, GSM, Servo, TFT, Wifi,… Và các mảng thư viện ngày
càng đa dạng nhờ sự đóng góp của cộng đồng Arduino trên
toàn thế giới.
3.3 Sơ đồ khối
19
Hình 3.4: Sơ đồ khối mơ hình đếm và phân loại sản
phẩm
• Khối nguồn gồm các linh kiện tác động đến cơng suất,
dịng điện. (Nguồn tổ ong): cung cấp năng lượng thích hợp cho
mơ hình hệ thống.
Hình 3.5: Nguồn tổ ong
• Khối hiện thị (LCD): hiển thị số lượng đếm được từ cảm
biến
20
Hình 3.6: Màn hình LCD
• Khối phân loại (Băng tải, Servo): phân các sản phẩm thành
nhiều loại theo yê
• Khối tín hiệu là các cảm biến E18D80NK: phát hiện vật thể
và truyền tín hiệu về khối xử lý để mã hóa dữ liệu.u cầu
của mơ hình đề tài.
• • Khối xử lý (Arduino Uno R3, IC 74HC595…): xử lý tín hiệu
từ cảm biến và xuất dữ liệu được mã hóa đến các khối
hiển thị, khối phân loại.
3.4 Nguyên lý hoạt động
Khi được cấp nguồn, mạch sẽ hoạt động theo chương trình
được thiết lập trên Arduino.
Hình 3.7: Sơ đồ nguyên lý hoạt động
21
Chu trình hoạt động của mơ hình hệ thống này được bắt
đầu từ sự thu nhận tín hiệu của các cảm biến.
Các tín hiệu được trung tâm xử lý và xuất các lệnh tương
thích cho Servo cùng với màn hình LCD để thực hiện theo đúng
yêu cầu đề tài.
Ở trạng thái bình trường, cảm biến E3F-DS30C4 cấp xung
mức cao cho bộ xử lý trung tâm. Với xung mức cao, thông qua
code đã được lập trình, Arduino Uno R3 duy trì hiện trạng. Động
cơ Servo giữ nguyên thanh gạc phân loại ở góc 0°.
.
Hình 3.7: Mơ hình khi chưa có tác động
cảm biến
Khi được tác động bởi đối tượng, dòng điện qua trở treo
thông qua cảm biến E3F-DS30C4 tới GND. Lúc này, xung mức
thấp được cấp cho Arduino Uno R3. Dữ liệu được xử lý và đưa
vào 2 IC 74HC595 làm thay đổi sự hiển thị màn hình LCD. Đồng
thời, động cơ Servo quay thanh gạc phân loại một góc 90°, đối
tượng được đưa ra khỏi băng tải.
22
Hình 3.8: Mơ hình hoạt động khi có tín hiệu từ cảm
biến.
3.5 Code – chương trình
#include <Wire.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include<TimerOne.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define SENSOR2 4
#define SENSOR3 6
#define SENSOR4 13
Servo myservo;
#define PWM 5
#define DIR1 7
#define DIR2 8
#define Kp 0.02
#define Kd 0.01
#define Ki 0.6
double tam;
float T, xung;
float tocdo, tocdodat;
double E, E1, E2;
double alpha, beta, gamma;
double Output, LastOutput;
int upButton = 10;
int downButton = 11;
int selectButton = 12;
int menu = 1;
23
int i = 0;
int pos = 0;
int j = 0;
int goc = 0;
int dem1;
int dem2;
int cb1 = 0;
int cb2 = 0;
int giatritruoc = 1;
int giatritruoc2 = 1;
void setup() {
Serial.begin(9600);
attachInterrupt(0, Demxung, FALLING);
Timer1.initialize(10000); //don vi us
Timer1.attachInterrupt(PID);
lcd.init();
lcd.init();
lcd.backlight();
hienthi();
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(PWM, OUTPUT);
pinMode(DIR1, OUTPUT);
pinMode(DIR2, OUTPUT);
congtaccon();
TCCR2B = TCCR2B & B11111000 | B00000001; // for PWM frequency of
31372.55 Hz
tocdodat = i; tocdo = 0;
E = 0; E1 = 0; E2 = 0;
Output = 0; LastOutput = 0;
T = 0.01;
Serial.begin(9600);
attachInterrupt(0, Demxung, FALLING);
Timer1.initialize(10000); //don vi us
Timer1.attachInterrupt(PID);
}
void loop()
{
Serial.println(tocdo);
24
cb1 = digitalRead(SENSOR3);//san pham cao
if (cb1 != giatritruoc)
{
if (cb1 == 0)
{
dem1 = dem1 + 1;
}
giatritruoc = cb1;
hienthi();
if (giatritruoc = cb1)
{
myservo.write(0);
delay(1000);
myservo.write(180);
delay(1000);
}
}
cb2 = digitalRead(SENSOR4); //san pham thap
if (cb2 != giatritruoc2)
{
if (cb2 == 0)
{
dem2 = dem2 + 1;
}
giatritruoc2 = cb2;
hienthi();
}
int S2 = digitalRead(SENSOR2); //Doc gia tri cam bien1
if (S2 == 0)
{
i = 0;
analogWrite(5, Output);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
hienthi();
}
if (!digitalRead(selectButton)) {
executeAction();
}
congtaccon();
}
void hienthi()
25