功能介绍:
0.本系统采用STM32F103C8T6作为单片机
1.采用DS1302时钟芯片可实时显示时间,通过四个功能按键可设置投喂等操作定时时间
2.具有WiFi模块可以与手机进行数据传输通信
3.采用防水型的DS18B20传感器可以测量水温
4.采用DC002作为电源接口可直接输入5V给整个系统供电
5.水位传感器可以测量水位的实时情况
6.具备水泵控制电路,根据水位传感器数据判断是否加水;具备加热和投食控制电路。

原理图:

PCB:

主程序:

#define __MIAN_C
#include "main.h"// 局部变量,用于保存转换计算后的电压值
CreatByte volatile Flag;
enum _MODE_DF_ dispMode;char dis[16];
volatile u8 setIndex = 0;
volatile u8 feedTime[2] = {18, 0}; //投喂时间18:00
volatile u16 totalFeedTime[3] = {0, 0}; //投喂时间18:00
volatile u8 feedLevel = 1; //投喂量等级
volatile u16 amountOfFeed = 0;
volatile u16 feedDelay = 0; //喂食延迟
uint16_t tempBuf = 0;
float f_temp = 0.0;
volatile uint16_t tempMin = 25; //最低温度
volatile uint16_t tempMax = 40; //最高温度
uint16_t waterLevel = 0;
volatile uint16_t waterLevelLow = 25; //最低水位
volatile uint16_t waterLevelHigh = 35; //最高水位
char command = NULL;int main(void)
{// 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MHHSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz// 端口初始化GENERAL_TIM_Init();GPIO_Config();DS1302_Init();USART_Config();ADCx_Init();DelayMs(1000);printf("AT+CIPMUX=1\r\n"); //打开多连接DelayMs(1000);printf("AT+CIPSERVER=1,8080\r\n"); //建立服务 端口号为8080DelayMs(1000);Key_GPIO_Config();DelayMs(200);LCD_GPIO_Init();LCD_Init();LCD_DispStr(0, 0, "    Welcome!    ");DelayMs(200);DelayMs(200);DelayMs(200);LCD_Clear();DelayMs(200);while (1){if (sendFlag == 1){sendFlag = 0;SendData();}if (refreshFlag == 1){refreshFlag = 0;if (dispMode == NORMAL){DispNormal();}if (waterLevel <= waterLevelLow) //水位低于最低水位值,启动水泵继电器{RELAY_WATER_ON;}else if (waterLevel >= waterLevelHigh) //水位高于最高水位值,关闭水泵继电器{RELAY_WATER_OFF;}if (f_temp <= tempMin) //温度低于最低温度值,启动加热继电器{RELAY_HEAT_ON;}else if (f_temp >= tempMax) //温度高于最高温度值,关闭加热继电器{RELAY_HEAT_OFF;}if (timeBufDec[4] == feedTime[0] && timeBufDec[5] == feedTime[1] && timeBufDec[6] == 0) //到达喂食时间{feedDelay = feedLevel * 5; //feedLevel * 1s * 5}if (feedDelay > 0) //启动喂食{feedDelay--;amountOfFeed = amountOfFeed + 5; //喂食总量加5gtotalFeedTime[2]++; //秒钟加if (totalFeedTime[2] == 60){totalFeedTime[2] = 0;totalFeedTime[1]++;if (totalFeedTime[1] == 60){totalFeedTime[1] = 0;totalFeedTime[0]++;}}RELAY_FOOD_ON;}else{RELAY_FOOD_OFF;}}KeyProcess();}
}void DispNormal(void)
{TIM_ITConfig(GENERAL_TIM2, TIM_IT_Update, DISABLE);DS1302_ReadTime();TIM_ITConfig(GENERAL_TIM2, TIM_IT_Update, ENABLE);sprintf(dis, "%02d/%02d/%02d", (int)timeBufDec[1], (int)timeBufDec[2], (int)timeBufDec[3]);// sprintf(dis, "%02d/%02d/%02d", timeBufDec[1], timeBufDec[2], timeBufDec[3]);LCD_DispStr(0, 0, dis);switch (timeBufDec[7]){case 0: LCD_DispStr(10, 0, " Sun."); break;case 1: LCD_DispStr(10, 0, " Sun."); break;case 2: LCD_DispStr(10, 0, " Mon."); break;case 3: LCD_DispStr(10, 0, " Tue."); break;case 4: LCD_DispStr(10, 0, " Wed."); break;case 5: LCD_DispStr(10, 0, "Thur."); break;case 6: LCD_DispStr(10, 0, " Fri."); break;case 7: LCD_DispStr(10, 0, " Sat."); break;default: break;}TIM_ITConfig(GENERAL_TIM2, TIM_IT_Update, DISABLE);DS18B20_GetTemp(&tempBuf); //采集温度f_temp = tempBuf * 0.0625; //温度转换TIM_ITConfig(GENERAL_TIM2, TIM_IT_Update, ENABLE);waterLevel = ADC_ConvertedValue; //检测水位值waterLevel = waterLevel * 100 / 4096;// sprintf(dis, "%02d:%02d %5.1f", (int)timeBufDec[4], (int)timeBufDec[5], f_temp);sprintf(dis, "%02d:%02d:%02d %4.1f", (int)timeBufDec[4], (int)timeBufDec[5], (int)timeBufDec[6], f_temp);LCD_DispStr(0, 1, dis);//    LCD_DispOneChar(11, 1, 0xdf); //摄氏度右上角的°
//    LCD_DispOneChar(12, 1, 'C'); //摄氏度右上角的°sprintf(dis, " %02d", waterLevel);LCD_DispStr(13, 1, dis);
}void DispSetRealTime(u8 setIndex)
{sprintf(dis, "%02d/%02d/%02d", (unsigned int)timeBufDec[1], (unsigned int)timeBufDec[2], (unsigned int)timeBufDec[3]);LCD_DispStr(0, 0, dis);switch (timeBufDec[7]){case 1: LCD_DispStr(10, 0, " Sun."); break;case 2: LCD_DispStr(10, 0, " Mon."); break;case 3: LCD_DispStr(10, 0, " Tue."); break;case 4: LCD_DispStr(10, 0, " Wed."); break;case 5: LCD_DispStr(10, 0, "Thur."); break;case 6: LCD_DispStr(10, 0, " Fri."); break;case 7: LCD_DispStr(10, 0, " Sat."); break;default: break;}sprintf(dis, "    %02d:%02d:%02d    ", (unsigned int)timeBufDec[4], (unsigned int)timeBufDec[5], (unsigned int)timeBufDec[6]);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(1, 0, 1); break;case 2: LCD_SetCursor(4, 0, 1); break;case 3: LCD_SetCursor(7, 0, 1); break;case 4: LCD_SetCursor(14, 0, 1); break;case 5: LCD_SetCursor(5, 1, 1); break;case 6: LCD_SetCursor(8, 1, 1); break;case 7: LCD_SetCursor(11, 1, 1); break;default:break;}
}void DispSetWaterLevel(u8 setIndex)
{LCD_DispStr(0, 0, " Set WaterLevel ");sprintf(dis, "   H:%2d%% L:%2d%%  ", waterLevelHigh, waterLevelLow);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(6, 1, 1); break;case 2: LCD_SetCursor(12, 1, 1); break;default:;}
}void DispSetTemp(u8 setIndex)
{LCD_DispStr(0, 0, "Set Temperature ");sprintf(dis, "   H:%3d L:%3d  ", tempMax, tempMin);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(7, 1, 1); break;case 2: LCD_SetCursor(13, 1, 1); break;default:;}
}void DispSetFeed(u8 setIndex)
{sprintf(dis, "FeedTime: %02d:%02d ", (unsigned int)feedTime[0], (unsigned int)feedTime[1]);LCD_DispStr(0, 0, dis);sprintf(dis, "FeedLevel: %2d   ", (unsigned int)feedLevel);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(11, 0, 1); break;case 2: LCD_SetCursor(14, 0, 1); break;case 3: LCD_SetCursor(12, 1, 1); break;default:break;}
}void DispSetTotalFeed(u8 setIndex)
{sprintf(dis, "Total:  %02d:%02d:%02d", (unsigned int)totalFeedTime[0], (unsigned int)totalFeedTime[1], (unsigned int)totalFeedTime[2]);LCD_DispStr(0, 0, dis);sprintf(dis, "TotalFeed: %4dg", (unsigned int)amountOfFeed);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(15, 0, 1); break;case 2: LCD_SetCursor(14, 1, 1); break;default: break;}
}void SendData(void)
{printf("AT+CIPSEND=0,29\r\n"); //发送29位数据DelayMs(100);printf("Water Level:%2d%% Temp:%5.1f'C\r\n", waterLevel, f_temp); //串口发送DelayMs(100);
}/*********************************************END OF FILE**********************/

