演示视频:
【单片机毕业设计选题25032】-基于stm32的污水处理系统
系统上电后显示“欢迎使用污水处理系统请稍后”两秒后进入正常显示页面。
第一行显示检测到的PH值
第二行显示PH值对应的PWM值
第三行显示检测到的浑浊度值
第四行显示浑浊度值对应的PWM值

主要功能模块原理图:
电源时钟烧录接口:

单片机和按键输入电路:

PWM控制电路:

初始化代码:
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
InitVar();
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_ADC1_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
//在HAL库初始化串口1后调用
HAL_Delay(100);
SetUart1RxToInput();
HAL_Delay(50);
//LED调光初始化
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
//uart1打开接收中断
HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1);
InitOled();
InitOledDisp();
/* USER CODE END 2 */
//系统控制及显示
void SystemControl(void)
{
char textBuf[20];
uint16_t tempAD = 0;
float tempVol = 0;
//计算PH值
//此模块输出电压范围调整为0~3V3,调整方法如下
//需要在PH计放在9.18标准缓冲液里,调节旋转电位器,将输出调整为1.3V
//需要在PH计放在6.86标准缓冲液里,调节旋转电位器,将输出调整为1.7V
//需要在PH计放在PH4.0标准缓冲液里,调节旋转电位器,将输出调整为2.2V
tempAD = ReadADCChannel(ADC_CHANNEL_0);
tempVol = tempAD*3.3/4096.0;
getPhVal = -5.7541*tempVol + 16.654; //输出电压范围0~3V3
//led亮度调节
if(getPhVal<=6.1)
{
phDuty = 1000;
}
else if(getPhVal<=6.4)
{
phDuty = 880;
}
else if(getPhVal<=6.6)
{
phDuty = 600;
}
else if(getPhVal<=6.8)
{
phDuty = 450;
}
else
{
phDuty = 100;
}
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, phDuty);
//显示PH值
sprintf(textBuf,"PH:%3.1f", getPhVal);
OledShowString(0, 0, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符
sprintf(textBuf,"Duty:%3d%%", phDuty/10);
OledShowString(0, 2, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符
//计算浑浊度
tempAD = ReadADCChannel(ADC_CHANNEL_2);
//分压
tempVol = tempAD*3.3/4096.0;
getThickVal = -865.68*tempVol + 3291.3;
if(getThickVal>3000)
{
getThickVal = 3000;
}
//led亮度调节
if(getThickVal<=300)
{
thickDuty = 100;
}
else if(getThickVal<=400)
{
thickDuty = 300;
}
else if(getThickVal<=500)
{
thickDuty = 500;
}
else if(getThickVal<=600)
{
thickDuty = 700;
}
else
{
thickDuty = 900;
}
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, thickDuty);
//显示水质混浊度
sprintf(textBuf,"Thick:%4d", getThickVal);
OledShowString(0, 4, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符
sprintf(textBuf,"Duty:%3d%%", thickDuty/10);
OledShowString(0, 6, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符
}
此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。


基于STM32的污水处理系统设计


被折叠的 条评论
为什么被折叠?



