设为首页收藏本站

履带加摄像头小车

RichardFu 发表于 2016-1-7 11:24:30 | 显示全部楼层 [复制链接]
8 1714
本帖最后由 RichardFu 于 2016-1-7 14:30 编辑

. 简介

想去偷窥一下小伙伴们在干嘛,又懒得起身怎么办?有了这个履带摄像头小车就没问题了,它让你有了另外一双眼睛!


履带照片.JPG


你还可以用这个小车来探测一些人无法到达的地方,比如,探测下火星表面什么的。

这个机器人底部用的是Devastator履带机器人。使用这个机器人平台配上Romeo BLE控制板,可以轻易使它前进、后退以及转向。小车有多种控制方法,这里我们选择用手机软件GoBLE来控制。

履带机器人的上方我们装上了一个云台(由舵机控制),它可以用来控制摄像头的左右转向。云台上方还装有一个舵机,这个是用来控制摄像头的上下转动。这个舵机上方固定着摄像头。
这个摄像头(SEN0022)可以用蓝牙传输视频信息到电脑,然后视频就可以直接在电脑上观看了。



. 连接

履带连线图.png


1.左边电机连到Romeo BLE的电机控制M2,右边电机连到M1。(注意分清正负线)
2.Romeo BLE上电机控制口旁的电源口是专门用来给电机供电的。连接前先将上面的开关调到OFF,然后把电池连到这个口。
3.把云台的线连到数字口8
4.把上面的舵机的线连到数字口9
5.把摄像头装在舵机支架上,也给它连上电源。
6.把摄像头自带的蓝牙接收器连接到电脑上。


. 程序



参考代码:

  1. #include <Servo.h>
  2. #include <Metro.h>
  3. #include "GoBLE.h"

  4. int speedPin_M1 = 5;     //电机1速度控制 M1 Speed Control
  5. int speedPin_M2 = 6;     //电机2速度控制 M2 Speed Control
  6. int directionPin_M1 = 4;     //电机1方向控制 M1 Direction Control
  7. int directionPin_M2 = 7;     //电机2方向控制 M1 Direction Control

  8. Servo base; //云台 base platform servo
  9. Servo top; //上层舵机 top servo

  10. int basePosition = 90; // 云台起始位置:90,右转:-,左转:+   base servo forward: 90, turn right: -, turn left: +
  11. int topPosition = 115;  // 上层舵机起始位置:115,前倾:-,后仰:+   top servo straight: 115, turn forward: -, turn backward: +

  12. int joystickX, joystickY;
  13. int buttonState[5];

  14. void setup() {
  15.   Goble.begin(); //启动GoBLE
  16.   Serial.begin(115200);
  17.   top.attach(9);         // Top Servo– Digital 9
  18.   base.attach(8);        // Base Servo - Digital 8
  19.   top.write(topPosition);   //写入起始角度
  20.   base.write(basePosition);  //写入起始角度

  21. }

  22. void loop() {

  23.   if (Goble.available()) {

  24.     joystickX = Goble.readJoystickX();
  25.     joystickY = Goble.readJoystickY();

  26.     buttonState[SWITCH_UP]     = Goble.readSwitchUp();
  27.     buttonState[SWITCH_DOWN]   = Goble.readSwitchDown();
  28.     buttonState[SWITCH_LEFT]   = Goble.readSwitchLeft();
  29.     buttonState[SWITCH_RIGHT]  = Goble.readSwitchRight();

  30.     //    Serial.print("Joystick Value: ");
  31.     //    Serial.print(joystickX);
  32.     //    Serial.print("  ");
  33.     //    Serial.println(joystickY);

  34.     if (joystickY > 196) {
  35.       Serial.println("turn right");
  36.       carTurnRight(250, 250);
  37.     }
  38.     else if (joystickY < 64) {
  39.       Serial.println("turn left");
  40.       carTurnLeft(250, 250);
  41.     }
  42.     else if (joystickX > 196) {
  43.       Serial.println("move forward");
  44.       carAdvance(500, 500);
  45.     }
  46.     else if (joystickX < 64) {
  47.       Serial.println("move backward");
  48.       carBack(500, 500);
  49.     }
  50.     else {
  51.       carStop();
  52.     }

  53.     if (buttonState[SWITCH_LEFT] == PRESSED &&
  54.         buttonState[SWITCH_RIGHT] == RELEASED) {
  55.       Serial.println("servo left");
  56.       Serial.println(basePosition);
  57.       basePosition += 5;
  58.       if (basePosition >= 180) {
  59.         basePosition = 180;
  60.       }
  61.     }
  62.     else if (buttonState[SWITCH_RIGHT] == PRESSED &&
  63.              buttonState[SWITCH_LEFT] == RELEASED) {
  64.       Serial.println("servo right");
  65.       Serial.println(basePosition);
  66.       basePosition -= 5;
  67.       if (basePosition <= 0) {
  68.         basePosition = 0;
  69.       }
  70.     }
  71.     else if (buttonState[SWITCH_UP] == PRESSED &&
  72.              buttonState[SWITCH_DOWN] == RELEASED) {
  73.       Serial.println("servo forward");
  74.       Serial.println(topPosition);
  75.       topPosition -= 5;
  76.       if (topPosition <= 70) {
  77.         topPosition = 75;
  78.       }
  79.     }
  80.     else if (buttonState[SWITCH_DOWN] == PRESSED &&
  81.              buttonState[SWITCH_UP] == RELEASED) {
  82.       Serial.println("servo back");
  83.       Serial.println(topPosition);
  84.       topPosition += 5;
  85.       if (topPosition >= 160) {
  86.         topPosition = 155;
  87.       }
  88.     }
  89.     top.write(topPosition);
  90.     base.write(basePosition);
  91.   }

  92. }

  93. void carStop() {                //  Motor Stop
  94.   digitalWrite(speedPin_M2, 0);
  95.   digitalWrite(directionPin_M1, LOW);
  96.   digitalWrite(speedPin_M1, 0);
  97.   digitalWrite(directionPin_M2, LOW);
  98. }

  99. void carTurnLeft(int leftSpeed, int rightSpeed) {       //Turn Left
  100.   analogWrite (speedPin_M2, leftSpeed);             //PWM Speed Control
  101.   digitalWrite(directionPin_M1, HIGH);
  102.   analogWrite (speedPin_M1, rightSpeed);
  103.   digitalWrite(directionPin_M2, LOW);
  104. }

  105. void carTurnRight(int leftSpeed, int rightSpeed) {     //Turn Right
  106.   analogWrite (speedPin_M2, leftSpeed);
  107.   digitalWrite(directionPin_M1, LOW);
  108.   analogWrite (speedPin_M1, rightSpeed);
  109.   digitalWrite(directionPin_M2, HIGH);
  110. }

  111. void carBack(int leftSpeed, int rightSpeed) {           //Move backward
  112.   analogWrite (speedPin_M2, leftSpeed);
  113.   digitalWrite(directionPin_M1, LOW);
  114.   analogWrite (speedPin_M1, rightSpeed);
  115.   digitalWrite(directionPin_M2, LOW);
  116. }
  117. void carAdvance(int leftSpeed, int rightSpeed) {         //Move forward
  118.   analogWrite (speedPin_M2, leftSpeed);
  119.   digitalWrite(directionPin_M1, HIGH);
  120.   analogWrite (speedPin_M1, rightSpeed);
  121.   digitalWrite(directionPin_M2, HIGH);
  122. }
