246-基于stm32单片机水质浑浊度PH值酸碱度检测(源程序+原理图+元件清单)
1、系统组成:采用stm32f103c8t6核心板+PH传感器+浊度传感器+LCD1602显示屏+蜂鸣器+继电器+水泵+按键2、通过PH传感器采集PH酸碱度值,显示到LCD1602上面;3、通过浊度传感器采集水质浊度,显示到LCD1602上面;4、通过按键设置PH阈值和浊度阈值,显示到LCD1602上面;5、当PH检测值或者浊度检测值大于设置阈值,蜂鸣器报警提醒,并且打开继电器开启水泵进行换水;
·
一:功能介绍:
1、系统组成:采用stm32f103c8t6核心板+PH传感器+浊度传感器+LCD1602显示屏+蜂鸣器+继电器+水泵+按键
2、通过PH传感器采集PH酸碱度值,显示到LCD1602上面;
3、通过浊度传感器采集水质浊度,显示到LCD1602上面;
4、通过按键设置PH阈值和浊度阈值,显示到LCD1602上面;
5、当PH检测值或者浊度检测值大于设置阈值,蜂鸣器报警提醒,并且打开继电器开启水泵进行换水;
二:实物演示视频
246-基于stm32单片机水质浑浊度PH值酸碱度检测
三:程序代码展示(采用C语言编写,使用keil5编译,代码有中文注释,新手容易看懂)


int main(void)
{
float adcx,adcx1;
float PH_Value=0;
u8 ph_set=75;
u8 zd=0,zd_set=50;
delay_init(); //延时函数初始化
delay_ms(200);
LCD1602_Init();
KEY_Init(); //KEY初始化
Adc_Init(); //ADC初始化
LED_Init(); //LED端口初始化
while(1)
{
if(KEY0==0)//按键设置
{
ph_set++;
if(ph_set>140) ph_set=140;
}
if(KEY1==0)
{
ph_set--;
if(ph_set<0) ph_set=0;
}
if(KEY2==0)
{
zd_set++;
if(zd_set>100) zd_set=100;
}
if(KEY3==0)
{
zd_set--;
if(zd_set<0) zd_set=0;
}
adcx=Get_Adc_Average(ADC_Channel_8,10); //得到ADC转换值
adcx=(float)adcx*(3.3/4096);
PH_Value=-5.7541*adcx+13.954;
if(PH_Value<=0.0){PH_Value=0.0;}
if(PH_Value>=14.0){PH_Value=14.0;}
adcx1=Get_Adc_Average(ADC_Channel_9,10); //得到ADC转换值
zd=100-((float)adcx1*(3.3/4096)*100-31)*2.38;
LCD_Write_Command(0x80);//第一行的首地址
LCD_Write_Date(' ');
LCD_Write_Date('P');
LCD_Write_Date('H');
LCD_Write_Date('=');
LCD_Write_Date((int)(PH_Value*100)/1000+0x30); //显示十位
LCD_Write_Date((int)(PH_Value*100)%1000/100+0x30); //显示个位
LCD_Write_Date('.');
LCD_Write_Date((int)(PH_Value*100)%100/10+0x30); //显示小数
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date('Z');
LCD_Write_Date('D');
LCD_Write_Date('=');
LCD_Write_Date(zd/100+0x30);
LCD_Write_Date(zd%100/10+0x30);
LCD_Write_Date(zd%10+0x30);
LCD_Write_Command(0x80+0x40);//显示第二行
LCD_Write_Date('S');
LCD_Write_Date('E');
LCD_Write_Date('T');
LCD_Write_Date(':');
LCD_Write_Date((int)(ph_set*10)/1000+0x30); //显示十位
LCD_Write_Date((int)(ph_set*10)%1000/100+0x30); //显示个位
LCD_Write_Date('.');
LCD_Write_Date((int)(ph_set*10)%100/10+0x30); //显示小数
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date(zd_set/100+0x30);
LCD_Write_Date(zd_set%100/10+0x30);
LCD_Write_Date(zd_set%10+0x30);
if(PH_Value*10>ph_set||zd>zd_set)//超过阈值蜂鸣器报警
{
BEEP=Q=0;
}
else BEEP=Q=1;
}
}
四:原理图文件展示(采用AD(Altium Designer)打开)

五:实物图展示:
六: 资料清单展示:
更多推荐


所有评论(0)