实物演示视频:
https://www.bilibili.com/video/BV1UU4y117K1/

基于STM32单片机的智能鱼缸控制系统原理图PCB相关推荐

  1. 基于stm32单片机的智能鱼缸设计(实物+原理图+源码)

    资料编号:059     功能如下: 1.采用stm32单片机作为控制CPU,OLED显示万年历和温度 2.智能加热.加氧.加二氧化碳 3.采用智能自动开灯 具体功能请看下方演示视频 59-基于stm ...

  2. 基于STM32单片机的智能水表水流量计原理图PCB

    功能: 0.本系统采用STM32F103C8T6作为单片机 1.该系统采用LCD1602液晶显示各种参数,包括瞬时流量速度,已经总流量,同时可通过按键设置最大阈值,一旦流量超过该值将启动报警 2.报警 ...

  3. 基于51单片机的智能鱼缸设计。 有原理图,程序,原文,可代做实物。 才用STC12C5A60S2,最新款国产51单片机

    基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...

  4. 3、基于51单片机的智能水箱控制系统-温度-PH值-水位(仿真+程序+原理图)

    目录 基于51单片机的智能水箱控制系统 1.主要功能 2.实验结果 3.仿真工程 4.原理图 5.程序源码 6.资源获取 基于51单片机的智能水箱控制系统 1.主要功能 51单片机检测水箱内温度,ph ...

  5. B40 - 基于STM32单片机的电热蚊香蓝牙控制系统

    任务 本项目进行智能电热蚊香器系统的设计与开发,将STM32开发板作为一个微控制器,结合蓝牙技术,通过手机APP软件对电热蚊香器进行灵活的控制,使电热蚊香器的功能更加人性化,更加符合当代人们对家用电器 ...

  6. 基于51单片机的智能鱼缸设计

    基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...

  7. 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+

    ## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...

  8. 基于STM32单片机的智能家居测量系统设计

    当今的家庭生活面临着各种环境和健康问题,周围的生活参数存在潜在的隐患,包括室温.气体中有害物质的浓度等.在新时代,人们越来越关注健康及其相关因素.随着微电子技术的应用,电器的普及,以及单片机和传感器性 ...

  9. 基于STM32单片机的智能停车场车位管理系统设计

    摘  要 通过调查发现,现有的许多公共场所的停车位管理落后,智能化程度不高.为顺应现代自动化狂潮的发展趋势,本项目以STM32单片机为主控芯片,基于RFID智能识别技术,设计了一个具有IC识别的智能停 ...

