请选择 进入手机版 | 继续访问电脑版

gForce应用——控制乐高机器人(arduino)

[复制链接]

5

主题

9

帖子

47

积分

新手上路

Rank: 1

积分
47
yuyu_morning 发表于 2017-7-18 17:29:49
328 2
一、硬件处理
1.arduino uno主板、gForce手环、gForcejoint、乐高EV3 45544、杜邦线若干、一块面包板、EV3 6芯接口线、焊笔、210k电阻、4pin排针、6P6C母座。
2.Arduino环境搭建以及硬件连接手环部分参考http://139.224.25.190:8890/forum.php?mod=viewthread&tid=26&page=1#pid28
3.乐高EV3 45544拼装请参考具体安装图纸。
4.硬件连接EV3部分
① 在准备的面包板上,焊上4pin排针,分别对应为arduinoVin(供电)GNDA4(SDA)A5(SCL)A4A5I2C传输数据使用。
② 将两个10k电阻作为A4A5的上拉电阻,焊入Vin电路中。
③ 6P6C母座焊上面包板,用于连接EV3
④ 6P6C接口和引脚朝下,引脚从左往右依次为1-6,将Vin --> 4GND --> 3 、                A5-->5 A4-->6,焊接在一起。(如下图2最右边引脚为1)


                          




二、相关环境介绍
1.乐高EV3ARM9处理器,300MHz基于Linux操作系统。具有四个输入端口,1000/s的采样率。四个输出端口,可用于控制电机等设备。支持USB2.0通讯,WiFi通讯,蓝牙等。(具体参数请查看数据手册,此处只例举部分)
2.具体通讯办法
手环采集到相关手势后,通过蓝牙将信息发送至gForcejointArduino主板通过串口接收到gForcejoint数据,同时利用I2C总线协议,作为从机,等待EV3读取信息。

3.相关模块下载
① 
EV3编程软件LEGO MINDSTORMS EV3 Home Edition下载。
② EV3相关I2C编程模块Dexter.ev3b下载。
三、代码

1.arduino相关代码
  1. #include <gForceAdapter.h>
  2. #include<Wire.h>
  3. #define Slave_Address 0x04
  4. enum GestureType
  5. {
  6.   FistIdx = 0,
  7.   ReleaseIdx,
  8.   WaveInIdx,
  9.   WaveOutIdx,
  10.   TapIdx,
  11.   ShootIdx,
  12.   RelaxIdx
  13. };
  14. GForceAdapter gforce = GForceAdapter(&Serial);
  15. GestureType last_gesIdx = RelaxIdx;

  16. void setup() {
  17.   Wire.begin(Slave_Address);
  18.   Wire.onRequest(sendData);
  19.   gforce.Init();
  20. }

  21. void loop() {
  22.   GF_Data gForceData;
  23.   if (OK == gforce.GetGForceData(&gForceData)) {
  24.     GF_Gesture gesture;
  25.     switch (gForceData.type) {
  26.       case GF_Data::QUATERNION:
  27.         break;
  28.       case GF_Data::GESTURE:
  29.         gesture = gForceData.value.gesture;
  30.         if (gesture == GF_FIST) {
  31.           perform_gesture(FistIdx);
  32.           Serial.println("Receive Fist signel!");
  33.         }
  34.         else if (gesture == GF_SPREAD) {
  35.           perform_gesture(ReleaseIdx);
  36.           Serial.println("Receive Spread signel!");
  37.         }
  38.         else if (gesture == GF_WAVEIN) {
  39.           perform_gesture(WaveInIdx);
  40.           Serial.println("Receive WaveIn signel!");
  41.         }
  42.         else if (gesture == GF_WAVEOUT) {
  43.           perform_gesture(WaveOutIdx);
  44.           Serial.println("Receive WaveOut signel!");
  45.         }
  46.         else if (gesture == GF_PINCH) {
  47.           perform_gesture(TapIdx);
  48.           Serial.println("Receive Pinch signel!");
  49.         }
  50.         else if (gesture == GF_SHOOT) {
  51.           perform_gesture(ShootIdx);
  52.           Serial.println("Receive Shoot signel!");
  53.         }
  54.         else if (gesture == GF_RELEASE) {
  55.           perform_gesture(RelaxIdx);
  56.           Serial.println("Receive Release signel!");
  57.         }
  58.         else if (gesture == GF_UNKNOWN) {
  59.           perform_gesture(RelaxIdx);
  60.           Serial.println("Receive Unknown signel!");
  61.         }
  62.         break;
  63.       default:
  64.         break;
  65.     }
  66. }
  67. }
  68. void perform_gesture(GestureType gestureIdx)
  69. {
  70.   last_gesIdx = gestureIdx;
  71.   //then wait lego controller i2c read
  72. }

  73. void sendData() {
  74.   Wire.write((char*)(&last_gesIdx), sizeof(GestureType));
  75. }
复制代码

2.乐高图形化编程
注:只展示了循环判断的两种情况,其他五种情况可自己定义!

四、视频演示


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

hyw 发表于 2017-7-18 17:34:10
666,继续新创意
回复 支持 反对

使用道具 举报

suxiang198 发表于 2017-7-26 17:03:10
看着还不错,只是乐高机器人玩起来感觉好笨啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热帖滚动