0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

智慧灌溉平台

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2023-11-09 16:55 次阅读

1.知识百科

智慧灌溉是运用物联网云计算、大数据等新一代信息技术,结合农业生产的实际需求,通过传感器采集土壤温湿度、光照强度等信息,利用无线传感网络传输到中央控制系统进行智能控制。智慧灌溉系统由传感器(水位传感器)、无线通信模块(GPRS/CDMA/WLAN/蓝牙)和计算机组成;在农业生产中,通过自动感知环境信息(温度、湿度),实时监控作物生长状况并做出判断和决策。

2.开发环境

  本次智慧灌溉平台包含有硬件和软件两部分。其中硬件部分有 基于STM32的主控制器,USB接口水泵、稻田模型、水位监测传感器,硬件配置如下所所示:

主控制器

wKgaomVMnMKAJkoZACIAsYmLBfY842.png

稻田模型
  稻田模型中添加了水位监测传感器设备。

wKgaomVMnPiAR213ACHrbAGwvdk486.png

水泵

wKgZomVMnQ6AQD8pACSkrCLmGwc107.png

应用APP

wKgZomVMnTeAUbTzAAwhP9_jAAI419.png

3.硬件设计

wKgZomVMnVOAJ3wuAAhyL0CIcSU840.png

4.软件设计

  本次硬件主控MCU选择的是ST公司的基于Cortex-M3架构的STM32F103C8T6,供电部分是12V转5V,采用MP2359实现,5V转3.3V则采用AMS1117-3.3实现。软件设计通过HAL库+KEIL软件。

主控MCU: STM32F103C8T6
通信设备: ESP8266WIFI
传感器设备: 水位检测传感器
水泵: USB接口3W水泵
其他: RGB工作状态指示、串口调试接口、ST_Link下载

4.1 ESP8266WIFI驱动

  ESP8266系列无线模块是一个经济高效的WIFI SOC模块,支持标准IEEE802.11b/g/n协议,内置完整的TCP/IP协议栈。 用户可以使用此系列模块向现有设备添加网络功能,也可以构建独立的网络控制器

支持STA、AP、STA+AP动作模式;

体积非常小的802.11b/g/n WiFi SOC模块

内置10bit高精度ADC采用低功率32位CPU,兼作应用程序处理器

支持USART、GPIO、IIC、PWM、ADC、SPI等接口时钟频率最大为160MHz

支持smart config、AirKiss一键网络支持多个休眠模式,深休眠电流低到20uA

嵌入式LWIP协议栈

支持SDK二次开发

通用AT指令可以快速使用支持串行本地升级和远程固件升级( FOTA )

本次采用通用AT指令开发,串口通信,波特率为115200,配置模式为AP+TCP服务器。

/*****************ESP8266初始化*****************
**形参:u8 *wifi_name      -- 热点名称
**			u8 *wifi_password  -- 密码
**			u16 port           -- 端口号
**
**返回:0--成功,其他值 -- 失败
const char *AP_TCPSERVER[]=
{
	"ATrn",//测试指令
	"ATE0rn",//关闭回显
	"AT+CWMODE=2rn",//--设置为AP(热点)模式
	"AT+RSTrn",//模块重启
	"ATE0rn",//关闭回显
	"AT+CWSAP="EPS8266_123","01234567",1,4rn", //--设置wifi信息
	"AT+CIPMUX=1rn",//设置多连接
	"AT+CIPSERVER=1,10rn", //--设置TCP服务器模式,端口号(0~65535)
	"AT+CIFSRrn"//查询IP地址
};
************************************************/
u8 Esp8266_AP_TcpServer_Init(u8 *wifi_name,u8 *wifi_password,u16 port)
{
	char buff[100];
	char *p=NULL;
	u8 i=0;
	printf("1.发送测试指令rn");
	if(Esp8266_SendCmdCheckStat("ATrn","OKrn"))return 1;
	printf("2.关回显rn");
	if(Esp8266_SendCmdCheckStat("ATE0rn","OKrn"))return 2;
	printf("3.设置模式rn");
	if(Esp8266_SendCmdCheckStat("AT+CWMODE=2rn","OKrn"))return 3;	
	printf("4.模块复位rn");
	if(Esp8266_SendCmdCheckStat("AT+RSTrn","OKrn"))return 4;	
	Delay_Ms(1000);
	Delay_Ms(1000);
	printf("5.关回显rn");
	if(Esp8266_SendCmdCheckStat("ATE0rn","OKrn"))return 5;	
	//字符串拼接
	snprintf(buff,sizeof(buff),"AT+CWSAP="%s","%s",1,4rn",wifi_name,wifi_password);
	printf("buff:%s",buff);
	printf("6.设置热点信息rn");
	if(Esp8266_SendCmdCheckStat(buff,"OKrn"))return 6;	
	printf("7.设置多连接rn");
	if(Esp8266_SendCmdCheckStat("AT+CIPMUX=1rn","OKrn"))return 7;	
	printf("8.设置端口号rn");
	snprintf(buff,sizeof(buff),"AT+CIPSERVER=1,%drn",port);
	if(Esp8266_SendCmdCheckStat(buff,"OKrn"))return 8;	
	printf("9.查询IP地址rn");
	if(Esp8266_SendCmdCheckStat("AT+CIFSRrn","OKrn"))return 9;
	/*****提取IP地址信息*/
	/*usart3:+CIFSR:APIP,"192.168.4.1"
		+CIFSR:APMAC,"86:f3:eb:a6:be:f9"
		OK
	*/
	p=strstr((char *)usart3_rx_buff,"APIP");
	if(p!=NULL)
	{
		p+=6;
		while((*p!='"') && (*p!=''))
		{
			buff[i]=*p;
			p++;
			i++;
		}
	}
	buff[i]='';
	printf("buff:%srn",buff);
	strcpy((char *)esp8266_info.esp8266_ip,buff);//IP地址
	strcpy((char *)esp8266_info.esp8266_name,(char *)wifi_name);//wifi名称
	strcpy((char *)esp8266_info.esp8266_key,(char *)wifi_password);//wifi密码
	esp8266_info.esp8266_prot=port;
	return 0;
}

