- 14
- 0
- 约3.2千字
- 约 9页
- 2021-03-18 发布于山东
- 举报
用Arduino扩展无人飞行器续集(飞行器自主避障篇)
(本文原创归 魏宇科 所有,我只是搬运工By华科-求学)
在上一个帖子中(用Arduino扩展无人飞行器+普及无人机知识,不会算法的人必看 ) 我向大家介绍了多旋翼飞行器的基本知识和用Arduino扩展的方法,这一期我就向大家分享一个Arduino扩展无人机的重要应用:用超声波传感器实现自主避障的功能。在多次试验中,飞机已经能实现单方向的自主避障。下面我先从硬件开始。硬件:我采用了QQ飞控和一块Arduino nano作为扩展控制器,添加了一个sr04的超声波传感器,这样就组成了一个前方区域的探测控制闭环系统。?code:// uav.ino#includeServo.h;#define AIL1??5? ?//AIL fuyi#define ELE2??6? ?//ELE shengjiang#define LED? ?13unsigned long INAIL;unsigned long INELE;int OUTAIL;int OUTELE;int delta = 0;Servo AIL;Servo ELE;const int TrigPin = 2;?const int EchoPin = 3;?float distance;?void setup(){? ?? ?????pinMode(AIL1,0);??pinMode(ELE2,0);??pinMode(LED,1);??AIL.attach(9);??ELE.attach(10);??Serial.begin(9600);??pinMode(TrigPin, OUTPUT);???pinMode(EchoPin, INPUT);?}?void loop(){??sr();??if(distance=130)??{? ? delta = 130 - distance;? ? delta = delta/4;??}??INAIL = pulseIn(AIL1, 1);??INELE = pulseIn(ELE2, 1);??OUTAIL = map(INAIL,1000,2000,47,144);??OUTELE = map(INELE,1000,2000,47,144);??OUTELE = OUTELE - delta;??AIL.write(OUTAIL);??ELE.write(OUTELE);??Serial.print(AIL=);??Serial.print(INAIL);??Serial.print( ELE=);??Serial.print(INELE);??Serial.print(? ?);? ?Serial.print(outail= );??Serial.print(OUTAIL);??Serial.print( outele= );??Serial.print(OUTELE);??Serial.print(? ?);??Serial.print(delta= );??Serial.print(delta);??Serial.print(? ?);??digitalWrite(LED,0);??delay(5);}void sr()?{???digitalWrite(TrigPin, LOW);???delayMicroseconds(2);??digitalWrite(LED,1);???digitalWrite(TrigPin, HIGH);???delayMicroseconds(10);??digitalWrite(TrigPin, LOW);???digitalWrite(LED,0);??distance = pulseIn(EchoPin, HIGH , 8000) / 58.00;??if(distance=130 || distance==0)//如果distance大于等于130或等于0,都让distance赋值130??{?? ? distance=130;??}??Serial.print(distance);???Serial.print(cm);???Serial.println();???delay(50);?}代码如有疑问可参考上一帖(用Arduino扩展无人飞行器+普及无人机知识,不会算法的人必看)代码中的控制只选用了AIL 和ELE作为控制通道,独立了油门(THR)和方向通道,目的是若发生意外情况,飞手可操控油门通道让飞机停止工作,保证重要
原创力文档

文档评论(0)