STM32项目分享:简易自动门设计
“我们不做一锤子买卖,只做技术成长的长期伙伴!”
目录
一、视频展示
二、项目简介
三、原理图设计
四、PCB硬件设计
五、程序设计
六、资料分享
一、视频展示
简易自动门设计 -视频分享
二、项目简介
题目:简易自动门设计
主控:STM32
显示:LCD1602
超声波检测
四按键
功能:
1、自动门可上锁,输入密码后进入工作状态;
2、当检测到有人准备通过门时,步进电机顺时针转动,10s后逆时针转动’相同的角度。
3、关门过程中,若检测到有人,立刻制动并重新进入开门状态;
4、LCD显示自动门状态,共有四个状态locked,opening.closing,closed
三、原理图设计

四、PCB硬件设计


五、程序设计
#include "stm32f10x.h" // Device header
#include "delay.h"
#include "lcd.h"
#include "timer.h"
#include "IOput.h"
#include "LCD1602.h"
#include "STEPMOTOR.h"
#include "wave.h"u8 distance,distance_DEC=10,count,ren_flag,door_flag=0,number=5,number1=0,code;int main (void)
{delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);OLED_Init();delay_ms(1);OLED_Clear();TIM2_Int_Init(71,9999);LCD_INIT(); //LCD1602初始化input_init();output_init();stepmotor_init();CH_SR04_Init();while(1){if(time_count>=100){time_count=0;count++;}distance=Senor_Using();if(distance<=distance_DEC)ren_flag=1;elseren_flag=0;key_scan(1,1,1,1);LCD_WRITE_StrDATA( "DOOR:",0,0 );LCD_WRITE_StrDATA( "DIST:",1,0 );LCD_WRITE_CharDATA(distance/10 + '0',1,5); LCD_WRITE_CharDATA(distance%10 + '0',1,6);
// LCD_WRITE_CharDATA(count/10 + '0',1,14);
// LCD_WRITE_CharDATA(count%10 + '0',1,15);if(door_flag==0){count=0;LCD_WRITE_StrDATA( "locked ",0,5 );}else if(door_flag==1){if(count<=5){MotorCCW(1200,32);}else if(count>5 && count<=15){if(ren_flag==1){TIM_Cmd(TIM2, DISABLE);count=6;}else{TIM_Cmd(TIM2, ENABLE);}LCD_WRITE_StrDATA( "opening",0,5 );MotorStop();}else if(count>15){door_flag=2;count=0;}}else if(door_flag==2){LCD_WRITE_StrDATA( "closing",0,5 );if(count<=5 && ren_flag==0){MotorCW(1200,32);}else if(ren_flag==1){door_flag=1;MotorStop();count=0;}else if(count>5){door_flag=3;MotorStop();count=0;}}else if(door_flag==3){LCD_WRITE_StrDATA( "closed ",0,5 );if(count>=5){door_flag=0;count=0;}}if(add_flag==1){number1++;add_flag=0;number=number+2;}if(dec_flag==1){number1++;dec_flag=0;number=code-5;}if(thr_flag==1){number1++;thr_flag=0;code=number*5;}if(set_flag==1){set_flag=0;if(number==30){door_flag=1;number=5;number1=0;}else{number=5;number1=0;door_flag=0;}}if(number1==0)LCD_WRITE_StrDATA( " ",0,13 );else if(number1==1)LCD_WRITE_StrDATA( "* ",0,13 );else if(number1==2)LCD_WRITE_StrDATA( "** ",0,13 );else if(number1>=3)LCD_WRITE_StrDATA( "***",0,13 );}
}
六、资料分享
点击即可查看当前资料分享。
