RichardFu 发表于 2016-1-7 11:24:30

履带加摄像头小车

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



你还可以用这个小车来探测一些人无法到达的地方,比如,探测下火星表面什么的。
这个机器人底部用的是Devastator履带机器人。使用这个机器人平台配上Romeo BLE控制板,可以轻易使它前进、后退以及转向。小车有多种控制方法,这里我们选择用手机软件GoBLE来控制。
履带机器人的上方我们装上了一个云台(由舵机控制),它可以用来控制摄像头的左右转向。云台上方还装有一个舵机,这个是用来控制摄像头的上下转动。这个舵机上方固定着摄像头。这个摄像头(SEN0022)可以用蓝牙传输视频信息到电脑,然后视频就可以直接在电脑上观看了。
二. 连接




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

三. 程序
参考代码:

#include <Servo.h>
#include <Metro.h>
#include "GoBLE.h"

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

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

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

int joystickX, joystickY;
int buttonState;

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

}

void loop() {

if (Goble.available()) {

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

    buttonState   = Goble.readSwitchUp();
    buttonState   = Goble.readSwitchDown();
    buttonState   = Goble.readSwitchLeft();
    buttonState= Goble.readSwitchRight();

    //    Serial.print("Joystick Value: ");
    //    Serial.print(joystickX);
    //    Serial.print("");
    //    Serial.println(joystickY);

    if (joystickY > 196) {
      Serial.println("turn right");
      carTurnRight(250, 250);
    }
    else if (joystickY < 64) {
      Serial.println("turn left");
      carTurnLeft(250, 250);
    }
    else if (joystickX > 196) {
      Serial.println("move forward");
      carAdvance(500, 500);
    }
    else if (joystickX < 64) {
      Serial.println("move backward");
      carBack(500, 500);
    }
    else {
      carStop();
    }

    if (buttonState == PRESSED &&
      buttonState == RELEASED) {
      Serial.println("servo left");
      Serial.println(basePosition);
      basePosition += 5;
      if (basePosition >= 180) {
      basePosition = 180;
      }
    }
    else if (buttonState == PRESSED &&
             buttonState == RELEASED) {
      Serial.println("servo right");
      Serial.println(basePosition);
      basePosition -= 5;
      if (basePosition <= 0) {
      basePosition = 0;
      }
    }
    else if (buttonState == PRESSED &&
             buttonState == RELEASED) {
      Serial.println("servo forward");
      Serial.println(topPosition);
      topPosition -= 5;
      if (topPosition <= 70) {
      topPosition = 75;
      }
    }
    else if (buttonState == PRESSED &&
             buttonState == RELEASED) {
      Serial.println("servo back");
      Serial.println(topPosition);
      topPosition += 5;
      if (topPosition >= 160) {
      topPosition = 155;
      }
    }
    top.write(topPosition);
    base.write(basePosition);
}

}

void carStop() {                //Motor Stop
digitalWrite(speedPin_M2, 0);
digitalWrite(directionPin_M1, LOW);
digitalWrite(speedPin_M1, 0);
digitalWrite(directionPin_M2, LOW);
}

void carTurnLeft(int leftSpeed, int rightSpeed) {       //Turn Left
analogWrite (speedPin_M2, leftSpeed);             //PWM Speed Control
digitalWrite(directionPin_M1, HIGH);
analogWrite (speedPin_M1, rightSpeed);
digitalWrite(directionPin_M2, LOW);
}

void carTurnRight(int leftSpeed, int rightSpeed) {   //Turn Right
analogWrite (speedPin_M2, leftSpeed);
digitalWrite(directionPin_M1, LOW);
analogWrite (speedPin_M1, rightSpeed);
digitalWrite(directionPin_M2, HIGH);
}

void carBack(int leftSpeed, int rightSpeed) {         //Move backward
analogWrite (speedPin_M2, leftSpeed);
digitalWrite(directionPin_M1, LOW);
analogWrite (speedPin_M1, rightSpeed);
digitalWrite(directionPin_M2, LOW);
}
void carAdvance(int leftSpeed, int rightSpeed) {         //Move forward
analogWrite (speedPin_M2, leftSpeed);
digitalWrite(directionPin_M1, HIGH);
analogWrite (speedPin_M1, rightSpeed);
digitalWrite(directionPin_M2, HIGH);
}

代码分析:

GoBLE.h和Metro.h这两个库可以在这里下载:海盗船套件进阶教程_手机遥控功能
全局变量和Setup()函数里主要是设置电机、舵机和GoBLE。说下这两行:int basePosition = 90; int topPosition = 115;控制摄像头方向的舵机是由角度控制的。通过测试得出上下两个舵机起始位置分别是115和90。如果安装方法有差异的话这两个数字也可能是不一样的。
Loop()函数里面,我们先检测GoBLE的蓝牙信号,并读取遥杆和按钮的数据。在GoBLE中,我们用遥杆来控制小车的移动,用按钮来控制摄像头的方向。遥杆方面,Y指代的是横向方向,X指代的是竖轴方向。数值都是0到255。我们用64和196这两个数字为界限来判断是否让小车移动或转弯。按钮方面,上和下用来控制摄像头的前倾和后仰,左和右用来控制左右转向。每次按钮改变的角度是5度,但上舵机角度要保证在75到155之间,下舵机角度要保证在0到180之间。
最后还提供了小车的前进、后退、左转、右转、停止这5个函数。它们都是通过控制两个电机的速度控制口和方向控制口来控制小车的移动的。

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


控制效果视频
https://static.video.qq.com/TPout.swf?vid=c0179j0wvzj&auto=0

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_XMzM2ODcwODE3Mg==.html?spm=a2h3j.8428770.3416059.1

http://v.youku.com/v_show/id_XMzM2ODk1MDQ4NA==.html?spm=a2h3j.8428770.3416059.1

http://v.youku.com/v_show/id_XMzM2ODk2MzA3Mg==.html?spm=a2h3j.8428770.3416059.1

http://v.youku.com/v_show/id_XMzM2ODk2NTIyNA==.html?spm=a2h3j.8428770.3416059.1

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

很好的作品支持

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

很棒

别人家的小孩 发表于 2019-1-27 18:34:46

丄帝De咗臂 发表于 2016-1-10 18:12
摄像头好贵阿

不贵、

别人家的小孩 发表于 2019-1-27 18:34:55

丄帝De咗臂 发表于 2016-1-10 18:12
摄像头好贵阿

不贵、

别人家的小孩 发表于 2019-1-27 18:34:55

丄帝De咗臂 发表于 2016-1-10 18:12
摄像头好贵阿

不贵、

破风而来 发表于 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

厉害厉害
页: [1]
查看完整版本: 履带加摄像头小车