4.2 水位监测传感器

wKgaomVMneOAEuowAB0ompS-R1s774.png

  本模块工作电压为5V,采用ADC方式采集液位值,原理为印刷电路板侵入水中,阻值会改变,通过测量阻值的变化来测量水位。

wKgaomVMngCAC2dQAAWx26ktn30824.pngwKgaomVMngyAKWg6AASaUpXXD9I674.png

获取水位值示例

u16 Get_Regular_Channelx(u16 ch)
{
	ADC_ChannelConfTypeDef sConfig = {0};
	sConfig.Channel=ch;//通道号

	sConfig.SamplingTime=ADC_SAMPLETIME_239CYCLES_5;//采样周期
	if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)//ADC通道初始化
   {
     Error_Handler();
   }	
	HAL_ADC_Start(&hadc1);//开启ADC
	HAL_ADC_PollForConversion(&hadc1,20);//等待规则通道转换完成
	return HAL_ADC_GetValue(&hadc1);
}
//采集AD值,多次测量求平均值
int Get_WeatherVal()
{
	u16 buffer[10];
	u32 count=0;
	int i=0,j=0;
	u16 temp;
	for(i=0;i< 10;i++)
	{
		buffer[i]=Get_Regular_Channelx(ADC_CHANNEL_8);//100ms采集一次水位值
		Delay_Ms(2);
	}
	for(i=0;i< 10-1;i++)
	{
		for(j=0;j< 10-1-i;j++)
		{
			if(buffer[j] >buffer[j+1])
			{
					temp=buffer[j];
					buffer[j]=buffer[j+1];
					buffer[j+1]=temp;
			}
		}
	}
	for(j=2;j< 8;j++)
	{
		count+=buffer[j];
	}
	return (count/6);
}

4.3 水泵驱动

  本次水泵选择的是3W USB接口抽水电机,通过继电器控制水泵启动和关闭,配合上位机软件和水位传感器实时监测水位值实现电机自动启动和停止工作。低电平启动水泵工作,高电平停止水泵工作。

#define moto_ctl_start() HAL_GPIO_WritePin(moto_clt_GPIO_Port,moto_clt_Pin,GPIO_PIN_RESET)
#define moto_ctl_stop()  HAL_GPIO_WritePin(moto_clt_GPIO_Port,moto_clt_Pin,GPIO_PIN_SET)

4.4 核心控制功能

