极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 32900|回复: 11

无线头追

[复制链接]
发表于 2014-4-12 00:22:48 | 显示全部楼层 |阅读模式
前段时间就准备做个无线头追想集成到我的遥控汽车上。昨天模块刚到齐,今晚开工了。之前只有一个nano和GY-85姿态传感器,计算姿态的代码已有现成的,我拿来简单修改了一下,把姿态数据通过串口发送出去格式是%数据;数据 数据全部使用的字符串方式发送的。接收端通过串口接收之后解析数据,转化成整形数据,然后控制舵机转动带动摄像头。
先上几张图吧。目前摄像头和图传还没买到,准备先把控制部分做出来再说。


  1. //接收端代码
  2. #include <Servo.h>
  3. #define SERIAL_BAUD 9600
  4. Servo servoPan;
  5. Servo servotill;
  6. char data[10];
  7. int index,panAngle,tiltAngle;
  8. char *p;
  9. void setup() {
  10.   // put your setup code here, to run once:
  11.   Serial.begin(SERIAL_BAUD);
  12.   servoPan.attach(9);
  13.   servotill.attach(10);
  14. }

  15. void loop() {
  16.   // put your main code here, to run repeatedly:
  17.   memset(data,0,10);
  18.   index=0;
  19.   p=NULL;
  20.   while(Serial.available())
  21.   {
  22.     data[index++]=Serial.read();
  23.     delay(10);
  24.   }
  25.   
  26.   if(data[0]=='%')
  27.     {
  28.         
  29.         p=strtok(data+1,";");
  30.         if(p==NULL)
  31.             return;
  32.             
  33.         panAngle = atoi(p);
  34.         
  35.         p=strtok(NULL,";");
  36.           if(p==NULL)
  37.             return;
  38.          
  39.         tiltAngle = atoi(p);        
  40.         servoPan.write((int)panAngle);
  41.         servotill.write((int)tiltAngle);
  42.     }
  43. }
复制代码
  1. //发送端代码

  2. void loop() {
  3.   
  4.   // Check button
  5.   if (digitalRead(BUTTON_INPUT)==0) {
  6.    resetValues = 1;
  7.   }
  8.   

  9.   // if "read_sensors" flag is set high, read sensors and update
  10.   if (read_sensors == 1) {
  11.    
  12.         updateSensors();
  13.    
  14.         gyroCalc();
  15.         accCalc();
  16.         magCalc();
  17.         filter();   
  18.     }
  19.     Serial.print("%");
  20.     itoa((int)panAngle,tmp,10);
  21.     Serial.print(tmp);
  22.     Serial.print(";");
  23.     itoa((int)tiltAngle,tmp,10);
  24.     Serial.println(tmp);
  25.      
  26.   // servoPan.write((int)panAngle);
  27. //  servotill.write((int)tiltAngle);
  28.   
  29. }
复制代码
其中姿态计算的代码我没上传,论坛中相关代码多如牛毛。
中间传输部分我买了一对433无线传输模块,串口的,只管发送和读取即可,对于我们来说相当于用串口线连接起来的。
后续工作待续。。。

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2014-4-12 00:26:34 | 显示全部楼层
沙发自己坐。
接收端代码中有个漏洞
while(Serial.available())
  {
    data[index++]=Serial.read();
    delay(10);
  }
如果接收的数据大于10个字节就会崩溃,最好是加个判断,如果index大于9就跳出循环,或者加个结束符遇到结束符就跳出循环
回复 支持 反对

使用道具 举报

发表于 2014-4-12 07:14:13 | 显示全部楼层
先请教一下,什么叫头追?
回复 支持 反对

使用道具 举报

发表于 2014-4-12 10:56:41 | 显示全部楼层
就是云台追踪头部动作,用头部动作控制云台,用于第一视角遥控。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-12 16:49:31 | 显示全部楼层
@leicheng  哪有13个字符?角度最大也就占用3个字符   %180;180   这就是一个数据,加上\0 也只有9个字符啊。
你说的NULL是指字符串结束标志吗?串口发送数据的时候不会发送'\0'这个字符的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-12 18:39:56 | 显示全部楼层
@leicheng  0没有被传输,0的概念只在存储字符串的内存中存在,传输的时候0是不会被传输的,即使有负号也不会超过10个字符的。
举个例子  char tmp[6]={'1','2','3','\0','4','5'};
这个tmp,如果使用Serial.print(tmp);   接收的时候只会收到“123”,因为遇到0就结束了不会继续发送了。
回复 支持 反对

使用道具 举报

发表于 2014-4-12 19:44:05 | 显示全部楼层
本帖最后由 yiyp77 于 2014-4-12 19:47 编辑

顶LZ。

顺道发个国外的外源头追:
DIY_Headtracker航模头追中文说明书
http://pan.baidu.com/s/1o6nZnnG
回复 支持 反对

使用道具 举报

发表于 2014-4-12 20:26:17 | 显示全部楼层
请问转角,你的433M模块从照片上看,好像只连接了4根线,是模块自带TX,RX接口,还是采用SPI接口的? 程序里直接用serial.print()就能够发送和接收了,有对应的库支持?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-12 21:13:04 | 显示全部楼层
leicheng 发表于 2014-4-12 20:26
请问转角,你的433M模块从照片上看,好像只连接了4根线,是模块自带TX,RX接口,还是采用SPI接口的? 程序里 ...

模块自带tx、rx,程序直接使用串口的发送就行,这个无线433模块对我们来说是透明的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-12 21:14:18 | 显示全部楼层
yiyp77 发表于 2014-4-12 19:44
顶LZ。

顺道发个国外的外源头追:

我看过这个,我的姿态计算的代码就是用的他的。他是用遥控传过数据去,我简单的改了一下,就不需要使用遥控器了
回复 支持 反对

使用道具 举报

发表于 2014-4-24 23:42:21 | 显示全部楼层
转角 发表于 2014-4-12 21:14
我看过这个,我的姿态计算的代码就是用的他的。他是用遥控传过数据去,我简单的改了一下,就不需要使用遥 ...

做好了吗?期待更新~
回复 支持 反对

使用道具 举报

发表于 2019-5-22 09:28:47 | 显示全部楼层
留个记号,最近正好用到。楼主有联系方式吗?
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 06:33 , Processed in 0.050517 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表