常见的网站类型有,建设工程合同包括哪些合同,个人养老保险计算器,秦皇岛属于哪个省哪个市的#x1f91e;#x1f91e;大家好#xff0c;这里是5132单片机毕设设计项目分享#xff0c;今天给大家分享的是智能鱼缸水质净化系统。 目录
1、设计要求
2、系统功能
3、演示视频和实物
4、系统设计框图
5、软件设计流程图
6、原理图
7、主程序
8、总结 1、设计要求… 大家好这里是5132单片机毕设设计项目分享今天给大家分享的是智能鱼缸水质净化系统。 目录
1、设计要求
2、系统功能
3、演示视频和实物
4、系统设计框图
5、软件设计流程图
6、原理图
7、主程序
8、总结 1、设计要求 本毕业设计以单片机作为控制核心芯片设计出一款具有监测鱼缸水的温度、水位、浊度和PH值等参数并且通过WIFI模块连接云平台用来实现数据上传和下发 2、系统功能 1基于STM32F103C8T6为主控制器的智能鱼缸的设计与实现。其中包括基于STM32F103C8T6单片机的最小系统的搭建温度传感器、浑浊度传感器、水位传感器等相关器件模块的选型和原理图设计在上述原理图的基础上搭建硬件平台并验证其功能的完善性。 1ESP8266-01Wifi模块。通过本模块单片机系统可以连接到机智云手机APP就可以远程控制鱼缸的开关。 2水位传感器器。水位传感器用来检测鱼缸内的水位是鱼缸的水位保持在一定的范围内通过比较水位和水位的阈值来控制补水泵和排水泵。 3温度传感器温度传感器用来检测鱼缸内的水温使鱼缸保持恒温。 4PH传感器用来检测鱼缸内的PH值。 5水泵继电器模块用继电器来驱动两个水泵。 6时钟模块。利用时钟振荡电路产生时钟信号。单片机时钟可以提供一个固定的时钟频率用于同步和控制各个模块的操作。通过时钟信号的控制可以确保单片机系统中各个模块按照一定的时间序列进行操作从而实现定时功能。 7OLED显示模块。OLED显示模块采用0.96寸液晶显示屏该模块用来实时显示传感器数据及鱼缸工作状态 8按键模块。按键模块用来控制模式选择和控制鱼缸的开启与关闭。 9蜂鸣器模块。设备出现故障用来报警。 10舵机用来控制净水系统的开关。 3、演示视频和实物 基于STM32的鱼缸水质净化系统 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序
#include sys.h //有定制和购买的可以联系VXlwfw123456789
#include delay.h
#include usart.h
#include led.h
#include timer.h
#include usart3.h
#include gizwits_product.h
#include Key.h
#include Buzzer.h
#include OLED.h
#include AD.h
#include MyRTC.h
#include Servo.h
#include ds18b20.h
/***********************************************************************************************
同学好我们是5132单片机设计定制单片机设计实物和说明书均可定制欢迎大家咨询。VXlwfw123456789
其他项目演示视频和说明请大家移步哔哩哔哩、CSDN和公众号等。
哔哩哔哩5132单片机设计
CSDN 5132单片机设计
公众号 5132单片机设计
抖音 5132单片机设计
小红书 5132单片机设计
咸鱼 5132单片机设计
************************************************************************************************/uint8_t KeyNum; //存储按键值
uint32_t bufe[10]; //存储传感器采集的数据
uint16_t AD0, AD1, AD2, AD3; //存储5路ADC值uint32_t TempYu 25;
uint32_t ShuiWeiYu_Xia 10;
uint32_t ShuiWeiYu_Shang 70;
uint32_t ZhuoYu 70;
uint32_t PHYu 5;
short temperature; //存放温湿度
u8 state, state2 2, state2_1, state2_2, state3; //按键状态标志
u8 t 0; //传感器读取时间间隔
u8 flag; //远程控制标志
u8 flag2 0, flag1, flag3;
uint16_t RTC_Time[] {0, 0, 0};
uint16_t RTC_Time1[] {7, 0, 0}; //定时时间---开
uint16_t RTC_Time2[] {19, 0, 0}; //定时时间---关
u8 T_state, T_state1, qingping 1, state_dingshi_yu_guan, state_dingshi_yu_kai, state_dingshi_yu_switch, state3_1;
float PH;
extern void TimeSet(void);
extern void TimeRead(void);
extern void DingShiMoShi(void);
extern void YuZhiSet(void);
extern void ChuangGan(void);void MY_Gizwits_Init(void) //机智云初始化函数
{TIM3_Int_Init(9, 7199); //1MS系统定时usart3_init(9600);//WIFI初始化memset((uint8_t *)currentDataPoint, 0, sizeof(dataPoint_t)); //设备状态结构体初始化gizwitsInit();//环形缓冲区初始化gizwitsSetMode(2); //设置模式userInit();
}
u16 Get_Adc_Average(u8 ADC_CHx, u8 times)
{u32 temp_val 0;u8 t;for (t 0; t times; t){temp_val AD_GetValue(ADC_CHx);//SYSTICK_DelayMs(5);}return temp_val / times;
}void shoudong()
{TimeRead();if (KeyNum 2) //按键{delay_ms(20);if (KeyNum 2){state2;if (state2 1){state2 0;}}}if (state2 0){Servo_SetAngle(90);//外设操作}if (state2 1){Servo_SetAngle(0);//外设操作}if (KeyNum 3) //按键{delay_ms(20);if (KeyNum 3){state2_1;if (state2_1 2){state2_1 0;}}}if (state2_1 1){BuShuiBen_ON();//外设操作PaiShuiBen_OFF();}if (state2_1 0){BuShuiBen_OFF();//外设操作PaiShuiBen_OFF();}if (state2_1 2){BuShuiBen_OFF();//外设操作PaiShuiBen_ON();}if (KeyNum 4) //按键{delay_ms(20);if (KeyNum 4){state2_2;if (state2_2 1){state2_2 0;}}}if (state2_2 1){JiaRe_ON();//外设操作}if (state2_2 0){JiaRe_OFF();//外设操作}}
void zhidong()
{if (bufe[0] ShuiWeiYu_Xia){BuShuiBen_ON();PaiShuiBen_OFF();}else if (bufe[0] ShuiWeiYu_Shang){PaiShuiBen_ON();BuShuiBen_OFF();}else{ PaiShuiBen_OFF();BuShuiBen_OFF();}if (bufe[3]/10 TempYu){JiaRe_ON();}else{JiaRe_OFF();}if ((bufe[1]/10 PHYu) || (bufe[2] ZhuoYu)){Buzzer_Turn();}else{Buzzer_OFF();}}int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级2位响应优先级uart_init(9600); //串口初始化为9600delay_init(); //延时函数初始化LED_Init(); //初始化与LED连接的硬件接口Buzzer_Init(); //下面为外设初始化OLED_Init();Key_Init();AD_Init();MyRTC_Init();Servo_Init(); //舵机初始化并设置舵机初始角度while (DS18B20_Init()) //DS18B20初始化{printf(ds18b20 success!);delay_ms(200);}MY_Gizwits_Init(); //机智云初始化while (1){userHandle(); //数据上传gizwitsHandle((dataPoint_t *)currentDataPoint); //后台处理必须放在while里if (t % 10 0){AD0 AD_GetValue(ADC_Channel_0); //水位传感器 PA0if (AD0 4000)AD0 4000;bufe[0] (u8)(AD0 / 40);AD2 Get_Adc_Average(ADC_Channel_2, 10);PH (float)AD2 * (3.3 / 4096); //读取ADC通道4的值PH -5.7541 * PH 16.654; //输出电压范围0~3V3 因为STM32的ADC参考电压是3.3V//将ADC的原始值adcx转换为电压值。这里假设ADC的参考电压是3.3V并且ADC的位数是12位即最大值为4096。bufe[1] PH * 10;AD3 AD_GetValue(ADC_Channel_3); //浊度传感器 PA3if (AD3 4000)AD3 4000;bufe[2] (u8)(100 - (AD3 / 40));temperature DS18B20_Get_Temp();bufe[3] temperature;}t;KeyNum Key_GetNum();if (KeyNum 1){qingping 0;state2 2,delay_ms(20);if (KeyNum 1){state;if (state 3){state 0;}}}if (state 0) //远程模式{if (qingping 0){OLED_Clear();qingping 1;} TimeRead();ChuangGan();OLED_ShowChinese(1, 7, 49);OLED_ShowChinese(1, 8, 50);}if (state 2) //自动模式{OLED_ShowChinese(1, 7, 51);OLED_ShowChinese(1, 8, 52);TimeRead();zhidong();ChuangGan();}if (state 1) //手动模式{OLED_ShowChinese(1, 7, 18);OLED_ShowChinese(1, 8, 52);ChuangGan();shoudong();}if (state 3) //阈值设置{if (qingping 0){OLED_Clear();qingping 1;}YuZhiSet();}}
}void TimeSet() //设置时间
{if (KeyNum 2) //PB10{delay_ms(20);if (KeyNum 2){T_state;if (T_state 2){T_state 0;}}}if (T_state 0) //时间显示模式{MyRTC_ReadTime();OLED_ShowNum(1, 5, MyRTC_Time[3], 2); //时OLED_ShowString(1, 7, :);OLED_ShowNum(1, 8, MyRTC_Time[4], 2); //分OLED_ShowString(1, 10, :);OLED_ShowNum(1, 11, MyRTC_Time[5], 2); //秒RTC_Time[0] MyRTC_Time[3];RTC_Time[1] MyRTC_Time[4];RTC_Time[2] MyRTC_Time[5];}if (T_state 1) //修改时间{if (KeyNum 5){delay_ms(20);if (KeyNum 5){T_state1;if (T_state1 2){T_state1 0;}}}if (T_state1 0) //修改时{if (KeyNum 4)RTC_Time[0];if (KeyNum 3)RTC_Time[0]--;if (RTC_Time[0] 23 RTC_Time[0] 100)RTC_Time[0] 0;if (RTC_Time[0] 100)RTC_Time[0] 23;OLED_ShowNum(1, 5, RTC_Time[0], 2); //时}if (T_state1 1) //修改分{if (KeyNum 4)RTC_Time[1];if (KeyNum 3)RTC_Time[1]--;if (RTC_Time[1] 59 RTC_Time[1] 100)RTC_Time[1] 0;if (RTC_Time[1] 100)RTC_Time[1] 59;OLED_ShowNum(1, 8, RTC_Time[1], 2); //时}if (T_state1 2) //修改秒{if (KeyNum 4)RTC_Time[2];if (KeyNum 3)RTC_Time[2]--;if (RTC_Time[2] 59)RTC_Time[2] 0;if (RTC_Time[2] 59 RTC_Time[2] 100)RTC_Time[2] 0;if (RTC_Time[2] 100)RTC_Time[2] 59;OLED_ShowNum(1, 11, RTC_Time[2], 2); //时}}if (T_state 2){MyRTC_Time[3] RTC_Time[0];MyRTC_Time[4] RTC_Time[1];MyRTC_Time[5] RTC_Time[2];MyRTC_SetTime();T_state 0;}
}void TimeRead()
{MyRTC_ReadTime();OLED_ShowNum(1, 5, MyRTC_Time[3], 2); //时OLED_ShowString(1, 7, :);OLED_ShowNum(1, 8, MyRTC_Time[4], 2); //分OLED_ShowString(1, 10, :);OLED_ShowNum(1, 11, MyRTC_Time[5], 2); //秒
}void DingShiMoShi()
{TimeRead();//...............................定时模式..................................../if ((MyRTC_Time[3] RTC_Time1[0]) (MyRTC_Time[4] RTC_Time1[1]) (MyRTC_Time[5] RTC_Time1[2])){//外设操作}if ((MyRTC_Time[3] RTC_Time2[0]) (MyRTC_Time[4] RTC_Time2[1]) (MyRTC_Time[5] RTC_Time2[2])){//外设操作}//...............................修改定时时间..................................../OLED_ShowChinese(3, 1, 31);OLED_ShowString(3, 3, :);OLED_ShowNum(3, 5, RTC_Time1[0], 2);OLED_ShowString(3, 7, :);OLED_ShowNum(3, 8, RTC_Time1[1], 2);OLED_ShowString(3, 10, :);OLED_ShowNum(3, 11, RTC_Time1[2], 2);OLED_ShowChinese(4, 1, 32);OLED_ShowString(4, 3, :);OLED_ShowNum(4, 5, RTC_Time2[0], 2);OLED_ShowString(4, 7, :);OLED_ShowNum(4, 8, RTC_Time2[1], 2);OLED_ShowString(4, 10, :);OLED_ShowNum(4, 11, RTC_Time2[2], 2);if (KeyNum 5){delay_ms(20);if (KeyNum 5){state_dingshi_yu_switch;if (state_dingshi_yu_switch 2){state_dingshi_yu_switch 0;}}}if (state_dingshi_yu_switch 1) //设置阈值开的时间{if (KeyNum 2){delay_ms(20);if (KeyNum 2){state_dingshi_yu_kai;if (state_dingshi_yu_kai 2){state_dingshi_yu_kai 0;}}}if (state_dingshi_yu_kai 0) //时{if (KeyNum 3) RTC_Time2[0];if (KeyNum 4) RTC_Time2[0]--;}if (state_dingshi_yu_kai 1)//分{if (KeyNum 3) RTC_Time2[1];if (KeyNum 4) RTC_Time2[1]--;}if (state_dingshi_yu_kai 2)//秒{if (KeyNum 3) RTC_Time2[2];if (KeyNum 4) RTC_Time2[2]--;}}else{if (KeyNum 2){delay_ms(20);if (KeyNum 2){state_dingshi_yu_guan;if (state_dingshi_yu_guan 2){state_dingshi_yu_guan 0;}}}if (state_dingshi_yu_guan 0) //时{if (KeyNum 3) RTC_Time1[0];if (KeyNum 4) RTC_Time1[0]--;}if (state_dingshi_yu_guan 1)//分{if (KeyNum 3) RTC_Time1[1];if (KeyNum 4) RTC_Time1[1]--;}if (state_dingshi_yu_guan 2)//秒{if (KeyNum 3) RTC_Time1[2];if (KeyNum 4) RTC_Time1[2]--;}}if (state3_1 0) //时{if (KeyNum 5) RTC_Time1[0];if (KeyNum 6) RTC_Time1[0]--;}if (state3_1 1)//分{if (KeyNum 5) RTC_Time1[1];if (KeyNum 6) RTC_Time1[1]--;}if (state3_1 2)//秒{if (KeyNum 5) RTC_Time1[2];if (KeyNum 6) RTC_Time1[2]--;}
}void YuZhiSet()
{zhidong();OLED_ShowChinese(1, 3, 72); //显示“阈值设置”OLED_ShowChinese(1, 4, 73);OLED_ShowChinese(1, 5, 74);OLED_ShowChinese(1, 6, 75);OLED_ShowString(2, 1, S_W_X:);OLED_ShowNum(2, 7, ShuiWeiYu_Xia, 2);OLED_ShowString(3, 1, S_W_S:);OLED_ShowNum(3, 7, ShuiWeiYu_Shang, 2); OLED_ShowString(4, 10, PH:);OLED_ShowNum(4, 13, PHYu, 2);OLED_ShowString(2, 10, Temp:);OLED_ShowNum(2, 15, TempYu, 2);OLED_ShowString(3, 10, Z_D:);OLED_ShowNum(3, 14, ZhuoYu, 2);if (KeyNum 2) //自动模式下PB0按键控制阈值切换{delay_ms(20);if (KeyNum 2){state3;if (state3 4){state3 0;}}}if (state3 0){if (KeyNum 3)ShuiWeiYu_Xia;if (KeyNum 4)ShuiWeiYu_Xia--;}if (state3 1){if (KeyNum 3)ShuiWeiYu_Shang;if (KeyNum 4)ShuiWeiYu_Shang--;}if (state3 4){if (KeyNum 3)PHYu;if (KeyNum 4)PHYu--;}if (state3 2){if (KeyNum 3)TempYu ;if (KeyNum 4)TempYu --;}if (state3 3){if (KeyNum 3)ZhuoYu ;if (KeyNum 4)ZhuoYu --;}
}void ChuangGan()
{OLED_ShowChinese(2, 1, 39);OLED_ShowChinese(2, 2, 40);OLED_ShowString(2, 5, :);OLED_ShowNum(2, 6, bufe[0], 2);OLED_ShowString(2, 8, %);OLED_ShowString(4, 8, %);OLED_ShowString(2, 11, PH:);OLED_ShowNum(2, 14, bufe[1] / 10, 1);OLED_ShowString(2, 15, .);OLED_ShowNum(2, 16, bufe[1] % 10, 1);OLED_ShowChinese(3, 1, 26);OLED_ShowChinese(3, 2, 28);OLED_ShowString(3, 5, :);if (temperature 0){OLED_ShowString(3, 6, -); //显示负号temperature -temperature; //转为正数}else OLED_ShowString(3, 6, ); //去掉负号OLED_ShowNum(3, 7, temperature / 10, 2);OLED_ShowString(3, 9, .);OLED_ShowNum(3, 10, temperature % 10, 1);OLED_ShowChinese(4, 1, 78);OLED_ShowChinese(4, 2, 79);OLED_ShowString(4, 5, :);OLED_ShowNum(4, 6, bufe[2], 2);
}8、总结 本设计以单片机作为控制核心芯片设计出一款具有监测鱼缸水的温度、水位、浊度和PH值等参数并且通过WIFI模块连接云平台用来实现数据上传和下发。
文章转载自: http://www.morning.shyqcgw.cn.gov.cn.shyqcgw.cn http://www.morning.ptslx.cn.gov.cn.ptslx.cn http://www.morning.fylqz.cn.gov.cn.fylqz.cn http://www.morning.csnmd.cn.gov.cn.csnmd.cn http://www.morning.hsklc.cn.gov.cn.hsklc.cn http://www.morning.ranglue.com.gov.cn.ranglue.com http://www.morning.smhtg.cn.gov.cn.smhtg.cn http://www.morning.nxcgp.cn.gov.cn.nxcgp.cn http://www.morning.rnnwd.cn.gov.cn.rnnwd.cn http://www.morning.rxcqt.cn.gov.cn.rxcqt.cn http://www.morning.ghcfx.cn.gov.cn.ghcfx.cn http://www.morning.bxfy.cn.gov.cn.bxfy.cn http://www.morning.ctsjq.cn.gov.cn.ctsjq.cn http://www.morning.fmswb.cn.gov.cn.fmswb.cn http://www.morning.lxjxl.cn.gov.cn.lxjxl.cn http://www.morning.gxeqedd.cn.gov.cn.gxeqedd.cn http://www.morning.fpjxs.cn.gov.cn.fpjxs.cn http://www.morning.nzms.cn.gov.cn.nzms.cn http://www.morning.rcww.cn.gov.cn.rcww.cn http://www.morning.qjzgj.cn.gov.cn.qjzgj.cn http://www.morning.wqsjx.cn.gov.cn.wqsjx.cn http://www.morning.jqsyp.cn.gov.cn.jqsyp.cn http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.rwlnk.cn.gov.cn.rwlnk.cn http://www.morning.msgnx.cn.gov.cn.msgnx.cn http://www.morning.hnpkr.cn.gov.cn.hnpkr.cn http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn http://www.morning.tphjl.cn.gov.cn.tphjl.cn http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn http://www.morning.rltsx.cn.gov.cn.rltsx.cn http://www.morning.gstmn.cn.gov.cn.gstmn.cn http://www.morning.ydxg.cn.gov.cn.ydxg.cn http://www.morning.mswkd.cn.gov.cn.mswkd.cn http://www.morning.rftk.cn.gov.cn.rftk.cn http://www.morning.nxrgl.cn.gov.cn.nxrgl.cn http://www.morning.wtcyz.cn.gov.cn.wtcyz.cn http://www.morning.llllcc.com.gov.cn.llllcc.com http://www.morning.xpmwt.cn.gov.cn.xpmwt.cn http://www.morning.qgfhr.cn.gov.cn.qgfhr.cn http://www.morning.pqchr.cn.gov.cn.pqchr.cn http://www.morning.jzdfc.cn.gov.cn.jzdfc.cn http://www.morning.njqpg.cn.gov.cn.njqpg.cn http://www.morning.jbxd.cn.gov.cn.jbxd.cn http://www.morning.gzxnj.cn.gov.cn.gzxnj.cn http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn http://www.morning.hnpkr.cn.gov.cn.hnpkr.cn http://www.morning.hwnnm.cn.gov.cn.hwnnm.cn http://www.morning.tthmg.cn.gov.cn.tthmg.cn http://www.morning.nrchx.cn.gov.cn.nrchx.cn http://www.morning.wwthz.cn.gov.cn.wwthz.cn http://www.morning.szoptic.com.gov.cn.szoptic.com http://www.morning.sftpg.cn.gov.cn.sftpg.cn http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn http://www.morning.lsmgl.cn.gov.cn.lsmgl.cn http://www.morning.rpsjh.cn.gov.cn.rpsjh.cn http://www.morning.jghty.cn.gov.cn.jghty.cn http://www.morning.kqxwm.cn.gov.cn.kqxwm.cn http://www.morning.lxthr.cn.gov.cn.lxthr.cn http://www.morning.ckfyp.cn.gov.cn.ckfyp.cn http://www.morning.jrqcj.cn.gov.cn.jrqcj.cn http://www.morning.gsqw.cn.gov.cn.gsqw.cn http://www.morning.djpzg.cn.gov.cn.djpzg.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn http://www.morning.eronghe.com.gov.cn.eronghe.com http://www.morning.rqbr.cn.gov.cn.rqbr.cn http://www.morning.0dirty.cn.gov.cn.0dirty.cn http://www.morning.hclqy.cn.gov.cn.hclqy.cn http://www.morning.wdhzk.cn.gov.cn.wdhzk.cn http://www.morning.zlhcw.cn.gov.cn.zlhcw.cn http://www.morning.rrcxs.cn.gov.cn.rrcxs.cn http://www.morning.mxhcf.cn.gov.cn.mxhcf.cn http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn http://www.morning.yghlr.cn.gov.cn.yghlr.cn http://www.morning.ycpnm.cn.gov.cn.ycpnm.cn http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.rwjh.cn.gov.cn.rwjh.cn http://www.morning.lcdtb.cn.gov.cn.lcdtb.cn http://www.morning.gxfpk.cn.gov.cn.gxfpk.cn http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com