设备上电初始化WIFI,等待app连接。水位传感器实时检测当前水位状态,通过APP启动水泵抽水,当前水位值超过设定是阈值,则水泵自动停止工作。
板载RGB状态指示灯。硬件电源检测正常位红色,WIFI工作工作则红灯闪烁,APP连接成功则白灯闪烁,电机工作则绿灯闪烁。通过RGB灯光状态即可得知当前设备工作状态。

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(usart1_flag)
		{
			usart1_rx_buff[usart1_cnt]='';
			printf("rx1=%s,%drn",usart1_rx_buff,usart1_cnt);
			usart1_cnt=0;
			usart1_flag=0;
		}
		if(usart3_flag)
		{
			usart3_rx_buff[usart3_cnt]='';
			printf("rx3=%s,%drn",usart3_rx_buff,usart3_cnt);
			if(strstr((char *)usart3_rx_buff,"0,CONNECT"))
			{
				wifi_stat=1;//连接成功
				time=0;
				stat=0;
				RGB_Ctl(0,0,0);
				snprintf(buff,sizeof(buff),"#%d,%d,%d",0,0,threshold_val%101);
				Esp8266_SendData(0,(u8*)buff);//发松数据到客户端
			}
			else if(strstr((char *)usart3_rx_buff,"0,CLOSED"))
			{
				wifi_stat=0;//断开连接
				time=0;
				stat=0;
				RGB_Ctl(0,0,0);
				moto_ctl_stop();
			}
			else if(strstr((char *)usart3_rx_buff,"motor:1"))
			{
				wifi_stat=2;//启动工作
				time=0;
				stat=0;
				RGB_Ctl(0,0,0);
				moto_ctl_start();
				motor_stat=1;
			}
			else if(strstr((char *)usart3_rx_buff,"motor:0"))
			{
				wifi_stat=1;//停止工作
				time=0;
				stat=0;
				RGB_Ctl(0,0,0);
				moto_ctl_stop();
				motor_stat=0;
			}
			else if(strstr((char *)usart3_rx_buff,"max:"))//水位阈值
			{
				//+IPD,0,6:max:97,17
				p=strstr((char *)usart3_rx_buff,"max:");
				p+=strlen("max:");
				threshold_val=atoi(p);
				//printf("threshold_val=%drn",threshold_val);
			}
			usart3_cnt=0;
			usart3_flag=0;
		}
		time++;
		time2++;
		time3++;
		Delay_Ms(1);
		if(wifi_stat==0 && time>=500)//应用app未连接(红灯闪烁)
		{
			time=0;
			stat=!stat;
			if(stat)
				RGB_Ctl(200,0,0);
			else
				RGB_Ctl(0,0,0);
		}
		if(wifi_stat==1 && time>=500)//应用app连接成功(白灯闪烁)
		{
			time=0;
			stat=!stat;
			if(stat)
				RGB_Ctl(255,253,85);
			else
				RGB_Ctl(0,0,0);
		}
		else if(wifi_stat==2 && time>=500)//电机工作(绿灯闪烁)
		{
			time=0;
			stat=!stat;
			if(stat)
				RGB_Ctl(0,255,0);
			else
				RGB_Ctl(0,0,0);
		}
		if(time3>=100)
		{
			time3=0;
			data=Get_WeatherVal();
			temp=data/3900.00*100;
			//printf("data=%.2f.%drn",temp,data);
			if((temp)>=threshold_val)//当前水位值超过设定阈值,则停止电机工作
			{
				if(motor_stat==1)
				{
					time=0;
					stat=0;
					RGB_Ctl(0,0,0);
					moto_ctl_stop();
					motor_stat=0;//关闭电机
					wifi_stat=1;
					snprintf(buff,sizeof(buff),"#%d,%d,%d",motor_stat,threshold_val,threshold_val);
					Esp8266_SendData(0,(u8*)buff);//发松数据到客户端
					time2=0;
				}
			}
		}
		if(time2>=1000 && motor_stat==1 && wifi_stat>=1)//1s上报一次当前水位状态,且需要再电机工作时进行上报
		{
			time2=0;
			snprintf(buff,sizeof(buff),"#%d,%d,%d",motor_stat,((int)temp)%101,threshold_val%101);
			//printf("buff=%srn",buff);
			Esp8266_SendData(0,(u8*)buff);//发松数据到客户端
		}
  }
  /* USER CODE END 3 */
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2526

    文章

    48093

    浏览量

    740085
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171192
  • 物联网
    +关注

    关注

    2869

    文章

    41622

    浏览量

    358380
