Thuật ngữ: Cảm biến nhiệt kế điện trở 4 dây

Trong bài viết này, chúng tôi sẽ thảo luận về các loại cảm biến nhiệt độ khác nhau và cách chúng có thể được sử dụng trong từng trường hợp cụ thể. Nhiệt độ là một thông số vật lý được đo bằng độ. Nó là một phần thiết yếu của bất kỳ quá trình đo lường nào. Các lĩnh vực yêu cầu đo nhiệt độ chính xác bao gồm y học, nghiên cứu sinh học, điện tử, nghiên cứu vật liệu và hiệu suất nhiệt của các sản phẩm điện. Một thiết bị được sử dụng để đo lượng nhiệt năng cho phép chúng ta phát hiện những thay đổi vật lý về nhiệt độ được gọi là cảm biến nhiệt độ. Chúng là kỹ thuật số và tương tự.

Các loại cảm biến chính

Nói chung, có hai phương pháp để lấy dữ liệu:

1. Liên hệ... Cảm biến nhiệt độ tiếp xúc tiếp xúc vật lý với một đối tượng hoặc chất. Chúng có thể được sử dụng để đo nhiệt độ của chất rắn, chất lỏng hoặc chất khí.

2. Không tiếp xúc... Cảm biến nhiệt độ không tiếp xúc phát hiện nhiệt độ bằng cách chặn một số năng lượng hồng ngoại phát ra từ một đối tượng hoặc chất và cảm nhận cường độ của nó. Chúng chỉ có thể được sử dụng để đo nhiệt độ trong chất rắn và chất lỏng. Chúng không thể đo nhiệt độ của các chất khí do không có màu (trong suốt).

Quy tắc lựa chọn cảm biến

Cảm biến nhiệt độ để sưởi ấm dưới sàn được lựa chọn có tính đến các đặc điểm như nguồn điện, loại lớp phủ trên, phương pháp lắp đặt và thiết bị có chức năng bổ sung.

Quyền lực

Giá trị chắc chắn phải đáp ứng yêu cầu và tải trọng của sàn ấm. Nếu không, cảm biến sẽ không hoạt động chính xác. Khi công suất của bộ phận làm nóng lớn hơn công suất của chính bộ điều chỉnh, cần phải lắp thêm bộ khởi động từ giữa chúng - để tránh hư hỏng thiết bị do tăng tải.

Bộ tính năng

Sàn ấm được điều khiển bởi một bộ phận điện, cho phép bạn điều chỉnh hoạt động của các bộ phận sưởi ấm. Các bộ điều khiển hiện đại có các chức năng như khởi động và tắt nguồn hệ thống, điều chỉnh điều kiện nhiệt độ, cũng như cài đặt tần số kết nối và ngắt kết nối bộ phận làm nóng.

Dễ sử dụng

Nếu bạn nghĩ rằng bạn sẽ không hiểu về lập trình, thì bạn không nên mua một thiết bị phức tạp. Ngay cả khi tính đến tất cả các chức năng của nó. Ví dụ, những người lớn tuổi cảm thấy khá khó khăn khi xử lý các thiết bị có thể lập trình. Tốt hơn là họ nên chọn tùy chọn cơ học.

Dễ dàng kết nối

Tài liệu kèm theo cho bộ điều nhiệt luôn chỉ ra cách kết nối cảm biến sưởi ấm dưới sàn. Các thiết bị đầu cuối được đặt ở cạnh trên một mặt của thiết bị điều khiển. Sau khi kết nối các dây điện theo sơ đồ, nó sẽ cần thiết để kiểm tra hiệu suất của hệ thống sưởi ấm. Để thực hiện việc này, hãy đo điện trở tại các đầu cực của cảm biến nhiệt độ và cáp điện sưởi ấm, hoặc kết nối sàn ấm và tăng các giá trị nhiệt độ từ 0 đến chỉ số được SNIP khuyến nghị, tức là lên đến 30 ° C.

Xuất hiện

Một cảm biến nhiệt không chỉ phải dễ hiểu về mặt chức năng mà còn phải hấp dẫn về thiết kế. Các loại núm vặn hiện đại có nhiều màu sắc và hình dạng. Bạn có thể chọn một tùy chọn hài hòa với nội thất của căn phòng.

Các loại cảm biến nhiệt độ

Có nhiều loại cảm biến nhiệt độ khác nhau.Từ điều khiển bật / tắt đơn giản của thiết bị ổn nhiệt đến các hệ thống điều khiển phức tạp về cấp nước, với chức năng làm nóng nó, được sử dụng trong quá trình trồng cây. Hai loại cảm biến chính, tiếp xúc và không tiếp xúc, được chia nhỏ thành cảm biến điện trở, điện áp và cảm biến cơ điện. Ba cảm biến nhiệt độ được sử dụng phổ biến nhất là:

  • Thermistors
  • Cặp nhiệt điện trở
  • Cặp nhiệt điện

Các cảm biến nhiệt độ này khác xa nhau về thông số hoạt động.

Thiết bị

Nó là một cặp nhiệt điện (tấm hoặc thanh) được tạo thành từ các dây nối với các đầu cực của phần tử cảm biến.

Tùy thuộc vào thông tin nhiệt độ, điện trở của bộ phận nhạy cảm thay đổi, tương ứng, tín hiệu điện cung cấp cho bộ điều nhiệt cũng thay đổi. Như vậy, giá trị tuyệt đối của nhiệt độ môi chất được xác định.

Sơ đồ kết nối cảm biến nhiệt độ

Theo quy tắc, bên ngoài (cảm biến nhiệt độ bên ngoài để sưởi ấm dưới sàn), được đặt dưới lớp phủ hoàn thiện của sàn và đo các chỉ số nhiệt độ của nó. Bên trong (tích hợp), nằm bên trong bộ điều chỉnh và xác định mức độ làm nóng không khí.

Thiết kế của cảm biến nhiệt độ được lựa chọn tùy thuộc vào các tính năng của hệ thống:

Thermistor

Nhiệt điện trở là một điện trở nhạy cảm thay đổi điện trở vật lý của nó theo nhiệt độ. Thông thường, nhiệt điện trở được làm bằng vật liệu bán dẫn gốm như coban, mangan hoặc niken oxit và được phủ một lớp thủy tinh. Chúng là những đĩa nhỏ phẳng kín, phản ứng tương đối nhanh với bất kỳ sự thay đổi nhiệt độ nào.

Do đặc tính bán dẫn của vật liệu, nhiệt điện trở có hệ số nhiệt độ âm (NTC), tức là điện trở giảm khi nhiệt độ tăng. Tuy nhiên, cũng có những nhiệt điện trở PTC có điện trở tăng khi nhiệt độ tăng.

Lịch trình nhiệt điện trở

Ưu điểm của nhiệt điện trở

  • Tốc độ phản ứng với sự thay đổi nhiệt độ, độ chính xác cao.
  • Giá thấp.
  • Điện trở cao hơn trong khoảng 2.000 đến 10.000 ohms.
  • Độ nhạy cao hơn nhiều (~ 200 ohm / ° C) trong phạm vi nhiệt độ giới hạn lên đến 300 ° C.

Nhiệt độ phụ thuộc vào điện trở

Sự phụ thuộc của điện trở vào nhiệt độ được biểu thị bằng phương trình sau:

Ở đâu A, B, C - đây là các hằng số (được cung cấp bởi các điều khoản tính toán), R - điện trở trong Ohms, T - nhiệt độ tính bằng Kelvin. Bạn có thể dễ dàng tính toán sự thay đổi của nhiệt độ từ sự thay đổi của điện trở hoặc ngược lại.

Làm thế nào để sử dụng một nhiệt điện trở?

Nhiệt điện trở được đánh giá theo giá trị điện trở của chúng ở nhiệt độ phòng (25 ° C). Nhiệt điện trở là một thiết bị điện trở thụ động, vì vậy nó yêu cầu sản xuất giám sát điện áp đầu ra hiện tại. Theo quy luật, chúng được mắc nối tiếp với các bộ ổn định phù hợp tạo thành một bộ chia điện áp chính.

Thí dụ: Hãy xem xét một nhiệt điện trở có giá trị điện trở là 2,2K ở 25 ° C và 50 ohms ở 80 ° C. Nhiệt điện trở mắc nối tiếp với điện trở 1 kΩ qua nguồn điện 5 V.

Do đó, điện áp đầu ra của nó có thể được tính như sau:

Ở 25 ° C, RNTC = 2200 ohms;

Ở 80 ° C, RNTC = 50 ohms;

Tuy nhiên, điều quan trọng cần lưu ý là ở nhiệt độ phòng, các giá trị điện trở tiêu chuẩn khác nhau đối với các nhiệt điện trở khác nhau, vì chúng không tuyến tính. Một nhiệt điện trở có sự thay đổi nhiệt độ theo cấp số nhân, và do đó là hằng số beta, được sử dụng để tính điện trở của nó đối với một nhiệt độ nhất định. Điện áp đầu ra điện trở và nhiệt độ có quan hệ tuyến tính với nhau.

Các tính năng của giao diện dòng điện hai dây trong cảm biến nhiệt độ LMT01

Quả sung. 4. Tổ chức giao diện hiện tại với LMT01

Như đã đề cập ở trên, để truyền kết quả đo, LMT01 tạo ra một chuỗi bit dưới dạng xung đếm hiện tại. Đối với điều này, cảm biến chỉ yêu cầu hai dây dẫn (Hình 4). Để chuyển đổi các xung dòng điện thành dạng quen thuộc với các vi mạch kỹ thuật số, trong một số trường hợp, bạn có thể sử dụng một điện trở duy nhất (nhưng không phải lúc nào cũng vậy - thêm thông tin bên dưới).

Sau khi khởi động, LMT01 bắt đầu một chu kỳ đo lên đến 54 ms (Hình 5). Trong thời gian này, dòng điện mức thấp 28 ... 39 μA được hình thành ở đầu ra cảm biến. Tiếp theo là chu kỳ chuyển kết quả đo dưới dạng xung dòng điện với biên độ 112 ... 143 μA. Bộ vi điều khiển nhận phải đếm các xung này, ví dụ bằng cách sử dụng bộ đếm / bộ định thời được tích hợp sẵn. Vì tần số của tín hiệu là khoảng 82 ... 94 kHz, nên với số lượng xung tối đa (4095), thời lượng truyền có thể đạt 50 ms.

Quả sung. 5. Sơ đồ thời gian hoạt động của cảm biến LMT01

Bằng số xung đếm được (PC), giá trị nhiệt độ có thể được xác định theo công thức 1:

, (1)

Như vậy, ở 0 ° C, cảm biến sẽ tạo ra khoảng 800 xung.

Thật không may, không phải lúc nào cũng có thể sử dụng một điện trở bên ngoài do giới hạn về điện áp giảm tối thiểu trên cảm biến LMT01. Trong chu kỳ đo, độ sụt trên cảm biến ít nhất phải là 2,15 V. Trong chu kỳ truyền dữ liệu, điện áp có thể giảm xuống 2 V. Không khó để thực hiện một số tính toán sơ bộ.

Xét một thiết bị có điện áp cung cấp Vdd = 3,3 V. Nếu chúng ta lấy mức sụt giảm tối thiểu cho phép trên cảm biến bằng 2,15 V trong chu kỳ đo, thì tín hiệu không lớn hơn 1,15 V trên điện trở. Đối với hầu hết các điện trở bộ điều khiển, đơn vị logic là 0, 7 ∙ Vdd, đối với trường hợp của chúng ta sẽ là 2,31 V. Do đó, việc sử dụng một điện trở đơn giản hóa ra là không thể, vì bộ vi điều khiển đơn giản sẽ không "nhìn thấy" tín hiệu của một đơn vị lôgic. Cách giải quyết tình huống này có thể là sử dụng vi điều khiển có tích hợp bộ so sánh hoặc các mạch chuyển đổi mức.

Cảm biến nhiệt độ điện trở

Cảm biến điện trở nhiệt độ (RTD) được làm bằng kim loại hiếm, chẳng hạn như bạch kim, có điện trở thay đổi theo nhiệt độ.

Đầu báo nhiệt độ điện trở có hệ số nhiệt độ dương và, không giống như nhiệt điện trở, cung cấp độ chính xác của phép đo nhiệt độ cao. Tuy nhiên, chúng có độ nhạy kém. Pt100 là cảm biến có sẵn rộng rãi nhất với giá trị điện trở tiêu chuẩn là 100 ôm ở 0 ° C. Nhược điểm chính là chi phí cao.

Ưu điểm của các cảm biến như vậy

  • Phạm vi nhiệt độ rộng từ -200 đến 650 ° C
  • Cung cấp đầu ra hiện tại thả cao
  • Tuyến tính hơn so với cặp nhiệt điện và RTD

Các thành phần bổ sung và mạch cảm biến

Ngoài các thiết bị diode chính, mạch cảm biến nhiệt độ bao gồm một số phần tử bổ sung. Trước hết, nó là một tụ điện bảo vệ thiết bị khỏi các tác động bên ngoài. Thực tế là bộ khuếch đại hoạt động rất nhạy cảm với các tác động của trường điện từ xoay chiều. Tụ điện loại bỏ sự phụ thuộc này bằng cách đưa vào phản hồi âm.

Mạch cảm biến nhiệt độ

Với sự tham gia của một bóng bán dẫn và một diode zener, một điện áp chuẩn ổn định được hình thành. Ở đây, các điện trở có cấp chính xác cao hơn được sử dụng với giá trị thấp của hệ số nhiệt độ của điện trở. Do đó, toàn bộ chương trình đạt được sự ổn định bổ sung. Trong trường hợp có thể có những thay đổi đáng kể về điều kiện nhiệt độ, có thể bỏ qua các điện trở chính xác. Chúng chỉ được sử dụng để kiểm soát quá nhiệt nhỏ.

Cặp nhiệt điện

Cảm biến nhiệt độ cặp nhiệt điện được sử dụng phổ biến nhất vì chúng chính xác, hoạt động trong một phạm vi nhiệt độ rộng từ -200 ° C đến 2000 ° C và tương đối rẻ. Một cặp nhiệt điện có dây và phích cắm trong ảnh dưới đây:

Hoạt động cặp nhiệt điện

Một cặp nhiệt điện được làm bằng hai kim loại không giống nhau được hàn lại với nhau để tạo ra hiệu điện thế theo nhiệt độ. Từ sự chênh lệch nhiệt độ giữa hai điểm nối, một hiệu điện thế được tạo ra dùng để đo nhiệt độ. Hiệu điện thế giữa hai điểm nối được gọi là hiệu ứng Seebeck.

Nếu cả hai hợp chất ở cùng nhiệt độ, khả năng chênh lệch trong các hợp chất khác nhau bằng 0, tức là V1 = V2. Tuy nhiên, nếu các điểm nối ở nhiệt độ khác nhau, điện áp đầu ra so với chênh lệch nhiệt độ giữa hai điểm nối sẽ bằng hiệu số V1 - V2 của chúng.

Các loại cảm biến nhiệt độ

Cơ điện tử

Loại bộ điều chỉnh đơn giản và rẻ tiền nhất. Bộ phận làm việc chính của nó là một tấm kim loại đặc biệt phản ứng với sự tăng hoặc giảm nhiệt độ. Hệ thống được bật và tắt bằng cách thay đổi độ cong của tấm trong quá trình làm nóng và làm mát. Đặt giá trị nhiệt độ chính xác trên bộ điều chỉnh như vậy sẽ không hoạt động.

Điện tử

Thiết bị có một phần tử đặc biệt tạo ra một tín hiệu đặc biệt. Công suất phụ thuộc trực tiếp vào các giá trị của nhiệt độ môi trường xung quanh. Trên các thiết bị như vậy, bạn có thể đặt các chỉ số nhiệt độ sưởi ấm chính xác lên đến một phần nhỏ của độ. Hệ thống được điều khiển bằng các nút bấm và một màn hình nhỏ.

Có thể lập trình

Đắt nhất trong số các nguyên tố nhiệt. Trên đó, bạn có thể đặt các giá trị nhất định, khi cơ quan quản lý bật hoặc tắt toàn bộ hệ thống. Nhờ thiết bị, một vi khí hậu được tạo ra trong phòng phù hợp với một người cụ thể. Có thể cấu hình bộ điều nhiệt để hệ thống được bật vào một thời điểm cụ thể. Tức là, các tầng được sưởi ấm trước khi chủ nhân về ở, đồng thời điện không bị tiêu thụ khi không có chủ.

Nhiều mẫu có thiết kế sáng sủa và thời trang cùng màn hình LCD hiển thị thông tin và tạo điều kiện cho việc tinh chỉnh.

Làm việc với các thư viện làm sẵn

Vì vậy, để làm việc với cảm biến nhiệt độ DS18B20 trên mạng, bạn có thể tìm thấy một số lượng lớn các thư viện, nhưng theo quy luật, hai trong số các thư viện phổ biến nhất được sử dụng. Nó là một thư viện và một thư viện. Hơn nữa, thư viện thứ hai là một tiện ích bổ sung thuận tiện hơn so với thư viện thứ nhất và không thể được sử dụng nếu không có nó. Nói cách khác, trước khi kết nối thư viện DallasTempeosystem.h, bạn cũng phải kết nối OneWire.h. Có thể cài đặt một số thư viện nhất định trong Arduino IDE.

Thư viện OneWire.h

Đầu tiên chúng ta hãy xem xét làm việc với thư viện OneWire.h. Dưới đây là danh sách các chức năng của nó với một mô tả ngắn gọn.

  • Nhiệt độ OneWireSensor (uint8_t pinNumber)

Hàm này là một phương thức khởi tạo của lớp OneWire và tạo ra một đối tượng Nhiệt độ, tức là mở kênh giao tiếp với một cảm biến hoặc một nhóm cảm biến trên chân pinNumber. Trong các ví dụ của chúng tôi (Hình 3-5), đây là chân “D2” của Arduino Nano. Chính vì vậy chúng tôi đã kết nối bus dữ liệu DQ DS18B20.

Thí dụ:

Nhiệt độ OneWireSensor
(
D2
);
// Một cảm biến hoặc một nhóm cảm biến được kết nối với chân D2

  • uint8_t tìm kiếm (addrArray)

Hàm tìm kiếm thiết bị tiếp theo trên bus 1-Wire và khi tìm thấy nó, nhập giá trị địa chỉ vào mảng addrArray, trả về true. Vì địa chỉ duy nhất của mỗi cảm biến là 64-bit, nên addrArray phải có kích thước 8 byte. Nếu tìm kiếm không thành công, hàm trả về false. Cần lưu ý rằng khi một số cảm biến nhiệt độ được kết nối với một bus, mỗi lệnh gọi đến chức năng tìm kiếm sẽ được gửi đến cảm biến tiếp theo, rồi đến cảm biến tiếp theo, v.v., cho đến khi tất cả các thiết bị trên bus được liệt kê. Đặc thù của chức năng này là ghi nhớ các địa chỉ đã được xử lý. Để đặt lại hàng đợi, bạn cần gọi hàm reset_search (), sẽ được thảo luận bên dưới.

Thí dụ:

byte addrArray
[
8
];
// Mảng lưu trữ địa chỉ 64 bit // Nếu thiết bị không có trên bus hoặc tất cả các thiết bị đều được liệt kê // hiển thị thông tin tương ứng trong port monitor
nếu(!
nhiệt độ
.
Tìm kiếm
(
addrArray
))
Nối tiếp
.
println
(
"Không còn địa chỉ."
);
// Ngược lại, nếu thiết bị tiếp theo phản hồi yêu cầu hiện diện, // hiển thị địa chỉ 64-bit của nó trong bộ giám sát cổng
khác{cho(
Tôi
=
0
;
Tôi
<
8
;
Tôi
++)
Nối tiếp
.
in
(
addrArray
[
Tôi
],
HEX
);
}

  • vô hiệureset_search ()

Như đã đề cập ở trên, chức năng này đặt lại hàng đợi thăm dò của các thiết bị trên bus 1-Wire về lúc ban đầu. Nó phải luôn được sử dụng cùng với hàm tìm kiếm khi hàm này trả về false. Ví dụ, trong trường hợp của chúng ta với 5 cảm biến trên xe buýt, bằng cách gọi hàm tìm kiếm 5 lần, chúng ta có thể nhận được 5 địa chỉ. Lần thứ sáu, chức năng tìm kiếm sẽ trả về false cho chúng ta và sẽ thực hiện điều này với mỗi cuộc thăm dò tiếp theo cho đến khi hàng đợi được xóa. Bạn nên chú ý điều này để tránh những trường hợp khó hiểu.

Thí dụ:

byte addrArray
[
8
];
// Mảng lưu trữ địa chỉ 64 bit // Nếu thiết bị không có trên bus hoặc tất cả các thiết bị được liệt kê // đặt lại hàng đợi thăm dò để lặp lại chu trình tìm kiếm
nếu(!
nhiệt độ
.
Tìm kiếm
(
addrArray
))
nhiệt độ
.
reset_search
();

  • uint8_tcài lại ()

Chức năng đặt lại 1 dây bắt đầu quá trình giao tiếp. Nó được gọi mỗi khi chúng ta muốn giao tiếp với cảm biến nhiệt độ. Giá trị trả về có thể đúng hoặc sai. Chúng tôi sẽ nhận được giá trị thực nếu ít nhất một cảm biến trên bus phản hồi để thiết lập lại bằng một xung hiện diện. Nếu không, chúng tôi nhận được sai;

Thí dụ:
nếu(!
nhiệt độ
.
cài lại
())
Nối tiếp
.
println
(
"Không có cảm biến trên xe buýt"
);khác
Nối tiếp
.
println
(
"Cảm biến được phát hiện"
);

  • vô hiệuchọn (addrArray)

Chức năng này cho phép bạn chọn một thiết bị cụ thể mà chúng tôi muốn làm việc tại thời điểm này. Sự lựa chọn được thực hiện bằng cách chỉ định rõ ràng địa chỉ 64 bit được nhập vào mảng addrArray. Địa chỉ có thể được đặt một cách rõ ràng bằng cách viết nó trong một mảng hoặc sử dụng địa chỉ mà hàm tìm kiếm đã đọc trước đó. Cần lưu ý rằng phải gọi hàm reset trước khi gọi hàm select. Với lần đặt lại tiếp theo, kết nối với cảm biến đã chọn sẽ bị hỏng cho đến khi có cuộc gọi tiếp theo để chọn.
Thí dụ:
byte addrArray
[
8
];
// Mảng để lưu trữ địa chỉ 64 bit // Nếu thiết bị không có trên bus hoặc tất cả các thiết bị được liệt kê // xuất thông tin tương ứng đến cổng giám sát
nếu(!
nhiệt độ
.
Tìm kiếm
(
addrArray
))
Nối tiếp
.
println
(
"Không còn địa chỉ."
);
// Ngược lại, nếu thiết bị tiếp theo phản hồi yêu cầu hiện diện, // hãy chọn nó cho công việc tiếp theo
khác{
nhiệt độ
.
cài lại ()
;
// Đừng quên đưa ra lệnh thiết lập lại nhiệt độ cảm biến
.
chọn (addrArray)
;
// Chỉ định một mảng có địa chỉ đọc
}

  • vô hiệunhảy ()

Chức năng này chỉ phù hợp khi làm việc với một cảm biến trên xe buýt và chỉ cần bỏ qua việc lựa chọn thiết bị. Nói cách khác, bạn không thể sử dụng chức năng tìm kiếm và do đó nhanh chóng truy cập bằng cảm biến duy nhất của mình.

Thí dụ:
nhiệt độ.
cài lại
();
// Đặt lại lốp nhiệt độ
.
nhảy
();
// Chọn cảm biến duy nhất để làm việc thêm với nó

  • vô hiệuviết (uint8_tbyte, uint8_t powerType = 0)

Hàm gửi một byte dữ liệu đến thiết bị được chọn trên bus. Đối số powerType chỉ định loại nguồn cung cấp cho cảm biến (0 - cảm biến được cấp nguồn trực tiếp từ nguồn bên ngoài; 1 - kết nối cấp nguồn ký sinh được sử dụng). Tham số thứ hai có thể bị bỏ qua nếu sử dụng nguồn bên ngoài, vì nó là 0 theo mặc định.

Thí dụ:

nhiệt độ
.
cài lại
();
// Đặt lại lốp nhiệt độ
.
nhảy
();
// Chọn một cảm biến duy nhất cho công việc tiếp theo với nó // Gửi lệnh để chuyển đổi nhiệt độ, // sử dụng kết nối với nguồn ký sinh từ bus dữ liệu nhiệt độ
.
viết
(
0x44
,
1
);

  • uint8_tđọc ()

Chức năng này đọc một byte dữ liệu do thiết bị phụ (cảm biến) gửi đến bus 1-Wire.

Thí dụ:

// Đọc 9 byte dữ liệu từ bus 1-Wire và đưa kết quả vào mảng byte mảng
[
9
];cho(
uint8_t tôi
=
0
;
Tôi
<
9
;
Tôi
++){
mảng
[
Tôi
]=
nhiệt độ
.
đọc
();}

  • uint8_t tĩnh crc8 (const uint8_t * addr, uint8_t len);

Hàm được thiết kế để tính toán tổng kiểm tra. Được thiết kế để kiểm tra giao tiếp chính xác với cảm biến nhiệt độ. Ở đây addr là một con trỏ đến mảng dữ liệu và len là số byte.

Thí dụ:

byte addrArray
[
8
];
// Mảng để lưu trữ địa chỉ 64 bit // Nếu thiết bị không có trên bus hoặc tất cả các thiết bị được liệt kê // xuất thông tin tương ứng đến cổng giám sát
nếu(!
nhiệt độ
.
Tìm kiếm
(
addrArray
))
Nối tiếp
.
println
(
"Không còn địa chỉ."
);
// Ngược lại, nếu thiết bị tiếp theo phản hồi yêu cầu hiện diện, // kiểm tra tổng kiểm tra địa chỉ của nó
khác{
// Nếu tổng kiểm tra không khớp, hiển thị thông báo lỗi
nếu(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Nối tiếp
.
println
(
"CRC không hợp lệ!"
);}}
Chúng tôi đã kiểm tra từng chức năng của thư viện OneWire.h riêng biệt và để sửa chữa tài liệu, dưới đây tôi sẽ đưa ra một bản phác thảo để đọc nhiệt độ từ một nhóm cảm biến nhiệt độ DS18B20, sẽ được kết nối với chân D2 bằng mạch nguồn ký sinh. Bản phác thảo sẽ có các nhận xét chi tiết về tất cả các điểm cần thiết.

