
基于STM32的水质/浊度检测仪设计与实现:详细设计说明书+原理图PCB工程+源码工
程
## 搞个水质检测仪,这届创客真会玩
最近在实验室折腾了个水质检测仪,核心板用的STM32F103C8T6,这货江湖人称"蓝药丸",性价比高
得离谱。整个项目最带劲的部分就是看着浑浊的水样数据在屏幕上跳动的瞬间——这可比盯着代码烧录有
趣多了。
### 一、硬件选型那些事儿
DS18B20温度传感器绝对是个老戏骨,单总线协议玩得贼溜。PCB布线时差点被这货坑了——记得在数
据线加个4.7K上拉电阻,不然STM32根本认不出这个傲娇的传感器。浊度传感器选了工业级的TSW-30,这玩
意儿输出是模拟信号,接了个LMV358做信号调理,把0-4.5V的输出压到STM32的3.3V安全范围。
LCD屏用的1602字符屏,后来发现显示数据不够浪,连夜换成0.96寸OLED。I2C协议接四根线就搞定,
显示效果瞬间科技感拉满。报警模块更绝,找了个5V有源蜂鸣器,三极管驱动电路简单粗暴有效。
### 二、代码实战:从传感器到屏幕
DS18B20的驱动代码有点魔性,时序要求严格到令人发指。这里有个取巧的写法:
```c
void DS18B20_ReadTemp(float *temp) {
uint8_t tempL, tempH;
DS18B20_Start();
DS18B20_ReadByte(&tempL);
DS18B20_ReadByte(&tempH);
*temp = ((tempH << 8) | tempL) * 0.0625;
}
```
这个0.0625是传感器自带的转换系数,直接乘就行。注意读取顺序先低后高,搞反了会得到奇葩的
温度值(别问我怎么知道的)。
浊度检测用了STM32的ADC采集,配置成连续扫描模式:
```c
HAL_ADC_Start(&hadc1);
turbidity = HAL_ADC_GetValue(&hadc1) * 3.3 / 4096;
if(turbidity > 2.5) Buzzer_Alert();
```