2012-12-27 00:24:52 [显示全部楼层]
7239浏览
查看: 7239|回复: 5

[已解决] 初识 FlyMaple — 用代码认识她

[复制链接]
本帖最后由 夏斌 于 2012-12-27 02:15 编辑

2012年12月21日……这个日子好像是某个大片里的世界末日哦:L

这天,终于拿到了 FlyMaple ……  哦,还有四个小舵机,打算玩固定翼。四轴风太强劲了,气象条件不宜飞行,俺还是暂避风头吧。
其实还有个订单,一个空速管一块GPS接收机,过几天才能到货。数传、视频传输还早呢,不急着买。

我想: FlyMaple + GPS + 空速管 + 数传电台 + 视频传输台    构成一个无人机的基本飞控平台。舵机? 那个应该算执行机构了,算在机体里的:lol

FlyMaple板子的特性在这就不重复了,论坛里很多。选这个板子的理由只有一个:我找到主频最高的Arduino板子!补充理由:板载十轴传感器。

下面就述说下我认识这板子的过程吧:




夏斌  见习技师
 楼主|

发表于 2012-12-27 00:52:42

本帖最后由 夏斌 于 2012-12-27 01:42 编辑

拆开包装,首先是外观,挺精致的板子哦。
对照电路图,识别下各接线端子,引脚、按钮……拿在手上观察比看照片爽多了!

到 Leaflabs 网站下载 Maple IDE,再到 论坛 下载测试代码;都解压开。Maple IDE 不错,不用安装,直接运行就可以了。

用 USB线 连接到电脑上,按提示安装驱动,先安装 dfu,再安装 serial …… 虚拟串口COM4 ,一切正常。

打开 Maple IDE 在菜单 Files-Examples 里随便找段代码,点下载按钮,编译、链接……蹦出一堆红字错误信息!!! 之后,怎么也不认虚拟串口了,换了两台机器,还是不认,俺就没办法了,只好和客服联系换板子,等第二天把板子寄回去。(客服态度不错!)

半夜,突然看到板子包装盒里的服务卡片,有这个论坛的地址,结果发现 @怪怪金小鱼 已经遇到并解决了。
“按下reset键当蓝色指示灯快速闪烁时,立即按下BUT键,在慢闪烁时放开此键,这时蓝色指示灯会一直闪烁保持在bootloader等待下载程序,这时点击IDE中的上传程序键即可开始编译和下载,不需要选择串口。如有错误和提示信息会显示在下方的状态窗口。”
这段话起了决定性作用,照着做,问题解决了。唉,白白折磨客服一晚上(可怜的孩子啊),十分抱歉哦。

既然可以下载程序并调试了,那还等什么,连夜开工,看例程,查资料……写程序,开始用代码认识FlyMaple。

回复

使用道具 举报

夏斌  见习技师
 楼主|

发表于 2012-12-27 01:58:23

