洪嵐峰 發表於 2023-4-28 06:52:21

ESP32-PICO-D4

ESP32-PICO-D4 芯片的 PID 控制器,你需要以下零件:

ESP32-PICO-D4 控制芯片
直流馬達(或其他需要控制的裝置)
馬達驅動器
4位七段顯示器(選擇性,用於顯示控制器的狀態)
杜邦線和其他連接器

下面是 ESP32-PICO-D4 的引腳連接示意圖:


  ESP32-PICO-D4     |     零件
-------------------|-------------------
        5V         -->   馬達驅動器電源
        GND        -->   馬達驅動器GND
        GPIO12     -->   馬達驅動器PWM
        GPIO13     -->   馬達驅動器DIR
        GPIO14     -->   七段顯示器D1
        GPIO27     -->   七段顯示器D2
        GPIO26     -->   七段顯示器D3
        GPIO25     -->   七段顯示器D4
以下是 ESP32-PICO-D4 上的 PID 控制器的範例程式碼:

c++

#include <PID_v1.h>

// PID 控制器參數
double Setpoint, Input, Output;
double Kp = 2, Ki = 5, Kd = 1;

// 七段顯示器引腳
int digit1 = 14;
int digit2 = 27;
int digit3 = 26;
int digit4 = 25;

// 顯示數字的模式
byte digit = {
  {1,1,1,1,1,1,0,0},  // 0
  {0,1,1,0,0,0,0,0},  // 1
  {1,1,0,1,1,0,1,0},  // 2
  {1,1,1,1,0,0,1,0},  // 3
  {0,1,1,0,0,1,1,0},  // 4
  {1,0,1,1,0,1,1,0},  // 5
  {1,0,1,1,1,1,1,0},  // 6
  {1,1,1,0,0,0,0,0},  // 7
  {1,1,1,1,1,1,1,0},  // 8
  {1,1,1,1,0,1,1,0}   // 9
};

// 建立 PID 控制器物件
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

void setup() {
  // 初始化引腳為輸出模式
  pinMode(digit1, OUTPUT);
  pinMode(digit2, OUTPUT);
  pinMode(digit3, OUTPUT);
  pinMode(digit4, OUTPUT);

// 設置 PID 控制器參數
Setpoint = 50;
Input = 0;
Output = 0;

// 啟動 PID 控制器
myPID.SetMode(AUTOMATIC);
}

void loop() {
// 讀取馬達速度
Input = analogRead(A0);

// 更新 PID 控制器
myPID.Compute();

// 控制馬達速度
analogWrite(12, Output);

// 顯示 PID 控制器狀態
int integer_part = (int)Output;
int decimal_part = (int)((Output - integer_part) * 10);
digitalWrite(digit1, LOW);
digitalWrite(digit2, LOW);
digitalWrite(digit3, LOW);
digitalWrite(digit4, HIGH);
displayNumber(decimal_part);
delay(1);
digitalWrite(digit1, LOW);
digitalWrite(digit2, LOW);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, LOW);
displayNumber(integer_part % 10);
delay(1);
digitalWrite(digit1, LOW);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, LOW);
digitalWrite(digit4, LOW);
displayNumber((integer_part / 10) % 10);
delay(1);
digitalWrite(digit1, HIGH);
digitalWrite(digit2, LOW);
digitalWrite(digit3, LOW);
digitalWrite(digit4, LOW);
displayNumber((integer_part / 100) % 10);
delay(1);
}

// 顯示數字
void displayNumber(int number) {
for (int i = 0; i < 8; i++) {
if (digit == 1) {
digitalWrite(i + 15, HIGH);
} else {
digitalWrite(i + 15, LOW);
}
}
}



這個程式碼示範了如何使用 ESP32-PICO-D4 和 PID 控制器來控制馬達速度,同時在 4 位七段顯示器上顯示 PID 控制器輸出。

程式碼中,我們先初始化 PID 控制器和七段顯示器的引腳,然後設置 PID 控制器的參數並啟動它。

在主循環中,我們讀取馬達速度,更新 PID 控制器,並控制馬達速度。

最後,我們顯示 PID 控制器的輸出值在 4 位七段顯示器上。
頁: [1]
查看完整版本: ESP32-PICO-D4