毕设——基于LoRa的主从机农田监测系统

1. 单片机开发环境

KEIL5——百度网盘链接:点击此处
推荐微信搜索KEIL5下载,下载资源很多,自行搜索下载安装

2. 主要材料清单

STM32F103C8T6最小系统 x 2A39C无线LORA模块 x 2
光敏模块 x 1液位传感器 x 1
0.96寸OLED屏幕 x 1按键 x 1
继电器模块 x 15V水泵电机 x 1
J-LINK下载器 x 1USB-TTL x 1

3. 实物图

3.1 主机实物图

在这里插入图片描述

3.2 从机实物图

在这里插入图片描述

3.3 控制板原理图

在这里插入图片描述

原理图源文件:点击此处。用AD2022版本打开或者更高版本打开
注意:部分管脚可能连接错误,实际管脚连接与代码对应一致。

4. 代码

4.1 主机代码

int main(void)
{
	Device_Init();
	while (1)
	{		
		OLED_ShowCHinese(0,2,15);
		OLED_ShowCHinese(0+16,2,16);
		OLED_ShowCHinese(0+32,2,17);
		OLED_ShowCHinese(0+48,2,18);
		OLED_ShowCHinese(0+64,2,11);
		OLED_ShowNum(64+8,2,JQ_data,4,16);
		OLED_ShowString(64+10+37,2,"lx",16);
		
		OLED_ShowCHinese(0,4,20);
		OLED_ShowCHinese(0+16,4,12);
		OLED_ShowCHinese(0+32,4,13);
		OLED_ShowCHinese(0+48,4,14);
		OLED_ShowCHinese(0+64,4,11);
		OLED_ShowNum(64+8,4,CO_data,4,16);
		OLED_ShowCHinese(64+10+37,4,19);
		
		OLED_ShowCHinese(0,6,21);
		OLED_ShowCHinese(0+16,6,22);
		OLED_ShowCHinese(0+32,6,23);
		OLED_ShowCHinese(0+48,6,24);
		OLED_ShowCHinese(0+64,6,11);
		OLED_ShowNum(64+8,6,TP_data,4,16);
		OLED_ShowString(64+10+37,6,"%",16);
		
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0){
			delay_ms(15);
			if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0){
				st4++;
				st3 = 1;
				while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0);
			}
		}
		
		if(st4 == 1 && st3 == 1){
			UsartPrintf(USART1,"#A&\r\n");
			st3 = 0;
		}
		if(st4 == 2 && st3 == 1){
			UsartPrintf(USART1,"#B&\r\n");
			st4=0;
			st3 = 0;
		}
		
		if( TP_data > 3 && TP_data < 12){
			beep_on();
			delay_ms(100);
			beep_off();
			delay_ms(100);
		}
		else{
			beep_off();
		}
		
	}
}

4.2 从机代码

int main(void)
{
	Device_Init();
	while (1)
	{		
		adc_data0 = Get_Adc_Average(ADC_Channel_0,5);//PA0 光敏
		adc_data1 = Get_Adc_Average(ADC_Channel_1,1);//PA1 湿度 80 - (adc_data1 * 100 / 4096) 1100 - 3100
		htemp = DS18B20_Get_Temp() / 10;
		if(adc_data1 <= 1100){
			adc_data1 = 1100;
		}
		if(adc_data1 >= 3100){
			adc_data1 = 3100;
		}
		adc_data1 = (adc_data1-1100)*100/(3100-1100);
		adc_data1 = (100 - adc_data1)*0.6;
		
		UsartPrintf(USART1,"#JQ%04d&#JC%02d&#JT%04d&\r\n",adc_data0,htemp,adc_data1);
		if( adc_data1 > 15 && adc_data1 < 30 && adc_data0 < 1500){
			//水泵开2s,关
			water_on();delay_ms(1000);water_off();delay_ms(1000);
		}
		else if( adc_data1 > 15 && adc_data1 < 30 && htemp > 40){
			//水泵开2s,关
			water_on();delay_ms(1000);water_off();delay_ms(1000);
		}
		else if( adc_data1 > 3 && adc_data1 < 15){
			//开水泵
			water_on();
		}
		else if(kumen == 1){
			water_on();
			kumen = 0;
		}
		else if(kumen == 2){
			water_off();
			kumen = 0;
		}
		delay_ms(500);
	}
}

4.3 代码烧录

完整代码下载:点击此处

魔术棒配置下载器,点击下载即可。不会下载,自行搜索教程。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElecMie丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值