10083-基于STM32的无线串口白酒自动摘酒系统设计(仿真+原理图+源代码工程+详细介绍说明书)

10083-基于STM32的无线串口白酒自动摘酒系统设计(仿真+原理图+源代码工程+详细介绍说明书)

功能描述:

本次系统需要实现的要求综合如下:
酒精浓度的检测;
酒精浓度的显示;
不同浓度的酒实现自动摘酒;
尾酒报警;

资料摘要:

在白酒的蒸馏过程中需要将不同浓度的酒分离开,从而区分不同的品质的酒进行分离保存,在传统的蒸酒过程中是通过人工观察酒花的方式进行查看在摘酒。但是通过人工的方式摘酒会造成一个问题:不同工人对于酒花的观察能力不同会导致酒的浓度不一致,无法达到最佳的摘酒效果。所以,随着电子信息技术的发展,摘酒的工作将逐渐往自动化的方向发展。
本此设计基于单片机的白酒自动摘酒系统,通过使用STM32F103单片机为主控器;MQ-3酒精浓度传感器;PCF8591高精度模数转换器采集酒精浓度;LCD液晶显示器作为系统的显示单元;按键作为尾酒的报警阈值调节;蜂鸣器作为尾酒报警设备;继电器作为自动摘酒动作设备;串口通信监测摘酒的过程。通过对系统的电路设计、软件系统设计来保证系统的功能实现摘酒自动化。解决了传统“看花摘酒”导致的浓度不一的问题,提高摘酒质量。在设计中考虑到了系统的定位精度、稳定性、抗干扰能力等,保证设计是一个可以经历市场验证的控制系统。

资料包含:

1、详细设计说明书-12743字
2、仿真工程文件
3、原理图工程文件
4、源代码工程文件
5、仿真截图
6、流程图-visio
7、文献资料

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述



#include "app_demo.h"
#include "SysTick.h"
#include "key.h"
#include "lcd1602.h"
#include "beep.h"
#include "ds18b20.h"
#include "pcf8591.h"
#include "usart.h"	
#include "ADC.h"

uint32_t AD_Val;
uint8_t vals;	
uint32_t AD;

//定义结构体
_sys_ctrl sys_ctrl;


//相关控制模块管脚定义
#define LED_0 		PBout(10)//

#define LED_1 		PBout(11)//
#define LED_2 		PBout(12)//
#define LED_3 		PBout(13)//
#define LED_4			PBout(14)//

void ctrl_pin_init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;  //选择你要设置的IO口
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	 //设置推挽输出模式
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	  //设置传输速率
	GPIO_Init(GPIOB,&GPIO_InitStructure); 	   /* 初始化GPIO */
	GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);   
}


