[项目]履带加摄像头小车 精华

14532浏览
查看: 14532|回复: 18

[项目] 履带加摄像头小车

[复制链接]
. 简介

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

履带加摄像头小车图1


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

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

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

. 连接

履带加摄像头小车图2


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这两个库可以在这里下载:

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

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

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


. 视频传输

从这里下载VIDEOVIEW软件:
https://www.filewatcher.com/m/VIDEOVIEW.EXE.221184-0.html(链接已失效)
确保蓝牙接收器已经连在电脑上。打开VIDEOVIEW,在Devices找到插上的蓝牙设备,我们就可以看到摄像头传来的图像了。

履带加摄像头小车图3

控制效果视频


dsweiliang  初级技神

发表于 2016-1-7 11:51:39

沙发
回复

使用道具 举报

hnyzcj  版主

发表于 2016-1-8 05:43:35

视频图像可以出现在手机里吗?
回复

使用道具 举报

hnyzcj  版主

发表于 2016-1-8 05:44:41

楼主摄像头给个链接
回复

使用道具 举报

hnyzcj  版主

发表于 2016-1-8 05:49:42

https://www.dfrobot.com.cn/goods-643.html
楼主用的这个,好贵呀
回复

使用道具 举报

苦海  初级技匠

发表于 2016-1-8 10:50:17

视频挂了
回复

使用道具 举报

丄帝De咗臂  高级技匠

发表于 2016-1-10 18:12:58

摄像头好贵阿
回复

使用道具 举报

丁丁  中级技师

发表于 2016-7-7 15:57:18

楼主有这个摄像头套装的光盘吗?能不能发一份给我啊?我的光盘找不到了?谢谢啊
回复

使用道具 举报

MoonShine  高级技匠

发表于 2017-1-24 08:29:33

这个好,我的机器也准备装给摄像头
回复

使用道具 举报

talos  禁止发言

发表于 2018-5-4 11:46:53

欢迎使用深圳市天乐思智能总线伺服及其学习套件, 其特点如下:1、自带ros开发包,无缝对接ROS。2、提供6自由度机械臂套件,AGV套件。3、完整兼容ROBOTIS的dynamixel protocol 2.0 协议的伺服,而且我们对该协议进行了扩充,我们的功能其实比ROBOTIS还要多。

公司网址 WWW.SZTALOS.COM
淘宝店铺:https://shop217839337.taobao.com
联系QQ:2858136840  
伺服性能展示视频地址:  http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1

  http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1

  http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1

  http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1
回复

使用道具 举报

1063234813  学徒

发表于 2018-12-18 09:08:22

很好的作品  支持
回复

使用道具 举报

gada888  版主

发表于 2018-12-18 16:26:55

很棒
回复

使用道具 举报

别人家的小孩  见习技师

发表于 2019-1-27 18:34:46


不贵、
回复

使用道具 举报

别人家的小孩  见习技师

发表于 2019-1-27 18:34:55


不贵、
回复

使用道具 举报

别人家的小孩  见习技师

发表于 2019-1-27 18:34:55


不贵、
回复

使用道具 举报

破风而来  初级技师

发表于 2019-3-8 11:53:55

挺好的
回复

使用道具 举报

DFSkangKjBr  中级技师

发表于 2019-9-3 14:13:29

学习中,希望自己能成功做出一个来!谢谢分享!
回复

使用道具 举报

_Rmqj13-  学徒

发表于 2019-11-6 09:17:45

您好,在么。履带机器人上摄像头怎么卖啊?可以发下您的联系方式么
回复

使用道具 举报

DFS1w2cb8o8  中级技师

发表于 2020-6-13 10:36:45

厉害厉害
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail