[Arduino cơ bản] Bộ chuyển đổi ADC

Thảo luận trong 'Arduino' bắt đầu bởi VuPhat.MCA, 15/8/19.

Tags:
  1. VuPhat.MCA

    VuPhat.MCA New Member

    Bài này chúng ta sẽ cùng tìm hiểu về bộ chuyển đổi ADC có trên Arduino.

    I. Giao tiếp ADC cơ bản
    Phần này chúng ta sẽ đọc điện áp được điều chỉnh thông qua một triếp áp.

    Chuẩn bị:
    a) Arduino UNO R3
    b) Triết áp đơn 10k

    Kết nối thiết bị:
    Chân giữa của triết áp được nối với chân A0 của Arduino, 2 chân còn lại được nối với GND và 5V.
    [​IMG]

    Bộ chuyển đổi ADC:
    ADC (Analog Digital Converter) là bộ chuyển đổi tín hiệu tương tự sang số dùng để chuyển đổi các tín hiệu tương tự từ bên ngoài (nhiệt độ, độ ẩm, …) về dạng số để vi điều khiển có thể xử lý được. Không phải tất cả các chân của Arduino đều có khả năng ADC. Trên board Arduino, các chân được ký hiệu Ax (A0 đến A5 trên UNO) để cho biết các chân này có thể đọc được điện áp tương tự.
    Bộ chuyển đổi ADC trên mỗi vi điều khiển là khác nhau. Trên Arduino là 10-bit, có nghĩa là nó có khả năng phát hiện 1024 (2^10) mức tín hiệu số rời rạc.

    Điện áp tham chiếu Vref:
    Điện áp tham chiếu là giá trị điện áp lớn nhất mà ADC có thể chuyển đổi được. Mặc định khi được cấp nguồn điện áp tham chiếu của Arduino là 5V (có nghĩa là 5V ứng với giá trị ADC max là 1023, với board Arduino 3.3V thì 3.3V ứng với giá trị lớn nhất là 1023). Ngoài ra Arduino còn được tích hợp các bộ tham chiếu nội, và bộ tham chiếu ngoại tại chân AREF.

    Mối quan hệ giữa giá trị ADC và điện áp:
    Với giá trị ADC lớn nhất là 2^n - 1 ↔ giá trị điện áp lớn nhất Vref
    Với giá trị ADC bất kỳ (Gia_tri_ADC) ↔ giá trị điện áp Vđo bất kỳ
    → Giá trị điện áp ra Vđo tại một giá trị ADC đo được là (n là độ phân giải của bộ ADC):
    [​IMG]

    Tính toán giá trị điện áp:
    Với điện áp tham chiếu mặc định của Arduino là và độ phân giải là 10-bit, ta có điện áp đo được tại chân A0 của triết áp là:
    [​IMG]

    Chương trình:
    Mã:
    void setup() {
      // Khởi tạo Serial tốc độ 9600bps
      Serial.begin(9600);
    }
    
    void loop() {
      // Đọc giá trị ADC tại chân A0
      int adcValue = analogRead(A0);
      // Tính toán giá trị điện áp đo được
      float voltage = (float)adcValue * 5 / 1023;
      // In ra Serial giá trị điện áp với 2 chữ số sau dấu phẩy
      Serial.print("Dien ap: ");
      Serial.println(voltage, 2);
      // Trễ 500ms
      delay(500);
    }
    
    Kết quả:
    Bật màn hình Serial monitor với tốc độ 9600bps, mỗi khi chúng ta xoay triết áp sẽ đọc được giá trị điện áp khác nhau.

    II. Giao tiếp với cảm biến nhiệt độ LM35
    Bài này chúng ta sẽ đọc giá trị nhiệt độ cảm biến LM35.

    Chuẩn bị:
    a) Arduino UNO R3
    c) Cảm biến nhiệt độ LM35

    Sơ đồ kết nối:
    Chân tín hiệu cảm biến được nối với A0, 2 chân còn lại được nối với nguồn 5V.
    [​IMG]

    Tính toán giá trị nhiệt độ:
    Với cảm biến nhiệt độ LM35, chúng ta có cứ 10mV sự thay đổi của điện áp ứng với 1°C. Với điện áp đọc được, giá trị của nhiệt độ là:
    [​IMG]

    Chương trình:
    Mã:
    void setup() {
      // Khởi tạo Serial tốc độ 9600bps
      Serial.begin(9600);
    }
    
    void loop() {
      // Đọc giá trị ADC tại chân A0
      int adcValue = analogRead(A0);
      // Tính toán giá trị nhiệt độ đo được
      float temp = (float)adcValue * 500 / 1023;
      // In ra Serial giá trị nhiệt độ với 2 chữ số sau dấu phẩy
      Serial.print("Nhiet do: ");
      Serial.println(temp, 2);
      // Trễ 500ms
      delay(500);
    }
    
    Kết quả:
    Bật màn hình Serial monitor với tốc độ 9600bps, mỗi khi tác động thay đổi nhiệt độ trên LM35, chúng ta sẽ nhận được giá trị hiển thị trên màn hình Serial monitor.
     
    Last edited: 15/8/19

trang này