零基础学会制作 基于STM32/51单片机的草坪培育智能控制系统设计/智能花盆/智能灌溉/植物培育

项目介绍

本次设计以STM32F103C8T6单片机为核心,检测植物生长的温湿度、光照和土壤湿度等环境参数。根据检测数据和预设值的对比,判断缺少或者饱和来传递给单片机,以此控制自动实现光的遮或补功能。根据草坪生长期的浇水规则及对外界环境温湿度、土壤湿度的特殊要求,采用光敏电阻模块对草坪实现遮光、补光,DS18B20模块显示反馈室内温度,DHT11湿度模块检测土壤的干湿度进而实现水泵为草坪进行补水操作,通ESP8266模块监控草坪进行远程监控和管理。

功能介绍

(1)能测量环境的温度。温度过高或过低时可启动空调进行调节;
(2)能够检测土壤的湿度。当土壤湿度低时可洒水处理;
(3)能够检测到草坪所受的光照强度,根据草坪生长需要进行遮光或者开灯补光操作,
(4)当系统没有完成相应操作时,需有报警提示;
(5)采集的数据可通过WiFi模块和手机通信,能从手机上监控和修改参数;

所用模块

基于STM32单片机的草坪培育智能控制系统旨在通过自动化技术提高草坪的培育效率和质量。系统利用STM32单片机的高性能处理能力,集成传感器数据采集、环境监测、自动灌溉、功能,实现对草坪培育过程的智能化管理。本设计可自动检测土壤湿度、温度、光强等环境参数;同时,该设计系统响应时间快,能够实时监测环境变化;具有较高的可靠性和稳定性,确保长期稳定运行。草坪栽培智能控制系统以它为控制核心,负责整个系统的控制和数据处理,土壤湿度传感器、温度传感器、光传感器等,用于采集环境参数。使用WiFi模块进行数据传输、远程监控。

系统原理图

在这里插入图片描述

实物图

在这里插入图片描述

在这里插入图片描述

部分代码

