stm32水流量传感器
时间: 2023-11-23 15:08:22 浏览: 254
STM32水流量传感器是一种利用STM32单片机核心板、水流量传感器、LCD1602液晶显示、按键、蜂鸣器及电源等组成的系统。其主要功能包括实时显示瞬时流量和累计流量、设置累计流量阈值、报警、继电器控制水阀开关等。具体特点如下:
1. 水流量传感器采用椭圆齿轮传感器,能够准确测量水流量。
2. 通过液晶LCD1602液晶实时显示瞬时流量和累计流量、设置的累计流量,方便用户了解水流量情况。
3. 通过按键设置累计流量阈值,如果累计流量超过设置阈值,蜂鸣器报警、继电器断开,否则不报警继电器闭合,保证水流量在安全范围内。
4. 继电器模拟水阀开关,如果当前累计流量低于设置流量,打开继电器打开水阀的意思,方便用户控制水流量。
5. 按键有设置按键、设置+、设置-,在设置情况下可以对设置值进行加减运算,方便用户设置累计流量阈值。
代码示例:
```c
//定义引脚
#define FlowPin PA0
#define RelayPin PA1
#define BeepPin PA2
#define Key1Pin PA3
#define Key2Pin PA4
#define Key3Pin PA5
//定义变量
float flow = 0; //瞬时流量
float total = 0; //累计流量
float setTotal = 100; //设置的累计流量
int alarm = 0; //报警标志
int relay = 0; //继电器状态
int key1 = 0; //设置按键状态
int key2 = 0; //设置+按键状态
int key3 = 0; //设置-按键状态
void setup() {
pinMode(FlowPin, INPUT);
pinMode(RelayPin, OUTPUT);
pinMode(BeepPin, OUTPUT);
pinMode(Key1Pin, INPUT_PULLUP);
pinMode(Key2Pin, INPUT_PULLUP);
pinMode(Key3Pin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
flow = pulseIn(FlowPin, HIGH); //读取瞬时流量
flow = flow / 7.5; //转换为L/min
total += flow * 0.05; //累计流量
if (total >= setTotal) { //如果累计流量超过设置阈值
alarm = 1; //报警
digitalWrite(RelayPin, LOW); //继电器断开
digitalWrite(BeepPin, HIGH); //蜂鸣器报警
} else {
alarm = 0; //不报警
digitalWrite(RelayPin, HIGH); //继电器闭合
digitalWrite(BeepPin, LOW); //蜂鸣器不报警
}
key1 = digitalRead(Key1Pin); //读取设置按键状态
key2 = digitalRead(Key2Pin); //读取设置+按键状态
key3 = digitalRead(Key3Pin); //读取设置-按键状态
if (key1 == LOW) { //如果按下设置按键
while (digitalRead(Key1Pin) == LOW); //等待按键释放
delay(10);
if (key2 == LOW) { //如果同时按下设置+按键
while (digitalRead(Key2Pin) == LOW); //等待按键释放
delay(10);
setTotal += 10; //设置值加10
} else if (key3 == LOW) { //如果同时按下设置-按键
while (digitalRead(Key3Pin) == LOW); //等待按键释放
delay(10);
setTotal -= 10; //设置值减10
}
}
Serial.print("Flow: ");
Serial.print(flow);
Serial.print(" L/min, Total: ");
Serial.print(total);
Serial.print(" L, SetTotal: ");
Serial.print(setTotal);
Serial.print(" L, Alarm: ");
Serial.print(alarm);
Serial.print(", Relay: ");
Serial.println(relay);
delay(50);
}
```
阅读全文