最新文章

  1. 单应性Homograph估计:从传统算法到深度学习
  2. 综合评价模型的缺点_浅谈交通影响评价中不同交通预测方法的特性
  3. ScrollMagic – 酷毙了!超炫的页面滚动交互效果
  4. 机器学习系列之手把手教你实现一个 naiveBayes
  5. 十问十答 GPL 许可证
  6. dos打开计算机管理,小何 发布 DOS 命令打开控制面板各项东东 你们懂得...
  7. OLTP和OLAP的区别
  8. CDKEY制作:为什么会有CDKEY产生机这样的破解工具?
  9. 【系统分析师】操作系统
  10. 实时股价——可以查询股票当前价格。用户可以设定数据刷新频率,程序会用绿色和红色的箭头表示股价走势。
  11. emoji表情乱码php,推送emoji表情乱码的解决方法
  12. 跨境知道快讯:Anker出新招,一个月进账600万美金
  13. ps计算机海报设计,ps海报设计心得.docx
  14. FL Studio教程之在线面板详解
  15. 乐观复制算法-9.扩展乐观复制系统
  16. 使用python处理wps表格_【使用Python操作XLS文件+wps中叫et+】 - #1
  17. 《SOC芯片研究框架》深度科普,发展趋势、技术特点、产业链一文看懂
  18. Vue 组件封装之 Search 搜索
  19. 简单解析Ajax中onreadystatechange事件的readyState属性和status属性
  20. java 随机昵称_Java随机产生中文昵称

热门文章

  1. Linux云计算——传统虚拟化——EXSI
  2. Get、Put、Post、Delete 含义与区别
  3. java .long.math.sgn_Java的数值类型转换
  4. 哔哩哔哩老显示服务器中断,哔哩哔哩服务器不能正常播放怎么办_bilibili服务器无法正常播放的解决办法_牛游戏网...
  5. matplotlib设置中英文多种字体混合坐标轴名称
  6. Mac电脑上最好用的3个azw/azw3阅读器
  7. c语言qsort函数简介,C语言排序函数—qsort函数
  8. 【PHP】创蓝253云通讯paas平台短信验证码接口调用emo
  9. 基于bs4的python爬虫+mongoDB
  10. Redis核心技术与实战-学习笔记(五)内存快照RDB