VBLUno kit - Tutorial 4 - Đo nhiệt độ bên trong chip nRF51822

Mô tả dự án: 

Bo mạch VBLUno sử dụng CPU là chip nRF51822 của hãng Nordic Semiconductor. Bên trong vi mạch này có tích hợp sẵn một cảm biến nhiệt độ. Chúng ta có thể sử dụng cảm biến này để giám sát nhiệt độ CPU (nRF51822), từ đó biết được mức tải làm việc của hệ thống, đưa ra các cảnh báo cần thiết khi tải làm việc quá cao. Điều này giúp hệ thống làm việc ổn định và bền bỉ hơn.

Nội dung trình bày

  • Cảm biến nhiệt độ bên trong chip nRF51822
  • Ví dụ đo nhiệt độ chip nRF51822 (trên VBLUno) với Arduino IDE

Cảm biến nhiệt độ bên trong chip nRF51822

Bên trong chip nRF51822 của Nordic có tích hợp sẵn một cảm biến nhiệt độ giúp đo nhiệt độ hoạt động của chip. Cảm biến này có độ chính xác là 0.25 độ C (1 đơn vị đo được tương ứng với 0.25 độ C).

Kết quả đo được không phải là nhiệt độ của môi trường xung quanh, mà là nhiệt độ bên trong con chip nRF51822 (CPU của bo mạch VBLUno)

Theo tài liệu về nRF51822 của hãng Nordic Semiconductor, dải nhiệt độ hoạt động của chip trong khoảng từ -25 đến 75 độ C. Ta có thể sử dụng cảm biến này để giám sát nhiệt độ CPU (nRF51822), từ đó biết được mức tải làm việc của hệ thống, đưa ra các cảnh báo cần thiết khi tải làm việc quá cao. Điều này giúp hệ thống làm việc ổn định và bền bỉ hơn.

Thủ tục đo nhiệt độ

Để tiến hành một lần đo nhiệt độ bên trong chip, thực hiện theo các bước sau:

  • Kích hoạt lệnh START đến mô đun TEMP (cảm biến nhiệt độ) để bắt đầu quá trình đo
  • Khi quá trình đo hoàn thành, cờ EVENTS_DATARDY được đặt lên 1.
  • Thực hiện hàm đọc giá trị nhiệt độ từ thanh ghi tương ứng
  • Dừng quá trình đo bằng cách kích hoạt lệnh STOP đến mô đun TEMP

Đo nhiệt độ môi trường?

Thông thường chúng ta sử dụng các cảm biến đo nhiệt độ các môi trường như: không khí, nước, đất,… Khi đó, cảm biến nhiệt độ được lắp tại các vị trí cần đo. Bạn cần nhớ rằng ví dụ này chỉ đề cập đến cảm biến nhiệt độ bên trong con chip nRF51822, điều đó có nghĩa rằng nhiệt độ đo được không phải là nhiệt độ môi trường xung quanh.

Một số bạn có thể nghĩ rằng, chúng ta có thể hiệu chuẩn lại giá trị đo này để nhận được giá trị nhiệt độ môi trường, nhưng điều đó có thể dẫn đến những kết quả có độ chính xác rất thấp, vì nhiệt độ bên trong con chip không thay đổi tuyến tính với sự thay đổi nhiệt độ môi trường.

Ví dụ đo nhiệt độ chip nRF51822 (trên VBLUno) với Arduino

Phần này trình bày một ví dụ đo nhiệt độ bên trong chip nRF51822 của bo mạch VBLUno trên môi trường Arduino IDE.

Ví dụ này khá đơn giản, sử dụng các hàm trong thư viện nrf_temp của Nordic SDK dành cho họ nRF5. Trong đó, chúng tôi có viết hàm float read_temp_value() thực hiện một lần đo nhiệt độ bên trong chip. Các bước của một chu trình đo như đã trình bày ở phần trên.

/* brief    Hàm đọc giá trị nhiệt độ từ cảm biến nhiệt độ nội bộ của nRF51822
 * return   Giá trị nhiệt độ (float)*/
