“我们不做一锤子买卖,只做技巧成长的长期伙伴!”

目录

一、视频展示

二、项目简介

三、原理图设计

四、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=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);
		}
	}
}

六、资料分享

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