零基础学会制作 基于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

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言: 是德科技(NYSE:KEYS)是全球领先的电子测量公司,通过在无线、模块化和软件解决方案等领域的不断创新,为您提供全新的测量体验。是德科技专注于测量技术,旨在帮助科学家、研究人员和工程师精准和充满信心地应对最严苛的测量挑战。 越来越多的工程师开始选择是德科技示波器,因为它们能够帮助您: 利用屡获殊荣的示波器执行测试,从而加速将您的产品推向市场。这些示波器可以提供最快的更新速率、最深的存储器、独特的电容触摸屏,以及最广泛的示波器软件选件 利用可以信赖的测量生产出性能最高的产品。这些测量由具有业界领先信号完整性的示波器和最广泛的示波器探头提供 通过在一台主机中集成多种仪器以及轻松进行升级,实现最低的拥有成本 同时本文重点介绍了基于单片机STM32控制、Android显示的便携式数字示波器的毕业设计 数字示波器毕业设计概述: 基于单片机STM32控制的、并在Android上进行显示的便携式数字示波器。STM32单片机是一款性价比非常之高的处理器,最高时钟可达72M,完全能满足本设计的要求。采用Android设备作为显示平台,是本设计最大的一个特点。本设计的基本思路是,由单片机对ADC采样到的数据进行处理,再通过蓝牙把波形数据发送到Android设备上进行显示。同时由于Android设备都采用触摸屏,因此示波器的参数可以很方便的通过触摸屏进行设置。本设计采用Android设备取代液晶屏,并使用蓝牙进行数据传输,充分利用了Android设备的硬件资源。 由于A/D转换器的输入范围一般都比较小(低于2Vpp),不可能直接测量几十伏甚至是几百伏的信号。而且由于A/D转换器的分辨率有限,对于幅值很低的信号测量误差将会很大甚至是无法测量。所以在输入级必须要设计一个程控放大电路,以现实对信号进行不失真的处理,而后再送至A/D数模转换器,以达到A/D数模转换器的输入要求。基于本设计便携小巧的宗旨,和电路复杂度的考虑,本设计使用专用PGA芯片AD603,可以通过MCU来控制AD603的基准,进而实现不同放大倍数的调节。该电路优点是控制比较简单,且增益调节范围大,外围电路简单。缺点是成本稍微偏高。 AD603它是美国ADI公司的专利产品,是一个低噪、90MHz带宽增益可调的集成运放,如增益用分贝表示,则增益与控制电压成线性关系,压摆率为275V/μs。管脚间的连接方式决定了可编程的增益范围,增益在-11~+30dB时的带宽为90Mhz,增益在+9~+41dB时具有9MHz带宽,改变管脚间的连接电阻,可使增益处在上述范围内。该集成电路可应用于射频自动增益放大器、视频增益控制、A/D转换量程扩展和信号测量系统。 AD603封装引脚图: Android示波器电路原理图 电路城语:此资料为卖家免费分享,不提供技术支持,请大家使用前验证资料的正确性!如涉及版权问题,请联系管理员删除! 附件包含以下资料:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值