毕业设计|基于STM32单片机的水位浑浊度检测设计

简介: 毕业设计|基于STM32单片机的水位浑浊度检测设计

1、项目简介

1.1 系统构成

本设计由STM32单片机+蜂鸣器报警电路+OLED显示电路+水位监测电路+TSW-30浑浊度监测电路+电源电路组成。

1.2 系统功能

  • 1、 通过stm32单片机,实时水位、浑浊度数据,并将数据实时显示在OLED液晶显示屏上。
  • 2、水位超过设置的阈值,蜂鸣器报警
  • 3、浑浊度超过设置的阈值,蜂鸣器报警

2、部分电路设计

2.1 stm32f103c8t6单片机最小系统电路设计

STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装。

具体参数为:

  • 64K x 8bit的Flash
  • 20K x 8bit的SRAM
  • 37个GPIO,分别为PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1
  • 2个12bit ADC合计12路通道,外部通道:PA0到PA7以及PB0到PB1
  • 内部通道:温度传感器通道ADC_Channel_16和内部参考电压通道ADC_Channel_17
  • 4个16bit定时器/计数器,分别为TIM1、TIM2、TIM3、TIM4
  • 2个看门狗定时器(独立看门狗IWDG、窗口看门狗WWDG)
  • 1个24bit向下计数的滴答定时器systick
  • 2个IIC,2个SPI,3个USART,1个CAN
  • 内部8MHz时钟HSI最高可倍频到64MHz,外部8MHz时钟HSE最高可倍频到72MHz

Cortex-M3是ARM公司推出的基于ARMv7架构的MCU内核,ST公司在此内核的基础上完成了USART、DMA、GPIO等外围电路的设计。

STM32单片机最小系统电路由复位电路、时钟电路和电源电路。拥有这三部分电路后,单片机即可正常工作。

单片机最小系统原理图如下图所示:

实物图:

2.2 OLED液晶显示电路设计

IIC-OLED模块是一种高品质、高性能的显示屏,采用了有机发光二极管(OLED)技术,通过四个针脚控制电源和信号来实现对显示内容的控制。该模块具有以下特点:

  • 低功耗:OLED技术具有自发光特性,因此相比其他类型的显示屏,该模块具有更低的功耗,延长了电池寿命。
  • 高可靠性:该模块采用了高品质的材料和工艺,严格把控生产流程,保证了产品的稳定性和可靠性,适用于各种环境下的使用。
  • 简单易用:该模块通过四个针脚进行控制,接口简单,易于集成到各种设备中。

OLED的定义和优势:

  • OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
  • LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。

电路设计

OLED模块实物图:

2.2 蜂鸣器报警电路设计

  • 蜂鸣器是一种将电信号转换成声音信号的器件。按驱动方式分类,可以分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器内部自带震荡源,通直流电就能发声。无源蜂鸣器内部不带震荡源,需要控制震荡脉冲的频率,就能发出不同频率声音。
  • 电路图如下:

  • 蜂鸣器实物图

2.3 浑浊度检测传感器(TSW-30)

  • TS 浊度传感器是 GE 公司开发的一种专门用于家电产品的低成本传感器,该模块价格低廉、使用方便、测量精度高可以用于洗衣机、洗碗机等产品的水污浊程度的测量;也可以用于工业现场控制,环境污水采集等需要浊度检测控制的场合。
  • 这款浊度传感器利用光学原理,通过溶液中的透光率和散射率来综合判断浊度情况。传感器内部是一个红外线对管,当光线穿过一定量的水时,光线的透过量取决于该水的污浊程度,水越污浊,透过的光就越少。光接收端把透过的光强度转换为对应的电流大小,透过的光多,电流大,反之透过的光少,电流小。浊度传感器模块将传感器输出的电流信号转换为电压信号,通过单片机进行AD 转换数据处理。
  • 该款模块具有模拟量和数字量输出接口。模拟量可通过单片机 A/D 转换器进行采样处理,以获知当前水的污浊度。数字量可通过模块上的电位器调节触发阈值,当浊度达到设置好的阈值后,D1 指示灯会被点亮,传感器模块输出由高电平变成低电平,单片机通过监测电平的变化,判断水的浊度是否超标,从而预警或者联动其他设备。

电路图:

  • TS-300B浑浊度模块实物图:

3、部分代码展示

3.1 OLED的初始化

//OLED的初始化
void OLED_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能A端口时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;     //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);    //初始化PA0,1
  GPIO_SetBits(GPIOB,GPIO_Pin_6);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);    //初始化PA2
  GPIO_SetBits(GPIOB,GPIO_Pin_7);
//  OLED_RES_Clr();
//  delay_ms(200);
//  OLED_RES_Set();
  OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
  OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
  OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
  OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
  OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness
  OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
  OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
  OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
  OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
  OLED_WR_Byte(0x00,OLED_CMD);//-not offset
  OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
  OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
  OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
  OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
  OLED_WR_Byte(0x12,OLED_CMD);
  OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
  OLED_WR_Byte(0x30,OLED_CMD);//Set VCOM Deselect Level
  OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
  OLED_WR_Byte(0x02,OLED_CMD);//
  OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
  OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
  OLED_Clear();
  OLED_WR_Byte(0xAF,OLED_CMD);
}

3.2 TSW-30浑浊度传感器初始化

void TSW30Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );    //使能ADC1通道时钟
  //PA0 作为模拟通道输入引脚                         
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;   //模拟输入引脚
  GPIO_Init(GPIOA, &GPIO_InitStructure);
} 

3.3 获取水位传感器电压值

//读取水位传感器的电压值
float WaterGetValueV(void)
{
  uint16_t value = 0;
  float water_v = 0;
  value = Get_Adc_Average(WATER_ADC_CH1,WATER_READ_TIMES);  //读取ADC值
  water_v = (float)value * (3.3 / 4096);
  return water_v;
}


相关文章
|
4月前
|
传感器 人工智能 前端开发
单片机毕业设计|农家菜园自动灌溉控制系统设计
单片机毕业设计|农家菜园自动灌溉控制系统设计
|
4月前
|
人工智能 安全 搜索推荐
单片机毕业设计|基于stm32智能快递箱设计
单片机毕业设计|基于stm32智能快递箱设计
|
4月前
|
缓存 编译器 程序员
嵌入式开发环境Vscode开发STM32单片机程序
嵌入式开发环境Vscode开发STM32单片机程序
55 0
|
4月前
|
算法 C语言 智能硬件
stm32单片机实现电机的PID控制
stm32单片机实现电机的PID控制
84 0
|
4月前
|
存储 安全 芯片
STM32单片机实现Bootloader跳转的关键步骤
STM32单片机实现Bootloader跳转的关键步骤
43 0
|
4月前
|
传感器 内存技术
毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计
毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计
|
29天前
【STM32】基于HAL库的360度编码器、摇杆代码编写
【STM32】基于HAL库的360度编码器、摇杆代码编写
|
3月前
|
C++ 芯片 编译器
STM32F103标准外设库—— 新建工程与库函数(四)
STM32F103标准外设库—— 新建工程与库函数(四)
44 0
STM32F103标准外设库—— 新建工程与库函数(四)
|
3月前
|
传感器 芯片 内存技术
STM32F103标准外设库——认识STM32(一)
STM32F103标准外设库——认识STM32(一)
111 0
STM32F103标准外设库——认识STM32(一)
|
3月前
|
芯片 存储 C语言
STM32F103标准外设库——固件库 (三)
STM32F103标准外设库——固件库 (三)
68 0
STM32F103标准外设库——固件库 (三)