1、功能介绍

本项目所设计的机器人需要实现的功能为:操作员在操作终端(手机或PC端)通过Wi-Fi连接到小车上Wi-Fi模块所在的网络中,向其发出相关操作指令,在Wi-Fi模块接收相关的数据指令并通过UNO R3单片机对这些数据进行解码,最后按照不同的指令信息利用单片机控制相应的外围电路从而实现遥控控制。与此同时,安装在机器人上的摄像头可以通过Wi-Fi网络将视频信息传递到相应操作终端,只要在同一个Wi-Fi网络下便可以在多个设备上直观地查看。实现了终端对底层电路的控制以及底层信息的回传,以便于操作员实时了解机器人周围的环境,并根据环境情况发出指令进而控制机器人执行特定的任务。

2、材料清单及硬件电路设计

硬件部分由车体部分,控制部分和无线部分等构成。车体部分由底板和4个直流减速电机组成,电机两两并联,相当于同时驱动一侧两个电机。车轮采用4个橡胶轮胎,体积小,质量轻,抓地性好。控制部分采用Arduino控制芯片,其上连接扩展板用于驱动四个电机运作。无线部分用OpenWrt路由器和高清摄像头组成。OpenWrt 是一个基于 Linux 的开源路由固件, 提供了一个完全可写的文件系统及软件包管理,对支持 OpenWrt 的路由器刷机后,其相当于一个Linux小系统。路 由 器 选 择OpenWrt 作为操作系统, 将 USB 摄像头采集的现场图片发给远端的 PC 控制终端,PC端显示相应的图像信息,并可接收上位机软件发送的控制信息后通过串口发送至单片机系统,并将上位机发出的命令通过串口转发给单片机控制系统,实现双向通信。硬件部分材料清单如下表中所示。

部件 型号 数量
底板 亚克力透明车底盘板 1
直流减速电机 直条双轴减速马达 4
车轮 橡胶车轮 4
摄像头 浪景高清摄像头 1
路由器 64M大内存WiFi模块 1
单片机 Arduino UNO R3 1
扩展板 电机驱动(L298N) 1

使用Arduino UNO R3开发板的4、5号端口的输出功能控制小车的左侧两个电机;6、7号端口的输出功能控制小车的右侧电机。开发板的接收数据引脚(RX)连接WiFi无线传输模块的发送数据引脚(TX),同时它的发送数据引脚(TX)连接WiFi模块的接收数据引脚(RX)。WiFi模块用USB数据线连接高清摄像头。WiFi天线用于接收和发送与手机端软件相互通信。电路设计图如下图中所示,需要注意的是单片机端口和电机之间需要通过电机驱动模块来连接,在这里我们使用的是L298N驱动模块可驱动直流电机。

3、软件系统设计

3.1、终端软件部分

能够运行在Android手机上的APP,以及可运行在Windows系统的PC端上位机软件。通过手机端软件控制小车运动以及实时接收采集到的视频信息。以Android端软件为例,启动APP后,右下角的四个按钮可以控制小车前后左右运行,主界面用于查看小车采集到的图像视频信息;通过设置按钮可以设置小车IP地址,控制端口号,视频端口号等信息。

3.2、通信协议部分

上位机采用数据包格式传送指令,也可以采用单字符的形式发送,由于单字符通信方式干扰较大,因此采用数据包格式传送指令,包头用0XFF,包尾用0XFF,无校验位。上位机利用无线网卡通过Socket发送数据包到路由器,路由器通过解包机制把数据包解开,通过串口发送到单片机进而控制电路模块执行相关的操作。

3.3、电控软件部分

对于Arduino端的电控程序部分是本项目中最为核心的部分,其流程框图如下所示。整体的程序可分为解码和编码、运动控制以及串口数据收发三个模块,其中串口数据收发模块用于接收WiFi模块发送到单片机上的数据,以及向WiFi模块发送数据(数据由它转发到其它的终端设备);解码部分用于对单片机接受到的数据表进行解析转换成易于识别的字符形式,编码部分将单片机需要发送到终端设备的信息打包成与通信协议相应的格式;运动控制模块是描述小车的行为模式有前进、后退、左转、右转以及停止五种状态,通过使用单片机IO端口高低电平的输出配合电机的正反转便可以实现这些功能。

4、核心代码

4.1、主循环

void loop()
{getSerialLine();if (commandAvailable) {processCommand(strReceived);strReceived = "";commandAvailable = false;}
}

4.2、读取串口数据