收藏 人收藏

    评论

    相关推荐

    智能农业之智能灌溉

    功能与RS 和GPS 技术结合的灌区动态管理信息采集分析技术、作物需水信息采集与精量控制灌溉技术、专家系统技术等构建高效、低能耗、低投入、多功能的农业节水灌溉平台。可在温室、庭院花园绿地、高速公路中央
    发表于 08-05 12:45

    基于机井灌溉控制器的农田灌溉系统

    结构  农田机井智能灌溉控制系统支持设立村、县(区)、市等多级管理平台的管理模式,各级管理平台的基本功能如下:  1、村级管理平台  管理人员通过手机既可实现用户开卡、充值、查询、销卡
    发表于 12-16 14:07

    智慧农业是否会成为未来的主流方式

    `从前我国是农业大国,目前农业在我国也发挥着重要作用。关注农业行业的朋友都知道,近几年有个非常火爆的名词,叫智慧农业物联网平台,那么,这个平台都是啥呢?今天给大家系统地讲解一下,看完你就明白了。
    发表于 07-15 21:22

    光学红外雨量IFR202型传感器常见用在智慧灌溉,在汽车上安装怎么使用?

    红外雨量传感器是通过红外扫描原理非接触式检测降雨量的传感器,广泛应用于智慧灌溉,自动门窗,地质灾害等行业。最近看到有不少公司安装在新能源汽车上,这样怎么用呢?
    发表于 05-17 10:10

    什么是智慧农业灌溉系统,它的组成都有哪些

    智慧农业灌溉系统是托普物联网为了保证农业作物需水量的前提下,实现节约用水而提出的一整套解决方案。简单来说,智慧农业灌溉系统就是农业灌溉不需要
    的头像 发表于 10-15 11:25 8898次阅读

    智慧农业灌溉系统真推荐合肥鸿升信赖

    应用在花卉灌溉、绿化工程等场景下,实现了手机一键远程控制灌溉智慧农业灌溉控制系统,由管理云平台软件,配合智能阀门、土壤类传感器等设备,自
    发表于 11-08 15:08 1006次阅读

    智慧农业灌溉控制系统

    应用在花卉灌溉、绿化工程等场景下,实现了手机一键远程控制灌溉智慧农业灌溉控制系统,由管理云平台软件,配合智能阀门、土壤类传感器等设备,自
    的头像 发表于 11-09 16:08 1803次阅读

    智慧园林灌溉系统

    ,不断得到应用,智慧园林灌溉控制系统在这种背景下应运而生。 方案解析: 智慧园林灌溉控制系统,借助土壤墒情监测设备,24小时在线监测园林的土壤详情,通过云
    的头像 发表于 11-17 16:04 814次阅读

    智慧园林灌溉系统方案

    现代化的城市是不能少了绿化的,灌溉作为绿化的日常维护,需要得到重视。为了高效率地进行园林绿化灌溉作业,出现了基于物联网的智慧园林灌溉解决方案,改变传统
    的头像 发表于 12-13 15:59 706次阅读

    智慧无线灌溉在园林中的应用

    到的要素进行详细分析和判断,以确定该区域是否需要进行灌溉智慧无线灌溉系统 智慧无线灌溉系统是由各类LORA采集器、LORA无线
    的头像 发表于 06-20 16:58 313次阅读
    <b class='flag-5'>智慧</b>无线<b class='flag-5'>灌溉</b>在园林中的应用

    智慧农业系统应用灌溉作业

    、计算机、传感、无线通信等技术,由智慧农业云平台、智能控制柜/智能网关、阀门控制器、传感器等设备组成。自动监测土壤水分情况,无线传输,根据灌溉需求信息,自动执行灌溉操作,实现智能化监测
    的头像 发表于 07-06 16:57 360次阅读

    红外雨量计在智慧灌溉中的应用

    红外雨量计在智慧灌溉中的应用 红外雨量计是一种测量降雨量的仪器,通过红外线传感器来检测雨滴的数量和大小,进而计算出降雨量。在智慧灌溉中,红外雨量计可以用来实时监测降雨情况,根据降雨量的
    的头像 发表于 07-07 10:56 247次阅读
    红外雨量计在<b class='flag-5'>智慧</b><b class='flag-5'>灌溉</b>中的应用

    【蜂窝物联】智慧灌溉解决方案

    方案需求现有的节水灌溉系统虽然在降低作物灌溉成本,提高作物产量上有明显的作用,但由于常规滴灌系统存在许多问题尚待解决,致使灌溉的合理性无法得到有效执行。主要问题:人工操作的随意性过大,不能够严格执行
    的头像 发表于 07-08 10:27 728次阅读
    【蜂窝物联】<b class='flag-5'>智慧</b><b class='flag-5'>灌溉</b>解决方案

    智慧灌溉解决方案(基于物联网的智能灌溉系统)

      详情:智慧水务数字孪生安全监测解决方案提供商-星创  随着农业IOT的快速发展,智慧灌溉正成为提高农业水资源利用效率,实现精准灌溉的重要技术手段。完整的
    的头像 发表于 01-09 17:15 906次阅读
    <b class='flag-5'>智慧</b><b class='flag-5'>灌溉</b>解决方案(基于物联网的智能<b class='flag-5'>灌溉</b>系统)

    智慧灌溉系统的组成与功能

    随着科学技术与节水意识的不断发展与进步,智慧灌溉正逐渐改变传统的农业灌溉方式,成为现代农业的重要组成部分。智慧灌溉系统主要涵盖了一系列先进的
    的头像 发表于 04-17 17:25 108次阅读
    <b class='flag-5'>智慧</b><b class='flag-5'>灌溉</b>系统的组成与功能