智能恒温箱控制系统

基于 STM32F407 | HAL库 | 2024.02

项目简介

这是一个使用 STM32 制作的闭环温度控制系统。使用 NTC 热敏电阻采样,通过 PID 算法控制半导体制冷片(TEC12706),实现精度在 ±0.5°C 内的恒温控制。主要应用于菌种培养。

实物展示

这里放置你的实物接线图或最终成品图。

实物图

核心代码 (main.c)

#include "main.h"
#include "pid.h"

// 全局变量
float CurrentTemp = 25.0f;
float TargetTemp = 37.0f;
PID_HandleTypeDef hpid;

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_ADC1_Init();
    MX_USART1_UART_Init();
    
    PID_Init(&hpid, 2.0f, 0.5f, 0.1f); // Kp, Ki, Kd

    while (1)
    {
        // 1. 读取 ADC 转换为温度
        CurrentTemp = Get_Temperature();
        
        // 2. PID 计算
        float pwm_out = PID_Calc(&hpid, TargetTemp, CurrentTemp);
        
        // 3. 输出 PWM 控制 TEC
        __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, (uint32_t)pwm_out);
        
        HAL_Delay(100);
    }
}

OLED 音乐频谱显示器

基于 ESP32 | I2S 接口 | 2023.10

项目简介

利用 ESP32 的 I2S 接口读取 MAX4466 麦克风模块的数据,通过 FFT (快速傅里叶变换) 将时域信号转换为频域信号,最后在 0.96寸 SSD1306 OLED 屏幕上以柱状图形式显示。

演示视频

核心代码 (fft.c)

#include "arduinoFFT.h"

#define SAMPLES 128
#define SAMPLING_FREQUENCY 10000

arduinoFFT FFT = arduinoFFT();
double vReal[SAMPLES];
double vImag[SAMPLES];

void loop() {
    // 采样
    for (int i = 0; i < SAMPLES; i++) {
        vReal[i] = analogRead(A0);
        vImag[i] = 0;
        delayMicroseconds(1000000 / SAMPLING_FREQUENCY);
    }

    // FFT 计算
    FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
    FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
    FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);

    // 显示到 OLED
    DisplayBars(vReal);
}

FreeRTOS 蓝牙小车

基于 STM32F103 | FreeRTOS v10 | HC-05

项目简介

移植了 FreeRTOS 实时操作系统。创建了三个任务:1. LED 心跳任务;2. USART 蓝牙指令接收任务;3. 电机控制任务。使用队列(Queue)进行任务间通信。