功能介绍:采用stm32单片机作为主控,采用红外对射管来进行计数,原理其实就是有物体从对射管中间经过,阻挡了红外光,导致红外接收传感器电平发生变化,单片机通过判断电平变化来判断当前是否有物体经过,通过这个原理可以采集人流量,以及各种计数相关的应用场景,OLED显示相关数据,蜂鸣器进行报警提醒,全部资料都经过实物验证,程序有中文注释,新手容易看懂,资料分享下载链接:设计资料合集
29-基于stm32单片机智能红外纸张计数器人流量统计(程序+原理图+PCB+元件清单全套资料)
void DHT11_Init ( void ){DHT11_GPIO_Config ();macDHT11_Dout_1;// 拉高GPIOB10}/** 函数名:DHT11_GPIO_Config* 描述:配置DHT11用到的I/O口* 输入:无* 输出:无*/static void DHT11_GPIO_Config ( void ){/*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启macDHT11_Dout_GPIO_PORT的外设时钟*/macDHT11_Dout_SCK_APBxClock_FUN ( macDHT11_Dout_GPIO_CLK, ENABLE ); /*选择要控制的macDHT11_Dout_GPIO_PORT引脚*/GPIO_InitStructure.GPIO_Pin = macDHT11_Dout_GPIO_PIN; /*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/*设置引脚速率为50MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*调用库函数,初始化macDHT11_Dout_GPIO_PORT*/GPIO_Init ( macDHT11_Dout_GPIO_PORT, &GPIO_InitStructure );}/** 函数名:DHT11_Mode_IPU* 描述:使DHT11-DATA引脚变为上拉输入模式* 输入:无* 输出:无*/static void DHT11_Mode_IPU(void){GPIO_InitTypeDef GPIO_InitStructure;/*选择要控制的macDHT11_Dout_GPIO_PORT引脚*/ GPIO_InitStructure.GPIO_Pin = macDHT11_Dout_GPIO_PIN;/*设置引脚模式为浮空输入模式*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; /*调用库函数,初始化macDHT11_Dout_GPIO_PORT*/GPIO_Init(macDHT11_Dout_GPIO_PORT, &GPIO_InitStructure);}/** 函数名:DHT11_Mode_Out_PP* 描述:使DHT11-DATA引脚变为推挽输出模式* 输入:无* 输出:无*/static void DHT11_Mode_Out_PP(void){GPIO_InitTypeDef GPIO_InitStructure;/*选择要控制的macDHT11_Dout_GPIO_PORT引脚*/GPIO_InitStructure.GPIO_Pin = macDHT11_Dout_GPIO_PIN; /*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/*设置引脚速率为50MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/*调用库函数,初始化macDHT11_Dout_GPIO_PORT*/GPIO_Init(macDHT11_Dout_GPIO_PORT, &GPIO_InitStructure);}/* * 从DHT11读取一个字节,MSB先行*/static uint8_t DHT11_ReadByte ( void ){uint8_t i, temp=0;for(i=0;i<8;i++){/*每bit以50us低电平标置开始,轮询直到从机发出 的50us 低电平 结束*/while(macDHT11_Dout_IN()==Bit_RESET);/*DHT11 以26~28us的高电平表示“0”,以70us高电平表示“1”,*通过检测 x us后的电平即可区别这两个状 ,x 即下面的延时 */delay_us(40); //延时x us 这个延时需要大于数据0持续的时间即可if(macDHT11_Dout_IN()==Bit_SET)/* x us后仍为高电平表示数据“1” */{/* 等待数据1的高电平结束 */while(macDHT11_Dout_IN()==Bit_SET);temp|=(uint8_t)(0x01<<(7-i));//把第7-i位置1,MSB先行 }else// x us后为低电平表示数据“0”{temp&=(uint8_t)~(0x01<<(7-i)); //把第7-i位置0,MSB先行}}return temp;}
上面是原理图展示,下面是PCB图
【29-基于stm32单片机智能红外计数器人流量统计程序原理图PCB元件清单】
文章插图
stm32单片机最小系统讲解:
电源
电就是MCU要吃的饭,不吃饭,stm32芯片肯定不能工作 。
stm32最小系统板需要5v和3.3v两种电压,一般可以直接通过USB提供5v电压,也可以用电源适配器提供5V电压 。而3.3v电压可以通过稳压芯片如-3.3v等,把5v电压降为3.3v输出 。
USB接口,提供的5v电压经过-3.3v后降为3v3,(10*10^4pF=0.1u)用于电源滤波,高频滤波用小电容,低频滤波用大电容 。D3是一个led用以指示电源工况,其上的510R即510.0Ω用以限流,防止led灯烧坏 。
- 29
- 基于SSM的江苏非物质文化遗产展示平台 计算机毕设源码70278
- 基于SSM的江苏非物质文化遗产展示平台 计算机专业毕业设计源码70287
- 基于SSM的江苏非物质文化遗产展示 毕业设计-附源码70278
- 基于Wechaty-IPAD协议的预警消息转发机器人
- 二十 五 python自动化办公TKinter界面自动伸缩:基于Frame实现
- 基于Kubernetes的hpa实现pod实例数量的自动伸缩
- 基于Faddeev算法的卡尔曼滤波FPGA实现——QMJ
- 2 Flink源码学习笔记 基于Yarn的自动伸缩容实现
- 基于FPGA设计的kalman滤波器——QMJ