//区间映射
u8 cal_map(u8 x, u8 in_min, u8 in_max, u8 out_min, u8 out_max)
{
	return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

//参数初始化
void sys_parm_init(void)
{
	sys_ctrl.mode=0;
	sys_ctrl.temph=50;
	sys_ctrl.voll=5;
	
	sys_ctrl.voll0L=65;
	sys_ctrl.voll0H=80;
	
	sys_ctrl.voll1L=55;
	sys_ctrl.voll1H=63;
	
	sys_ctrl.voll2L=40;
	sys_ctrl.voll2H=50;
	
	sys_ctrl.voll3L=15;
	sys_ctrl.voll3H=40;
	
	sys_ctrl.curl=20;
	sys_ctrl.smog=50;
}

//系统初始界面显示
void sys_open_show(void)
{
	lcd1602_clear();
	lcd1602_show_string(0,0,"  Pick Wine Sys");
	lcd1602_show_string(0,1,"Al by volume:");
}

//系统参数设置界面显示
void _parm_set_show(void)
{
	lcd1602_clear();
	lcd1602_show_string(0,0,"  Pick Wine Sys");
	lcd1602_show_string(0,1,"Threshold :");
}

//系统数据获取
void sys_data_get(void)
{
	static u8 i=0;
	u8 temp=0;
	while(1)
	{
		//
		i++;
		if(i%5==0)
		//
		temp=pcf8591_read_adcvalue(0);
		temp=pcf8591_read_adcvalue(0);
		sys_ctrl.vol=((float)temp*10/255) * 10;

		break;
	}
}


void sys_data_show(void)
{
    u8 buf[6]; // 为了容纳三位数形式的电压值和百分号,数组长度设为6
    while (1)
    {
        if (sys_ctrl.mode == 0)
        {
            // 电压显示
          //  sprintf(buf, "%03d.%d%%",(sys_ctrl.vol / 10), (int)(sys_ctrl.vol % 10)); // 格式化为00.0%形式
			buf[0]=sys_ctrl.vol/10+0x30;
			buf[1]=sys_ctrl.vol%10+0x30;
			buf[2]='\0';
			lcd1602_show_string(14, 1, buf);
        }
        else
        {
            // 电压阈值显示
     	buf[0]=sys_ctrl.voll/10+0x30;
			buf[1]=sys_ctrl.voll%10+0x30;
			buf[2]='\0';
        lcd1602_show_string(14, 1, buf);

            // 阈值设定,数据位置闪烁
            switch (sys_ctrl.mode)
            {
            case 1: //电压
                lcd1602_show_string(14, 1, "   ");
                delay_ms(100);
            // 电压阈值显示
     	buf[0]=sys_ctrl.voll/10+0x30;
			buf[1]=sys_ctrl.voll%10+0x30;
			buf[2]='\0';
        lcd1602_show_string(14, 1, buf);
                break;
            }
        }
        break;
    }
}




//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	static u8 oneflag=0;
	
	key=KEY_Scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>=2)sys_ctrl.mode=1;
		if(oneflag==0)
		{
			oneflag=1;
			_parm_set_show();//系统参数设置显示
		}
	}
	if(sys_ctrl.mode!=0)
	{
		//在设置模式下,加
		if(key==KEY1_PRESS)
		{	
			switch(sys_ctrl.mode)
			{
				case 1://电压 
					sys_ctrl.voll++;
					if(sys_ctrl.voll>60)sys_ctrl.voll=0;
					break;

			}				
		}
		//在设置模式下,减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{

				case 1://电压 
					sys_ctrl.voll--;
					if(sys_ctrl.voll<0)sys_ctrl.voll=50;
					break;
			}
		}
		//确定
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=0;
			oneflag=0;
			sys_open_show();//系统开机界面显示		
		}	
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	//正常工作模式下
	if(sys_ctrl.mode==0)
	{

		//电压低于阈值,电压报警指示,蜂鸣器报警
		if(sys_ctrl.vol< sys_ctrl.voll)
		{
			LED_0=0;
			beep_alarm(10,1000);	
		}
		else
		{
			LED_0=1;
		}
		
				//电压低于阈值,电压报警指示,蜂鸣器报警
		if(sys_ctrl.vol > sys_ctrl.voll0L && sys_ctrl.vol < sys_ctrl.voll0H)
		{
			LED_4=0;

		}
		else
		{
			LED_4=1;
		}
		
				if(sys_ctrl.vol >sys_ctrl.voll1L && sys_ctrl.vol <sys_ctrl.voll1H)
		{
			LED_3=0;

		}
		else
		{
			LED_2=1;
		}
		
				if(sys_ctrl.vol > sys_ctrl.voll2L && sys_ctrl.vol < sys_ctrl.voll2H)
		{
			LED_2=0;

		}
		else
		{
			LED_2=1;
		}
		
				if(sys_ctrl.vol > sys_ctrl.voll3L && sys_ctrl.vol < sys_ctrl.voll3H)
		{
			LED_1=0;

		}
		else
		{
			LED_1=1;
		}
		
		
		
					
	}	
}

void uart_print_log(void)
{
		printf("**********  Pick Wine Sys  ********\r\n");
		printf("\r\n");

		printf("Alcohol by volume  =   %d%d\r\n",sys_ctrl.vol/10,sys_ctrl.vol%10);

		printf("\r\n");
		printf("***********************************\r\n");
		delay_ms(200);
	
}
//应用控制系统
void appdemo_show(void)
{
	u8 i=10;
	sys_parm_init();//系统参数初始化
	KEY_Init();
	BEEP_Init();
	ctrl_pin_init();
	pcf8591_init();
	lcd1602_init();//LCD1602初始化
	//Adc_Init();
	USART1_Init(115200);
//	while(i--)
//	{
//		//温度获取
//	//	sys_ctrl.temp=DS18B20_GetTemperture();
//		delay_ms(100);
//	}
	sys_open_show();//系统开机界面显示

	while(1)
	{

		

		sys_data_get();//系统数据获取
		sys_data_show();//系统数据显示
		sys_data_set();//系统数据设置
		sys_fun_ctrl();//系统功能控制	
		uart_print_log();

		
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叫我Eric

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

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

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

打赏作者

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

抵扣说明:

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

余额充值