复制代码


代码分析:

GoBLE.hMetro.h这两个库可以在这里下载:
http://wiki.dfrobot.com.cn/index.php?title=%E6%B5%B7%E7%9B%97%E8%88%B9%E5%A5%97%E4%BB%B6%E8%BF%9B%E9%98%B6%E6%95%99%E7%A8%8B_%E6%89%8B%E6%9C%BA%E9%81%A5%E6%8E%A7%E5%8A%9F%E8%83%BD

全局变量和Setup()函数里主要是设置电机、舵机和GoBLE
说下这两行:
int basePosition = 90;
int topPosition = 115;
控制摄像头方向的舵机是由角度控制的。通过测试得出上下两个舵机起始位置分别是11590。如果安装方法有差异的话这两个数字也可能是不一样的。

Loop()函数里面,我们先检测GoBLE的蓝牙信号,并读取遥杆和按钮的数据。在GoBLE中,我们用遥杆来控制小车的移动,用按钮来控制摄像头的方向。
遥杆方面,Y指代的是横向方向,X指代的是竖轴方向。数值都是0255。我们用64196这两个数字为界限来判断是否让小车移动或转弯。
按钮方面,上和下用来控制摄像头的前倾和后仰,左和右用来控制左右转向。每次按钮改变的角度是5度,但上舵机角度要保证在75155之间,下舵机角度要保证在0180之间。

最后还提供了小车的前进、后退、左转、右转、停止这5个函数。它们都是通过控制两个电机的速度控制口和方向控制口来控制小车的移动的。


. 视频传输


从这里下载VIDEOVIEW软件:
确保蓝牙接收器已经连在电脑上。打开VIDEOVIEW,在Devices找到插上的蓝牙设备,我们就可以看到摄像头传来的图像了。


视频效果图.png



控制效果视频




发表于 2016-1-7 11:51:39 | 显示全部楼层
沙发
回复 支持 反对

使用道具 举报

发表于 2016-1-8 05:43:35 | 显示全部楼层
视频图像可以出现在手机里吗?
回复 支持 反对

使用道具 举报

发表于 2016-1-8 05:44:41 | 显示全部楼层
楼主摄像头给个链接
回复 支持 反对

使用道具 举报

发表于 2016-1-8 05:49:42 | 显示全部楼层
http://www.dfrobot.com.cn/gallery.php?id=643
楼主用的这个,好贵呀
回复 支持 反对

使用道具 举报

发表于 2016-1-8 10:50:17 | 显示全部楼层
视频挂了
回复 支持 反对

使用道具 举报

发表于 2016-1-10 18:12:58 | 显示全部楼层
摄像头好贵阿
回复 支持 反对

使用道具 举报

发表于 2016-7-7 15:57:18 | 显示全部楼层
楼主有这个摄像头套装的光盘吗?能不能发一份给我啊?我的光盘找不到了?谢谢啊
回复 支持 反对

使用道具 举报

发表于 2017-1-24 08:29:33 | 显示全部楼层
这个好,我的机器也准备装给摄像头
回复 支持 反对

使用道具 举报

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

本版积分规则 允许回帖同步到新浪微博  

  • 初级技师
  • 289
  • 2

推荐阅读

精华导读




公司简介| 联系我们| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表