int main(void)
{
all_int();
while(1)
{
updata_bao();
// delay_ms(100);
key=KEY_Scan(1);
getdata();
xianshi();
keychuli();
ESP_RecvProcess(); // 处理ESP8266接收到的数据
mqtt_lian();
flash_write();
panduan();
}
}
void all_int(void)
{
System_Init(); //初始化系统时钟
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
SysTick_Init(systick_isr); //初始化系统滴答定时器
Lsens_Init(); //初始化光敏电阻及土壤湿度传感器
USART1_Init(115200,NULL,NULL); //初始化串口1,打印日志用
OLED_Init(); //初始化OLED屏幕
OLED_Display_On(); //OLED屏幕显示开
OLED_Clear(); //OLED屏幕清屏
if(DHT11_Init()) //如果DHT11初始化失败则输出错误信息
{
printf(“DHT11 Init ERROR”);
}
delay_ms(500); //延时500ms
flash_read();//读取内存中的传感器阈值
ESP_Init(); //初始化ESP8266 WiFi模块
AliYun_Mqtt_Init(); //初始化阿里云MQTT协议
}
void systick_isr(void)
{
// 每当sys_cnt小于1000时,sys_cnt加1
if(sys_cnt < 1000) sys_cnt++;
else
{
sys_cnt = 0; // 当sys_cnt等于1000时,将sys_cnt重置为0
sys_update_rate = 1; // 将sys_update_rate设为1,表示系统更新率为每秒1次
}

// 每当ping_cnt小于10000时,ping_cnt加1
if(ping_cnt < 10000) ping_cnt++;
else
{
	ping_cnt = 0; // 当ping_cnt等于10000时,将ping_cnt重置为0
	ping_start = 1; // 将ping_start设为1,表示开始进行ping操作
}

// 每当urc_cnt小于1000时,urc_cnt加1
if(urc_cnt < 1000) urc_cnt++;
else
{
	urc_cnt = 0; // 当urc_cnt等于1000时,将urc_cnt重置为0
	urc_update = 1; // 将urc_update设为1,表示urc更新
}

// 每当recv_timeout小于30时,recv_timeout加1
if(recv_timeout < 30) recv_timeout++;
if(recv_timeout == 20) 
{
	recv_complete = 1; // 当recv_timeout等于20时,将recv_complete设为1,表示接收完成
}

// 如果esp状态为ESP_STA_CONNECTED
if(esp_connect_ok == ESP_STA_CONNECTED)
{
	// 每当esp_recv_timeout小于30时,esp_recv_timeout加1
	if(esp_recv_timeout < 30) esp_recv_timeout++;
	if(esp_recv_timeout == 20) 
	{
		esp_recv_complete = 1; // 当esp_recv_timeout等于20时,将esp_recv_complete设为1,表示接收完成
	}
}

}
void xianshi (void)
{
光(0) 照(1) 强(2) 度(3) 温(4) 度(5) 湿(6) 度(7)
// 土(8) 壤(9) 湿(10) 度(11) 模(12) 式(13) 手(14) 自(15)
// 动(16) 设(17) 置(18) 阈(19) 值(20) 上(21) 下(22) 限(23)
// 如果p等于0,显示光照强度、温度、湿度、土壤湿度、模式手自动设置阈值
if(p==0)
{
OLED_ShowCHinese(0,2,0); // 显示字符"光"
OLED_ShowCHinese(16,2,1); // 显示字符"照"
OLED_ShowCHinese(32,2,2); // 显示字符"强"
OLED_ShowCHinese(48,2,3); // 显示字符"度"
sprintf((char *)buff,“:%2d ux”,gz); // 将光照强度转换为字符串并存储在buff中
OLED_ShowString(64,2,buff,16); // 在坐标(64,2)处显示光照强度字符串

	OLED_ShowCHinese(0,0,4); // 显示字符"温"
	OLED_ShowCHinese(16,0,5); // 显示字符"度"
	sprintf((char *)buff,":%2dC",h_w); // 将温度转换为字符串并存储在buff中
	OLED_ShowString(32,0,buff,16); // 在坐标(32,0)处显示温度字符串
	
	OLED_ShowCHinese(72,0,6); // 显示字符"湿"
	OLED_ShowCHinese(88,0,7); // 显示字符"度"
	sprintf((char *)buff,":%2d",h_s); // 将湿度转换为字符串并存储在buff中
	OLED_ShowString(104,0,buff,16); // 在坐标(104,0)处显示湿度字符串
	
	OLED_ShowCHinese(0,4,8); // 显示字符"土"
	OLED_ShowCHinese(16,4,9); // 显示字符"壤"
	OLED_ShowCHinese(32,4,10); // 显示字符"湿"
	OLED_ShowCHinese(48,4,11); // 显示字符"度"
	sprintf((char *)buff,":%2d %%",t_s); // 将土壤湿度转换为字符串并存储在buff中
	OLED_ShowString(64,4,buff,16); // 在坐标(64,4)处显示土壤湿度字符串

	OLED_ShowCHinese(0,6,12); // 显示字符"模"
	OLED_ShowCHinese(16,6,13); // 显示字符"式"
	sprintf((char *)buff,":");
	OLED_ShowString(32,6,buff,16); // 在坐标(32,6)处显示冒号
	if(moshi==1)
	{
		OLED_ShowCHinese(48,6,14); // 显示字符"手"
		OLED_ShowCHinese(64,6,16); // 显示字符"动"
	}
	if(moshi==0)
	{
		OLED_ShowCHinese(48,6,15); // 显示字符"自"
		OLED_ShowCHinese(64,6,16); // 显示字符"动"
	}
	
}
// 如果p等于1,显示土壤湿度阈值设置界面
if(p==1)
{
	OLED_ShowCHinese(32,0,17); // 显示字符"设"
	OLED_ShowCHinese(80,0,18); // 显示字符"置"
	
	sprintf((char *)buff," "); // 将空格字符存储在buff中
	OLED_ShowString(0,6,buff,16); // 在坐标(0,6)处显示空格字符
	OLED_ShowString(0,2,buff,16); // 在坐标(0,2)处显示空格字符
	OLED_ShowString(0,4,buff,16); // 在坐标(0,4)处显示空格字符
	if(hang==1)
			OLED_ShowString(0,2,(u8 *)">",16); // 在坐标(0,2)处显示">"字符
	if(hang==2)
			OLED_ShowString(0,4,(u8 *)">",16); // 在坐标(0,4)处显示">"字符
	if(hang==3)
			OLED_ShowString(0,6,(u8 *)">",16); // 在坐标(0,6)处显示">"字符
	
	OLED_ShowCHinese(8,2,10); // 显示字符"湿"
	OLED_ShowCHinese(24,2,11); // 显示字符"度"
	OLED_ShowCHinese(40,2,21); // 显示字符"上"
	OLED_ShowCHinese(56,2,23); // 显示字符"限"
	if(sdyz_high>99)sdyz_high=99; // 如果土壤湿度上限大于99,则将其设为99
	sprintf((char *)buff,": %2d %%",sdyz_high); // 将土壤湿度上限转换为字符串并存储在buff中
	OLED_ShowString(72,2,buff,16); // 在坐标(72,2)处显示土壤湿度上限字符串
	
	OLED_ShowCHinese(8,4,10); // 显示字符"湿"
	OLED_ShowCHinese(24,4,11); // 显示字符"度"
	OLED_ShowCHinese(40,4,22); // 显示字符"下"
	OLED_ShowCHinese(56,4,23); // 显示字符"限"
	if(sdyz_low >99)sdyz_low=99; // 如果土壤湿度下限大于99,则将其设为99
	sprintf((char *)buff,": %2d %%",sdyz_low); // 将土壤湿度下限转换为字符串并存储在buff中
	OLED_ShowString(72,4,buff,16); // 在坐标(72,4)处显示土壤湿度下限字符串
	
	OLED_ShowCHinese(8,6,0); // 显示字符"光"
	OLED_ShowCHinese(24,6,1); // 显示字符"照"
	OLED_ShowCHinese(40,6,19); // 显示字符"阈"
	OLED_ShowCHinese(56,6,20); // 显示字符"值"
	if(gzyz > 99)gzyz = 99; // 如果光照阈值大于99,则将其设为99
	sprintf((char *)buff,": %2d ux",gzyz); // 将光照阈值转换为字符串并存储在buff中
	OLED_ShowString(72,6,buff,16); // 在坐标(72,6)处显示光照阈值字符串
}

}

资料下载链接

「实物制作资料.rar」,来自夸克网盘分享。
夸克网盘无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
/a0ef3461vM😕
链接:https://pan.quark.cn/s/75ec9d817bf9
提取码:CtuL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值