初识 FlyMaple — 用代码认识她
本帖最后由 夏斌 于 2012-12-27 02:15 编辑2012年12月21日……这个日子好像是某个大片里的世界末日哦:L
这天,终于拿到了 FlyMaple ……哦,还有四个小舵机,打算玩固定翼。四轴风太强劲了,气象条件不宜飞行,俺还是暂避风头吧。
其实还有个订单,一个空速管一块GPS接收机,过几天才能到货。数传、视频传输还早呢,不急着买。
我想: FlyMaple + GPS + 空速管 + 数传电台 + 视频传输台 构成一个无人机的基本飞控平台。舵机? 那个应该算执行机构了,算在机体里的:lol
FlyMaple板子的特性在这就不重复了,论坛里很多。选这个板子的理由只有一个:我找到主频最高的Arduino板子!补充理由:板载十轴传感器。
下面就述说下我认识这板子的过程吧:
本帖最后由 夏斌 于 2012-12-27 01:42 编辑
拆开包装,首先是外观,挺精致的板子哦。
对照电路图,识别下各接线端子,引脚、按钮……拿在手上观察比看照片爽多了!
到 Leaflabs 网站下载 Maple IDE,再到 论坛 下载测试代码;都解压开。Maple IDE 不错,不用安装,直接运行就可以了。
用 USB线 连接到电脑上,按提示安装驱动,先安装 dfu,再安装 serial …… 虚拟串口COM4 ,一切正常。
打开 Maple IDE 在菜单 Files-Examples 里随便找段代码,点下载按钮,编译、链接……蹦出一堆红字错误信息!!! 之后,怎么也不认虚拟串口了,换了两台机器,还是不认,俺就没办法了,只好和客服联系换板子,等第二天把板子寄回去。(客服态度不错!)
半夜,突然看到板子包装盒里的服务卡片,有这个论坛的地址,结果发现 @怪怪金小鱼 已经遇到并解决了。
“按下reset键当蓝色指示灯快速闪烁时,立即按下BUT键,在慢闪烁时放开此键,这时蓝色指示灯会一直闪烁保持在bootloader等待下载程序,这时点击IDE中的上传程序键即可开始编译和下载,不需要选择串口。如有错误和提示信息会显示在下方的状态窗口。”
这段话起了决定性作用,照着做,问题解决了。唉,白白折磨客服一晚上(可怜的孩子啊),十分抱歉哦。
既然可以下载程序并调试了,那还等什么,连夜开工,看例程,查资料……写程序,开始用代码认识FlyMaple。
本帖最后由 Ricky 于 2013-2-19 12:38 编辑
按照 @Ricky 所说的步骤开始:
1)先用flymaple能控制电调,控制其转速
2)读取flymaple传感器数据,然后能根据传感器变化来控制转速
3)买机架,上另外三个
4)同时控制4个电机
5)写控制算法,进行稳定性测试。
6)差不多能飞了。。。
呃……咱要做固定翼,油动,没电调:dizzy: 那就先研究驱动舵机吧;P
驱动舵机?有现成的类 Servo,貌似很简单的说……
打开 Maple IDE,新建工程 FlyMaple_Base,先保存下;再建立个Tab,取名 Servo_Base,保存下。
编辑 FlyMaple_Base 如下:#include <stdio.h>
//////////////////////////////////////
// FlyMaple V1.1 Study Code 2012.12.21
//////////////////////////////////////
void setup()
{
SerialUSB.println("Run void setup()");
// 测试舵机驱动
initServo();
delay(1000);
SerialUSB.println("Run void setup() ...OK!");
}
void loop()
{
SerialUSB.println("Run void loop()");
// 测试舵机驱动
loopTestServo();
//总延时
delay(400);
SerialUSB.println("Run void loop()End");
}
编辑 Servo_Base 如下:
#include <Servo.h>
//////////////////////////////////////
// FlyMaple V1.1 Study Code 2012.12.21
//基本舵机(6个)设置
//////////////////////////////////////
Servo ServoLeftAileron;//左副翼
Servo ServoRightAileron;//左副翼
Servo ServoElevator; //升降舵
Servo ServoRudder; //方向舵
Servo ServoFlap; //襟翼
Servo ServoThrottle; //油门
//////////////////////////////////////
int Test;
//////////////////////////////////////
void initServo()
{
//绑定舵机控制端口
ServoLeftAileron.attach(28);//左副翼
ServoRightAileron.attach(27);//右副翼
ServoElevator.attach(11); //升降舵
//ServoRudder.attach(12); //方向舵
//ServoFlap.attach(24); //襟翼
//ServoThrottle.attach(14); //油门
//舵面置中
ServoLeftAileron.write(90);//左副翼
ServoRightAileron.write(90);//右副翼
ServoElevator.write(90); //升降舵
//ServoRudder.write(90); //方向舵
//ServoFlap.write(90); //襟翼
//ServoThrottle.write(90); //油门
delay(1000);
//摆动舵面自检(目视检查)
ServoLeftAileron.write(0);//左副翼
ServoRightAileron.write(0);//右副翼
ServoElevator.write(0); //升降舵
//ServoRudder.write(0); //方向舵
//ServoFlap.write(0); //襟翼
//ServoThrottle.write(0); //油门
delay(200);
ServoLeftAileron.write(90);//左副翼
ServoRightAileron.write(90);//右副翼
ServoElevator.write(90); //升降舵
//ServoRudder.write(90); //方向舵
//ServoFlap.write(90); //襟翼
//ServoThrottle.write(90); //油门
Test = 1;
}
void X_Rotate(float dataVal)//横滚
{
if( dataVal > 100 ) dataVal = 100;
if( dataVal < -100 ) dataVal = -100;
float AngleDataA;
AngleDataA= 90 * dataVal / 100 + 90;
//SerialUSB.println(AngleDataA);
ServoLeftAileron.write( AngleDataA ); //左副翼
ServoRightAileron.write( AngleDataA );//右副翼
}
void Y_Rotate(float dataVal)//俯仰
{
if( dataVal > 100 ) dataVal = 100;
if( dataVal < -100 ) dataVal = -100;
float AngleDataA;
AngleDataA= 90 * dataVal / 100 + 90;
//SerialUSB.println(AngleDataA);
ServoElevator.write( AngleDataA ); //左副翼
}
//////////////////////////////////////
void Z_Rotate(int data)//方向舵
{
}
//////////////////////////////////////
void loopTestServo() // 测试用循环
{
SerialUSB.print("Run loopTestServo() Test=");
SerialUSB.print( Test );
if( Test==1 )
{
SerialUSB.println("X_Rotate(-100)");
X_Rotate(-100);
Test = 0;
}
else
{
SerialUSB.println("X_Rotate(+100)");
X_Rotate(100);
Test = 1;
}
}
都保存一下,点击下载按钮……开始编译链接
在蓝灯闪烁停止之后:
三个舵机(俺只插上前三个)先是吱的一声摆到中间位置;稍后又吱吱两声,摆了一下,回到中间位置。再过一会,1、2 两个舵机 开始来回摆动……汪汪! 糟了,俺家露露被吵醒了:Q 本帖最后由 夏斌 于 2013-1-2 23:36 编辑
今天先发这些吧,待续……
下边要把这几天写的代码都逐一的发出来,希望能对刚接触 FlyMaple 的新人有所帮助。(老鸟们就等着我去请教吧)
2:板载Led(蓝灯) 编程测试 (已发)
3:板载按钮 Boot0 编程测试(已发)
4:SerialUSB 读写编程 (已发)
5:气压高度计 BMP085基本测试
6:磁感应传感器 HMC5883基本测试
7:加速度传感器 ADXL345基本测试
8:陀螺仪传感器 ITG3205基本测试
9:硬件定时器中断编程
10:引脚中断编程
个人觉得这些是FlyMaple板子上必须熟悉的资源,也是将来编写飞控程序所必须掌握的东西。
FlyMaple很容易上手,基本编程也不难……难的是 @Ricky 所说的步骤 5)写控制算法,进行稳定性测试。
这个已经不是编程问题了,俺数学基础好像不够,控制理论也不扎实。 技术帖,一定要置顶 继续顶,呵呵:D
页:
[1]