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 - Tutorial hướng dẫn lập trình Arduino IDE cho bo mạch VBLUno

Đây là chuỗi các bài tutorial giới thiệu và hướng dẫn mọi người phát triển ứng dụng trên Arduino IDE cho bo mạch VBLUno của VNG. Đặc biệt là các hướng dẫn và demo về Bluetooth Low Energy. Hôm nay chúng ta sẽ cùng nhau xem cách lập trình cho VBLUno để nói hello world với thế giới từ VBLUNO.

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

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

Qua tutorial 1, các bạn đã được giới thiệu về bo mạch VBLUno, hướng dẫn cài đặt môi trường cho Arduino và ví dụ Hello World. Như đã nói, với VBLUno thì điểm nhấn chính là khả năng hỗ trợ giao tiếp Bluetooth Low Energy (BLE). Trước khi bắt tay vào lập trình giao tiếp BLE, các bạn cần phải nắm được các vấn đề cơ bản về BLE. Bài viết này được viết với mục đích đó, hy vọng sẽ tạo tiền đề thuận lợi cho các bạn trong quá trình nghiên cứu sâu hơn về BLE

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