智能恒温箱控制系统
项目简介
这是一个使用 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 接口读取 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 蓝牙小车
项目简介
移植了 FreeRTOS 实时操作系统。创建了三个任务:1. LED 心跳任务;2. USART 蓝牙指令接收任务;3. 电机控制任务。使用队列(Queue)进行任务间通信。