báo cáo cân Điện tử
DESCRIPTION
Báo Cáo Cân Điện TửTRANSCRIPT
MỤC LỤC
LỜI NÓI ĐẦU.................................................................................................................3
CHƯƠNG 1: GIỚI THIỆU CHUNG..............................................................................4
1.1. Giới thiệu chung...................................................................................................4
1.2. Mục đích nghiên cứu............................................................................................4
1.3. Phương pháp nghiên cứu......................................................................................4
1.4. Phạm vi và giới hạn đề tài....................................................................................5
CHƯƠNG 2: TỔNG QUAN HỆ THỐNG......................................................................6
2.1. Giới thiệu sơ lược về các loại cảm biến...............................................................6
2.1.1. Module cảm biến siêu âm HC-SR04..............................................................6
2.1.2. Cảm biến nhiệt độ LM35................................................................................6
2.1.3. Cảm biến khối lượng loadcell L6E 300kg......................................................7
2.1.4. Cảm biến hồng ngoại RPR-359F....................................................................8
2.1.5. Cảm biến áp suất loại MPXx5050..................................................................9
2.2. Tổng quan về chuẩn giao tiếp I2C......................................................................10
2.2.1. Định nghĩa....................................................................................................10
2.2.2. Đặc điểm giao tiếp I2C.................................................................................10
2.2.3. Điều kiện start và stop trong giao tiếp I2C...................................................12
2.2.4. Định dạng dữ liệu.........................................................................................13
2.2.5. Định dạng địa chỉ..........................................................................................15
2.3. Khối điều khiển trung tâm..................................................................................18
2.3.1. Truyền thông nối tiếp UART trong PIC 16F877A.......................................19
2.3.2. Giao tiếp I2C trong PIC 16F877A................................................................20
CHƯƠNG 3: MÔ HÌNH HÓA HỆ THỐNG................................................................27
3.1. Mô hình hệ thống cơ khí....................................................................................27
3.3. Mô hình tổng quan hệ thống điều khiển giao tiếp I2C và truyền thông nối tiếp.
28
CHƯƠNG 4: THIẾT KẾ VÀ THI CÔNG....................................................................29
4.1. Thiết kế cơ khí....................................................................................................29
4.1.1. Khung dưới...................................................................................................29
4.1.2. Khung trên....................................................................................................30
4.1.3. Mặt cân.........................................................................................................32
4.1.4. Thanh đo chiều cao.......................................................................................32
4.1.5. Trụ đỡ hộp mạch...........................................................................................33
4.1.6. Hộp đựng mạch điện tử................................................................................33
4.2. Sơ đồ mạch trong đồ án......................................................................................34
4.2.1. Mạch điều khiển trung tâm...........................................................................34
4.2.2. Khối nguồn...................................................................................................35
4.2.3. Khối UART..................................................................................................35
4.2.4. Khối nạp chương trình..................................................................................36
4.2.5. Mạch cảm biến nhiệt LM35..........................................................................36
4.2.6. Mạch cảm biến HC-SR04.............................................................................37
4.2.7. Mạch cảm biến IR RPR-359F......................................................................37
4.2.8. Mạch cảm biến khối lượng HL-8.................................................................40
4.3. Code sử dụng trong mạch...................................................................................41
4.3.1. Code mạch đo chịp tim.................................................................................41
4.3.2. Code mạch đo nhiệt độ và chiều cao............................................................43
4.3.3. Code mạch đo khối lượng.............................................................................46
KẾT LUẬN 51
LỜI NÓI ĐẦU
Ngay nay với sự phát triển khoa học công nghệ, các hệ thống tích hợp đa chức
năng đã và đang được phát triển trong nhiều lĩnh vực. Trong lĩnh vực không gian vũ
trụ đó là các cố máy có thể tồn tại trong không gian, có thể tham dò cũng như phân
tích và truyền dữ liệu tự động về cho các trạm thu ở Trái Đất. Trong lĩnh vực quân sự
đó là các robot có thể làm nhiều chức khác nhau như do thám, sử dụng các loại vũ khí,
bảo vệ các mục tiêu đã định điển hình nhất chính là các loại máy bay không người lái.
Trong lĩnh vực thiết bị y tế các loại robot có thế giúp con người phẫu thuật và chúng
được điều khiển từ xa. Với những dẫn chứng ở trên phải chăng xu thế các hệ thống,
thông minh, tích hợp đa chức năng, nhỏ gọn, tinh giản là xu thế phát triển của khoa
học công nghệ thế giới.
May mắn khi nhận được đề tài “Hệ thống kiểm tra sức khỏe” vì đây là cơ hội
để chúng em có thể có thời gian để tìm hiểu, thiết kế, chế tạo một hệ thống tích hợp
này. Bởi với một hệ thống nhỏ gọn, thông minh, giá cả phù hợp và hoạt động hiệu quả,
nó sẽ rất có ích đối với một Đất Nước có tới trên 83 triệu dân cần phải được kiểm tra
sức khỏe thường xuyên qua đó sẽ góp phần nâng cao được sức khỏe của người Việt.
Vì kiến thức và thời gian tìm hiểu còn nhiều hạn chế nên khó tránh khỏi những
sai sót, đồ án chưa phát huy hết được ý tưởng của cả nhóm vào trong mô hình. Rất
mong sự chỉ bảo, giúp đỡ của các Thầy giáo trong khoa đặc biệt là sự giúp đỡ của
Thầy Duy người đã trực tiếp chỉ bảo chúng em thực hiện đồ án này.
Thành viên nhóm gồm 7 thành viên: Nguyễn Văn Hậu, Trần Xuân Hoàng,
Trịnh Quốc Hoàng, Võ Trọng Hoàng, Nguyễn Văn Luân, Vũ Văn Nghĩa, Đồng Đức
Nghiệp.
Hà Nội ngày 01 tháng 03 năm 2014.
CHƯƠNG 1: GIỚI THIỆU CHUNG
1.1. Giới thiệu chung
Ngày nay các thiết bị kiểm tra tình trạng sức khỏe cá nhân như nhiệt độ chiều
cao, cân nặng, nhịp tim, huyết áp ngày càng được quan tâm phát triển với nhiều chủng
loại khác nhau về mẫu giá cả, chất lương, tích hợp nhiều chức năng bởi nhiều hãng
công nghệ tại các nước trên thế giới nhưng tại Việt Nam các thiết bị được tích hợp này
chưa được quan tâm nghiên cứu và phát triển do đó nhóm chúng em đã phát triển đề
tài nghiên cứu: “Hệ thống kiểm tra sức khỏe”. Nhiệm vụ của nhóm là chế tạo một mô
hình có khả năng thực hiện thu thập dự liệu tử các cảm biến khác nhau sau đó đưa các
dữ liệu này hiện thị lên màn hình máy tính.
1.2. Mục đích nghiên cứu
Với đề tài nghiên cứu “Hệ thống kiểm tra sức khỏe” các vấn đề đặt ra cần phải
giải quyết đó là:
- Thiết kế hệ thống cơ khi nhỏ gọn, chắc chắn, đảm bảo tính thẩm mỹ cũng như
các chức năng sử dụng.
- Lập trình vi điều khiển PIC 16F877A để có thể thu thập dữ liệu từ các cảm biến
riêng biệt như nhiệt độ, siêu âm, IR, huyết áp, loadcell.
- Lập trình vi điều khiển để có thể giao tiếp truyền nhận dữ liệu giữa các vi điều
khiển ở đây là giao tiếp I2C truyền thông qua cổng RS232.
1.3. Phương pháp nghiên cứu
Từ các vấn đề ở trên phương pháp thiết kế phù hợp đó là lần lượt đi xây dựng
từng phần trong thiết kế sau đó ghép nối, thử nghiệm rồi sửa lỗi để thu được thiết kế
có kết quả tối ưu nhất với phương pháp thiết kế như trên, cụ thể công việc ở đây là:
- Bước đầu sẽ tìm hiểu về vi điều khiển PIC 16F877A cấu trúc phần cứng và
phần mềm, sau đó ghép nối với lần lượt các loại cảm biển siêu âm để đo chiều
cao, cảm biến nhiệt độ để đo nhiệt độ, cảm biến hồng ngoại đo nhịp tim, cảm
biến loadcell để đo khối lượng, cảm biến áp suất để đo huyết áp hiện thị lên
LCD.
- Bước hai tìm hiểu vể chuẩn giao tiếp I2C trong PIC 16F877A để có thể biết
cách các vi điều khiển trao đổi dữ liệu.
- Bước ba tìm hiểu về chuẩn giao tiếp UART trong PIC 16F877A để có thể
truyền dữ liệu từ vi điều khiển lên giao diện màn hình máy tính.
- Bước bốn tổng hợp, ghép lối để thu được hệ thống hoàn chỉnh, sau đó thí
nghiệm, sửa chữa để có được phương án tối ưu nhất.
1.4. Phạm vi và giới hạn đề tài
Do thời gian, tài chính và tầm hiểu biết nhóm chỉ chế tạo mô hình với những
đặc điểm sau:
+ Mô hình khung sẽ được chế tạo đơn giản bằng vật liệu sắt.
+ Sử dụng cảm biến siêu âm HC-SR04, cảm biến nhiệt độ LM35, cảm biến hồng
ngoại IR, cảm biến loadcell L6E 300kg, cảm biến áp suất MPXx5050.
+ Lập trình I2C giao tiếp giữa các vi điều khiển.
+ Lập trình truyền thông nối tiếp RS232.
CHƯƠNG 2: TỔNG QUAN HỆ THỐNG
2.1. Giới thiệu sơ lược về các loại cảm biến
2.1.1. Module cảm biến siêu âm HC-SR04
- Module cảm biến siêu âm HC-SR04 dùng để đo khoảng cách đến vật chắn bằng
sóng siêu âm. Module có 2 đầu thu và phát sóng, khoảng cách được xác định bằng
cách đo khoảng thời gian mà sóng siêu âm được phát ra từ module truyền đến vật
chắn rồi phản hồi về.
- Sử dụng bằng cách truyền 1 xung vào chân trigger của module, sau đó chờ 1 xung
trả về trên chân echo, độ dài của xung phản hồi tương ứng với thời gian của sóng
siêu âm truyền trong không khí, từ đó tính ra được khoảng cách đến vật thể chắn.
Hình 2.1: Cảm biến HC-SR04.
- Thông số cơ bản:
+ Điện áp hoạt động: 5V.
+ Dòng cấp: 30mA, 50mA Max.
+ Tần số: 40KHz.
+ Khoảng cách đo được xa nhất: 3m.
+ Phát hiện vật cản trong khoảng: 3cm đến 3m.
+ Kích thước nhỏ gọn: 43mm x 20mm x 17mm.
- Sơ đồ chân của modul cảm biến HC-SR04 có 4 chân bao gồm chân VCC,
GND, TRIGE, ECHO.
2.1.2. Cảm biến nhiệt độ LM35
LM35 là một loại cảm biến analog, nhiệt độ được xác định bằng cách đo hiệu
điện thế ngõ ra của LM35, nhiệt độ thay đổi tuyến tính 10mV/1 độ C, không cần phải
căn chỉnh khi sử dụng.
Hình 2.2: Cảm biến LM35.
- Thông số cơ bản:
+ Điện áp đầu vào từ 4V đến 30V.
+ Độ phân giải điện áp đầu ra là 10mV/oC.
+ Độ chính xác cao ở 25oC là 0.5oC.
+ Điện áp đầu vào từ 4V đến 30V.
- Sơ đồ chân có 3 chân:
+ Chân 1: chân nguồn.
+ Chân 2: Chân tín hiệu ra Vout.
+ Chân 3: Chân nối đất GND.
2.1.3. Cảm biến khối lượng loadcell L6E 300kg.
- Cảm biến khối lượng loadcell L6E là loại cảm biến analog, hoạt động dựa trên sự
thay đổi điện áp đầu ra của cảm biến.
- Thông số cơ bản:
+ Khối lượng đo lớn nhất: 300kg.
+ Cấp chính xác: OIML R60 C3.
+ Điện áp biến đổi (2 ± 0.002)mV/V.
+ Điện trở đầu vào : (381 ± 4) Ω.
+ Điện trở đầu ra : ( 350 ± 1 ) Ω.
+ Điện trở cách điện : ≥ 5000 (ở 50VDC) MΩ.
- Sơ đồ chân của loadcell L6E có 4 chân:
+ 2 chân input (dây đỏ + và dây đen -).
+ 2 output (dây xanh +, dây trắng -).
Hình 2.3: Cảm biến loadcell HL-8.
2.1.4. Cảm biến hồng ngoại RPR-359F
- Cảm biến hồng ngoại RPR-359F là cảm biến phản xạ quang học, với bộ phát là
một diode GaAS phát ánh ra ánh sáng hồng ngoại, bộ thu là một transitor quang
học có độ nhạy cao.
- Thông số cơ bản:
+ Một thấu kính bằng nhựa được dùng có độ nhạy cao.
+ Điện áp bão hòa tại các cực emitor và colector nhỏ.
+ Ánh sáng mạnh.
- Sơ đồ chân của cảm biến có 4 chân anode, chân cathode, chân colector, chân
emitor.
Hình 2.4: Cảm biến hông ngoại RPR-359F.
2.1.5. Cảm biến áp suất loại MPXx5050
- Cảm biến áp suất loại MPXx5050 hoạt động dựa trên hiệu ứng piezoresistive đây
là hiện tượng sự thay đổi điện trở suất của chất bán dẫn ở đây trong loại cảm biến
này là một khối silicon được thiết kế cho nhiều loại ứng dụng đặc biết khi sử dụng
các loại vi điều khiển có các bộ chuyển đổi A/D khi mà tín hiệu đầu ra là một tín
hiệu chính xác cao từ cảm biến nó tỉ lệ với áp suất tác dụng.
- Thông số cơ bản:
+ Dải áp suất: 0- 50kPa tương ứng điện áp đầu ra là 0.2-4.7 V.
+ Sai số 2.5% khi nhiệt độ vượt qua dải 0-85oC.
Hình 2.5: Cảm biến áp suất MPXx5050.
2.2. Tổng quan về chuẩn giao tiếp I2C
2.2.1. Định nghĩa
I2C là tên viết tắt của cụm từ Inter Intergrated Circuit-Bus giao tiếp giữa các IC
với nhau. Đây là chuẩn giao tiếp nối 2 dây. Dùng để giao tiếp IC hay thiết bị ngoại vi
cần giao tiếp với các IC hay thiết bị khác (tức giao tiếp với thế giới bên ngoài). Bus
I2C được sử dụng làm bus giao tiếp ngoại vi cho rất nhiều loai IC khác nhau như các
loại: Vi điều khiển 8051, PIC, AVR, ARM, chip nhớ như RAM tĩnh (Static Ram),
EEPROM, bộ chuyển đổi tương tự số (ADC), số tương tự (DAC), IC điều khiển LED,
LCD…
Hình 2.6: Ví dụ về I2C sử dụng 2 vi điều khiển
2.2.2. Đặc điểm giao tiếp I2C
- Một giao tiếp I2C gồm 2 dây: Serial Data(SDA) và Serial Clock (SCL).
+ SDA là đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng hồ
và chỉ theo một hướng.
+ Khi một thiết bị ngoại vi kết nối vào đường I2C thì chân SDA của nó sẽ nối dây
SDA của bus, chân SCL sẽ nối với dây SCL.
Hình 2.7: Kết nối thiết bị vào Bus I2C ở chế độ chuẩn
- Mỗi dây SDA hay SCL đều được nối với điện áp dương của nguồn cấp thông qua
một điện trở kéo lên (Pull up resistor) điều này là cần thiết vì chân giao tiếp I2C
của các thiết bị ngoại vi thường là dạng cực máng hở (open dranin or open
collector). Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn
giao tiếp, thường dao động trong khoảng 1KΩ đến 4.7KΩ.
- Quy ước :
+ Một thiết bị hay một IC khi kết nối với bus I2C, ngoài một địa chỉ (duy nhất) để
phân biệt, nó còn được cấu hình là thiết bị chủ (master) hay tớ (slave). Mỗi thiết
bị này sẽ nhận ra một địa chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt
thời gian kết nối.
+ Trên một bus I2C thì quyền điều khiển thuộc về thiết bị chủ (master). Thiết bị
chủ đóng vai trò tạo xung đồng hồ cho toàn hệ thống, khi giữa 2 thiết bị chủ/tớ
giao tiếp thì thiết bị chủ có nhiệm vụ tạo xung đồng hồ và quản lý địa chỉ của
thiết bị tớ trong suốt quá trình giao tiếp. Thiết bị chủ giữ vai trò chủ động, còn
thiết bị tớ giữ vai trò bị động trong việc giao tiếp.
+ Mỗi thiết bị có thể hoạt động như là thiết bị nhận dữ liệu hay có thể vừa truyền
vừa nhận. Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết bị đó là chủ
(master) hay tớ (slave).
Vì vậy khi có nhiều thiết bị (ICs) cùng được kết nối vào một bus I2C (như hình
2.6), trong quá trình sẽ không xảy ra chuyện nhầm lẫn giữa các thiết bị.
Hình 2.8: Truyền nhận dữ liệu giữa chủ/tớ.
- Về dữ liệu truyền nhận trên bus I2S, một bus I2C chuẩn truyền 8 bit dữ liều có
hướng trên đường truyền với tốc độ là 100Kbits/s – Chế độ chuẩn (standard mode).
Tốc độ truyền nhận lên đến 400Kbits/s – Chế độ nhanh (Fast mode) và cao nhất là
3,4Mbits/s – Chế độ cao tốc( Hight speed mode).
- Một bus I2C có thể hoạt động ở nhiều chế độ khác nhau:
+ Một chủ một tớ (one master- one slave).
+ Một chủ nhiều tớ (one master- multi slave).
+ Nhiều chủ nhiều tớ (multi master – multi slave).
- Giả thiết một thiết bị A muốn gửi dữ liệu đến thiết bị B, quá trình được thực hiện
như sau:
+ Thiết bị A (chủ) xác định đúng địa chỉ của thiết bị B (tớ), cùng với việc xác
định đại chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thiết bị B.
+ Thiết bị A gửi dữ liệu đến thiết bị B.
+ Thiết bị A kết thúc quá trình truyền dữ liệu.
- Khi thiết bị A muốn nhận dữ liều từ thiết bị B, quá trình diễn ra như trên, chỉ khác
là thiết bị A nhận dữ liệu từ thiết bị B. Trong giao tiếp này, thiết bị A vẫn là chủ
thiết bị B vẫn là tớ.
2.2.3. Điều kiện start và stop trong giao tiếp I2C
- START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủ muốn
thiết lập giao tiếp với một thiết bị nào đó trong mạng I2C. Ban đầu khi chưa thực
hiện giao tiếp, cả hai đường SDA và SCL đều ở mức cao (SDA = SCL = HIGH).
Lúc này bus I2C được coi là rỗi (“bus free”), sẵn sàng cho một giao tiếp.
Hình 2.9: Điều kiện START và STOP của bus I2C.
- Điều kiện START: là điều kiện khởi đầu, báo hiệu bắt đầu của giao tiếp. Một sự
chuyển đổi trạng thái từ cao xuống thấp trên đường SDA trong khi đường SCL
đang ở mức cao (cao = 1, thấp = 0) báo hiệu một điều kiện START.
- Điều kiện STOP: báo hiệu kết thức một giao tiếp. Một sự chuyển đổi trạng thái từ
mức thấp lên cao trên đường SDA trong khi đường SCL đang ở mức cao.
- Cả hai điều kiện START và STOP đều được tạo ra bởi thiết bị chủ. Sau tín hiệu
START, bus I2C coi như đang trong trạng thái làm việc (busy). Bus I2C sẽ rỗi, sẵn
sàng cho một giao tiếp mới tín hiệu STOP từ thiết bị chủ. Sau khi có một điều kiện
START, trong quá trình giao tiếp, khi có một tín hiệu START được lặp lại thay vì
một tín hiệu STOP thì bus I2C vẫn trong trạng thái bận. Tín hiệu START và lặp lại
START đều có chức năng giống nhau là khởi tạo một giao tiếp.
2.2.4. Định dạng dữ liệu
- Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền đi tại mỗi
sườn dương của xung đồng hồ trên dây SCL, quá trình thay đổi bit dữ liệu xảy ra
khi SCL đang ở mức thấp.
Hình 2.10: Quá trình truyền 1 bit dữ liệu
- Mỗi byte dữ liệu được truyền có độ dài là 8bits.
- Số lượng byte có thể truyền trong một lần là không hạn chế.
- Mỗi byte được truyền đi theo sau 8 bit, một bit ACK để báo hiệu là đã nhận dữ
liệu. Đây là điều kiện bắt buộc, nhằm đảm bảo quá trình truyền nhận dữ liệu được
diễn ra chính xác.
Hình 2.11:Dữ liệu truyền trên bus I2C.
Hình 2.12: Bit ACK trên Bus 12C.
- Mô tả việc truyền dữ liệu:
+ Bit có trọng số cao nhất (MSB) sẽ được truyền đi đầu tiên, các bit sẽ được
truyền đi lần lượt.
+ Sau 8 xung clock trên SCL, 8 bit dữ liệu đã được truyền đi.
+ Lúc này thiết bị nhận, sau khi đã nhận đủ 8bit dữ liệu sẽ kéo SDA xuống mức
thấp tạo xung ACK ứng với xung clock thứ 9 trên dây SDA để báo đã nhận đủ
8 bit.
+ Thiết bị truyền khi nhận được bit ACK sẽ tiếp tục thực hiện quá trình truyền dữ
liệu hoặc kết thúc.
+ Khi không nhận được đúng địa chỉ hoặc muốn kết thúc quá trình giao tiếp, thiết
bị nhận sẽ gửi một xung NOT-ACK (SDA ở mức cao) để báo cho thiết bị chủ
biết, thiết bị chủ sẽ tạo xung STOP để kết thúc hay lặp lại một xung START để
bắt đầu quá trình mới.
2.2.5. Định dạng địa chỉ
- Mỗi một thiết bị ngoại vi tham gia vào bus I2C đều có một địa chỉ duy nhất, nhằm
phân biệt các thiết bị với nhau. Độ dài địa chỉ là 7 bit, điều đó có nghĩa là trên 1
bus I2C ta có thể phân biệt tối đa 128 thiết bị.
Hình 2.13: Cấu trúc byte dữ liệu đầu tiên.
- Khi thiết bị chủ muốn giao tiếp ngoại vi trên bus 12C, nó sẽ gửi 7 bit địa chỉ của
thiết bị đó ra bus ngay sau khi xung START. Byte đầu tiên được gửi bao gồm:
+ 7 bit địa chỉ. Mỗi thiết bị ngoai vi sẽ có một địa chỉ riêng do nhà sản xuất quy
định. Địa chỉ đó có thể thay đổi hoặc cố định.
+ Bit thứ 8 (R/W) quy định chiều truyền dữ liệu. Nếu bit này bằng “0” có nghĩa là
byte tiếp theo sẽ được truyền từ chủ đến tớ. Còn ngược lại nếu bằng “1” thì các
byte tiếp theo sau byte đầu tiên sẽ là dữ liệu từ con tới chủ. Việc thiết lập giá trị
này do con chủ thi hành, con tớ sẽ tuy theo giá trị đó mà có sự phản hồi tương
ứng đến con chủ.
Hình 2.14:Quá trình truyền dữ liệu
Truyền dữ liệu từ chủ đến tớ (ghi dữ liệu): Thiết bị chủ muốn ghi dữ liệu đến con
tớ, quá trình thực hiện là:
- Thiết bị chủ tạo xung START.
- Thiết bị chủ gửi địa chỉ của thiết bị tớ mà nó cần giao tiếp cùng với bit R/W = 0
ra bus và đợi xung ACK phản hồi từ con tớ.
- Khi nhận được xung ACK báo đã nhận diện đúng thiết bị tớ, con chủ bắt đầu
gửi dữ liệu đến con tớ theo từng byte một. Theo sau mỗi byte này là một xung
ACK. Số lượng byte truyền là không hạn chế.
- Kết thúc quá trình truyền, con chủ sau khi truyền byte cuối sẽ tạo xung STOP
báo hiệu kết thúc.
Hình 2.15: Ghi dữ liệu từ chủ đến tớ.
Truyền dữ liệu từ tớ đến chủ (đọc dữ liệu): thiết bị chủ muốn đọc dữ liệu từ thiết bị
tớ, quá trình thực hiện như sau:
- Khi bus rỗi, thiết bị chủ tạo xung START, báo hiệu bắt đầu giao tiếp.
- Thiết bị chủ gửi địa chỉ của thiết bị tớ cần giao tiếp cùng với bit = 1 và đợi xung
ACK từ thiết bị tớ.
- Sau xung ACK đầu tiên, thiết bị tớ sẽ gửi từng bit ra bus, thiết bị chủ sẽ nhận
dữ liệu và trả về xung ACK. Số lượng byte không hạn chế.
- Khi muốn kết thúc quá trình giao tiếp, thiết bị chủ gửi xung Not ACK và tạo
xung STOP để kết thúc.
Hình 2.16: Đọc dữ liệu từ thiết bị tớ.
- Quá trình kết hợp ghi và đọc dữ liệu: giữa hai xung START và STOP, thiết bị chủ
có thể thực hiện việc đọc hay ghi nhiều lần, với một hay nhiều thiết bị. Để thực
hiện việc đó, sau một quá trình ghi hay đọc, thiết bị chủ lặp lại một xung START
và lại gửi lại địa chỉ của thiết bị tớ và bắt đầu một quá trình mới.
- Chế độ giao tiếp Master‐Slave là chế độ cơ bản trong một bus I2C, toàn bộ bus
được quản lý bởi một master duy nhất. Trong chế độ này sẽ không xảy ra tình trạng
xung đột bus hay mất đồng bộ xung clock vì chỉ có một master duy nhất có thể tạo
xung clock.
Hình 2.17: Quá trình kết hợp đọc và ghi dữ liệu.
2.3. Khối điều khiển trung tâm
Trong hệ thống mạch điện tử vi điều khiển trung tâm đóng vai trò là bộ não,
tiếp nhận, xử lí và đưa ra thông tin cho toàn hệ thống. Dựa trên yêu cầu về chức năng
và tốc độ xử lí nhóm đã lựa chon vi điều khiển PIC 16F877A của hãng Microchip sản
xuất, với một số chức năng và thông số cơ bản sau:
- Sử dụng công nghệ tích hợp RISC CPU.
- Người sử dụng có thể lập trình với 35 câu lệnh cơ bản.
- Tất cả câu lệnh thực hiện trong một chu kỳ lệnh, ngoại trừ một số câu lệnh rẽ
nhánh thực hiện trong 2 chu kỳ lệnh.
- Tốc độ hoạt động xung đồng hồ là 20MHZ.
- Bộ nhớ hoạt động là flash 8k x14 words.
- Bộ nhớ RAM 368x8 bytes.
- Bộ nhớ EFPROM 256x8 bytes.
- Khả năng ngắt lên đến 14 ngắt trong và ngắt ngoài.
- Ngăn nhớ Stack được phân chia làm 8 mức.
- Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp.
- Nguồn khởi động (POR).
- Bộ tạo xung (PWRT) và bộ tạo dao động (OST).
- Bộ đếm thời gian (WDT) với nguồn dao động trên chíp (nguồn dao động RC) hoạt
động đáng tin cậy.
- Có mã chương trình bảo vệ.
- Phương thức cất giữ SLEEP.
- Có bảng lựa chọn dao động.
- Công nghệ CMOS FLASH/EFPRO nguồn mức thấp tốc độ cao.
- Thiết kế hoàn toàn tĩnh.
- Mạch chương trình nối tiếp có 2 chân.
- Mạch xử lý đọc ghi tới bộ nhớ chương trình.
- Dải điện thế hoạt động 2.0 đến 5.5V.
- Nguồn điện sử dụng 25mA.
- Dãy nhiệt độ công nghiệp và thuận lợi.
- Công suất tiêu thụ thấp.
- TIMER0: 8 bits của bộ định thời, bộ đếm với hệ số tỉ lệ trước.
- TIMER1: 16 bits của bộ định thời, bộ đếm với hệ số tỉ lệ trước, có khả năng tăng
trong khi ở chế độ sleep qua xung đồng hồ được cung cấp bên ngoài.
- TIMER2: 8 bits của bộ định thời, bộ đếm với 8 bits của hệ số tỉ lệ trước, hệ số tỉ lệ
sau.
Hình 2.18: Sơ đồ chân của PIC 16F877A.
+ Chân 13, 14 là các chân kết nối với thạch anh tạo dao động cho chip. Ta mắc thêm
vào 2 tụ điện có điện dung 33pF để tăng độ ổn định cho dao động thạch anh.
+ PORTB: Vì PORTB lúc này đóng vai trò là ngõ xuất nên các thanh ghi TRISB
trong chíp phải được đặt giá trị logic 1 (Nếu ta đặt ngõ B là ngõ nhập thì ta phải đặt
giá trị logic 0).
+ VDD: Là điện áp cấp nguồn cho vi điều khiển, nguồn điện cấp là 5V.
+ GND: Là chân nối mass khi sử dụng cần thiết kế một mạch ổn áp để bảo vệ cho vi
điều khiển, thường sử dụng IC ổn áp 7805.
+ PORTA: Có 6 pin từ chân 2 đến chân 7.
+ PORTB: Có 8 chân từ 34 đến 40, ngoài chức năng làm cổng xuất nhập còn có thêm
một số chức năng phụ khác.
+ PORTC, PORTE: Tương tự như PORTB.
+ Chân Reset (MCLR): Ngõ vào ở chân 1 dùng để thiết lập điều kiện đầu cho vi điều
khiển.
+ OSC1, OSC2: Hai chân này được sử dụng để nhận nguồn xung clock từ bên ngoài
cụ thể là từ thạch anh dao động.
+ Các chân RC3, RC4 dùng để kết nối I2C.
+ Các chân RC6, RC7 là chân kết nối RS232.
2.3.1. Truyền thông nối tiếp UART trong PIC 16F877A.
- UART được viết tắt của Universal Asynchronous Receiver – Transmitter thường là
một mạch tích hợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy
tính và thiết bị ngoại vi thông qua cổng nối tiếp. Rất nhiều vi điều khiển hiện nay
đã tích hợp UART. Để bắt đầu việc truyền dữ liệu bằng UART, một start bit được
gửi đi, sau đó là 5‐8 bit dữ liệu, sau đó là stop bit. Start bit có trạng thái ngược với
trạng thái bình thường của đường truyền dữ liệu. Stop bit có cùng trạng thái với
trạng thái bình thường của đường truyền dữ liệu. Tốc độ của UART được quy định
bởi tốc độ baud. Một số chuẩn của UART là EIA, RS 232, RS 422 và RS 485.
- Như vậy để làm việc với UART chúng ta phải quan tâm đến các thông số sau:
+ Tốc độ Baud: thường là 9600.
+ Số bít được dùng để truyền Data: thường là 8 bít.
+ Bit Stop 1, hay 2 thường chọn 1.
+ Bit chẵn lẻ mục đích để kiểm tra dữ liệu truyền hoặc gửi có đúng hay không.
- PIC 16F877A có tất cả 5 thanh ghi cho quá trình điều khiển UART: Bao gồm 2
thanh ghi chức năng TXSTA, RCSTA, 2 thanh ghi dữ liệu RCREG và TXREG.
Thanh ghi tốc độ baund SPBRG.
- Trong PIC 16F877A có hai chế độ truyền High speed và Low speed được quy định
bởi Bit BRGH của thanh ghi TXSTA. Việc phân chia hai mức tốc độ này để có sự
chọn lựa cho trường hợp sai số với tốc độ baud chuẩn của PC, mà trong PC có các
mức chuẩn: 300, 2400, 9600, 19200, 28800.
- Trong PIC 16F877A có nhiều chế độ truyền nhận khác nhau: Chế độ truyền nhận
dùng bit 9 để định chẵn lẻ, hay cho mạng vi điều khiển một master và nhiều slave.
Và chế độ chuyền đồng bộ ứng dụng cho việc giao tiếp với A/D, D/A hay với các
EEPRO. Các chế độ này sẽ được thiết lập bởi các bit trong thanh ghi TXSTA, và
TCSTA.
- Quá trình nhận dữ liệu: Trong PIC 16F877A để nhận biết được dữ liệu truyền tới
người ta dùng bit cờ RCIF trong thanh ghi PIR1. Như vậy khi thanh ghi đệm dữ
liệu chứa dữ liệu thì RCIF sẽ được đưa lên 1 và chính cờ này cho phép PIC
16F877A có hai phương thức để nhận biết lúc nào có dữ liệu truyền tới. Sử dụng
ngắt và sử dụng kiểu Polling (quay vòng).
- Quá trình truyền dữ liệu: Trong quá trình truyền dữ liệu cũng có hai chế độ sử dụng
ngắt và Polling, tuy nhiên quá trình truyền dữ liệu lên PC không phải là thời điểm
bất kỳ mà dặt dưới sự kiểm soát của chương trình cho nên người ta thưòng sử dụng
kiểu polling khi cần truyền thì truyền đi.
2.3.2. Giao tiếp I2C trong PIC 16F877A
a. Tổng quát
- RC3/SCK/SCL: chân truyền dân xung clock.
- RC4/SDI/SDA: chân truyền dữ liệu.
- Các khối cơ bản trong sơ đồ khối của I2C không có nhiều khác biệt so với SPI. Tuy
nhiên I2C còn có thêm khối phát hiện bit START và STOP của dữ liệu (START
and STOP bit detect) và khối xác định địa chỉ ( match detect).
Hình 2.19: Sơ đồ khối MSSP ( I2C slave mode).
- Các thanh ghi liên quan đến I2C bao gồm:
+ Thanh ghi SSPCON và SSPCON2: điều khiển MSSP.
+ Thanh ghi SSPSTART: thanh ghi chứa trạng thái hoạt động của MSSP.
+ Thanh ghi SSPBUF: buffer truyền nhận nối tiếp.
+ Thanh ghi SSPSR: thanh ghi dịch dung để truyền nhận dữ liệu.
+ Thanh ghi SSPADD: thanh ghi chứa địa chỉ của giao diện MSSP.
b. Thiết lập I2C.
- Thanh ghi SSPADD: thanh ghi chứa địa chỉ của giao diện MSSP.
+ Ở chế độ Master mode, thanh ghi SSPADD sẽ không được sử dụng để chứa địa
chỉ, thay vào đó chức năng của SSPADD là thanh ghi chứa giá trị của BRG giá
trị tạo ra tốc độ baud cho xung clock dùng để truyền nhận dữ liệu.
SSPADD (khởi tạo tốc độ Baud).
VD: Set tốc độ baud của đường truyền: với 100Kb thì SSPADD = 28H. Xung giao
tiếp nối tiếp sẽ được tạo ra từ BRG (Baud Rate Generator ), giá trị ấn định tần số xung
clock nối tiếp được lấy từ 7 bit thấp của thanh ghi SSPADD. Khi dữ liệu được đưa vào
thanh ghi SSBUF bit BF được set vad BRG tự động đếm ngược về 0 và dừng lại, pin
SCL được giữ nguyên trạng thái trước đó. Khi dữ liệu tiếp theo được đưa vào, BRG
cần một khoảng thời gian TBRG tự động reset lại giá trị để tiếp tục quá trình đếm
ngược. Mỗi vòng lệnh (có thời gian TCY) BRG sẽ giảm giá trị 2 lần.
.
Hình 2.20: Sơ đồ khối BRG của I2C Master mode.
Các giá trị cụ thể của tần số xung nối tiếp do BRG tạo ra được liệt kê trong bảng sau:
- Thanh ghi SSPCON: địa chỉ 14H. Thanh ghi điều khiển chuẩn giao tiếp MSSP.
Bit 7: WCOL – Write Collition Detect bit
- Khi truyền dữ liệu ở chế độ I2C Master mode:
+ WCOL = 1: đưa dữ liệu truyền đi vào thanh ghi SSPBUF trong khi chế độ
truyền dữ liệu của I2C chưa săn sàng.
+ WCOL = 0: không xảy ra hiện tượng trên.
- Khi truyền dữ liệu ở chế độ I2C Slave mode:
+ WCOL = 1: dữ liệu mới được đưa vào thanh ghi SSPBUF trong khi dữ liệu
cũ chưa được truyền đi.
+ WCOL = 0: không xảy ra hiện tượng trên.
- Ở chế độ nhận dữ liệu (Master and Slave): bit này không có tác dụng chỉ thị các
trạng thái.
Bit 6: SSPOV – Receive Overflow Indicator Flag bit
- Khi nhận dữ liệu:
+ SSPOV = 1: dữ liệu mới được nhận vào thanh ghi SSPBUF trong khi dữ
liệu cũ chưa được đọc.
+ SSPOV = 0: không có hiện tượng xảy ra.
- Khi truyền dữ liệu: Bit này không có tác dụng chỉ thị các trạng thái.
Bit 5: SSPEN – Synchronuos Serial Port Enable bit
- SSPEN = 1: cho phép cổng giao tiếp MSSP ( các pin SDA và SCL).
- SSPEN = 0: không cho phép giao tiếp MSSP.
Cần chú ý là các pin SDA và SCL phải được điều khiển trạng thái bằng các
bit tương ứng trong thanh ghi TRISC trước đó.
Bit 4: CKP – SCK Release Control bit
Ở chế độ Slave mode:
+ CKP = 1: cho xung clock tác động.
+ CKP = 0: giữ xung clock ở mức logic thấp (để đảm bảo thời gian thiếp lập
dữ liệu).
Bit 3, 0: SSPM3, SSPM0
- Các bit đóng vai trò lựa chọn các chế độ hoạt động của MSSP.
+ 1111: I2C Slave mode 10bit địa chỉ và cho phép ngắt khi phát hiện bit
START và STOP.
+ 1110: I2C Slave mode 7 bit địa chỉ và cho phép ngắt khi phát hiện bit
START và STOP.
+ 1011: I2C Frimwave Controlled Master mode ( không cho phép chế độ
Slave).
+ 1000: I2C Master mode, xung clock = FOSC/(4*(SSPADD + 1)).
+ 0111: I2C Slave mode 10bit địa chỉ.
- Các trạng thái không được liệt kê hoặc không có tác dụng điều khiển hoặc chỉ
có tác dụng đối với chế độ SPI mode.
- Thanh ghi SSPCON2: địa chỉ 91h.
+ Thanh ghi điều khiển các chế độ hoạt động của chuẩn giao tiếp I2C.
Bit 7: GCEN General Call Enable bit
+ GCEN=1 cho phép khi ngắt địa chỉ 0000h được nhận vào thanh ghi SSPSR
(địa chỉ của chế độ General Call Address).
+ GCEN=0 Không cho phép chế độ địa chỉ trên.
Bit 6: ACKSTAT Acknowledge Status bit
Bit này chỉ có tác dụng khi truyền dữ liệu ở chế độ I2C Master mode).
+ ACKSTAT=1 Nhận được xung từ I2C Slave.
+ ACKSTAT=0 Chưa nhận được xung.
Bit 5: ACKDT Acknowledge Data bit
Bit này chỉ có tác dụng khi nhận dữ liệu ở chế độ I2C Master mode.
+ ACKDT=1 chưa nhận xung.
+ ACKDT=0 Đã nhận được xung.
Bit 4:ACKEN Acknowledge Sequence Enable
Bit này chỉ có tác dụng khi nhận dữ liệu ở chế độ I2C Master mode.
+ ACKEN=1 Cho phép xung xuất hiện ở 2 pin SDA ca SCL khi kết thúc
quá trình nhận dữ liệu.
+ ACKEN=0 không cho phép tác động trên.
Bit 3: RCEN Receive Enable bit
Bit này có tác dung ở chế độ I2C Master mode.
+ RCEN =1 Cho phép nhận dữ liệu ở chế độ I2C Master mode.
+ RCEN =0 Không cho phép nhận dữ liệu.
Bit 2: PEN Stop Condition Enable bit
+ PEN =1 cho phép thiết lập điều kiện Stop ở 2 pin SDA và SCL.
+ PEN =0 Không cho phép tác động trên.
Bit 1: RSEN Repeated Start Condition Enable bit
+ RSEN =1 Cho phép thiết lập điều kiện Start lặp lại liên tục ở 2 pin SDA và
SCL.
+ RSEN =0 Không cho phép tác động trên.
Bit 0: SEN Start Condition Enable/Stretch Enable bit
- Ở chế độ Master mode:
+ SEN = 1 Cho phép thiết lập điều kiện Start ở 2 pin SDA và SCL.
+ SEN = 0 Không cho phép tác động trên.
- Ở chế độ Slave mode:
+ SEN = 1 Cho phép khóa xung clock từ pin SCL cua I2C Master.
+ SEN = 0 Không cho phép tác động trên.
+ Thanh ghi SSPSTAT: Địa chỉ 94h.
+ Thanh ghi chứa các bit trạng thái chuẩn giao tiếp MSSP.
Chọn baud chuẩn với 100kb thì SMP=1.
Bit 7: SPM Slew Rate Control bit.
+ SPM=1 Dùng tốc độ chuẩn (100KHz va 1MHz).
+ SPM=0 Dùng tốc độ cao (400KHz).
Bit 6: CKE MSBus select bit.
+ CKE=1 Cho phép MSBus.
+ CKE=0 Không cho phép MSBus.
Bit 5: Bit
+ I2C Master Mode :Không quan tâm.
+ D/A=1 byte vừa truyền đi hoặc nhận là dữ liệu.
+ D/A=0 byte vừa truyền đi hoặc nhận là địa chỉ.
Bit 4: P Stop bit.
+ P=1 vừa nhận được bit Stop.
+ P=0 chưa nhận được bit Stop.
Bit 3: S Start bit.
+ S=1 vừa nhận được bit Start.
+ S=0 chưa nhận được bit Start.
Bit 2: Bit information
- 12C Slave mode:
+ =1 Đọc dữ liệu.
+ =0 Ghi dữ liệu.
- 12C Master Mode:
+ =1 Đang truyền dữ liệu.
+ =0 Không truyền dữ liệu.
Bit 1: UA Update Address
- Bit này chỉ có tác dụng với chế độ 12C Slave mode 10 bit địa chỉ.
+ UA=1 vi điều khiển cần cập nhật thêm địa chỉ từ thanh ghi SSPADD.
+ UA=0 Không cần cập nhật thêm địa chỉ.
Bit 0: BF Buffer Full Status.
- BF=1 Thanh ghi SSPBUF đang chứa dữ liệu truyền đi hoặc nhận được.
- BF=0 Thanh ghi SSPBUF không có dữ liệu.
CHƯƠNG 3: MÔ HÌNH HÓA HỆ THỐNG
3.1. Mô hình hệ thống cơ khí
3.2.
Hình 3.1: Mô hình cân đo sức khỏe
1. Hộp đựng mạch điện tử và màn hình LCD.
2. Trụ đỡ hộp mạch.
3. Bệ đỡ (2 chiếc), nơi lắp ghép cân với thanh đo chiều cao vào trụ đỡ.
4. Chân đỡ cân (4 chiếc).
5. Khung chịu lực của cân (2 chiếc).
6. Mặt cân, cũng là là vỏ của cân.
7. Thanh đo chiều cao.
3.3. Mô hình tổng quan hệ thống điều khiển giao tiếp I2C và truyền thông nối
tiếp.
Lm24vf
Hình 3.2: Tổng quan hệ thống điều khiển.
PIC16F877ALM35
PIC16F877AHL-8
PIC16F877A HC-SR04
PIC16F877ARPR-359F
PIC16F877A
MÀN HÌNH
LCD
SCL
SDA
CHƯƠNG 4: THIẾT KẾ VÀ THI CÔNG
4.1. Thiết kế cơ khí
Yêu cầu của cân là phải chắc chắn, chịu được trọng tải lớn, tận dụng được
những chi tiết có sẵn trên thị trường để tiết kiệm tối đa giá thành, có tinh thẩm mĩ về
hình thức.
4.1.1. Khung dưới
- Chức năng: Làm khung đỡ cho cân, cột trụ hộp mạch, thanh đo chiều cao và là
chỗ để cố định một đầu loadcell.
- Vật liệu: Sắt.
- Cấu tạo: Thể hiện trên hình 4.1
Hình 4.1: Khung chịu lực dưới.
- Kích thước: Thể hiện trên hình 4.2.
Hình 4.2: Bản vẽ chi tiết khung chịu lực dưới
4.1.2. Khung trên
- Chức năng: Chịu lực tải trực tiếp từ mặt cân và là nơi cố định đầu còn lại của
loadcell.
- Vật liệu: Sắt.
- Cấu tạo: Thể hiện trên hình 4.3.
Hình 4.3: Khung chịu lực trên.
- Kích thước: Thể hiện trên hình 4.4.
Hình 4.4: Bản vẽ chi tiết khung chịu lực dưới.
4.1.3. Mặt cân
- Chức năng: Nâng cao thẩm mỹ cho cân, che kín đi phần khung và loadcell.
- Vật liệu: Tôn.
- Cấu tạo: Thể hiện trên hình 4.5.
Hình 4.5: Mặt cân (Vỏ cân).
- Kích thước: 464x404x80, dày 1mm.
4.1.4. Thanh đo chiều cao
- Chức năng: Là thanh cố định cảm biến cảm biến siêu âm HC-SR04.
- Vật liệu: Sắt.
- Cấu tạo: Thể hiện trên hình 4.6.
Hình 4.6: Thanh đo chiều cao.
- Kích thước: Cao: 2100mm, thanh ngang dài: 300mm, đường kính: 30mm, dày:
1mm.
4.1.5. Trụ đỡ hộp mạch
- Chức năng: Là bộ phận giữ cố định hộp mạch ở độ cao vừa tầm với người sử
dụng để thuận tiện cho thao tác.
- Vật liệu: Sắt.
- Cấu tạo:
- Kích thước: Thanh trụ bán kính 30mm, cao 1m.
4.1.6. Hộp đựng mạch điện tử
- Chức năng: Chứa đựng những mảng mạch điện tử điều khiển, hệ thống nút bấm
và màn hình hiển thị LCD.
- Vật liệu: Tôn.
- Cấu tạo: Hình hộp chữ nhật có nắp đậy.
- Kích thước: 30x20x10mm.
4.2. Sơ đồ mạch trong đồ án
Từ sơ đồ thiết kế tổng quan về hệ thống điều khiển ta thấy rằng hệ thống bao
gồm 6 con vi điều khiển PIC 16F877A hoạt động theo kiểu truyền thông I2C trong hệ
thống này sẽ có 1 con đóng vai trò là chủ và 5 con đóng vai trò là tớ.
Các con vi điều khiển này sẽ hoạt động độc lập đóng các vai trò khác nhau. Các
vi điều khiển đóng vai trò là tớ có nhiệm vụ thu thập dữ liệu từ các cảm biến LM35 để
đo khối nhiệt độ, cảm biến HC-SR04 để đo chiều cao, loadcell L6E để đo khối lượng,
IR để đo nhịp tim, cảm biến áp suất MPXx500 để đo huyết áp. Vi điều khiển đóng vai
trò là chủ có nhiệm vụ nhận tín hiêu từ giao diện người dùng từ máy tính để sau đó đọc
dữ liêu từ các vi điều khiển tớ và cập nhật dữ liệu đó lên trên giao diện người dùng.
Sau đây ta sẽ tiếp tục tìm hiểu các thanh phần mạch cấu tao lên hệ thống.
4.2.1. Mạch điều khiển trung tâm
Để tiện lợi cho quá trình kết nối của hệ thống mạch điều khiển trung tâm sử
dụng với vai trò là chủ và tớ, ta sẽ dùng mạch kit PIC 16F877A được thiết kế theo
dạng module, sau đây ta sẽ nói rõ hơn về các thành phần của kít mà ta sẽ sử dụng trong
hệ thống.
Hình 4.7: Mạch điều khiển trung tâm.
Khối điều khiển trung tâm được thiết kế dạng các module riêng rẽ có các Jump
kết nối ngoài giúp dễ dàng thay thế mạch khi bị hỏng, thích hợp với nhiều dòng chip
có cùng số chân cũng như mức điện áp. Khi kết nối với các thiết bị hay module khác
dễ dàng tháo lắp, di chuyển. Mạch sử dụng thạch anh ngoài với tần số 20MHz, chuẩn
nạp code ICSP. Ngoài các Jump kết nối trực tiếp với các chân của vi điều khiển chúng
ta còn có các khối mạch kết nối với chức năng cụ thể.
4.2.2. Khối nguồn
Hình 4.8: Khối nguồn mạch điều khiển
- Khối nguồn 5V: Khối này bao gồm các jump sử dụng để cấp nguồn 5V cho vi
điều khiển, Led báo có điện áp.
- Khối nguồn 3.3V: Khối nguồn cung cấp điện áp đặc biệt 3.3V cho module
NRF24L01, sử dụng IC ổn áp AMS 117. Đầu vào của khối sử dụng cùng VCC
5V của khối nguồn 5V.
4.2.3. Khối UART
Bao gồm bốn chân Jump ngoài cho phép ghép nối với cổng kết nối chuẩn nối
tiếp cho phép kết nối máy tính với vi điều khiển với chức năng các chân:
+ Vcc cấp nguồn 5V.
+ GND nối đất.
+ Chân TX truyền dữ liệu từ máy tính xuống kết nối với RC6.
+ Chân RX nhận dữ liệu từ vi điều khiển truyền về máy tính kết nối với RC7.
Hình 4.9: Khối giao tiếp nối tiếp.
4.2.4. Khối nạp chương trình
Hình 4.10: Khối nạp chương trình cho vi điều khiển.
Nhóm sử dụng chuẩn nạp ICSP để nạp chương trình điều khiển cho PIC. Khối
kết nối mạch nạp sử dụng sáu jump ngoài. Chức năng các chân như sau:
+ Chân PGC: Tạo xung đồng bộ một chiều nối tiếp từ mạch nạp đến chip.
+ Chân PGD: Xung đồng bộ dữ liệu hai chiều.
+ Chân Vcc: Nguồn điện cấp cho Chip.
+ Chân MCLR: Khi được xác lập thông báo đưa chip vào trạng thái nạp dữ liệu.
4.2.5. Mạch cảm biến nhiệt LM35
- Chân 1 của LM35 : chân nguồn.
- Chân 2 của LM35 :chân tín hiệu.
- Chân 3 của LM35: chân nối đất.
Hình 4.11: Khối cảm biến nhiệt độ LM35.
4.2.6. Mạch cảm biến HC-SR04
Hình 4.12: Khối cảm biến siêu âm HC-SR04
- Chân 1 VCC: chân nguồn.
- Chân 2 TRIGE: chân TRIGE trên vi điều khiển.
- Chân 3 ECHO: với chân ECHO trên vi điều khiển.
- Chân 4 GND nối với chân GND.
4.2.7. Mạch cảm biến IR RPR-359F
Hình 4.13: Khối cảm biến IR RPR-359F.
+ Chân 1 và chân 4: GND.
+ Chân 2: Nối với một emitor của transistor 2N3904. Transistor này đóng
vai trò nhu một công tắc sẽ đóng mở cảm biến.
+ Chân 3: Nối với nguồn thông qua 1 trở điện trở 10k và đây chính là tín
hiệu đầu ra của cảm biến.
- Trong trương hợp này tín hiệu sẽ đi qua 3 quá trình trước khi vào vi điều khiển
xử lý.
+ Quá trình 1: tín hiệu đi qua tầng thứ nhất sẽ được khuếch đại và lọc
nhiễu.
Hình 4.14: Khối khuếch đại tin hiệu và lọc nhiễu lần1.
+ Quá trình thứ 2: Sau tín hiệu đi ra khỏi quá trình xử lý nhất tín hiệu sẽ
được tiếp tục lọc nhiễu ở quá trình thứ 2.
Hình 4.15: Khối khuếch đại tin hiệu và lọc nhiễu lần 2.
+ Quá trình thứ ba: Tín hiệu được xử lý để thu tín hiêu đầu ra là tín hiệu
số.
Hình 4.15: Khối thu tín hiêu số sau khi lọc nhiễu.
4.2.8. Mạch cảm biến khối lượng L6E
Cảm biến khối lượng L6E sẽ được kết nối với bộ ADC24bit HX711. Điện áp so
sánh sẽ được lấy trên 2 chân E+ và E- của HX711. Khi có sự thay đổi về trọng lượng
tại Loadcell có sự thay đổi điện áp tại 2 chân A+ và A-. HX711 sẽ đo sự thay đổi này
và trả về giá trị ADC 24 bit để cho vi điều khiển xử lý.
Hình 4.16: Khối cảm biến loadcell và HX711.4.3. Code sử dụng trong mạch
4.3.1. Code mạch đo chịp tim
//khai bao ket noi lcd
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_ENABLE_PIN PIN_D3
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
// ket thuc khai bao ket noi LCD
// khai bao cong tac dieu khien
#include <main.h>
#include <lcd.c>
unsigned int8 count=0,bpm=0;
#int_ext
void puse_hearth_irs(void)
count++ ;
#int_timer1
void timer1_irs(void)
unsigned int16 x=0;
x++;
if(x==100)
bpm=count;
x=0;
count=0;
void main()
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_EXT_L2H);
enable_interrupts(GLOBAL);
// TODO: USER CODE!!
while(TRUE)
delay_ms(100);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Hello....");
delay_ms(1000);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Place your");
lcd_gotoxy(1,2);
lcd_putc("finger....");
delay_ms(4000);
lcd_putc("\f");
count=0;
set_timer1(15535);
lcd_gotoxy(1,1);
lcd_putc("processing.....");
delay_ms(5500);
//delay_ms(5000);
lcd_putc("\f");
lcd_gotoxy(1,2);
bpm=count;
printf(lcd_putc,"Heart Rate: %d",bpm*12);
while(input(PIN_A2));
delay_ms(500);
bpm=0;
4.3.2. Code mạch đo nhiệt độ và chiều cao
#define trig pin_B1
#define echo pin_B0
//khai bao ket noi lcd
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_ENABLE_PIN PIN_D3
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
// ket thuc khai bao ket noi LCD
#include <main.h>
#include <lcd.c>
void high_person(void);
void temperature(void) ;
void main()
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_tris_b(0xfd);// cau hinh dau vao rb1 ouput, con lai la input
setup_adc(ADC_CLOCK_INTERNAL); // chon bo dao dong cho adc
setup_adc_ports(ALL_ANALOG); // bat tat ca port a la bo chuyen doi anlanog
set_adc_channel(0); // chon kenh ra0
lcd_init(); // khoi tao lcd
printf(LCD_PUTC, "\f HIG-TEM");
delay_ms(2000);
while(TRUE)
if(input(PIN_B4)==0)
delay_us(20);
if(input(PIN_B4)==0)
high_person();
if(input(PIN_B5)==0)
delay_us(20);
if(input(PIN_B5)==0)
temperature();
void high_person(void)
float distance, time;
output_high(trig); // dua chan trig len cao
delay_us(20); // tao ra 20u
output_low(trig);
while(!input(ECHO)) ; //cho cho toi khi chan echo len cao
set_timer1(0); // bat timer
while(input(ECHO)) ; // cho cho toi khi chan echo xuong thap
time=get_timer1(); //doc timer
distance=(time*0.028+1.093); // tinh khoang cach
lcd_gotoxy(1,1);
lcd_putc("your high:");
lcd_gotoxy(1,2);
printf(lcd_putc,"%6.3f cm",200-distance);
delay_ms(1000);
while(input(PIN_B5))||while(input(PIN_B4));// CHO CHO TOI KHI CONG TAC
B4 HOAC B5 DC NHAN
lcd_putc("\f");
void temperature(void)
float vin0, temp; // bien dau vao
vin0 =read_adc();
temp= vin0*1.95;
lcd_gotoxy(1,1);
lcd_putc("your temper:");
lcd_gotoxy(1,2);
printf(lcd_putc,"%6.3f C ",temp);
delay_ms(1000);
while(input(PIN_B4))|| while(input(PIN_B5));// CHO CHO TOI KHI CONG TAC
B4 HOAC B5 DC NHAN
lcd_putc("\f");
4.3.3. Code mạch đo khối lượng
//khai bao ket noi lcd
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_ENABLE_PIN PIN_D3
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
// ket thuc khai bao ket noi LCD
// khai bao 2 chan giao tiep : Dout va SCK
#define HX711_DOUT PIN_A0// input
#define HX711_SCK PIN_A1// output
#define Uee 4.05 // (volt)
#define Weight_Max 300000 // (gam)
#include <main.h>
#include <lcd.c>
// khai bao ham nguyen mau
unsigned int32 HX711_Read(void);
float Get_Weight(unsigned int32 Weight_ZeroPoint);
unsigned int32 Get_ZeroWeight(void);
void Delay__hx711_us(void);
// ket thuc khai bao ham nguyen mau
void main()
unsigned int32 Zero_ADC;
//float WEIGHT ;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
set_tris_a(0xFD);
// port_b_pullups(0x00);
lcd_init();
delay_ms(100);
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc(" load cell");
delay_ms(2000); // cho de on dinh loadCell
Zero_ADC=Get_ZeroWeight(); // lay diem 0 gram.
//delay_ms(100);
lcd_putc('\f');
while(TRUE)
lcd_gotoxy(1,2);
printf(lcd_putc,"%9.2f KG ",(float)Get_Weight(Zero_ADC));
delay_ms(2000);
while(input(PIN_A2));
void Delay__hx711_us(void)
delay_ms(2);
unsigned int32 HX711_Read(void)
unsigned int32 count;
unsigned char i;
while(!input(HX711_DOUT));//=1
Delay__hx711_us();
output_low(HX711_SCK);
count=0;
while(input(HX711_DOUT));
for(i=0;i<24;i++)
output_high(HX711_SCK);
count=count<<1;
output_low(HX711_SCK);
if(input(HX711_DOUT)==1) count++;
output_high(HX711_SCK);
count=count^0x800000;
Delay__hx711_us();
output_low(HX711_SCK);
return (count);
float Get_Weight( unsigned int32 Weight_ZeroPoint)
unsigned int32 Weight;
float kg;
Weight = HX711_Read();
if(Weight > Weight_ZeroPoint)
kg =(Weight - Weight_ZeroPoint);
kg = kg/14316;
return(kg);
unsigned int32 Get_ZeroWeight(void)
unsigned int32 Weight_Zero;
Weight_Zero = HX711_Read();
return (Weight_Zero);
KẾT LUẬN
Sau một thời gian nghiên cứu và làm việc một cách nghiêm túc, cùng với sự
giúp đỡ và hướng dẫn nhiệt tình của thầy Lê Ngọc Duy, đến nay chúng em đã hoàn
thành đề tài: “Hệ thống kiểm tra sức khỏe”. Trong quá trình thực hiện, chúng em đã
vận dụng những kiến thức đã được học, tự mình đánh giá trình độ bản thân, cùng nhau
nghiên cứu và học hỏi lẫn nhau tìm ra hướng giải quyết. Thông qua quá trình thực hiện
đề tài, chúng em đã dần làm quen với cách làm việc độc lập và phối hợp làm theo
nhóm. Điều quan trọng là đã biết cách tổ chức công việc và sắp xếp thời gian hợp lý.
Trọng quá trình thực hiện đề tài, mặc dù chúng em đã cố gắng nhưng vì kiến
thức và thời gian còn hạn chế nên không thể tránh khỏi những thiếu xót. Chúng em rất
mong thầy cô đóng góp ý kiến để đề tài được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn!