Mô-đun MAX6675 đi kèm với cặp nhiệt điện loại K cùng với trình điều khiển và bộ khuếch đại được sử dụng để đo nhiệt độ trong phạm vi từ 0 ° C đến 1024 ° C. Đây là một trong những lựa chọn lý tưởng để đo các chỉ số nhiệt độ cao hơn mà các cảm biến nhiệt độ khác như LM35 và các cảm biến khác. Mô-đun này bao gồm chip MAX6675 đo nhiệt độ thông qua cặp nhiệt điện loại K. Mô-đun sử dụng giao diện SPI để giao tiếp với vi điều khiển và truyền số đọc nhiệt độ đầu ra.
Dưới đây bạn có thể xem thông số kỹ thuật của mô-đun này:
Độ phân giải 12 bit
Độ chính xác của 8 LSB
Độ phân giải 0,25 °C
Điện áp hoạt động là 5V
Hoạt động hiện tại là 50mA
Cặp nhiệt điện được làm bằng hai dây vật liệu khác nhau. Một đầu của các dây này được kết nối với nhau để tạo ra mối nối. Mối nối này được đặt trong môi trường hoặc đối tượng cụ thể có nhiệt độ mà chúng ta muốn đo. Khi nhiệt độ thay đổi thì hai vật liệu khác nhau bắt đầu biến dạng, kết quả là điện trở bị thay đổi. Trên thực tế, đầu ra của nó là một tín hiệu millivolt có điện áp bị thay đổi khi điện trở thay đổi. Sự thay đổi điện áp này có thể được đo lường dễ dàng với sự trợ giúp của cặp nhiệt điện.
Nguyên lý hoạt động của Cặp nhiệt điện dựa trên hiệu ứng Seebect. Theo Seebeck, khi hai kim loại khác nhau được kết nối với nhau để tạo ra hai điểm nối thì lực điện động sẽ được phát triển tại hai điểm nối. Lượng lực này sẽ khác nhau với sự kết hợp vật liệu kim loại.
Theo hình trên, hai kim loại khác nhau như kim loại A và B được kết nối với nhau để tạo thành hai điểm nối. Chúng được gọi là 'kết thúc đo lường' và 'kết thúc tham chiếu'. Hãy nhớ rằng, hai điểm nối là cần thiết để tạo ra bất kỳ cặp nhiệt điện. Nhiệt độ của đầu tham chiếu đã biết nhưng đầu đo không rõ. Khi nhiệt độ không xác định này kết thúc được đặt tại nơi mà chúng ta muốn đo nhiệt độ. Trong điều kiện này, nếu cả hai đầu sẽ ở cùng một mức nhiệt độ thì sẽ không có EMF nào được tạo ra. Vì vậy, dòng điện ròng trong toàn bộ mạch cũng sẽ bằng không.
Tương tự, nếu cả hai đầu đều ở các mức nhiệt độ khác nhau thì EMF sẽ tạo ra và dòng điện cũng sẽ chạy trong toàn bộ mạch. Giá trị của EMF hoặc dòng điện này cũng phụ thuộc vào vật liệu kim loại cặp nhiệt điện cũng như nhiệt độ của cả hai đầu. Bằng cách đo giá trị của dòng điện hoặc EMF này, người dùng có thể dễ dàng tìm ra nhiệt độ của địa điểm cụ thể đó.
Có tám loại cặp nhiệt điện khác nhau hiện có trên thị trường liên quan đến vật liệu của chúng. Chúng tôi sử dụng K Type Thermocouple với mô-đun MAX6675. Những cặp nhiệt điện loại K này (Niken-Crom / Niken-Alumel) ít tốn kém hơn, chính xác hơn, đáng tin cậy hơn và là cặp nhiệt điện loại phổ biến nhất. Nó có một phạm vi nhiệt độ rộng như –454 đến 2,300F.
Sơ đồ dưới đây cho thấy sơ đồ chân của mô-đun MAX6675:
Nó bao gồm tổng cộng 7 chân trong đó hai chân được sử dụng để kết nối các dây dẫn dương và âm của cặp nhiệt điện, ba cho giao diện SPI và hai cho nguồn điện và mặt đất.
Tên pin |
Chức năng |
GND · |
Đây là chân nối đất của mô-đun. |
VCC |
Đây là chân VCC dùng để cấp nguồn cho module trong khoảng 3-5.5V |
SCK · |
Đây là chân đồng hồ SPI. |
.CS |
Đây là pin chọn Chip SPI. |
So |
Đây là chân đầu ra nối tiếp (dữ liệu ra). |
Cặp nhiệt điện + (TH +) |
Đây là nơi chúng tôi sẽ kết nối dây dẫn dương của cặp nhiệt điện. |
Cặp nhiệt điện- (TH-) |
Đây là nơi chúng tôi sẽ kết nối dây dẫn âm của cặp nhiệt điện. |
Chúng tôi sẽ yêu cầu các thành phần sau cho dự án này.
Các thành phần bắt buộc:
Bảng mạch ESP8266 NodeMCU
Mô-đun MAX6675 với cặp nhiệt điện
Dây kết nối
Lắp ráp các thiết bị như thể hiện trong sơ đồ sơ đồ dưới đây:
Chúng tôi sẽ kết nối 5 chân của mô-đun MAX6675 với ESP8266. Chúng bao gồm các chân VCC, GND, SCK, CS và SO hiện diện ở cùng một phía. VCC sẽ được kết nối với chân 3.3V từ ESP8266. GND của cả hai thiết bị sẽ là điểm chung. Các chân SPI GPIO mặc định của ESP8266 đang được sử dụng để kết nối với từng thiết bị đầu cuối SPI còn lại của mô-đun MAX6675. Hình dưới đây cho thấy các chân SPI mặc định của ESP8266.
Bảng dưới đây cho thấy các kết nối giữa hai thiết bị:
MAX6675 · |
ESP8266 · |
VCC |
3.3V |
GND · |
GND · |
SCK · |
D5 (GPIO14) · |
.CS |
D8 (GPIO15) · |
SO |
D7 (GPIO13) · |
Bây giờ hãy làm theo các kết nối giữa hai thiết bị và kết nối chúng cho phù hợp. Chúng tôi đã sử dụng các kết nối tương tự như đã chỉ định ở trên. Tất cả các thiết bị sẽ có căn cứ chung.
Cặp nhiệt điện sẽ được kết nối tại các thiết bị đầu cuối TH + và TH-.
Chúng tôi có một thư viện Arduino cho MAX6675 có thể dễ dàng sử dụng để nhận các giá trị nhiệt độ. Bây giờ hãy xem cách cài đặt thư viện MAX6675. Thư viện này được cung cấp bởi Adafruit.
Để cài đặt thư viện, chúng tôi sẽ sử dụng Trình quản lý thư viện Arduino. Mở Arduino IDE của bạn và đi tới Sketch > Bao gồm thư viện > Quản lý thư viện. Nhập 'max6675' vào thanh tìm kiếm và cài đặt phiên bản mới nhất.
Mở Arduino IDE của bạn và đi tới Tệp > Mới. Một tệp mới sẽ mở ra. Sao chép mã được cung cấp bên dưới trong tệp đó và lưu nó.
Mã này sẽ sử dụng thư viện max6675.h do Adafruit cung cấp. Chúng tôi sẽ hiển thị nhiệt độ (độ C) trong Màn hình nối tiếp.
#include "max6675.h"
int SO = D7;
int CS = D8;
int sck = D5;
MAX6675 module(sck, CS, SO);
void setup() {
Serial.begin(115200);
}
void loop() {
float temperature = module.readCelsius();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(F("°C "));
delay(1000);
}
Chúng tôi sẽ bắt đầu bằng cách bao gồm thư viện MAX6675 mà chúng tôi đã cài đặt trước đó.
#include "max6675.h"
Sau đó, chúng tôi sẽ tạo ba biến số nguyên, mỗi biến để giữ các chân ESP8266 được kết nối với các chân SPI: SO, SCK và CS. Chúng tôi đã sử dụng chân SPI mặc định ESP8266.
int SO = D7;
int CS = D8;
int sck = D5;
Tiếp theo chúng ta sẽ tạo một instance của MAX6675 được gọi là module() và truyền các biến sck, CS và SO làm tham số bên trong nó.
MAX6675 module(sck, CS, SO);
Bên trong hàm setup(), chúng ta sẽ khởi tạo giao tiếp nối tiếp với tốc độ truyền là 115200.
void setup() {
Serial.begin(115200);
}
Bên trong hàm loop(), trước tiên chúng ta sẽ thu được nhiệt độ bằng phương thức readCelsius() trên instance module và lưu số đọc trong một biến float gọi là 'temperature'. Điều này sẽ được in trong màn hình nối tiếp cùng với thiết bị của nó sau mỗi 1 giây.
void loop() {
float temperature = module.readCelsius();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(F("°C "));
delay(1000);
}
Đảm bảo rằng bạn chọn đúng bảng và cổng COM trước khi tải mã của mình lên bảng. Đi tới Bảng > Công cụ và chọn NodeMCU 1.0. Tiếp theo, đi tới Công cụ > Cổng và chọn cổng thích hợp mà qua đó bảng của bạn được kết nối.
Nhấp vào nút tải lên để tải mã lên bảng.
Sau khi bạn đã tải mã của mình lên bảng phát triển, hãy nhấn nút RST của nó.
Bây giờ hãy mở màn hình nối tiếp trong Arduino IDE, bạn sẽ thấy số đọc nhiệt độ được hiển thị sau mỗi giây.
Màn hình nối tiếp
Trong phần này, chúng ta sẽ xem cách hiển thị số đọc nhiệt độ của MAX6675 trên màn hình OLED SSD0 96.1306 bằng Arduino IDE và ESP8266.
Để sử dụng màn hình OLED trong dự án của chúng tôi, chúng tôi phải cài đặt thư viện OLED Adafruit SSD1306 trong Arduino IDE. Làm theo các bước dưới đây để cài đặt thành công.
Mở Arduino IDE và nhấp vào Sketch > Library > Manage Libraries. Nhập 'SSD1306' vào tab tìm kiếm và cài đặt thư viện Adafruit SSD1306 OLED.
Chúng tôi cũng sẽ yêu cầu thư viện Adafruit GFX là một phụ thuộc cho SSD1306. Nhập 'Adafruit GFX' vào tab tìm kiếm và cài đặt nó.
Phần này hướng dẫn cách kết nối bo mạch ESP8266 với MAX6675 và màn hình OLED. Thực hiện theo các kết nối như được mô tả trong hai bảng dưới đây.
Các bảng dưới đây cho thấy các thiết bị đầu cuối của ba thiết bị cần được kết nối với nhau.
Màn hình OLED |
ESP8266 · |
VCC |
3.3V |
GND · |
GND · |
SCL |
D1 (GPIO5) · |
SDA |
D2 (GPIO4) · |
Cặp nhiệt điện loại K MAX6675 |
ESP8266 · |
GND · |
GND · |
VCC |
3.3V |
.CS |
D8 (GPIO15) · |
Như vậy |
D7 (GPIO13) · |
SCK · |
D5 (GPIO14) · |
Lắp ráp mạch như thể hiện trong sơ đồ sơ đồ dưới đây:
Chúng tôi sẽ kết nối thiết bị đầu cuối VCC của màn hình OLED với 3.3V, điểm chung với bo mạch ESP8266 và MAX6675 VCC. SCL của màn hình sẽ được kết nối với chân SCL của bo mạch ESP8266 và SDA của màn hình sẽ được kết nối với SDA của ESP8266.
Sao chép mã sau vào Arduino IDE của bạn và tải nó lên ESP8266 sau khi lắp ráp sơ đồ mạch trên.
#include "max6675.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
int SO = D7;
int CS = D8;
int sck = D5;
MAX6675 module(sck, CS, SO);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
float temperature = module.readCelsius();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(F("°C "));
display.setTextSize(1);
display.setCursor(0,10);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,30);
display.print(temperature);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
display.display();
delay(1000);
display.clearDisplay();
}
Trước tiên, chúng tôi sẽ bao gồm tất cả các thư viện cần thiết cho MAX6675 cũng như màn hình OLED mà chúng tôi vừa cài đặt trước đó.
#include "max6675.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Sau đó, chúng tôi sẽ tạo ba biến số nguyên, mỗi biến để giữ các chân ESP8266 được kết nối với các chân SPI: SO, SCK và CS. Chúng tôi đã sử dụng các chân ESP8266 SPI mặc định.
int SO = D7;
int CS = D8;
int sck = D5;
Tiếp theo chúng ta sẽ tạo một instance của MAX6675 được gọi là module() và truyền các biến sck, CS và SO làm tham số bên trong nó.
MAX6675 module(sck, CS, SO);
Bây giờ, chúng ta sẽ tạo một đối tượng có tên là màn hình sẽ xử lý màn hình OLED và chỉ định chiều rộng, chiều cao, phiên bản I2C (&Dây) và -1 làm tham số bên trong nó.' -1 ′ chỉ định rằng màn hình OLED mà chúng ta đang sử dụng không có chân RESET. Nếu bạn đang sử dụng mã pin RESET thì hãy chỉ định GPIO mà qua đó bạn đang kết nối nó với bảng phát triển của mình.
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
Bên trong hàm setup(), chúng ta sẽ khởi tạo giao tiếp nối tiếp với tốc độ truyền là 115200.
Serial.begin(115200);
Hơn nữa, chúng tôi cũng sẽ khởi tạo màn hình OLED bằng cách sử dụng display.begin(). Đảm bảo bạn chỉ định địa chỉ chính xác của màn hình. Trong trường hợp của chúng tôi, nó là 0X3C.
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
Sau đó, chúng ta sẽ xóa buffer bằng cách sử dụng clearDisplay() trên đối tượng Adafruit_SSD1306. Ngoài ra, chúng tôi sẽ đặt màu của văn bản là màu trắng.
display.clearDisplay();
display.setTextColor(WHITE);
Bên trong hàm loop(), trước tiên chúng ta sẽ thu được nhiệt độ bằng phương thức readCelsius() trên instance module và lưu số đọc trong một biến float gọi là 'temperature'. Điều này sẽ được in trong màn hình nối tiếp cùng với thiết bị của nó sau mỗi 1 giây.
float temperature = module.readCelsius();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(F("°C "));
Hàm setTextSize() được sử dụng để thiết lập kích thước của phông chữ. Chúng tôi đã sử dụng kích thước thấp cho văn bản đơn giản như "Nhiệt độ" và phông chữ kích thước cao để hiển thị số đọc nhiệt độ thực tế. Phương thức setCursor() được xác định nơi chúng ta muốn hiển thị văn bản của mình trên 128×64 OLED. Cuối cùng, các hàm print() viết văn bản vào vị trí đã xác định. Chúng tôi sẽ hiển thị chỉ số nhiệt độ cập nhật cùng với thiết bị của nó trên màn hình OLED sau mỗi giây.
display.setTextSize(1);
display.setCursor(0,10);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,30);
display.print(temperature);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
display.display();
delay(1000);
display.clearDisplay();
Để xem trình diễn đoạn mã trên, hãy tải mã lên ESP8266. Tuy nhiên, trước khi tải mã lên, hãy đảm bảo chọn NodeMCU 1.0 từ Bảng > Công cụ và cũng chọn đúng cổng COM mà bo mạch được kết nối từ Công cụ > Cổng.
Sau khi mã được tải lên bảng, OLED sẽ bắt đầu hiển thị các chỉ số nhiệt độ theo độ C sau mỗi giây.