本帖最后由 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 如下:
  1. #include <stdio.h>
  2. //////////////////////////////////////
  3. // FlyMaple V1.1 Study Code 2012.12.21
  4. //////////////////////////////////////
  5. void setup()
  6. {
  7.   SerialUSB.println("Run void setup()");
  8.   
  9.   // 测试舵机驱动
  10.   initServo();
  11.   
  12.   delay(1000);
  13.   SerialUSB.println("Run void setup() ...OK!");
  14. }
  15. void loop()
  16. {
  17.   SerialUSB.println("Run void loop()  ");
  18.   // 测试舵机驱动
  19.   loopTestServo();
  20.   //总延时
  21.   delay(400);
  22.   SerialUSB.println("Run void loop()  End");
  23. }
  24. 编辑 Servo_Base 如下:
  25. #include <Servo.h>
  26. //////////////////////////////////////
  27. // FlyMaple V1.1 Study Code 2012.12.21
  28. //  基本舵机(6个)设置
  29. //////////////////////////////////////
  30. Servo ServoLeftAileron;  //左副翼
  31. Servo ServoRightAileron;  //左副翼
  32. Servo ServoElevator;     //升降舵
  33. Servo ServoRudder;       //方向舵
  34. Servo ServoFlap;         //襟翼
  35. Servo ServoThrottle;     //油门
  36. //////////////////////////////////////
  37. int Test;
  38. //////////////////////////////////////
  39. void initServo()
  40. {
  41.   //绑定舵机控制端口
  42.   ServoLeftAileron.attach(28);  //左副翼
  43.   ServoRightAileron.attach(27);  //右副翼
  44.   ServoElevator.attach(11);     //升降舵
  45.   //ServoRudder.attach(12);       //方向舵
  46.   //ServoFlap.attach(24);         //襟翼
  47.   //ServoThrottle.attach(14);     //油门
  48.   
  49.   //舵面置中
  50.   ServoLeftAileron.write(90);  //左副翼
  51.   ServoRightAileron.write(90);  //右副翼
  52.   ServoElevator.write(90);     //升降舵
  53.   //ServoRudder.write(90);       //方向舵
  54.   //ServoFlap.write(90);         //襟翼
  55.   //ServoThrottle.write(90);     //油门
  56.   
  57.   delay(1000);
  58.   
  59.   //摆动舵面自检(目视检查)
  60.   ServoLeftAileron.write(0);  //左副翼
  61.   ServoRightAileron.write(0);  //右副翼
  62.   ServoElevator.write(0);     //升降舵
  63.   //ServoRudder.write(0);       //方向舵
  64.   //ServoFlap.write(0);         //襟翼
  65.   //ServoThrottle.write(0);     //油门
  66.   delay(200);
  67.   ServoLeftAileron.write(90);  //左副翼
  68.   ServoRightAileron.write(90);  //右副翼
  69.   ServoElevator.write(90);     //升降舵
  70.   //ServoRudder.write(90);       //方向舵
  71.   //ServoFlap.write(90);         //襟翼
  72.   //ServoThrottle.write(90);     //油门
  73.   
  74.   Test = 1;
  75. }
  76. void X_Rotate(float dataVal)  //横滚
  77. {
  78.   if( dataVal > 100 ) dataVal = 100;
  79.   if( dataVal < -100 ) dataVal = -100;
  80.   float AngleDataA;
  81.   AngleDataA= 90 * dataVal / 100 + 90;
  82.   
  83.   //SerialUSB.println(AngleDataA);
  84.   ServoLeftAileron.write( AngleDataA );   //左副翼
  85.   ServoRightAileron.write( AngleDataA );  //右副翼
  86. }
  87. void Y_Rotate(float dataVal)  //俯仰
  88. {
  89.   if( dataVal > 100 ) dataVal = 100;
  90.   if( dataVal < -100 ) dataVal = -100;
  91.   float AngleDataA;
  92.   
  93.   AngleDataA= 90 * dataVal / 100 + 90;
  94.   //SerialUSB.println(AngleDataA);
  95.   ServoElevator.write( AngleDataA );        //左副翼
  96. }
  97. //////////////////////////////////////
  98. void Z_Rotate(int data)  //方向舵
  99. {
  100. }
  101. //////////////////////////////////////
  102. void loopTestServo() // 测试用循环
  103. {
  104.   SerialUSB.print("Run loopTestServo()   Test=");
  105.    SerialUSB.print( Test );
  106.   if( Test==1 )
  107.   {
  108.     SerialUSB.println("X_Rotate(-100)");
  109.     X_Rotate(-100);
  110.     Test = 0;
  111.   }
  112.   else
  113.   {
  114.     SerialUSB.println("X_Rotate(+100)");
  115.     X_Rotate(100);
  116.     Test = 1;
  117.   }
  118. }
复制代码
都保存一下,点击下载按钮……开始编译链接

在蓝灯闪烁停止之后:
三个舵机(俺只插上前三个)先是吱的一声摆到中间位置;稍后又吱吱两声,摆了一下,回到中间位置。再过一会,1、2 两个舵机 开始来回摆动……汪汪! 糟了,俺家露露被吵醒了:Q
回复

使用道具 举报

夏斌  见习技师
 楼主|

发表于 2012-12-27 02:29:37

本帖最后由 夏斌 于 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)写控制算法,进行稳定性测试。
这个已经不是编程问题了,俺数学基础好像不够,控制理论也不扎实。
回复

使用道具 举报

mickey  NPC

发表于 2012-12-30 11:27:04

技术帖,一定要置顶
回复

使用道具 举报

Eric  初级技神

发表于 2013-2-19 10:14:07

继续顶,呵呵:D
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail