文章目录摘要一、系统功能二、总体设计程序三、效果图源码获取摘要随着科技的进步经济的发展水污染问题日益严重尤其以河流资源的污染情况更加严重。通过对现有河流河流水质检测仪进行研究制定总体设计方案主要功能是对河流水质进行在线监测并将结果上传云端以便于及时查看及时发现河流水质污染情况及时采取相应措施。硬件电路设计采用STM32微控制器为核心实时检测测河流温度、纯净度、PH值的河流水质检测仪并可根据设定的阈值进行预警水浊传感器、温度传感器、PH传感器进行A/D采样并将采集后的数据进行滤波、转换处理后通过无线通信模块传输数据给上位机并通过OLED显示软件部分主要有数据采集串口通信和液晶显示等部分。实验完毕水质在线检测能够对河流各种参数进行实时掌控这样可以更加迅速准确得知河流水质状态以便快速做出对应方案对充分保护河流资源和淡水资源境有着重大意义一、系统功能本文对河流河流水质检测仪进行研究学习设计出一款基于STM32的河流河流水质检测仪。这一仪器携带便捷可以广泛应用于河流湖泊检测者可以实时了解河流水质参数。本文完成的主要工作如下1在查阅国内外资料后解了未来的河流水环境检测技术必然要朝着综合化、实时化、便捷化的方向发展。为河流环境治理提供精准的决策依据应对未来可能存在的复杂化多样化水境污染问题。针对这一未来发展趋势形成了初步的系统设计方案和架构。2河流河流水质检测的硬件电路以STM32F103C8T6为微控制器主要以浊度传感器、温度传感器、酸碱度传感器为辅助硬件完成对水温PH值浊度这三个参数的检测。通信模块将被测数据传值节点。OLED显示模块实时显示被测数据值。电源电路路为设计以及所需完成硬件提供电源。经测试本次设计各个模块功能正常检测精度达到预期水平。3本次设计使用Keil5为软件编译环境应用语言进行上、下位机软件编译对参数进行采集、传输、处理下位机可以单独作为一个监测系统。下位机主要实现数据的采集传输和显示上位机可以设置参数阈值并进行报警。实验结果表明设计可以对水温、PH值、浊度三个参数达到了系统要求。虽然本文设计的河水水质监测仪得以准确测量河水温度、浊度、PH指标促进达成了检测仪设计的预期功能但鉴于设备和知识的限制仍然存在较多的不足。设计有待对于细节方面进行打磨。在此提出以后可以进一步研究的3个方面:1完善检测方法和检测界面使人机界面更加友好更加实用化。2本文设计的只针河流对浊度、水温、酸碱度方面测试接下来可以增加其他水质变量加强检测仪检测功能完善检测范围可以增加区域河流水质评估功能。3传感器在水中不可避免的会附着河流中的杂质和淤泥影响测量精度以后需要添加传感器自洁装置二、总体设计基于单片机的河水水质监测系统的硬件部分综合分为两大部分分别是采集数据部分和处理数据部分。系统将STM32F103C8T6单片机作为核心处理器通过抽水泵模块将河水抽取至容器中。然后通过水浊传感器、温度传感器、PH传感器进行A/D采样并将采集后的数据进行滤波、转换处理后通过无线通信模块传输数据给上位机并通过OLED显示[6]。上位机可发送指令给单片机控制抽水泵模块进出若所测数据超过事先设置好的阈值则蜂鸣器预警。程序#includeled.h#includedelay.h#includesys.h#includeusart.h#includeoled.h#includekey.h#includeusart2.h#includestring.h#includetimer.h#includeds18b20.h#includeadc.h#includeesp8266.hfloatPH_ad;//PH值intPH_Value;floatTur_ad;//浑浊度值intTur_Value;u8 buf1[5],buf2[5],buf3[5];u8 moshi0;u16 temp_h35;//温度上限值voidKey_process(){u8 t0;tKEY_Scan(0);//得到键值if(tKEY1_PRES){OLED_Init();moshi;if(moshi2)moshi0;if(moshi0){OLED_ShowStr(16,0,温度: . C ,16);OLED_ShowStr(16,16,水位: ,16);OLED_ShowStr(16,32,PH值: . ,16);OLED_ShowStr(16,48,浊度: ,16);}elseif(moshi1){OLED_ShowStr(20,24,温度上限: ,16);}}if(tKEY2_PRES){if(moshi1){if(temp_h99)temp_h;}}if(tKEY3_PRES){if(moshi1){if(temp_h1)temp_h--;}}}intmain(void){int adcx0,adcx1,adcx2;//short temperature;u16 temp_n;delay_init();I2C_Configuration();OLED_Init();OLED_ShowStr(0,16,地址:192.168.4.1,16);OLED_ShowStr(0,32,端口:5000 ,16);KEY_Init();LED_Init();Adc_Init();//初始化程序NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级2位响应优先级TIM3_Int_Init(499,7199);//10Khz的计数频率50USART2_Init(9600);esp8266_start_trans();//esp8266进行初始化DS18B20_Init();//DS18B20初始化OLED_Clear();OLED_ShowStr(16,0,温度: . C ,16);OLED_ShowStr(16,16,水位: ,16);OLED_ShowStr(16,32,PH值: . ,16);OLED_ShowStr(16,48,浊度: ,16);while(1){Key_process();if(moshi0){temperatureDS18B20_Get_Temp();//读取温度temp_ntemperature/10;LCD_ShowNum(56,0,temperature/10,2,16);//显示正数部分LCD_ShowNum(80,0,temperature%10,1,16);//显示小数部分buf1[0]temperature/1000x30;buf1[1]temperature/10%100x30;buf1[2].;buf1[3]temperature%100x30;/*********************************************************************************/adcx1Get_Adc_Average(ADC_Channel_1,10);adcx1adcx1/40-3;//水位校准if(adcx10)adcx10;LCD_ShowNum(64,16,adcx1,2,16);buf2[0]adcx1/100x30;buf2[1]adcx1%100x30;/******************************************************************************/adcx0Get_Adc_Average(ADC_Channel_0,10);//PH值PH_ad(float)adcx0/4096*3.3;// 读取转换的AD值PH_ad-5.9647*PH_ad16.654;if(PH_ad0.0){PH_ad0.0;}if(PH_ad14.0){PH_ad14.0;}PH_ValuePH_ad*10;LCD_ShowNum(56,32,PH_Value/10,2,16);//显示正数部分LCD_ShowNum(80,32,PH_Value%10,1,16);//显示小数部分buf3[0]PH_Value/1000x30;buf3[1]PH_Value/10%100x30;buf3[2].;buf3[3]PH_Value%100x30;/******************************************************************************/adcx2Get_Adc_Average(ADC_Channel_5,10);//浑浊度Tur_ad(float)adcx2/4096*3.5;Tur_ad-865.68*Tur_ad2281.3;Tur_Value(int)Tur_ad;LCD_ShowNum(56,48,Tur_Value,4,16);//显示浑浊度/******************************************************************************/if(temp_ntemp_h)//温度过高异常{Buzzer0;}else{Buzzer1;}if(ly_flag1)//发送{if(temp_ntemp_h){esp8266_send_cmd1(ATCIPSEND0,16);delay_ms(300);u2_printf(Temp is too high);delay_ms(100);}esp8266_send_cmd1(ATCIPSEND0,39);delay_ms(300);u2_printf(Temp:);esp8266_send_data1(buf1);//4u2_printf(C\r\n);//12u2_printf(Water:);esp8266_send_data1(buf2);//2u2_printf(\r\n);//10u2_printf(PH:);esp8266_send_data1(buf3);u2_printf(\r\n);u2_printf(Tur:%d ,Tur_Value);delay_ms(100);ly_flag0;}}elseif(moshi1){LCD_ShowNum(92,24,temp_h,2,16);}}}三、效果图源码获取下方名片联系我即可大家点赞、收藏、关注、评论啦 、查看获取联系方式