1、图片
(1)俯视图
(2)侧视图
(3)正视图
(4)远程操控界面
2、视频
3、关键点
(1)控制系统采用的是arduino,用到了舵机模块,以太网模块。
(2)摄像头是基于海思芯片的,可直接通过以太网访问。
(3)B B木仓是电动的,去掉把手之后,将它装在舵机构成的云台上。另外,由于电动机的电流较大,故而将B B木仓独立供电。
4、关键代码
(1)arduino源码:
#include <Servo.h> Servo myservo1; Servo myservo2; String comdata = ""; String cmd = 0; int i = 0; void setup() { Serial.begin(9600); myservo1.attach(10); // arm, Vertical myservo1.write(70); myservo2.attach(9); // base, Horizontal myservo2.write(90); pinMode(8, OUTPUT); // shoot digitalWrite(8, HIGH); } void loop() { while (Serial.available() > 0) { comdata += char(Serial.read()); delay(2); } if (comdata.length() > 0) { cmd = comdata.substring(0,1); i = comdata.substring(1,4).toInt(); if(cmd == "V") myservo1.write(i); else if(cmd == "H") myservo2.write(i); else if(cmd == "S") { if(i == 1) digitalWrite(8, LOW); //on else digitalWrite(8, HIGH); //off } comdata = ""; } delay(100); }
PC端源码
public class GunController { // *********************************************** 全局字段 ****************************************************** TcpClient tcp = new TcpClient(); NetworkStream stream; System.Timers.Timer tmrConnecting = new System.Timers.Timer(); // 连线的周期。 若断线,在10秒后尝试建立连接 //****************************************************** 属 性 *************************************************************************** /// <summary> /// 垂直值。对应上臂。 /// 增加,则往上移 /// </summary> public int VerticalValue { set; get; } /// <summary> /// 水平值。对应底盘。 /// 增加,则往左移 /// </summary> public int HorizontalValue { set; get; } /// <summary> /// IP地址 /// </summary> public string IP { get { return _IP; } set { } } string _IP; /// <summary> /// 是否在线 /// </summary> public bool IsOnline { get { return _IsOnline; } set { } } bool _IsOnline = false; // *********************************************** 构造函数 ****************************************************** /// <summary> /// 以IP地址为参数实例化一个对象 /// </summary> /// <param name="ip"></param> public GunController( string ip ) { _IP = ip; this.VerticalValue = 70; this.HorizontalValue = 90; // 计时器1 tmrConnecting.Elapsed += new ElapsedEventHandler( tmrConnecting_Elapsed ); tmrConnecting.Interval = 10000; // 每10秒种尝试连接一次 tmrConnecting.Enabled = true; // 首次连接 Open(); } // *********************************************** 公共方法 ****************************************************** /// <summary> /// 向上移 /// </summary> public void MoveUp() { VerticalValue++; Send( "V" + VerticalValue ); } /// <summary> /// 向下移 /// </summary> public void MoveDown() { VerticalValue--; Send( "V" + VerticalValue ); } /// <summary> /// 向左移 /// </summary> public void MoveLeft() { HorizontalValue++; Send( "H" + HorizontalValue ); } /// <summary> /// 向右移 /// </summary> public void MoveRight() { HorizontalValue--; Send( "H" + HorizontalValue ); } /// <summary> /// 射击 /// </summary> public void Shoot() { Send( "S001" ); System.Threading.Thread.Sleep( 120 ); Send( "S000" ); } // *********************************************** 私有方法 ****************************************************** /// <summary> /// 定时进行连接。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void tmrConnecting_Elapsed( object sender, ElapsedEventArgs e ) { Open(); } /// <summary> /// 打开连接。 /// </summary> /// <param name="ip"></param> /// <param name="port"></param> void Open() { try { if( tcp.Connected == false ) //若连线失败,则尝试进行连接 { // 若是连接断了,则先关闭当前的TCP client实例。然后再开启另一个TCP client实例 tcp.Close(); tcp = new TcpClientWithTimeout( _IP, 8000, 2000 ).Connect(); tcp.ReceiveTimeout = 1000; tcp.SendTimeout = 1000; // timeout stream = tcp.GetStream(); _IsOnline = true; Console.WriteLine( _IP.PadRight( 20 ) + "连接成功!" + DateTime.Now.ToString( "yyyy-MM-dd hh:mm:ss" ) ); } } catch { _IsOnline = false; Trace.WriteLine( _IP.PadRight( 20 ) + "连接失败!" + DateTime.Now.ToString( "yyyy-MM-dd hh:mm:ss" ) ); } } /// <summary> /// 发送命令 /// </summary> public void Send( string command ) { try { if( tcp.Connected == true ) { // 发送 byte[] commandBytes = Encoding.ASCII.GetBytes( command ); stream.Write( commandBytes, 0, command.Length ); // 写入 } else { } } catch { Trace.WriteLine( _IP.PadRight( 20 ) + "发送指令失败" + DateTime.Now.ToString( "yyyy-MM-dd hh:mm:ss" ) ); } } }
5、下载
时间: 2024-10-29 04:35:04