void getSerialLine()
{//使用\r字符作为两条命令间隔符,拼接收到的字符while (serialIn != '\r'){if (!(Serial.available() > 0))//缓冲器无数据装入{return;}serialIn = Serial.read();//读取串口if (serialIn != '\r') {if (serialIn != '\n'){char a = char(serialIn);strReceived += a;}}}
}

4.3、指令处理

void processCommand(String input)
{String command = getValue(input, ' ', 0);int val;if (command == "MD_Qian"){qian();}else if (command == "MD_Hou"){hou();}else if (command == "MD_Zuo"){zuo();}else if (command == "MD_You"){you();}else if (command == "MD_Ting"){ting();}else if (command == "MD_SD"){val = getValue(input, ' ', 1).toInt();leftspeed = val;val = getValue(input, ' ', 2).toInt();rightspeed = val;}//是否收到的是已经定义的命令,如果不是则不回送状态,免得浪费带
}
String getValue(String data, char separator, int index)//data(strReceived),' ',0
{int found = 0;int strIndex[] = { 0, -1 };int maxIndex = data.length() - 1;for (int i = 0; i <= maxIndex && found <= index; i++){if (data.charAt(i) == separator || i == maxIndex){//data.charAt(int val)返回val位置的char值found++;strIndex[0] = strIndex[1] + 1;strIndex[1] = (i == maxIndex) ? i + 1 : i;}}return found>index ? data.substring(strIndex[0], strIndex[1]) : "";//data.substring(int a,int b),返回a到b位置的字符串
}

4.4、速度及运动状态控制

void qian(void)
{EN1Status = LOW;EN2Status = HIGH;EN3Status = LOW;EN4Status = HIGH;SetEN();
}
void hou(void)
{EN1Status = HIGH;EN2Status = LOW;EN3Status = HIGH;EN4Status = LOW;SetEN();
}
void you(void)
{EN1Status = LOW;EN2Status = HIGH;EN3Status = HIGH;EN4Status = LOW;SetEN();
}
void zuo(void)
{EN1Status = HIGH;EN2Status = LOW;EN3Status = LOW;EN4Status = HIGH;SetEN();
}
void ting(void)
{leftspeed = 0;rightspeed = 0;EN1Status = LOW;EN2Status = LOW;EN3Status = LOW;EN4Status = LOW;SetEN();
}
//设置两侧速度
void SetEN(){analogWrite(EA, leftspeed);analogWrite(EB, rightspeed);digitalWrite(EN1, EN1Status);digitalWrite(EN2, EN2Status);digitalWrite(EN3, EN3Status);digitalWrite(EN4, EN4Status);
}

5、实物作品展示

不仅是这个基于OpenWrt模块的无线视频遥控的小车,图片中包含了本科时实验室里学长学姐、学弟学妹以及同学们的共同成果。现在想起来这一些东西都做的很简单,但在当时初学单片机时就点亮一颗LED灯都很兴奋。在学习嵌入式的这条路上,走走停停,似乎是凭借着爱好坚持了下来。最近也没有怎么做过单片机相关的项目了,所以想把这些东西写出来算是为我的大学生活做个总结吧!

6、写在最后

这是最后一节关于Arduino系列单片机应用的文章了,其实能够使用Arduino做的东西还有很多,也包含大量的有技术含量的项目。Open source带来了一次软件技术发展的高峰,在这一种开发方式中,任何人都能够得到源代码,在其基础上进行学习从而开发新的功能。在硬件方面上也是这样,开源硬件是与自由与开放原始码软件相同方式设计的计算机和电子硬件,Arduino正是开源硬件发展历程中的里程碑。类似的开源硬件还有Beagle、Raspberry PI(树莓派)等。本科时刚接触Arduino时,第一印象感觉它特别简单,不管是从软件程序的编写还是外部电路的扩展方面来讲。与便捷灵活、学习简单这些特点相对应的就是它的运行频率太低,在完成一些比较大一点的项目就会很吃力(相对于同类产品的性价比,如STM32)。当我利用Arduino平台做出了一些东西时,不得不说开源硬件的发展方便了硬件产品的很多开发步骤,也能够很快地实现自己的创意。关于Arduino单片机的学习资料如有需要可以私信我,最后希望开源硬件会发展的越来越好!

Arduino单片机(五).基于OpenWrt模块的无线视频遥控小车设计相关推荐

  1. Arduino WIFI智能小车 无线视频遥控小车 课程设计

    目录 一.项目产生的背景分析 2 1.1项目想法 2 1.2用户将如何从产品中获益 2-3 二.方案设计 3 2.1小车整体系统 2-3 2.2小车部件介绍 3-5 三.小车组装 6 3.1小车配件购 ...

  2. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

  3. 【毕设项目】基于单片机的遥控小车设计与实现 - 嵌入式 物联网 stm32 c51

    文章目录 1 简介 2 主要器件与实现 2.1 电机驱动模块 2.2 蓝牙模块 2.3 蓝牙调试APP 3 实现效果 5 部分参考代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍 ...

  4. 无线控制模块c语言编程,基于STM32F103ZET6无线语音控制小车设计与实现.doc

    基于STM32F103ZET6无线语音控制小车设计与实现 基于STM32F103ZET6无线语音控制小车设计与实现 摘要:本文以STM32F103ZET6单片机作为控制核心,通过LD3320语音识别模 ...

  5. 基于ARM的嵌入式无线视频监控系统

    http://in.eccn.com/tech_260_2011031014214013.htm 赵晓军 任明伟苏海霞 曹建坤 王飞 陈雷 国内外市场上主要推出的是数字控制的模拟视频监控和数字视频监控 ...

  6. 毕业论文 | 基于安卓手机蓝牙控制的智能小车设计(源代码)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 预告:源代码.论文.电路图设计链接 ...

  7. android智能小车 论文,基于安卓手机蓝牙控制的智能小车设计毕业设计(论文).doc...

    编 号: 审定成绩: 毕业设计(论文) 设计(论文)题目: 学院:学 生 姓 名 :专 业 :班 级 :学 号 :指 导 教 师 :答辩组 负责人 : 填表时间:年月 摘 要 随着物联网的兴起,And ...

  8. 基于STM32的最简易蓝牙遥控小车

    基于STM32的最简易蓝牙遥控小车 硬件准备 硬件连接 STM32cubeMX配置 代码部分 视频演示 本篇博客主要针对的读者为有一定单片机基础,但是第一次自制蓝牙遥控小车的小白同学,所用物件型号选择 ...

  9. 基于安卓的视频遥控小车——电脑端开发

    基于安卓的视频遥控小车的电脑端程序采用Java语言编写,Java可以做到一次编译到处运行,因为Java程序是在Java虚拟机中运行的,和平台无关,只要平台上有相应的Java虚拟机. 本设计中安卓手机是 ...

最新文章

  1. 上传图片配置控制大小_esp32-cam拍照上传云平台,http协议传输
  2. shell中的函数shell中的数组告警系统需求分析
  3. 局部响应归一化(Local Response Normalization)
  4. SQL学习教程:基础教程高级教程
  5. 被解救的代码 - 代码即服务时代来了!
  6. 关于在hue当中调shell脚本的操作(这里的shell 脚本是在shell脚本当中嵌套shell脚本的操作使用source的方式)...
  7. 关于字符集--总结,补遗以及问题
  8. epoll非阻塞IO
  9. 搜索引擎指令站长常用搜索引擎命令汇总
  10. 第四章 网络层[练习题+课后习题]
  11. 2017-2018-1 20155229 《信息安全系统设计基础》第八周学习总结
  12. Java基础 - 易错知识点整理(待更新)
  13. notes ExcelHome-excel2010应用大全
  14. 车站计算机系统的简称,AFC计算机系统.ppt
  15. U盘引导启动LINUX
  16. 计算机网络的硬件系统包含那些部件,计算机的硬件系统主要包括哪五大部件
  17. 精讲精练之图像分割经典算法——分水岭算法
  18. Excel设置图片固定在某个单元格内部
  19. Node.js Cannot find module 'xxx' 问题解决
  20. emmc linux 识别分区_Linux和Uboot下eMMC boot分区读写

热门文章

  1. GPS/BD陶瓷天线
  2. Ubuntu18.04解决蓝牙耳机无法连接问题
  3. 【黑金动力社区】【FPGA黑金开发板】Verilog HDL的礼物 - Verilog HDL扫盲文
  4. 项目经理是怎样炼成的?
  5. Android10.0 os定制化系列讲解导读
  6. 2017中国(郑州)国际医药保健品及福祉产业交易会会刊(参展商名录)
  7. bulk这个词的用法_bulk
  8. oracle bulk collect into,BULK COLLECT INTO
  9. 最新10款好看的英文字体免费下载
  10. 2022年七夕送女朋友什么礼物好?实用且好看的礼物推荐