STM32项目分享:基于单片机的智能宠物笼舍设计及实现

"我们不做一锤子买卖,只做技术成长的长期伙伴!"

目录

一、视频展示

二、项目简介

三、原理图设计

四、PCB硬件设计

五、程序设计

六、资料分享


一、视频展示

基于单片机的智能宠物笼舍设计及实现 -视频分享

二、项目简介

题目:基于单片机的智能宠物笼舍设计及实现

主控:STM32

显示:OLED显示屏

水位传感器

光电传感器

DHT11温湿度传感器

usb小灯

步进电机

光照传感器

蓝牙模块

水泵继电器+除湿继电器+加温继电器

通信:esp8266wifi模块上传阿里云

蜂鸣器

气体检测传感器(一氧化碳)

功能:

1、屏幕实时显示当前温湿度,水位,实物是否充足,光照强度。

2、按键可设置阈值,包括最低光照,最低水位,最低光照,最大湿度,最低温度。

3、当水位低于阈值时,打开水泵继电器,当光照低于阈值时,打开usb小灯进行补光,

当湿度大于湿度阈值时,打开除湿继电器,蜂鸣器报警,当温度低于最低温度阈值时,

打开加热继电器,蜂鸣器报警,当实物余量不足时,打开步进电机投喂。当气体检测达到阈值,声光报警,打开除湿继电器。

4、数据上传阿里云。

5、手机连接蓝牙,手机可以进行控制各个继电器和小灯,以及查看数据。

三、原理图设计

四、PCB硬件设计

五、程序设计

复制代码
#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "lcd.h"
#include "dht11.h"
#include "IOput.h"
#include "usart.h"
#include "timer.h"
#include "adc.h"
#include "STEPMOTOR.h"
extern u8 res;


extern u8 res;

#define d 2.7
/* 改p值这个偏差就行  */
#define p 168  
float water;
int voltage;
u8 error_flag=0;
float Water_read(void)
{
	  u16 adcx;
	  float voltage;
		adcx=Get_Adc_Average(4,10);
		voltage = adcx*(float)d/(float)p;
	  Delay_1ms(50);
    return voltage;
}

float Water_out(int o)
{
	int i;
	float num = 0;
	float out;
	for(i=0;i<o;i++){ num += Water_read(); }  
  out = num/o;  
	return out;
}
void wifi()
 {
		if(res=='a')
		{
			OLED_Clear();
			res=0;
			set_flag=1;
		}
		else if(res=='b')
		{
			res=0;
			add_flag=1;
		}
		else if(res=='c')
		{
			res=0;
			dec_flag=1;
		}
 }
 
 
u8 light,tushi,count;
u8 show_flag,show1_flag,min_lig = 30,min_lev = 10,max_sd = 50,min_wd = 10,max_co1 = 90;
u16 lev = 0;
 u16 co1 = 0;
