Tìm kiếm mã

Hướng dẫn ESP32 55/55 - Cách đo điện áp DC 12V, 24V hoặc 100V | Bộ học IoT ESP32 của SunFounder

Hướng dẫn ESP32 55/55 - Cách đo điện áp DC 12V, 24V hoặc 100V | Bộ học IoT ESP32 của SunFounder

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng ESP32 để đo các điện áp DC khác nhau, bao gồm 12V, 24V và thậm chí lên đến 100V. Bằng cách sử dụng mạch phân áp được tạo từ hai điện trở, chúng ta có thể đo an toàn các điện áp cao hơn mà không gây rủi ro hư hỏng cho vi điều khiển ESP32. Dự án này sẽ trình diễn cách đọc các điện áp này và hiển thị chúng trên màn hình nối tiếp, cung cấp những thông tin hữu ích về nguồn điện của bạn.

ESP32-55-any-voltage-main

Xem video để có giải thích toàn diện (trong video tại 00:00). Chúng ta sẽ sử dụng cấu hình phân áp đơn giản để đạt được điều này, đảm bảo rằng chúng ta có thể đo các điện áp vượt quá mức đầu vào tối đa của ESP32 một cách an toàn. Hướng dẫn này hoàn hảo cho những ai muốn mở rộng kiến thức về ESP32 và các khả năng của nó.

Công thức tính điện áp

ESP32-55_any-voltrage-formula

Giải thích phần cứng

Các thành phần chính cho dự án này bao gồm vi điều khiển ESP32, hai điện trở tạo thành bộ phân áp và nguồn điện bạn muốn đo. ESP32 được trang bị khả năng Wi-Fi và Bluetooth tích hợp, khiến nó trở thành lựa chọn linh hoạt cho các dự án IoT. Bộ phân áp, được tạo từ hai điện trở, cho phép chúng ta hạ điện áp xuống mức an toàn mà ESP32 có thể xử lý.

Trong thiết lập này, một điện trở, R1, được cố định ở 10kΩ, trong khi điện trở thứ hai, R2, có thể thay đổi tùy thuộc vào điện áp tối đa bạn muốn đo. Điện áp trên R1 là giá trị chúng ta sẽ đọc bằng chân đầu vào analog của ESP32, cho phép chúng ta tính toán điện áp gốc từ nguồn điện.

 

  • Đảm bảo điện trở có sai số 1% để đo chính xác.
  • Sử dụng bộ phân áp để tránh vượt quá định mức điện áp đầu vào của ESP32.
  • Giữ R1 ở 10kΩ và điều chỉnh R2 dựa trên dải điện áp.
  • Kiểm tra các kết nối để tránh đầu vào nổi có thể dẫn đến kết quả đọc không chính xác.
  • Sử dụng nguồn điện ổn định để đo điện áp nhất quán.

Hướng dẫn đấu dây

Để đấu dây mạch, bắt đầu bằng cách kết nối một đầu của điện trở R1 (10kΩ) với nguồn điện áp của bạn và đầu còn lại với chân GPIO 35 của ESP32. Chân này sẽ đọc điện áp trên R1. Tiếp theo, kết nối điện trở R2 (có thể là 100kΩ hoặc giá trị khác tùy theo nhu cầu của bạn) giữa điểm nối của R1 và đất. Đảm bảo rằng đất của nguồn điện cũng được kết nối với đất của ESP32.

Ví dụ, nếu đo 24V, kết nối cực dương của nguồn điện với R1, sau đó kết nối đầu còn lại của R1 với chân 35 và điểm nối của hai điện trở. Đầu tự do của R2 nên đi đến đất. Cấu hình này sẽ cho phép ESP32 đọc điện áp đã được hạ xuống một cách an toàn.

Ví dụ mã và hướng dẫn chi tiết

const int R1 = 10000; // Giá trị điện trở 1
const int R2 = 100000; // Giá trị điện trở 2
const int VinPin = 35; // Chân đầu vào điện áp

Trong đoạn trích này, chúng ta định nghĩa các giá trị cho điện trở của mình, R1R2, cũng như chân analog VinPin mà chúng ta sẽ sử dụng để đọc điện áp. Các hằng số này rất quan trọng cho các phép tính điện áp của chúng ta.

void readVoltage() {
  uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Đọc bằng milivôn
  VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}

Hàm này đọc điện áp bằng milivôn từ chân được chỉ định và tính toán điện áp thực tế VB1 bằng công thức phân áp. Điều này quan trọng để chuyển đổi điện áp đã được hạ xuống trở lại giá trị gốc.

void maxVoltage() {
  float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}

Ở đây, chúng ta định nghĩa một hàm để tính toán và in ra điện áp tối đa có thể đo an toàn dựa trên các giá trị điện trở. Hàm này rất quan trọng để đảm bảo chúng ta không vượt quá giới hạn điện áp của ESP32.

Trình diễn / Điều gì sẽ xảy ra

Khi bạn chạy mã, bạn sẽ thấy điện áp đo được hiển thị trên màn hình nối tiếp. Khi bạn điều chỉnh điện áp đầu vào, các kết quả đọc sẽ phản ánh những thay đổi này theo thời gian thực, chứng minh khả năng đo chính xác các điện áp DC khác nhau của ESP32. Nếu bạn gặp dao động trong kết quả đọc, hãy cân nhắc lấy trung bình nhiều mẫu để đạt được kết quả ổn định hơn (trong video tại 12:30).

Mốc thời gian video

  • 00:00 Bắt đầu
  • 1:59 Giới thiệu về dự án
  • 5:45 Bộ phân áp
  • 7:33 Giải thích cách đấu dây
  • 9:14 Giải thích mã Arduino
  • 14:45 Chọn bo mạch ESP32 và cổng COM trên Arduino IDE
  • 16:27 Trình diễn đo 30V bằng ESP32
  • 21:36 Thay đổi R2 thành 330k ohm
  • 22:33 Đo điện áp tối thiểu

Hình ảnh

ESP32-55_any-voltrage-formula
ESP32-55_any-voltrage-formula
ESP32-55-any-voltage-main
ESP32-55-any-voltage-main
805-ESP32 Tutorial 55/55 - Arduino code to measure 12V, 24V or 100V DC voltage
Ngôn ngữ: C++
/*
Arduino code for ESP32 to measure any DC voltage
📚⬇️ Download and resource page https://robojax.com/RJT674
written by Ahmad Shamshiri
watch full video explanation https://youtu.be/znBiVlgV9JI
www.robojax.com
Feb 19, 2024
*/
bool debug = false;
const int R1 = 10000;//we read the voltage acrosst this resistor ()
const int R2 = 100000;

const int VinPin = 35; // Potentiometer connected to GPIO14


// PWM settings
const int freq = 5000; // PWM frequency
const int resolution = 12; // PWM resolution (bits)
const int channel = 0; // PWM channel

float VB1;
int mV;

void setup() {
  Serial.begin(115200);
  // Configure PWM
  ledcSetup(channel, freq, resolution);
  //calculatResistor(R1, 24);//10000 ohm and 35.0V

}



void loop() {
   readVoltage();

  Serial.print("VB1 Voltage: ");
  Serial.print(VB1); // Convert millivolts to volts
  Serial.println("V ");


  delay(500);
}

void readVoltage()
{
  uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Read the voltage in millivolts
  if(debug)
  {
    maxVoltage();
    Serial.print("PinVoltage: ");
    Serial.print(voltage_mV);
    Serial.println("mV");
    Serial.println();//this adds a new line
  }
  mV = voltage_mV;
  VB1 = (((float) voltage_mV) / 1000.0)  * (1 + (float)R2/(float)R1);
}

/*
prints maximum volage
*/
void maxVoltage()
{
  float maxVoltage = ( 3.1)  * (1 + (float)R2/(float)R1);
    Serial.print("****Maximum Voltage: ");
    Serial.print(maxVoltage);
    Serial.println("V");

}//maxVoltage() end

void calculatResistor(int r1, float voltage)
{
    Serial.print("Calculating R2 when R1 is :");
    Serial.print(r1);
    Serial.print(" Ohms and Maximum Input Voltage is ");  
    Serial.print(voltage);  
    Serial.println("V");  
    Serial.print("***** R2 Should Be ");  
    float r2 = (voltage - 3.1)/ (3.1/ (float)r1);
    Serial.print(r2 / 1000.0);  
    Serial.println(" kilo Ohms");  
    while(1);
}

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Không có tệp nào khả dụng.