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

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

VBLUno - Tutorial 2 - Tổng quan về công nghệ BLE và ví dụ minh họa (Phần 2)

Đây là phần cuối của Tutorial 2 nhằm giới thiệu ngắn gọn các kiến thức quan trọng về Bluetooth Low Energe (BLE)

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

VBLUno Tutorial 7 - Điều khiển và giám sát thiết bị bằng Smartphone qua giao tiếp Bluetooth Low Energy

Trong các bài viết trước, chúng tôi đã trình bày một số ứng dụng điển hình của giao tiếp Bluetooth Low Energy (BLE) như: Heart Rate Mesuarement, Health Thermometer, Beacons. Các ứng dụng này sử dụng các services đã được Bluetooth SIG định nghĩa sẵn. 

Cho các ứng dụng bất kỳ với BLE, việc tạo ra các services riêng là cần thiết. Bài viết này hướng dẫn các bạn thiết kế và cài đặt một BLE Service cho các ứng dụng điều khiển bất kỳ.

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