赞
踩
本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、HCSR04超声波、SG90舵机、
无线遥控、陀螺仪、螺旋桨驱动电机、红外寻迹避障模块等。
主要功能:
系统运行后,LCD1604显示传感器检测的俯仰角、横滚角、超声波距离、红外检测信号状态及小车运行状态等;系统默认处于手动模式,可通过无线遥控控制无人机飞行,当发送模式设置指令,系统进入自动模式;通过左右红外检测使无人机按照指定轨迹运行,当超声波检测距离小于避障距离则无人机上升避障,完成后下降继续按照轨迹飞行。当检测到定点投物位置时,无人机开始下降,当到达指定点后开启舵机夹具。在飞行过程中系统根据无人机姿态角度自动调整到平衡位置。
无线遥控指令:
0X01–>前进
0X02–>后退
0X03–>左转
0X04–>右转
0X05–>上升
0X06–>下降
0X07–>停止
0X08–>夹具开启
0X10–>模式
/* 作者:嗨小易(QQ:3443792007) */ //系统功能控制 void sys_fun_ctrl(void) { //手动控制模式 if(sys_ctrl.mode==1) { switch(USART1_RX_BUF[0]) { case STOP_CMD: USART1_RX_BUF[0]=0;sys_ctrl.dir=0;break; case FORWD_CMD: USART1_RX_BUF[0]=0;sys_ctrl.dir=1;break; case BACK_CMD: USART1_RX_BUF[0]=0;sys_ctrl.dir=2;break; case LEFT_CMD: USART1_RX_BUF[0]=0;sys_ctrl.dir=3;break; case RIGHT_CMD: USART1_RX_BUF[0]=0;sys_ctrl.dir=4;break; case UP_CMD: USART1_RX_BUF[0]=0;sys_ctrl.dir=5;break; case DOWN_CMD: USART1_RX_BUF[0]=0;sys_ctrl.dir=6;break; case OPEN_CMD: USART1_RX_BUF[0]=0; sg90_set_angel(4); delay_ms(200); sg90_set_angel(0); break; } } //自动控制模式 else { //未到达目的地 if(sys_ctrl.destok==0) { //有感应到目的地位置 if(sys_ctrl.dest==1)sys_ctrl.dir=6; //没有感应到目的地位置 else { //根据红外感应按照轨迹运行 switch(sys_ctrl.ired) { case 0: sys_ctrl.dir=1;break;//左右未感应,前进 case 1: sys_ctrl.dir=3;break;//左感应,左转 case 2: sys_ctrl.dir=4;break;//右感应,右转 case 3: //遇到障碍物,避障 if(sys_ctrl.dis<DIS_MIN)sys_ctrl.dir=5;//上升 else sys_ctrl.dir=6;//下降 break; } } } //到达目的地 else { sys_ctrl.dir=0; sg90_set_angel(4); delay_ms(100); sg90_set_angel(0); } } //根据欧拉角控制飞行状态 if(sys_ctrl.pitch>0)sys_ctrl.dir=1; else if(sys_ctrl.pitch<0)sys_ctrl.dir=2; if(sys_ctrl.roll>0)sys_ctrl.dir=4; else if(sys_ctrl.roll<0)sys_ctrl.dir=3; //飞行控制 fly_run_sta(sys_ctrl.dir); } //应用控制系统 void appdemo_show(void) { u8 i=5; sys_parm_init();//系统参数初始化 ctrl_pin_init(); pcf8591_init(); sg90_init(); sr04_init(); fmotor_init(); USART1_Init(9600); while(i--) { //获取俯仰角 sys_ctrl.pitch=pcf8591_read_adcvalue(1); sys_ctrl.pitch=cal_map(sys_ctrl.pitch,0,255,0,100)-50; //获取横滚角 sys_ctrl.roll=pcf8591_read_adcvalue(0); sys_ctrl.roll=cal_map(sys_ctrl.roll,0,255,0,100)-50; delay_ms(100); } lcd1604_init();//LCD1604初始化 sys_open_show();//系统初始界面显示 while(1) { sys_data_get();//系统数据获取 sys_data_show();//系统数据显示 sys_data_set();//系统数据设置 sys_fun_ctrl();//系统功能控制 } }
B站演示视频:https://space.bilibili.com/444388619
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。