int main (void)
{
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	DHT11_Init();
	OLED_Init();
	delay_ms(1);
	OLED_Clear();
	output_init();
	input_init();
	Adc_Init();
	stepmotor_init();
	Usart1_Init(9600);
	Usart2_Init(9600);
	while(1)
	{
		wifi();
		count++;
		co1=Get_Adc_Average(8,10)*100/4096;
		light=100-Get_Adc_Average(0,10)*100/4096;
		DHT11_Read_Data(&temp,&humi);
		lev = Water_out(10)-20;
		key_scan(1,0,0);
		if(set_flag==1 && show_flag!=1)
		{
			show1_flag=0;
			set_flag=0;
			show_flag++;
			if(show_flag>=3)
			{
				show_flag=0;
			}
		}
		if(show_flag==0)
		{
			OLED_ShowCH(0,0,"智能宠物笼舍");
			OLED_ShowCH(0,2,"温度:");
			OLED_ShowNum(40,2,temp,2,16);
			OLED_ShowCH(64,2,"水位:");
			OLED_ShowNum(104,2,lev,2,16);
			OLED_ShowCH(0,4,"湿度:");
			OLED_ShowNum(40,4,humi,2,16);
			OLED_ShowCH(64,4,"光照:");
			OLED_ShowNum(104,4,light,2,16);
			OLED_ShowCH(0,6,"食物:");
			if(GD == 0)
			{
				OLED_ShowCH(40,6,"有");
				
				MotorStop();
				USART_SendData(USART2,'B');
				delay_ms(1);
				USART_SendData(USART2,'g');
				delay_ms(1);
				USART_SendData(USART2,1);
				delay_ms(1);
				USART_SendData(USART2,'E');
				delay_ms(1);
			}
			else
			{
				OLED_ShowCH(40,6,"无");
				MotorCW(1200,168);
				MotorStop();
				USART_SendData(USART2,'B');
				delay_ms(1);
				USART_SendData(USART2,'g');
				delay_ms(1);
				USART_SendData(USART2,0);			
				delay_ms(1);
				USART_SendData(USART2,'E');
				delay_ms(1);
			}
			OLED_ShowCH(64,6,"Co1:");
			OLED_ShowNum(104,6,co1,2,16);
//			OLED_ShowNum(0,6,GD,2,16);
		}
		if(show_flag==1)
		{
			OLED_ShowCH(0,0,"最低光照:");
			OLED_ShowCH(0,2,"最低水位:");
			OLED_ShowCH(0,4,"最高湿度:");
			OLED_ShowCH(0,6,"最低温度:");
			OLED_ShowNum(72,0,min_lig,2,16);
			OLED_ShowNum(72,2,min_lev,2,16);
			OLED_ShowNum(72,4,max_sd,2,16);
			OLED_ShowNum(72,6,min_wd,2,16);
			if(set_flag==1&&show_flag==1)
			{
				set_flag=0;
				show1_flag++;
				if(show1_flag>=4)
				{
					show_flag=2;
					show1_flag = 0;					
					OLED_Clear();
				}
			}
			if(show1_flag==0)
			{
				OLED_ShowCH(112,0,"←");
				if(add_flag==1)
				{
					add_flag=0;
					min_lig++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					min_lig--;
				}
				if(min_lig>=100 || min_lig<=0){min_lig=0;}
			}
			if(show1_flag==1)
			{
				OLED_ShowCH(112,2,"←");
				if(add_flag==1)
				{
					add_flag=0;
					min_lev++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					min_lev--;
				}
				if(min_lev>=40 || min_lev<=0){min_lev=0;}
			}
			if(show1_flag==2)
			{
				OLED_ShowCH(112,4,"←");
				if(add_flag==1)
				{
					add_flag=0;
					max_sd++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					max_sd--;
				}
				if(max_sd>=100 || max_sd<=0){max_sd=0;}
			}
			if(show1_flag==3)
			{
				OLED_ShowCH(112,6,"←");
				if(add_flag==1)
				{
					add_flag=0;
					min_wd++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					min_wd--;
				}
				if(min_wd>=100 || min_wd<=0){min_wd=0;}
			}
		
		}
		if(show_flag == 2)
		{
			key_scan(1,0,0);
			OLED_ShowCH(0,0,"最高CO1:");
			OLED_ShowNum(72,0,max_co1,2,16);
			if(set_flag==1&&show_flag==2)
			{
				set_flag=0;
				show1_flag++;
				if(show1_flag>=1)
				{
					show1_flag=0;
					show_flag=0;	
					OLED_Clear();
				}
			}
			if(show1_flag == 0)
			{
				OLED_ShowCH(112,0,"←");
				if(add_flag==1)
				{
					add_flag=0;
					max_co1++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					max_co1--;
				}
				if(max_co1>=100 || max_co1<=0){max_co1=0;}
			}
		}
		if(temp<=min_wd || humi>=max_sd || lev<=min_lev || light<=min_lig)
		{
			error_flag=1;
		}
		else
		{
			error_flag=0;
		}
		if(temp<=min_wd)
			jdq3=0;
		else
			jdq3=1;
		
		if(humi>=max_sd || co1 >= max_co1)
			jdq2=0;
		else
			jdq2=1;
		
		if(lev<=min_lev)
			jdq1=0;
		else
			jdq1=1;
		
		if(light<=min_lig)
			deng=1;
		else
			deng=0;
		
		if(temp<=min_wd || humi>=max_sd || co1 >= max_co1)
			BEEP=0;
		else
			BEEP=1;
		if(count>=20)
		{
			count=0;
			USART_SendData(USART2,'B');
			delay_ms(1);
			USART_SendData(USART2,'a');
			delay_ms(1);
			USART_SendData(USART2,temp);
			delay_ms(1);
			USART_SendData(USART2,'b');
			delay_ms(1);
			USART_SendData(USART2,humi);
			delay_ms(1);
			USART_SendData(USART2,'c');
			delay_ms(1);
			USART_SendData(USART2,light);
			delay_ms(1);
			USART_SendData(USART2,'d');
			delay_ms(1);
			USART_SendData(USART2,lev);
			delay_ms(1);
			USART_SendData(USART2,'f');
			delay_ms(1);
			USART_SendData(USART2,error_flag);
			delay_ms(1);
			USART_SendData(USART2,'s');
			delay_ms(1);
			USART_SendData(USART2,co1);
			delay_ms(1);
			USART_SendData(USART2,'g');
			delay_ms(1);
			if(GD == 0)
			{
				USART_SendData(USART2,1);
			}else
			{
				USART_SendData(USART2,0);
			}
			
			delay_ms(1);
			USART_SendData(USART2,'E');
			delay_ms(1);

		}
	}
}

六、资料分享

点击即可查看当前资料分享。

相关推荐
三佛科技-134163842121 小时前
FT8433-LRT/FT8433-KRT低成本5V80MA非隔离电源方案 BUCK/BUCK-BOOST典型电路
单片机·嵌入式硬件·智能家居·pcb工艺
沐欣工作室_lvyiyi1 小时前
微小功率智能充电器的设计(论文+源码)
单片机·嵌入式硬件·毕业设计·充电器
玩转以太网1 小时前
W55MH32 单芯片以太网方案:实现TLS加密功能保障工业数据安全传输
网络·物联网
日更嵌入式的打工仔1 小时前
MCUXpresso开启汇编调试
汇编·单片机·nxp·mcuxpresso
Darken031 小时前
基于库函数来实现点灯操作
单片机·嵌入式硬件·stm32f103
TangDuoduo00051 小时前
【Cortex-M4分支跳转指令、内存访问指令、ARM AAPCS规则、异常处理】
stm32
阿容1234561 小时前
stm32两轮平衡小车- 02
stm32·单片机·嵌入式硬件
石头明月1 小时前
Altium Designer背钻(Back Drilling)设置
嵌入式硬件
TDengine (老段)2 小时前
TDengine 统计函数 STDDEV_SAMP 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据