【Makeblock 制造万物】使用航模遥控器控制机器人-Arduino中文社区 - Powered by Discuz! Archiver

Makeblock 发表于 2016-1-4 12:05

【Makeblock 制造万物】使用航模遥控器控制机器人

本帖最后由 Makeblock 于 2016-1-4 12:05 编辑

http://v.youku.com/v_show/id_XMTQyNDk5NjQwMA==.html

因为大多数 USB 无线手柄都只有 10-15m 的控制距离。为了实现更远距离的遥控,可以考虑使用航模遥控器。常见的航模遥控器都有一公里以上的遥控距离。这是一个 天地飞7的12位七通道航模遥控器和接收机。


与其他常见的航模遥控器接收机一样,这款接收机输出的信号也是频率为 50Hz 左右,高电平脉宽范围1ms-2ms 的方波。为了让 Arduino 识别这种信号,需要用到 Arduino 的 pulseIn 函数。pulseIn 函数可以识别高电平或低电平的脉冲时间,精确到微秒。另外,还需要用 RJ25 转杜邦线将 Orion 主板与接收机连接在一起。

将接收机和一台 Starter 坦克小车连接在一起,然后安装航模的图传系统。


编写代码,并烧录到 Orion 主板上。

#include "MeOrion.h"
#include "Arduino.h"
#include "Servo.h"

//      通道3:前进后退                通道2:出拳收拳                通道1:左右旋转
#define PIN_HIT                2
#define PIN_FB                12
#define      PIN_SPIN      13

//      RC 接收机脉冲时间相关的参数
#define MIN_TIME      1010
#define MAX_TIME      2010
#define MID_TIME      1510
#define TIME_RANGE      1000
#define HALF_RANGE      500

//      舵机角度
#define      ANGLE_IN      45
#define ANGLE_OUT      130

MeDCMotor leftWheel(M1);
MeDCMotor rightWheel(M2);

//      舵机最大速度,300°/s
#define MAX_SERVO_SPEED                300.0

MePort servoPort(PORT_6);
Servo myServo;

void setup()
{
      Serial.begin(9600);

      myServo.attach(servoPort.pin1());
}

void loop()
{
      long timeHit = pulseIn(PIN_HIT, HIGH, 30000);
      long timeFb = pulseIn(PIN_FB, HIGH, 30000);
      long timeSpin = pulseIn(PIN_SPIN, HIGH, 30000);

      Serial.print(timeFb);
      Serial.print(", ");
      Serial.print(timeSpin);
      Serial.print(", ");
      Serial.println(timeHit);

      if ((0 != timeHit) && (0 != timeFb) && (0 != timeSpin))
      {
                //      控制行走
                float linearSpeed = -(timeFb - MID_TIME) * 255.0 / HALF_RANGE;
                float angularSpeed = (timeSpin - MID_TIME) * 255.0 / HALF_RANGE;

                float leftSpeed = linearSpeed + angularSpeed;
                float rightSpeed = linearSpeed - angularSpeed;

                leftWheel.run(leftSpeed);
                rightWheel.run(rightSpeed);

                //      控制出拳
                if (timeHit - MID_TIME > 50)
                {
                        myServo.write(ANGLE_OUT);
                }
                else if (timeHit - MID_TIME < -50)
                {
                        myServo.write(ANGLE_IN);
                }
      }




suoma 发表于 2016-1-5 00:03

谢谢分享学习一下

Makeblock 发表于 2016-1-5 12:23

suoma 发表于 2016-1-5 00:03
谢谢分享学习一下

:lol:loveliness:

Makeblock 发表于 2016-1-5 12:23

suoma 发表于 2016-1-5 00:03
谢谢分享学习一下

:lol:loveliness:

luders 发表于 2016-1-5 15:16

赞赞赞。。

limingfei 发表于 2016-3-15 13:02

楼主你好,想问一下接收机怎么链接?

jxnclzh 发表于 2017-4-4 17:31

本帖最后由 jxnclzh 于 2017-4-4 17:34 编辑

看代码的意思,是不是杆推的动作越大,脉冲宽度越长?MIDTIME是不是摇杆置于中位时的脉冲宽度?同理MAXTIME是摇杆至于最上位的脉冲宽度,MINTIME是摇杆最下位的宽度,不知我说的对不对呢?感觉很有用,因为我也买了这个遥控器遥控机器人;P

Jun612 发表于 2017-6-15 17:40

为什么我找不到MeOrion.h库文件呢?系统一直报错,是什么原因
fatal error: MeOrion.h: No such file or directory

#include "MeOrion.h"
页: [1]
查看完整版本: 【Makeblock 制造万物】使用航模遥控器控制机器人