随笔7(arduino)

基于arduino的一种交互式硬件设计方案

 

胡江峰2013221111120039

 

摘 要

 

在物联网高速发展的今天,Arduino简单的开发方式让人们能够更加的专注于创意和实现,更低的学习成本和更短的开发周期使其成为了未来硬件开发的一个主流趋势。考虑到它简易的开发方式、更低的制造成本、以及全球范围内开发使用的广泛性,我们提出一种联通物理世界和网络世界的交互方案,希望可以让更多的人投入到万物相连、感知世界的建设中来。

【关键词】           物联网      Arduino     交互系统

 

Abstract

 

At the rapid development of theInternet of Things, Arduino's simple development approach allows people tofocus more on creativity and implementation, lower learning costs and shorterdevelopment cycles make it a mainstream trend in future hardware development.Taking into account its simple development approach, lower manufacturing costs,and the wide range of development and use around the world, we propose acommunication between the physical world and the network world program, hopingto allow more people to put everything connected, Perceived the construction ofthe world.

【Key words】        IOT        Arduino         Interactive system

 

在物联网大行其道的今天,将现实物理世界与网络世界进行有机融合以实现物体之间的联通成为了当下研究的热点,不同于互联网时代,物联网架构下的物理世界连接物数目的众多以及其需要考虑到的移动性和能耗等要求使得原始的计算机端到端的连接失去了作用,我们希望新型终端有着更加小的体积,以便能够随处安装;更加低的功耗,使得能够在移动供电的情况下用得很久;更加底的制作成本,这让每个人都能尝试并且使用;以及更加通用的协议,才能让每个独立运行的终端能够实现万物互联的期许。这些是物联网时代需要追求的目标。正基于此,我们寻找到一种开源的电子平台Arduino,考虑到它简易的开发方式、更低的制造成本、以及全球范围内开发使用的广泛性,提出一种联通物理世界和网络世界的交互方案,希望可以让更多的人投入到万物相连、感知世界的建设中来。

在接下来我们将会分为设计方案和原理分析两个部分来进行介绍,这两个部分的难度有较大的差别,对于前一部分,我们将为读者着重介绍该方案的实现方法和步骤,以及相关工具的安装和使用,对于非相关专业或者灵感型开发者这些知识就已经足够让其实现目的了。而对于后一部分,读者就需要一些电子专业的相关知识和带有一定探究兴趣了,它将介绍到Arduino的原理图及设计规范,甚至读者可以通过这些自己动手做出一块完全属于自己的符合Arduino规范的电路板。

1、硬件设计方案

1.1、目的

实现人工遥控硬件运动功能;实现利用传感器反馈完成自动化运动;实现远距离图像传输。

1.2、元器件

arduinouno R3集成板*1,L293D驱动板(带红外接收器)*1,金属承载板*1,小功率电机*4,对应尺寸轮胎*4,光敏传感器*4,AP模式下的无线路由*1,摄像头*1,对应规格供电电源*1,杜邦线及固定螺钉若干。

1.3、安装流程

由于arduino板本身更多的是作为信号板使用,在安全电压内无法输出足够的电流去直接驱动电机运转,因此需要加装用于扩流的驱动板,在驱动板的选择上没有特别的要求,基于成本考虑,本次设计采用单L293D芯片的驱动板,引脚连线也都基于此,读者可根据后文的L293D原理图与自己选择的驱动模块进行引脚映射。

1.3.1、第一步

基于能耗及金属承载板载荷等综合考虑,本设计方案包含两组四个光敏传感器,分别用于探测垂直底部及水平前方光强,对应引脚为(LBZ、RBZ、LXJ、RXJ),按照引脚连接图标注用杜邦线连接所有元器件。

(引脚连接图)

1.3.2、第二步

安装Arduino板对应的驱动程序(若无法自动安装,通常售卖方会提供相应的驱动程序),保证系统能够识别设备并为后来的烧录和调试做准备。

1.3.3、第三步

完成之前的工作后,就到了依照需求编写代码的工作了,Arduino作为一款软件和硬件都开源的平台,它拥有自己的开发工具及开发语言,其编程语言基于wiring语言开发,是对AVR-GCC库的二次封装,语法类似于C/C++,这使得对于初学者有着很高的友好度。在其专门的开发工具Arduino IDE中,工具菜单栏中会显示安装并连接好的板及端口号,选择当前连接使用的板和端口号,写入相应程序,并编译,编译成功后进行上传,即可将编译好的二进制程序文件烧录入Arduino板中。

1.4、软件编写及讲解

在硬件连接和驱动安装完成后,就可以在开发工具中编写自己需要的程序了,为了实现预期的目标,本文将逐一的对各个功能模块构造及分析:

1.4.1、第一步

函数库导入及引脚的定义,在此由于需要用到红外通讯,故需要在IDE工具的安装路径里的libraries文件夹里加入IRremote外部函数库并导入。

1.4.2、第二步

红外遥控编码设定及运动模块编写,由于各个红外遥控器的规格不同,所以需要预先测试出红外遥控器每个按键对应的编码,才能准确的作出响应,读者可通过后文提供的红外遥控测试程序通过串口测试出不同遥控器的所有按键编码。

1.4.3、第三步

自定义相关变量及建立初始化函数,初始化函数是Arduino编写规范中的必要函数之一,Arduino设计者为了降低其准入门槛,在Arduino IDE中隐藏了程序的相关细节,将其简化为只有setup()和loop()两个必需函数的代码框架【1】,setup()用于定义引脚的输入输出模式和自定义变量初始值等信息。

1.4.4、第四步

编写主程序代码,loop()函数用于不断循环内部代码,作为主程序执行所有动作,由于Arduino的CPU只有一个,所以只能用中断来改变运行状态,同时因为要考虑到传感器信号的实时反馈性,故难以在代码层面实现外部数据实时监听和接收功能。当程序进入带有传感器实时反馈数据并需要立即响应的模块后,便不可再通过红外遥控器更换模块,只能通过重启进入非传感器实时反馈模块进行模块更换。

由于篇幅原因,详细代码及注解后附。

1.5、运行效果

通过红外遥控器的1-9键实现控制硬件左前转、前进、右前转、左旋转、停止、右旋转、左后转、后退、右后转这九种基本运动模式,通过VOL-和VOL+键实现控制硬件运动速度,通过prev键控制硬件调用底部光敏传感器实现低速寻迹运动,通过next键控制硬件调用前方光敏传感器实现跟随运动,通过pause键实现高速寻迹加避障运动,通过EQ键实现切换WiFi控制并传输图像功能,至此,预期目标皆已完成。

2、原理分析

2.1、集成板整体架构

通过Arduino官方公开资料【2】中得知,其采用ATmega328P微处理器,工作电压为5V,输入电压推荐值为7-12V,极限值为6-20V,根据自身的开发经验得知,当输入瞬时电压高于极限值不多时,其稳压电路AMS1117会被立刻击穿损毁,但其他部位能够得到保存。集成板上还有14路数字输入输出引脚,其中有6路支持PWM方法,其直流电流为20mA,模拟输入引脚有6路,3.3V引脚的直流电流为50mA,其闪存容量为32KB,引导程序占用0.5KB,SRAM为2KB,EEPROM为1KB,时钟频率为16MHz。

在电源引脚部分,还有Vin引脚(开发板采用外部电源供电时的输入电压引脚。可以通过此引脚输入电源电压,或通过电源接头供电时,可通过该引脚进入电源接头。该引脚输出引自开发板上稳压器的5V稳压。可以通过DC电源接头(7-12V)、USB接口(5V)或开发板的VIN引脚(7-12V)给开发板供电。绕开稳压器采用5V或3.3V引脚供电可能会损坏开发板,不建议采用此方法供电)、GND(接地引脚)、5V(工作电压引脚)、3.3V(该引脚输出由板上稳压器产生的3.3V电压,其最大电流消耗为50mA)、RESET(复位:减小该引脚的输入值,以便让单片机复位。该功能通常用于因外壳限制了开发板上的复位按钮,而需要在外壳中添加一个复位按钮的情况)、IOREF(该引脚提供单片机的参考工作电压。正确配置的外壳可以读取IOREF引脚电压,并选择合适的电源,或启用输出端的电压转换器,以便以5V或3.3V电压运行)。

另外,还有用于支持I2C通讯的SCL/SDA引脚,SDA是双向数据线,SCL是时钟线。SCL在I2C 总线上传送数据,首先送最高位,由主机发出启动信号,SDA在SCL 高电平期间由高电平跳变为低电平,然后由主机发送一个字节的数据。数据传送完毕,由主机发出停止信号,SDA在SCL 高电平期间由低电平跳变为高电平。用于设定ADC参考电压的AREF引脚【3】,以及用于支持SPI通讯的6路ICSP引脚。

(Arduino Uno原理图)

2.2、集成板引脚分析