float read_temp_value(){
  float temp=0.0;
  
  /* Bắt đầu quá trình đo nhiệt độ. */
  NRF_TEMP->TASKS_START = 1; 
  
  /* Chờ đến khi quá trình đo nhiệt độ hoàn thành. */
  while (NRF_TEMP->EVENTS_DATARDY == 0){
    // Do nothing.}
  }
  NRF_TEMP->EVENTS_DATARDY = 0;
  
  /* Đọc giá trị nhiệt độ từ cảm biến
   * Độ chính xác là 0.25 độ C <=> 1 đơn vị = 0.25 độ C
   * Cần chia cho 4 để nhận được giá trị độ C
   */
  temp = ((float)nrf_temp_read() / 4.);
  
  /* Hoàn thành quá trình đo. */
  NRF_TEMP->TASKS_STOP = 1; 
  return temp;
}

Kết quả

Hình 1: Kết quả đo nhiệt độ bên trong chip nRF51822

Trong bài viết tiếp theo, chúng tôi sẽ hướng dẫn các bạn sử dụng cảm biến nhiệt độ bên trong chip nRF51822 để minh họa một thiết bị nhiệt kế  (Health Thermometer Monitor – HTM). HTM là một nhiệt kế thông minh giúp truyền giá trị nhiệt độ từ cảm biến nhiệt độ gắn trên người đến điện thoại thông minh, máy tính bảng.

 

Mã nguồn đầy đủ của ví dụ đã trình bày:

/*
 * VNGIoTLab VBLUno KIT
 * VÍ DỤ ĐỌC GIÁ TRỊ TỪ CẢM BIẾN NHIỆT ĐỘ BÊN TRONG nRF51822
 */

#include "nrf_temp.h"

/*
 * brief    Hàm đọc giá trị nhiệt độ từ cảm biến nhiệt độ nội bộ của nRF51822
 * return   Giá trị nhiệt độ (float)
 */
float read_temp_value(){
  float temp=0;
  
  /* Bắt đầu quá trình đo nhiệt độ. */
  NRF_TEMP->TASKS_START = 1; 
  
  /* Chờ đến khi quá trình đo nhiệt độ hoàn thành. */
  while (NRF_TEMP->EVENTS_DATARDY == 0){
    // Do nothing.}
  }
  NRF_TEMP->EVENTS_DATARDY = 0;
  
  /* Đọc giá trị nhiệt độ từ cảm biến
   * Độ chính xác là 0.25 độ C <=> 1 đơn vị = 0.25 độ C
   * Cần chia cho 4 để nhận được giá trị độ C
   */
  temp = ((float)nrf_temp_read() / 4.);
  
  /* Hoàn thành quá trình đo. */
  NRF_TEMP->TASKS_STOP = 1; 
  return temp;
}

void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
  Serial.begin(9600);
  Serial.println("VBLUno - Read Internal Temperature");

  //for Temperature
  nrf_temp_init();
}
void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("Gia tri nhiet do: ");
  Serial.println(read_temp_value());
  delay(1000);
}

 

lên
8 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

VBLUno kit- Tutorial 6 - Truyền thông giữa Smartphone và PC với “UART over BLE”

Truyền thông UART nhưng không dây? Bài hướng dẫn này trình bày một ứng dụng rất thú vị của Bluetooth Low Energy (BLE), đó là UART over BLE. Với ứng dụng này, các thiết bị không được tích hợp sẵn BLE có thể dễ dàng truyền thông không dây với các Smartphone thông qua chuẩn truyền thông UART.

lên
9 thành viên đã đánh giá bài viết này hữu ích.

VBLUno kit- Tự làm một thiết bị Beacons với VBLUno

Như mọi người đã biết, công nghệ Beacons ngày càng được ứng dụng rộng rãi trong công nghiệp, giải trí, an ninh, thương mại,...  Có thể xem Beacons là "ngọn hải đăng" chứa những thông tin tối thiểu, phát ra môi trường dựa trên công nghệ BLE, giúp truyền tải những thông tin đến các thiết bị khác. Với VBLUno, việc thử nghiệm một thiết bị beacons trở nên dễ dàng hơn bao giờ hết.

lên
7 thành viên đã đánh giá bài viết này hữu ích.