一使用的模块
本实验使用了stm32f103最小系统板,一个串口转接口,st-link下载器,led灯,温湿度传感器dht11,按键,直流电机,蜂鸣器,舵机以及OLED显示屏。
二实验内容
使用舵机模拟大棚的大门,直流电机模拟风扇,蜂鸣器及LED灯模拟报警器,将实时采集的数据通过串口发送到电脑上,电脑经过QT分析数据画出一个实时数据的分析图,同时如果温湿度过高会启动舵机及风扇,并且风扇的旋转速度和舵机的旋转角度会随着温湿度变化。
三实物展示
(懒得在搭建了勉强看吧👀)
OLED显示温度湿度以及预设的阙值,这个值可以使用按键进行调节。
这个是实时采取的波形,感觉还挺有意思的,原本想用MATLAB自己做一个的,看到有现成用QT搭建的就拿过来用了。
四 主程序展示
(狗头保命,我是小白)
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "servo.h"
#include "DHT11.h"
#include "buzz.h"
#include "Motor.h"
#include "LED.h"
#include "KEY.h"
#include "serial.h"
#include "timer.h"
DHT11_Data_TypeDef DHT11_Data;
uint16_t NUM;
uint8_t KeyNum; //定义用于接收按键键码的变量
int8_t Speed=20; //定义速度变量
float Angle=90;
uint8_t wendu=25;
uint8_t shidu=60;
int main(void)
{
OLED_Init();
servo_init();
DHT11_GPIO_Config();
buzz_init();
Motor_Init(); //直流电机初始化
LED_init();
Key_Init();
Serial_init();
Timer_init();
while(1)
{
KeyNum=Key_GetNum();
if(Read_DHT11(&DHT11_Data) == SUCCESS)
{
OLED_ShowString(1, 1, "temp:");
OLED_ShowString(2, 1, "humidity:");
OLED_ShowString(3, 1, "TEMP:");
OLED_ShowNum(2, 10, DHT11_Data.humi_int, 2);
OLED_ShowString(2, 12, ".");
OLED_ShowNum(2, 13, DHT11_Data.humi_deci, 2);
OLED_ShowNum(1, 6, DHT11_Data.temp_int, 2);
OLED_ShowString(1, 8, ".");
OLED_ShowNum(1, 9, DHT11_Data.temp_deci, 1);
OLED_ShowNum(3, 6, shidu, 2);
}
if(KeyNum==1)
{
shidu++;
}
else if(KeyNum==2)
{
shidu--;
}
if(DHT11_Data.humi_int>shidu)
{
servo_setAngle(180);
LED2_ON();
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Motor_SetSpeed(DHT11_Data.humi_int/2);
}
else if(DHT11_Data.humi_int<=shidu)
{
servo_setAngle(0);
LED2_OFF();
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Motor_SetSpeed(0);
}
if(NUM==2)
{
serial_sendNumber(DHT11_Data.temp_int,2);
Serial_sendstring(".");
serial_sendNumber(DHT11_Data.humi_int,2);
NUM=0;
}
OLED_ShowNum(4, 1, NUM, 2);
}
}
五总结
刚开始学,感觉还是学到了挺多的,接着努力学习,奥利给,源码没放上去因为我不知道咋放,要是有要的我可以打包发给你👀,纯纯小白还在上学务喷。