在这一部分,将会对Arduino集成板上的每个引脚做功能说明及详细注解,已提供给读者在使用时相对清楚的参考。

(Arduino Uno引脚注解图)

2.2.1、引脚0-13

数字信号引脚,14路数字引脚中的每一路引脚都可以作为输入或输出引脚。这可以通过使用引脚模式()、数字写入()和数字读取()功能来实现。各引脚的工作电压均为5V。各引脚可以提供或接收20mA电流作为推荐工作条件,且配有20-50kΩ的内部上拉电阻(默认处于断开状态)。最大电流值不得超过40mA,以避免对单片机造成永久性损坏。此外,此外,某些引脚还具有专用功能:

接口:0(RX)和1(TX)号引脚用于接收(RX)和发送(TX)TTL串行数据。这两路引脚连接到ATmega16U2的USB-to-TTL串行芯片的相应引脚上。

外部连接中断:2和3号引脚可以进行配置,以便出现低值、上升沿或下降沿或数值变化等现象时,能发出中断连接指令。

PWM:3、5、6、9、10和11号引脚能通过[[Reference/AnalogWrite|模拟写入()]]功能,提供8位PWM输出。

SPI:10(SS)、11(MOSI)、12(MISO)和13(SCK)号引脚支持通过SPI库进行SPI通信。

LED:13号引脚有一个内置LED与之相连。当引脚位于高位值时,LED亮起,而当引脚位于低位值时,LED熄灭。

TWI:A4(SDA)引脚以及A5(SCL)引脚支持通过线库进行TWI通信。

2.2.2、引脚A0-A5

模拟信号输入引脚,分别标记为A0到A5。每路输入提供10位分辨率(即1024位不同的值)。虽然可以通过AREF引脚和模拟参考()功能来改变模拟输入的上限值,但其默认输入值范围为0-5V。

2.2.3、ICSP的6路引脚

支持ISP,通过直接使用USBtinyISP下载程序【4】,省去了usb转串口的下载器,不过一般商业购买的Arduino都带有usb转串口的相关模块,故此组引脚一般不用。

2.2.4、SCL/SDA/GND

用于支持 I2C通信的一组引脚。现代控制器的输入输出口通常只能输出高低电平。通过低电平和高电平映射为0和1两个数进而通过编码发送复杂的信息,为了解决发送连续相同信号的解码问题,通常有两种方法:限定每个信号的时间。比如规定高低电平持续时间为1ms,那么2ms低电平就代表2个0(UART基本是用的这个原理);多添加一个信号线。当这个信号线上的电平发生变化的时候读入之前信号线上的信号(新加的信号线叫作时钟线,大部分协议都是用的这种方式)【5】。这两种方式各有利弊,第一种只需要1根线,同样由于只有一根线,那么为了减少误传输只能降低传输速度,第二种需要2根线,但可以以很快的速度进行数据传输。也可以再加一组线组成全双工模式(发送数据的同时还可以接收数据)。I2C是以第二种方式运行的一套协议。由3根线组成,分别叫SDA,SCL,GND,SDA为数据线,SCL为时钟线,GND为参考电平。

3、不足

Arduino处理性能很低,无论是储存性能还是计算性能,都有较大的局限性,通常处理的任务适用于数据采集和控制【6】,无论是32KB的闪存还是最大不超过50mA的电流,都使得其无法运行过于复杂的系统或直接驱动硬件,而只能去间接控制。还有就是由于Arduino核心库是对AVRGCC的二次封装,在对于需要高度实时性要求的程序支持上面有一定的不足。另外在使用的过程中发现,由于其传感器需要实时反馈信息并控制运动,再加上其单CPU的局限性,导致无法在传感器实时控制中同时监听外部信息接收端口,而调用中断时又有可能会造成串口通讯信息丢失,无法保证其可靠性。

4、应用前景

由于Arduino是一块基于开放原始代码的Simple I/O平台,其硬件原理图设计和IDE皆可免费下载,这意味着任何人都可以依照arduino的设计图表自己购买需要的独立部件来制造出符合规范的电路板,其开发工具是用Java编程语言编写并且在GPL下发布。开发语言类似于C/C++并封装了许多常用库,这使得其开发门槛大幅度降低。

当然,其设计者的初衷也是希望建立一个简单的、易于理解和使用的并且低成本的一套用来感应和控制现实物理世界的工具【7】,它让具有无限创意和灵感的人群不再为编码的高门槛而却步,只要有想法,便可通过Ar

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值