一、硬件部分
图1 c8t6
图2 加湿器
图3 oled
图4 水位传感器
图5 继电器
图6 dht11
图7 蜂鸣器
二、软件部分
1开发环境 烧入 调试工具
2 主程序
- /************************************智能加湿器系统********************************
- 1、可以通过按键设置湿度阈值。
- 2、可以通过按键设置湿度阈值。
- 3、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。
- 4、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。
- 5、环境湿度测量范围:20%-95% RH,测量误差:±5%。5、具有容器水位检测功能。
- 6、环境湿度测量范围:20%~95%RH,测量误差:±5%。5、具有容器水位检测功能。
- 系统采用3个不同颜色的LED灯表示三种不同的湿度状态
- 湿度<40 40 < s湿度< 60 湿度 > 60
- *******************************************************************************
- Author:xiao yin
- Date:2022-4
- *******************************************************************************/
- #include "stm32f10x.h"
- #include "usart.h"
- #include "oled.h"
- #include "delay.h"
- #include "led.h"
- #include "adc.h"
- #include "key.h"
- #include "buzzer.h"
- #include "string.h"
- #include "jdq.h"
- #include "dht11.h"
- #include "water.h"
- uint16_t i;
- uint8_t k;
- uint8_t kk;
- uint8_t kkk; //温湿度变量相关
- unsigned char keyvalue;//按键返回值
- unsigned char flag;//界面切换标志
- unsigned char flag_function = 0;//函数功能标志位
- unsigned char interface_flag = 0; //在温湿度实现界面标志
- unsigned char m_humidity = 20; //修改湿度变量 设置初值
- unsigned char Relay = 1;// 继电器状态标志 默认为关 0开
- unsigned char water = 20; //水位高度
- unsigned char hfier = 1;// 加湿器状态标志 默认为关 0 开
- extern unsigned int ad_value;
- extern unsigned int val;
- void main_interface(void); //主界面
- void Interface2(void); //湿度数值界面
- void Key_Mode(void); //模式切换
- /*********************************************界面显示函数*****************************/
- //主页面
- void main_interface(void)
- {
- // OLED_Clear(0);
- // delay_ms(10);
- OLED_ShowCHinese_six(6,0,0);//智
- OLED_ShowCHinese_six(26,0,1);//能
- OLED_ShowCHinese_six(46,0,2);//加
- OLED_ShowCHinese_six(66,0,3);//湿
- OLED_ShowCHinese_six(82,0,4);//系
- OLED_ShowCHinese_six(98,0,5);//统
- OLED_ShowNum(6,3,2022,4,16);
- OLED_ShowCHinese_TWO(40,3,0);//年
- OLED_ShowNum(50,3,4,2,16);
- OLED_ShowCHinese_TWO(74,3,1);//月
- OLED_ShowNum(92,3,12,2,16);
- OLED_ShowCHinese_TWO(108,3,2);//日
- OLED_ShowCHinese_six(35,6,6); //名字显示
- OLED_ShowCHinese_six(55,6,7);
- OLED_ShowCHinese_six(75,6,8);
-
- }
- //界面2 温湿度显示及湿度修改值
- void Interface2(void)
- {
- //以字符串的形式显示
- OLED_ShowString(35,1,(unsigned char *)"C_T:",3); // Current_Temperature 当前温度
- OLED_ShowCHinese_Three(85,0,11); //C
-
- OLED_ShowString(35,3,(unsigned char *)"C_H:",3); // Current_Humidity 当前湿度
- OLED_ShowCHinese_Three(85,2,13); //.
-
- OLED_ShowString(35,5,(unsigned char *)"M_H:",3); // Modi_Humidity 修改当前湿度
- OLED_ShowCHinese_Three(85,5,13); //.
- }
- //界面三 水位、继电器、加湿器状态显示
- void Interface3(void)
- {
- //以字符串的形式显示
- OLED_ShowString(35,1,(unsigned char *)"Relay:",6); //Realy 状态 0-》开 on 1 -》关 off
- OLED_ShowNum(88,1,Relay,1,3); //状态值
-
- OLED_ShowString(35,3,(unsigned char *)"Hfier:",6); // 加湿器状态 0->开On 1-》关 0ff
- OLED_ShowNum(88,3,hfier,1,3);//状态值
- OLED_ShowString(35,5,(unsigned char *)"Water:",6); // 水位高度
- OLED_ShowNum(88,5,water/100,1,3); //状态值
- OLED_ShowNum(96,5,water/10%10,1,3);
- OLED_ShowNum(102,5,water%10,1,3);
- }
- /******************************三种LED控制********************************/
- void Led_Switch(void)
- {
- //1.湿度 < 40
- if(kk < 40)
- {
- Led1_on();
- //printf("led1_on\n");
- }
- else
- {
- Led1_off();
- //printf("led1_off\n");
- }
-
- //2.40 < 湿度 < 60
- if((kk > 40) &&(kk < 60))
- {
- Led2_on();
- //printf("led2_on\n");
- }
- else
- {
- Led2_off();
- //printf("led2_off\n");
- }
-
- //3.湿度 > 60
- if(kk > 60)
- {
- Led3_on();
- //printf("led3_on\n");
- }
- else
- {
-
- Led3_off();
- //printf("led3_off\n");
- }
-
- }
- //温度获取函数
- void Get_Temperature(void)
- {
- // uint16_t i;
- // uint8_t k;
- // uint8_t kk;
- // uint8_t kkk;
- //上面定义为全局 其他地方要用到
- DHT11_UpdateData();
-
- i = Rxbuff[0]+ Rxbuff[1]+Rxbuff[2]+ Rxbuff[3];
- if(Rxbuff[4] ==i)
- {
- k=Rxbuff[2];
- kk=Rxbuff[0];
- kkk=Rxbuff[3];
- OLED_ShowNum(68,1,k/10,3,3);
- OLED_ShowNum(76,1,k%10,3,3);
- OLED_ShowNum(68,3,kk/10,3,3);
- OLED_ShowNum(76,3,kk%10,3,3);
- OLED_ShowNum(68,5,m_humidity/10,3,3); //修改湿度值显示
- OLED_ShowNum(76,5,m_humidity%10,3,3);
- }
- Led_Switch();
- //printf("t:%d %d\n",k,kk); //测试的时候通过串口打印数据
- }
- /************************************功能函数********************************************/
- //通过按键来进行界面的切换
- void Key_Mode(void)
- {
- keyvalue = KEY_Scan(); //按键1来进行模式的切换
-
- if(keyvalue == 1) //判断按键1是否被按下 向上进行界面切换
- {
- Buzzer_On();
- delay_ms(100);
- Buzzer_Off();
- delay_ms(100);
- flag++;
- if(flag > 3) //界面边界处理
- {
- flag = 1;
- }
- }
- if(keyvalue == 4) //向下进行界面切换
- {
- Buzzer_On();
- delay_ms(100);
- Buzzer_Off();
- delay_ms(100);
- flag--;
- if(flag < 1) //界面边界处理
- {
- flag = 3;
- }
- }
- if(flag == 2) //按键处理 进行湿度修改
- {
-
- if(keyvalue == 2)
- {
- Buzzer_On();
- delay_ms(100);
- Buzzer_Off();
- delay_ms(100);
- m_humidity +=2; //每次加2
- if(m_humidity >= 95) //边界处理最大95
- {
- m_humidity = 20; //超过最大值重新置为初值
- }
-
- }
-
- if(keyvalue == 3)
- {
- Buzzer_On();
- delay_ms(100);
- Buzzer_Off();
- delay_ms(100);
- m_humidity -= 2;//每次减2
- if(m_humidity <= 20) //边界最小处理
- {
- m_humidity = 95; //小于最小值设置为最大值
- }
- }
- }
-
- }
- void Relay_Controal(void)
- {
- unsigned char i =0;//次数
- //通过比较当前湿度与我们设置的阈值 和水位控制继电器的开与断
- //当前湿度小于我们所设置的阈值 打开继电器进行加湿
- if((kk < m_humidity) &&((water !=0)))
- {
- Relayopen();
- Relay = 0; //打开标志
- hfier = 0; //加湿标志
- }
- else if(kk > m_humidity)//关闭
- {
- Relayoff();
- Relay = 1; //关闭标志
- hfier = 1; //加湿标志
- }
- //水位为0 是发出警报
- else if(water == 0)
- {
- Relayoff();
- Relay = 1; //关闭标志
- hfier = 1; //加湿标志
- for(i =0;i<5;i++)
- {
- Buzzer_On();
- delay_ms(100);
- Buzzer_Off();
- delay_ms(100);
- }
- }
- }
- /*****************************************主函数*********************************/
- int main(void)
- {
- KEY_GPIO_INIT();//按键初始化
- USART_INIT(115200);
- LED_GPIO_INIT();// led初始化
- InitRelay();
- ADC1_Init(); //水位传感器初始化
- Buzzer_GPIO_Init();//蜂鸣器初始化
- OLED_Init(); //初始化OLED
- OLED_Clear(0);
- Relayoff();
- while(1)
- {
- Key_Mode();
- switch(flag)
- {
- case 1: OLED_Clear(0);main_interface();break;
- case 2: OLED_Clear(0);Get_Temperature();Interface2();break;
- case 3: OLED_Clear(0);Interface3();break;
- default:
- break;
- }
- Relay_Controal();
- Led_Switch();
- water = water_Get_Value();
- }
- }
复制代码
三、效果图
接线有点乱 整体效果还是有的
————————————————
版权声明:@slow-walker
|