#include // Chúng tôi kết nối thư viện để làm việc với cảm biến nhiệt DS18B20OneWire ds
(
2
);
// Một cảm biến hoặc một nhóm cảm biến được kết nối với chân D2 của Arduino // CHỨC NĂNG PRESET void setup
(
vô hiệu
){
Nối tiếp
.
bắt đầu
(
9600
);
// Khởi tạo công việc với Serial-port} // Vòng lặp void CHÍNH XÁC
(
vô hiệu
){
byte tôi
;
// Biến phụ cho các vòng lặp hiện tại byte
=
0
;
// Biến để xác định mức độ sẵn sàng của cảm biến đối với type_s byte truyền thông
;
// Biến để xác định loại cảm biến nhiệt trên bus dữ liệu byte
[
12
];
// Mảng lưu trữ thông tin nhận được từ trình bổ sung byte cảm biến
[
8
];
// Mảng để lưu trữ địa chỉ 64-bit của cảm biến float c
,
độ F
;
// Các biến để tính toán nhiệt độ // Nếu không tìm thấy thiết bị trên bus hoặc liệt kê tất cả các thiết bị trên bus // hiển thị thông tin tương ứng trong cổng giám sát, đặt lại hàng đợi // và thực hiện tìm kiếm lại, đợi 250ms
nếu(!
ds
.
Tìm kiếm
(
addr
)){
Nối tiếp
.
println
(
"Không còn địa chỉ."
);
Nối tiếp
.
println
();
ds
.
reset_search
();
sự chậm trễ
(
250
);trở về;}
// Nếu thiết bị tiếp theo trên bus được tìm thấy, hãy hiển thị địa chỉ duy nhất của nó // trong màn hình cổng trong hex Serial
.
in
(
"ROM ="
);cho(
Tôi
=
0
;
Tôi
<
8
;
Tôi
++){
Nối tiếp
.
viết
(
‘ ‘
);
Nối tiếp
.
in
(
addr
[
Tôi
],
HEX
);}
// Kiểm tra tổng kiểm tra địa chỉ của thiết bị tìm thấy // và nếu nó không khớp, hiển thị thông tin tương ứng
nếu(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Nối tiếp
.
println
(
"CRC không hợp lệ!"
);trở về;}
Nối tiếp
.
println
();
// Kiểm tra byte 0 của địa chỉ chứa thông tin // về một loại cảm biến nhiệt độ cụ thể. Tùy thuộc vào giá trị của byte // 0, chúng tôi hiển thị chuỗi của chip trong màn hình cổng. Nếu byte 0 chứa giá trị // không xác định, chúng tôi hiển thị thông báo về họ cảm biến nhiệt độ không xác định.
công tắc điện(
addr
[
0
]){trường hợp
0x10
:
Nối tiếp
.
println
(
"Chip = DS18S20"
);
type_s
=
1
;phá vỡ;trường hợp
0x28
:
Nối tiếp
.
println
(
"Chip = DS18B20"
);
type_s
=
0
;phá vỡ;trường hợp
0x22
:
Nối tiếp
.
println
(
"Chip = DS1822"
);
type_s
=
0
;phá vỡ;mặc định:
Nối tiếp
.
println
(
"Thiết bị không phải là thiết bị gia đình DS18x20."
);trở về;}
ds
.
cài lại
();
// Đặt lại bus để khởi tạo ds trao đổi dữ liệu
.
lựa chọn
(
addr
);
// Chọn cảm biến có địa chỉ hiện tại để làm việc với nó // Gửi lệnh chuyển đổi nhiệt độ (theo tài liệu 0x44) // Đừng quên tham số thứ hai "1", vì chúng ta đang truyền dữ liệu qua / / dòng với nguồn điện ký sinh. ds
.
viết
(
0x44
,
1
);
// Bộ cảm biến bắt đầu chuyển đổi, theo tài liệu thì lấy giá trị tối đa. 750ms // Để ở mức an toàn, chúng tôi sẽ tổ chức tạm dừng độ trễ ё giây
(
1000
);
// Đặt lại bus lần nữa để đọc thông tin từ cảm biến // lưu phản hồi của hàm reset () vào biến hiện tại để làm việc thêm với biến hiện tại
=
ds
.
cài lại
();
ds
.
lựa chọn
(
addr
);
// Chọn lại cảm biến theo địa chỉ của nó, vì đã có xung reset // Lệnh 0xBE theo tài liệu kỹ thuật cho phép đọc // bộ nhớ trong của cảm biến nhiệt độ (Scratchpad) gồm 9 byte. ds
.
viết
(
0xBE
);
// Đọc và hiển thị 9 byte từ bộ nhớ trong của cảm biến nhiệt độ Nối tiếp đến màn hình cổng
.
in
(
"Dữ liệu ="
);
Nối tiếp
.
in
(
hiện tại
,
HEX
);
Nối tiếp
.
in
(
» «
);cho(
Tôi
=
0
;
Tôi
<
9
;
Tôi
++){
dữ liệu
[
Tôi
]=
ds
.
đọc
();
Nối tiếp
.
in
(
dữ liệu
[
Tôi
],
HEX
);
Nối tiếp
.
in
(
» «
);}
// Kiểm tra và xuất ra cổng giám sát tổng kiểm tra của dữ liệu nhận được Nối tiếp
.
in
(
"CRC ="
);
Nối tiếp
.
in
(
OneWire
::
crc8
(
dữ liệu
,
8
),
HEX
);
Nối tiếp
.
println
();
// Bắt đầu quá trình chuyển đổi dữ liệu nhận được thành nhiệt độ thực tế, // được lưu trong bộ nhớ đọc 0 và 1 byte. Để làm điều này, chúng tôi kết hợp hai // byte này thành một số 16 bit int16_t raw
=(
dữ liệu
[
1
]<<
8
)|
dữ liệu
[
0
];
// Trước khi chuyển đổi thêm, bạn cần xác định họ mà // cảm biến này thuộc về (trước đó chúng ta đã lưu kết quả trong biến type_s). // Tùy thuộc vào họ, nhiệt độ sẽ được tính toán khác nhau, // vì DS18B20 và DS1822 trả về giá trị 12 bit, trong khi DS18S20 trả về giá trị 9 bit
nếu(
type_s
){
// Nếu cảm biến thuộc họ thô DS18S20
=
thô
<<
3
;
// độ phân giải mặc định là 9 bit
nếu(
dữ liệu
[
7
]==
0x10
){
thô
=(
thô
&
0xFFF0
)+
12

dữ liệu
[
6
];}}khác{
// Xác định độ chính xác của phép đo mà cảm biến này được cấu hình byte cfg
=(
dữ liệu
[
4
]&
0x60
);
// Ở độ phân giải thấp hơn, bạn có thể không có các bit quan trọng nhất, // vì chúng không được xác định sớm
nếu(
cfg
==
0x00
)
thô
=
thô
&~
7
;
// 9 bit (chuyển đổi mất 93,75 ms)
khácnếu(
cfg
==
0x20
)
thô
=
thô
&~
3
;
// 10 bit (chuyển đổi mất 187,5 mili giây)
khácnếu(
cfg
==
0x40
)
thô
=
thô
&~
1
;
// 11 bit (chuyển đổi mất 375 mili giây) // Độ chính xác mặc định là 12 bit (chuyển đổi mất 750 mili giây)
}
// Tính toán và xuất giá trị nhiệt độ ra màn hình cổng c
=(
Phao nổi
)
thô
/
16.0
;
độ F
=
độ c
*
1.8
+
32.0
;
Nối tiếp
.
in
(
"Nhiệt độ ="
);
Nối tiếp
.
in
(
độ c
);
Nối tiếp
.
in
(
"Độ C"
);
Nối tiếp
.
in
(
độ F
);
Nối tiếp
.
println
(
"Độ F"
);}
Nếu mọi thứ được thực hiện chính xác, thì trong cửa sổ giám sát cổng, chúng ta sẽ thấy một cái gì đó như sau (Hình 6):

Hình 6 - kết quả làm việc với thư viện OneWire.h

Thư viện DallasTempentic.h

Thư viện này dựa trên thư viện trước đó và đơn giản hóa quá trình lập trình một chút do các chức năng dễ hiểu hơn. Sau khi cài đặt, bạn sẽ có quyền truy cập vào 14 ví dụ về mã được ghi chép đầy đủ cho tất cả các trường hợp. Trong khuôn khổ bài viết này, một ví dụ về hoạt động với một cảm biến sẽ được xem xét.

Kết quả của chương trình được thể hiện trong Hình 7

Hình №7 - kết quả của việc đọc nhiệt độ bằng thư viện DallasTempentic.h

// Chúng tôi kết nối các thư viện cần thiết # include #include // Chúng tôi kết nối bus dữ liệu với chân số 2 của Arduino # xác định ONE_WIRE_BUS 2 // Tạo một thể hiện của lớp cho bus của chúng tôi và liên kết tới nó OneWire oneWire
(
ONE_WIRE_BUS
);
Cảm biến nhiệt độ Dallas
(&
oneWire
);
// Thiết lập void PRESET FUNCTION
(
vô hiệu
){
Nối tiếp
.
bắt đầu
(
9600
);
// Khởi tạo các cảm biến cổng nối tiếp
.
bắt đầu
();
// Khởi tạo xe buýt
}
// CHU KỲ CHÍNH
(
vô hiệu
){
Nối tiếp
.
in
(
"Đọc Nhiệt độ ..."
);
// Gửi lệnh để đọc các cảm biến
.
requestTempe Nhiệt độ
();
Nối tiếp
.
println
(
"Đọc"
);
Nối tiếp
.
in
(
"Nhiệt độ cảm biến 1:"
);
// Hiển thị giá trị nhiệt độ Nối tiếp
.
in
(
cảm biến
.
getTempCByIndex
(
0
));}

Cảm biến nhiệt độ KY-001 với giao diện 1 dây

Cảm biến này được sử dụng để đo nhiệt độ chính xác. Giao tiếp với cảm biến được thực hiện thông qua giao diện 1-Wire [1-2], cho phép bạn kết nối một số thiết bị tương tự với bảng Arduino bằng cách sử dụng một chân vi điều khiển [3-4]. Mô-đun dựa trên vi mạch ds18b20 [5].

Kích thước mô-đun 24 x 15 x 10 mm, trọng lượng 1,3 g. Một đầu nối ba chân được sử dụng để kết nối. Tiếp điểm trung tâm - nguồn điện + 5V, tiếp điểm "-" - chung, tiếp điểm "S" - thông tin.

Bảng có một đèn LED màu đỏ sáng khi thông tin đang được trao đổi.

Dòng tiêu thụ 0,6 mA trong quá trình trao đổi thông tin và 20 μA ở chế độ chờ.

Việc kết nối loại cảm biến này với Arduino được mô tả kỹ trong nhiều nguồn [6-8]. Trong trường hợp này, những ưu điểm chính của Arduino một lần nữa được thể hiện - tính linh hoạt và sự hiện diện của một lượng lớn thông tin tham khảo. Để làm việc với cảm biến, bạn sẽ cần Thư viện OneWire [9]. Sau khi tải chương trình từ [8] (có lỗi trong phiên bản đầu tiên của chương trình - không có kết nối thư viện #include trong tiêu đề mã), thông tin sau có thể được quan sát trong trình giám sát cổng nối tiếp.

Tác giả cũng đã kiểm tra mã từ [7], mọi thứ hoạt động ngay lập tức, trong màn hình cổng nối tiếp bạn có thể đọc thông tin về loại cảm biến được kết nối và dữ liệu nhiệt độ thực tế.

Nói chung, một cảm biến rất hữu ích giúp bạn có thể làm quen với giao diện 1-Wire trong thực tế. Cảm biến cho dữ liệu nhiệt độ chính xác ngay lập tức, người dùng không cần hiệu chỉnh.

Xếp hạng
( 1 ước tính, trung bình 4 của 5 )

Máy sưởi

Lò nướng