您现在的位置是:网站首页> 硬件
项目实践问题解决方案
- 硬件
- 2024-12-18
- 1023人已阅读
项目实践问题解决方案
工厂里的自动化搬运是如何实现准确定位精准送达的?
什么是嵌入式工控机?嵌入式工控机品牌有哪些?带GPIO口的工控机
画面撕裂
现阶段来看,画面撕裂的锅应该是要让显示器来背的
出现撕裂的根本原因就在于显卡输出帧的速度比显示器快(例如GTX1080运行市面上大多数1080P的游戏帧率都能轻松破百,但大多数玩家家里的显示器刷新率都是60Hz),显示器的处理速度跟不上显卡,在显示器处理显卡丢过来的第1帧的时候,第2帧就又到了,导致同一个画面同时出现1、2两帧,撕裂就产生了。
基于我们都已经知道画面撕裂出现的原因是显卡生成帧的速度快于显示器的处理速度,所以有两种方法来解决画面撕裂的问题。①提高显示器的刷新率;②降低显卡生成
自己实现显示可以
屏幕从第一个点扫描到最后一个点的扫描时间小于帧间隔时间让画面不出现撕裂
解决lora同频干扰的三种方法
LoRa无线通信技术的出现使得无线通讯距离有了新的突破,为物联网应用带来新的发展空间,而且给一些需要远距离的应用提供了技术支撑。随着lora技术的不断发展,各种lora模块干扰的事件却日益增多,其中以同频干扰最为严重,干扰危害也是最大,所以我司给大家科普一下同频干扰的相关知识。
同频干扰是什么呢?
有关专家给出了一个明确的定义:凡是无用信号的载频与有用信号的载频相同,对接收同频道有用信号的接收机造成干扰的都统称为同频干扰。有人会问造成同频干扰的原因是什么?其实,这是无线传输的特性,只要我们使用多个lora模块在用一个频率中通讯都会有这个问题,只是需要我们找对方法去解决。
解决Lora模块同频干扰的三种方法
我司客户使用lora模块时,也经常遇到同频干扰的问题,因此我司工程师针对此问题,研发出三套方案来解决此问题:
方法一:主机轮询方式
主机轮询方式是主机逐个轮询叫号的方式,原理很简单,通过点名的方式实现应答。如主机发送给1号从机,由于从机都有地址设别,因此只有从机1能够响应主机。从机1收到主机的命令后,将数据上传给主机。主机再以相同点的轮询方式轮询其它从机数据。用恰当的比喻来说,就是老师(主机)上课时,点1号学生(从机)来回答问题,这时候只有一号学生才可以回答老师的问题。这就是主机轮询方式。轮询方式的优点是设备之间不容易出现冲突,组网也比较稳定,但是缺点是主机轮询耗时间长,这种组网方式适合那些对时间要求不高的组网应用。

方法二:从机定时上传方式
定时上传方式原理为,由主机广播发送信息给到从机,从机收到主机信息后,同步时间,然后根据我们设定的时间进行定时上传,如:主机发送信息后,从机1上传时间为1秒,那么从机2上传时间为2秒…以此类推,举个例子:我们军训时,教官给我们发布一个命令,需要我们报数,从左到右,那么左边第一个人报数数字为1,第二个人就是为2,以此类推。定时上传的原理也是如此,设定好从机的上传时间,避开数据同时上传,从而达到避免同频干扰的目的。

方法三:从机主动上传方式
从机主动上传,lora模块自己有RSSI功能的组网方式相对是比较可靠的主动上传方式。这种传输方法是通过从机需要进行数据上传的时候,检测环境中的RSSI信号强度,如果当前环境中的RSSI强度较大,就等待RSSI值变小后再进行主动上传。上传是否成功,主机会反馈给从机,在决定是否需要重新上传。但是此方式不适合不带RSSI功能的lora模块,因为从机上传越频繁,通讯失败的概率会越高,也就是我们说的同频干扰。
总结以上三种方式,都是采用了从机模块错开上传时间的原理,从而达到解决同频干扰的问题,这也是我司工程师给出最好的解决方案,希望能帮助到大家。
告诉大家如何在Arduino里输出中文汉字
打开Arduino的开发环境(关于板子的选择和串口的选择,略),选择:文件->新建
在特定的目录建立一个存放源程序的目录,我建立的是E:\arduino 的目录,此时选择:文件->另存为:
选择E:\arduino\ 并把文件名起名为udemo
此步的目的是为下一步建立中文字符串文件做准备;
保存之后:
目录就建立好了,
第二步:建立中文字符串文件
使用记事本(或其他类似文本编辑器),填写如下C代码:
const char hz[][32]={ "当前电压:", //0- "Arduino 电压表演示程序", //1 "使用串口液晶屏直接输出", //2 }; |
使用记事本的“文件”->“另存为:”
选择E:\arduino\udemo\ 目录,并将文件起名为hz.c,注意编码一定要选择“ANSI”,千万不要选择UTF8之类;
点击保存,文件存好;
备注:
constchar hz[][32] 实际上是声明了一个字符串数组,每个字符串不能超过32字节(GB2312编码的汉字16个),如果你要显示的汉字特别长,请修改32这个数字;
此种方法实际上是将汉字全部提出到一个数组中,应用此类方式很容易实现国际版程序,即切换数组就可以实现不同语种的显示;
【注意】:建立这个外挂文件的目的就是为了解决使用IDE编程环境无法编辑GB2312内码汉字的问题,请勿使用IDE编程环境打开编辑此文件,这样操作会将此文件改写为UTF8内码的文件!
第三步:编辑主程序
在开发环境中输入以下代码:
#include"hz.c" void setup() { Serial.begin(9600); Serial.println(hz[1]); Serial.println(hz[2]); } void loop() { int sensorValue = analogRead(A0); float vol = sensorValue * 2.5 / 1024; Serial.print(hz[0]); Serial.print(vol, 2); Serial.println("V"); delay(150); } |
点击“上传”,之后打开串口,输出就是中文内容。
监控摄像头离录像机远
监控工程中,如过摄像机与后端录像设备距离过远可以根据不同系统类型选择以下不同解决方法:
1、模拟监控系统使用同轴电缆传输视频信号时,距离过远可以使用高一规格的同轴电缆或更换为光纤线路;
2、模拟监控系统使用双绞线传输视频信号时,可以使用有源双绞线传输器来增强信号增加传输距离;
3、网络监控系统网线距离超过150米时,可以通过在线路中增加交换机来增强信号,或使用光纤传输。
4.无线网桥
连接距离较远的摄像头
使用光纤(光纤收发器,光纤终端盒)
使用无线网桥
使用交换机汇集
为什么单片机不能直接驱动继电器和电磁阀
继电器就是个开关,这个开关是由它内部的线圈控制的,给它的线圈通电继电器就吸合,开关就动作了。有些人还会问什么是线圈?看上图,1脚和2脚就线圈的两个引脚,3脚和5脚现在是通的,3脚和2脚是不通的。如果你给1脚和2脚通电,你就会听到继电器一声响,然后3脚和4脚就通了。
比如你要控制一条线的通断,就可以把这条线故意搞断以后,一端接到3脚,一端接到4脚,然后通过给线圈通电和断电,就可以控制这条线的通断了。
1、线圈1脚和2脚加多大电压?
这个问题,需要看你用的继电器的正面,比如我现在这个,你可以看到是05VDC,所以你可以给这个继电器的线圈通5V电,继电器就会吸合。
2、线圈电压怎么加?
终于说到正题了。你可以直接用两只手拿上5V和GND两条线直接通到继电器线圈的两个引脚,就会听到响声了。那用单片机怎么给他加电压?我们知道,单片机引脚就可以输出5V,是不是直接用单片机引脚连接继电器线圈,就可以了呢?答案当然不是的。
为什么呢?
万变不离其宗,还是欧姆定律。你用万用表量一下继电器线圈的电阻。
比如我这个继电器线圈的电阻,大概是71.7欧姆,加5V电压的话,电流就是5除以71.7约等于0.07A,就是70mA。记住,我们单片机的普通引脚最大输出10mA电流,大电流的引脚最大输出20mA电流(这点可参照单片机的datasheet)。看到了吧,虽然是5V,但是输出电流能力有限,达不到驱动继电器的电流,所以无法直接驱动继电器。这时候就需要想办法。比如用三极管S8050驱动。电路图如下。
看S8050的datasheet,S8050是一个NPN管,ICE最大允许电流是500mA,远远大于70mA,所以用S8050驱动继电器绝对是没有问题的。看上图,ICE也就是从C流到E的电流,就是和继电器线圈一条线的电流。NPN三极管,在这里就是个开关,单片机引脚输出5V高电平,ICE就导通继电器就会吸合;单片机引脚输出0V低电平,ICE就截止,继电器就不吸合。同理,电磁阀也是一种电阻很小功率很大的负载,也需要按照上述欧姆定律的方法,选择合适的驱动元件。
如何防止Arduino程序被抄板
有两个简单粗暴的方法,
其一,录好程序接好线,烧录口和主芯片直接灌注树脂或其他胶。
还有一种方法,设个开关,只要烧录口有电压信号,就闭合开关,直接短路烧毁芯片。
这两个笨方法我们团队一直在用,给您做参考~
外置SHA204加密芯片,配合上里面的代码
避免复杂驱动开发
避免复杂驱动开发,当速度要求不高的设备可试用USB转串口芯片直接连接自己设备
嵌入式系统下对GPIO的简单操作
在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。
首先,看看系统中有没有“/sys/class/gpio”这个文件夹。如果没有请在编译内核的时候加入 Device Drivers —> GPIOSupport —> /sys/class/gpio/… (sysfsinterface)。
/sys/class/gpio 的使用说明:
1、gpio_operation 通过/sys/文件接口操作IO端口 GPIO到文件系统的映射;
2、控制GPIO的目录位于/sys/class/gpio;
3、 /sys/class/gpio/export文件用于通知系统需要导出控制的GPIO引脚编号;
4、/sys/class/gpio/unexport 用于通知系统取消导出;
5、/sys/class/gpio/gpiochipX目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数导出一个引脚的操作步骤;
6、首先计算此引脚编号,引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数;
7、向/sys/class/gpio/export写入此编号,比如12号引脚,在shell中可以通过以下命令实现,命令成功后生成/sys/class/gpio/gpio12目录,如果没有出现相应的目录,说明此引脚不可导出:echo 12 > /sys/class/gpio/export;
8、direction文件,定义输入输入方向,可以通过下面命令定义为输出;
9、echo out > direction, direction接受的参数:in,out, high, low。high/low同时设置方向为输出,并将value设置为相应的1/0;
10、value文件是端口的数值,为1或0.echo 1 > value
什么是嵌入式工控机?嵌入式工控机品牌有哪些?带GPIO口的工控机
对于绝大多数互联网公司而言,linux部署是大概率事件,因此如果选择互联网公司,那么选择linux。
东田嵌入式工控机
GPIO完整写法是general-purpose input/output,也就是通用输入输出。工控机GPIO接口,通常我们习惯称为I/O口或总线扩展器,就是利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。
GPIO接口除了既可以在工控机数据传输中当输入口和输出口使用,还能在下面这些场景里面起到至关重要的作用:
一、GPIO做开关控制
一般用来做LED灯开关控制,通过软件代码,在需要亮灯的时候调用GPIO口拉高的函数,需要熄灯的时候调用GPIO拉低的函数,即可实现控制。
二、GPIO做输入中断信号
用GPIO做中断信号输入需要特别注意一点:如果选择这个中断口来唤醒系统,那一定要对照芯片规格书看清楚,选择的中断口能不能唤醒系统?对于大部分单片机,几乎每一个中断口都可以唤醒系统,但对于高主频的处理器,如平板电脑,并不是所有的GPIO都可以配置成中断,也不是所有的中断都能唤醒系统。
三、GPIO做按键检测
工控机GPIO接口默认状态是低电平,按键按下后被拉到高电平,此时系统能够检测到中断,判定为按键按下。等到按键释放了,GPIO接口检测到电压回归低电平,就判定为按键松开了,这种做法在单片机上比较常见的做法。
当然,工控机GPIO接口除了简单的输入输出之外,还可以做一些相对复杂的操作,例如模拟I2C总线或SPI数据线、输出PWM波形、ADC电压检测等。
典籍工控主机酷睿i5 8250u全封闭电脑主机双网口防尘GPIO嵌入式工控机工业计算机i5 4200U/i5 7200U/i7 7500U
NB-IoT 平台对接常见问题(中国电信)
为什么建议NB-IoT客户接入电信平台?
尤其是在NB海量设备高并发场景,电信平台与电信NB网络进行有机协同,能够有效缓解拥塞,保障业务成功,充分发挥NB网络的特性和价值。
特别是对于路灯、家电等需要下行控制的应用场景,如果客户终端直接连自有应用,那么当客户应用需要下发数据给终端时,由于NB-IoT终端分配的是私网地址,需要经过NAT地址转换为公网地址实现访问,在无交互情况下私有地址会话信息90s会被释放,因此客户应用将会找不到终端,进而下发失败。如果使用中国电信平台,由于电信平台与终端在一个专属网内,可以保持较长时间的会话,从而有效避免NAT地址老化的问题,实现反向控制。
物联网开放平台是否会保留应用数据,侵犯数据隐私?
除非客户同意并授权,否则物联网开放平台不会保存或解析客户的任何应用层数据。物联网开放平台目前对数据处理有两种模式:
数据完全透传:客户在profile编写时可以将整个应用层数据放在一个字段里面打包,物联网开放平台不进行任何解包的操作,直接将数据传递给客户平台,数据完全透传。
解析数据并提供服务:企业客户根据自身需要,在profile编写时对于希望物联网开放平台解析并提供数据服务的内容编写独立字段,平台解析profile中相应字段内容,并提供对应的数据分析服务。建议客户可将网络相关信息进行编写提供,用于后期故障快速排查和定位,为客户提供更好的服务。
接入电信平台是否就不接客户自有应用了?
不是。接入电信平台后,电信平台北向仍然和客户自有应用对接。对于透传客户,平台完全透传数据,通过平台的目的是为了给客户提供更好的NB网络服务性能体验;对于非透传客户,平台可以给客户自有应用提供API接口,调用平台的分析、触发器等能力。
客户接入平台的流程有哪些步骤?
1)在天翼物联产业联盟微信公众号填写账号申请,得到测试环境账号;
2)在天翼物联产业联盟网站下载相关开发指南,开发对应的profile和编解码插件,电信人员会全程提供技术支撑;期间客户可以根据需求在测试环境随时修改和编辑profile和插件。
3)将profile和编解码插件在测试环境上传,并发起测试申请,电信人员进行测试验证服务,并反馈测试报告。
4)客户通过客户经理向物联网公司支撑经理发起中国电信物联网开放平台接入申请,物联网公司会在一个工作日内为客户开通正式平台帐号,并通过邮件发放生产环境平台账号给客户,正式对接完成。
详细流程可参考《中国电信物联网开放平台接入指导手册》。
平台是否只支持CoAP协议,不支持UDP协议接入?
Profile文件上传失败可能是哪些原因?
1) Profile文件的目录结构不符合要求
2) 上传之前,存储在中文路径下
编解码插件如何上传?
目前有两种方式进行上传
1) 通过开发者门户自助上传,上传的插件包不需要签名
2) 发送给电信服务人员通过后台进行上传,需要提供签名过的插件包和公钥文件
上传之前,可使用编解码插件自检工具进行校验
编解码插件上传失败可能是哪些原因?
1) 对应的profile文件尚未上传
2) 编解码插件中的manufactureid和manufacturename与profile中的定义不一致
3) 编解码插件的目录结构不符合要求
平台北向API调用失败的原因有哪些?
1) 电信物联网开放平台开放接口采用双向认证机制,应用平台未导入平台提供的CA证书,导致认证不通过
2) API参数错误,如APPID和密码错误,目标地址端口错误等
3) 设备注册接口中的Verifycode和nodeid不一致,应该统一填写为设备的IMEI号
订阅通知消息设置的回调地址需要注意什么问题?
电信物联网开放平台支持的应用回调地址默认要求为Https,如果回调地址采用http方式,需要联系电信服务人员在电信物联网开放平台上预先配置。
回调地址格式要求:
1) 必须有端口号,且端口号之后必须具备资源路径,不能有空格。
2) 如果是https地址,如https://server:port/callbackUri,其中server可以是域名或IP地址
3) 如果http地址,如http://server:port/callbackUri,其中server必须为固定IP地址
应用收不到订阅的通知消息可能有哪些原因?
1) 电信物联网开放平台支持的应用回调地址默认要求为Https,应用未上传其服务器CA证书或证书错误,导致认证不通过
2) 应用提供的回调地址格式不正确(缺少端口号或资源路径等)或不能正常访问
3) 如果回调地址采用http方式,需在电信物联网开放平台上预先配置,否则该订阅地址无效。
平台北向API是否支持批量操作?
1) 设备注册接口不支持批量注册,如需批量注册可以通过企业门户进行操作
2) 命令下发接口可支持对批量设备的操作
设备与平台对接,需要配置哪些参数?有哪些操作步骤?
备注:下列指令仅适用于云程、移远、利尔达模组,其他厂商模组可参考对应厂商提供的模组指令集,选择相应的指令完成对应操作。
实现终端入网,需要在SSCOM中通过一系列AT指令来控制NB模组。
SSCOM中的各项设置说明如下:
1) 串口号:选择与NB模组进行通信的实际物理com口,并确保打开串口。
2) 波特率:选择9600。NB模组内置的华为NB芯片仅支持波特率9600。
3) 发送AT指令时确保勾选“发送新行”,不勾选“DTR”和“RTS”。
4) 其他参数保持默认。
终端入网的详细步骤如下所示:
Step 1:终端上电,执行“AT+NRB”复位终端。如果返回OK,表示终端正常运行。
Step 2:执行“AT+CFUN=0”关闭功能开关。如果执行成功,返回OK。
Step 3:执行“AT+NTSETID=1,设备ID”设置设备ID。设备ID为NB模组的IMEI号,如果执行成功,返回OK。
Step 4:执行“AT+NCDP=IP, PORT”设置需要对接IoT平台的地址180.101.147.115,端口为5683。如果执行成功,返回OK。
Step 5:执行“AT+CFUN=1”开启功能开关。如果执行成功,返回OK。
Step 6:执行“AT+NBAND=频段”设置频段。如果执行成功,返回OK。频段信息可以咨询NB模组厂商。
Step 7:执行AT+CGDCONT=1,"IP","APN"设置核心网APN。如果执行成功,返回 OK。APN可设置为"CTNB"(默认PSM模式)或 "psm0.eDRX0.ctnb"(默认DRX模式)。
Step 8:执行“AT+CGATT=1”进行终端入网。如果执行成功,返回OK。
Step 9:执行“AT+CGPADDR”查询终端是否获取到核心网分配的IP地址,如果获取到IP地址,表示终端入网成功。
Step 10:执行“AT+NNMI=1”设置下行数据通知功能,如果执行成功,返回OK。
平台支持哪些设备省电模式?
1) PSM模式:power saving mode,省电模式。适用于对下行业务时延无要求,对于下行业务消息,可等待设备发送上行数据进入连接态后再发送的业务场景,可进一步节省终端功耗。如智能水表、智能家电。
2) DRX模式:discontinuous reception,不连续接收模式。适用于对下行业务时延要求高,可认为设备一直在线,消息能够立即下发的业务场景。如路灯。
模组有哪些常用的AT指令?
备注:下列指令仅适用于云程移远、利尔达、模组,其他模组请联系模组厂商获取AT指令说明
1) 错误原因查询:AT+CMEE=1,模组会打印出明确的错误码
2) 关机:AT+CFUN=0
3) 查询IMEI: AT+CGSN=1
4) 添加IMEI: AT+NTSETID=1,需要添加的IMEI号
5) 添加IP: AT+NCDP=180.101.147.115,5683
6) 开机:AT+CFUN=1
7) 设置核心网APN:AT+CGDCONT=1,"IP","APN"
8) 入网:AT+CGATT=1
9) 获取核心网分配给终端的IP地址:AT+CGPADDR
10) 发送数据:AT+NMGS=2,数据的16进制码流
11) 接收下行数据:AT+NQMGR
12) 读取数据:AT+NMGR
设备无法在平台上从离线变为在线状态的原因有哪些?
1) 设备未注册,平台返回513错误码
2) 设备信息未修改,平台返回513错误码
3) 设置的平台地址或端口错误,目前平台只支持5683端口
4) Profile中的协议类型不是“CoAP” ,平台返回5.00错误码
5) 设备入网失败,请联系当地电信客户经理协调解决
6) 设备和模组适配问题,请联系模组厂商协助解决
北向接口调用模拟工具如何使用?
1) 本地安装JDK1.8及以上java环境,解压IoT_OceanConnect_North_GUI_APPDemo.zip(简称GUI Demo)压缩包,打开application文件夹,直接双击运行Demo.jar文件。
2) 根据邮件内容填写对应配置项后,单击“Login”按钮登录。
3) 在“Module Choose”下拉框中,“Solution”选择“NB-IoT”,“Module”选择“DeviceManager”。
4) 在“Register Direct Device”下拉框中,按照以下要求填写各参数信息:
Node ID:设备唯一标识。此处填写NB模组的IMEI号。(15位数,一般以86开头,贴于模组标签上)
Verify Code(O):与Node ID保持一致。
Time out(O):填写0即可。
参数填写完成后,单击“Register”按钮注册设备至IoT平台。注册成功后会返回deviceId,deviceId是IoT平台对于设备的唯一标识,请保存。
说明:此步骤相当于调用IoT平台开放的“注册直连设备”接口。
5) 在“Modify Device Info”下拉框中,按照profile中的信息填写各参数后,单击“Modify”按钮设置已注册的设备信息,并保存至IoT平台。
Device ID:注册直连设备时返回的deviceId。
Manufacturer Id:与profile文件中的manufacturerId保持一致,请填写“eSDK“。
Manufacturer Name:与profile文件中的manufacturerName保持一致,请填写“eSDK_Huawei“。
Device Type:与profile文件中的deviceType保持一致,请填写“MultiSensor“。
Model:与profile文件中的model保持一致,请填写“v01“。
Protocol Type:与profile文件中的protocolType保持一致,请填写“CoAP“。
说明:
此步骤相当于调用IoT平台开放的“修改设备信息”接口,具体接口信息可参考接口文档。
修改设备信息成功后,可以在IoT平台的SP Portal中查看已注册成功的设备,此时设备处于“离线”状态。
哪些地方需要使用CA证书?
1) 中国电信物联网开放平台北向接口调用双向认证,应用调用接口时需要使用开放平台提供的CA证书
2) 订阅消息推送到应用平台回调地址,采用https时,需要使用应用平台提供的CA证书
物联网开放平台的CA证书如何获取?
请在中国电信天翼联盟下载专区获取中国电信物联网开放平台应用服务器证书(ca)-北向接口调用认证.ZIP
应用平台提供的CA证书有何要求?
动手学arduino请保持安全距离
交通事故中,两车追尾占很大比例。
引起事故的原因很多,其中有一个共同点:两车距离太近了。
是否能做一款报警器,用于检测两车之间的距离呢?
本文用超声波测距模块做一款报警器:当前方100CM处有物体时,绿灯亮;当物体在50~100CM之间时,黄灯亮;小于50CM时,红灯亮。
先介绍超声波模块:
超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。
使用Arduino的数字引脚给HC-SR04模块的Trig引脚至少10us的高电平信号,触发SR04模块的测距功能。
触发测距功能后,模块会自动发送八个40khz的超声波脉冲,并自动检测是否有信号返回。
若有信号返回,则Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。
此时可以使用pluseIn()函数获取测距结果,并计算出据被测物体的实际距离。
用arduino IDE来写代码,有十余行:
const
int ting=2;
//设定SR04连接到Arduino引脚
const
int echo=3;
//设定SR04连接到Arduino引脚
float distance;
//定义一个浮点型的变量
void setup()
{
Serial.begin(9600);
//设置波特率
pinMode(ting,OUTPUT);
//连接SR04的引脚
pinMode(echo,INPUT);
//设置输入状态
}
void loop()
{
digitalWrite(ting,LOW);
//产生一个10US的高脉冲去触发Trigpin
delayMicroseconds(2);
delayMicroseconds(10);
digitalWrite(ting,LOW);
distance=pluseIn(echo,HIGH)/58.00;
//检测脉冲宽度,并计算出距离
}
在仿真电路中,只要一个命令就能完成测距:
该命令中要选择trigger和echo与arduino连接的端口号(本文是11和8)
把测得距离保存在一个变量中:
再用分支结构,根据物体的距离做出反应。
元件连接图:
代码:
动手学arduino按键控制
在《动手学arduino(5)用mos管驱动马达》一文中,介绍arduino驱动马达及改变马达转速的方法。
本文继续前文内容,介绍用按键来控制马达的开关,调速等。
先学最简单的按键控制LED:按下按键,arduino板上的LED灯(图中荧光笔标示的“L”处)亮,松开按键,LED熄灭。
按键有四个引脚,分别为Terminal11、12、21、22;
其中11、12是相连的,21、22也相连,11(12)、21(22)是断开的,按下按钮,11(12)、21(22)接通,松开后又断开。
(按键接线原理图)
如图,当按键没按下时,到arduino的引线是低电平,当按下按键时,变成高电平(5V)
用下面的代码实现按下按键,板上的LED亮,松开LED熄灭。
第一句是读取按键连接arduino的2脚的电平状态,存于变量buttonState中
分支结构中判断buttonState是高还是低,并据此控制LED的亮和灭。
当然这种方法是不能用于风扇的,因为你不会把手永远按在按键上。
如何实现只按一下,松开手后,LED(或风扇)就一直开着,直到你再按一下按键?
下面代码可以实现:
这个代码有点抽象,这里不细说了。
但这只是两个状态:开和关。
小风扇至少有三种状态,高速档、低速档和停止。
用一个按键如何实现?
各元件连接如下:
代码如下:
动手学arduino智能水杯
韩国ID+IM设计实验室的设计一款触摸感温杯,这款水杯除了用来喝水、喝咖啡、玫瑰茶…,还有特异功能:当拿起茶杯,杯身上的略微凸出的小圆球就会闪烁迷人的颜色!随着杯子里的水温不同,小圆球共会发出三种不同颜色,红色代表热情沸腾,这意味着杯子中的水温在65度以上,得慢慢喝,不然会烫口;橘色代表不温不火,此时杯子中的水温在35~65度,入口刚刚好;蓝色则是低调耍酷的最爱,此时水温大概为0~35度,入口稍显冰冷。而最重要的在于,这杯子平时放在桌上时,小圆球并不会发光,只有当手和它接触时,才会根据杯中的水温显示出相应的颜色。
(网络图片)
这款爱心触摸感温杯曾获得 2010好设计奖,2010德国红点奖,2010IF设计大奖。
从技术角度讲,这款水杯工作原理十分简单。用arduino就可以实现:
电路原理如下 :
用RGB三色LED(图中四个引脚的蓝色元件)显示不同色彩,用温度传感器(图中标有“TMP”的元件)检测水温。
arduino代码根据不同水温控制LED发不同颜色的光。
本次的新元件:
常见的RGB三色LED是共阴极型。一个LED内集中了三个不同色的发光二极管,这3种发光(如红、蓝、绿三色)的负极连接在一起。4个引脚中,1脚为绿色发光二极管的正极,2脚为蓝色发光二极管的正极,3脚为公共负极,4脚为红色发光二极管的正极。使用时,公共负极3脚接地,其余引脚按需要接入工作电压即可。
通过控制三个引脚的电压,LED可以发出不同颜色的光。
温度传感器的 Vs和GND分别连接至 5V和GND,Vout引脚接至ArduinoUno控制器模拟输入端口A0~A5中的一个口。
为什么要接A0~A5之中的端口?
arduino接收与输出的量,除了控制LED亮灭的二值状态(0或1),还可以接收连续变化的物理量,这就被称之为模拟量。
自然界中的物理量往往都是模拟量,譬如温度、湿度、气压等。
用相应传感器检测这些模拟量,再传送给Arduino的模拟量端口(A0~A5),Arduino就可以读取。
多分支结构
代码用到上次提到的“分支结构”
上次的分支结构是二分支,即“如果……否则……”
这次的是四分支:
水温低于20度——蓝色
水温介于20~40度——绿色
水温介于40~60度——黄色
水温高于60度——红色
(代码各档水温的设置与原版水杯略有不同)
Arduino 做产品可行
见到很多人对Arduino的开发方法 、应用场景有误解,特别开个帖子说明下。
误解一:Arduino性能很低,不如树莓派等开发板,所以不要用arduino做开发
杀鸡焉用牛刀,中科院不会用银河来玩魔兽,你也不会想用计算器来LOL,不同的平台有不同的定位;
Arduino更多用在数据采集和控制上,简单轻量。而树莓派等带OS开发板可以实现更多的复杂功能,如图形图像处理;
聪明的开发者会选择合适自己、合适项目的平台,而非选择性能最强大的平台。
误解二:Arduino程序效率很低,所以不要用arduino做开发
Arduino核心库是对AVRGCC的二次封装,确实会降低一些运行效率,但是这又有什么关系呢?你的程序真是对实时性要求很高么?至少我在论坛或者国内没有看到多少对效率极为苛求的项目;
Arduino与传统的单片机开发的关系,类似于各种语言和其配套的SDK,一个正常的程序必定是选择一个合适语言+相应的SDK快速的做出开发,选择Arduino做开发也是如此。
当然,你可以选择使用传统方式,甚至是汇编开发单片机,把效率做到极致,但你必定会付出更大的学习成本,程序后期的修改也会变得举步维艰;
如果你的项目真是需要很高的实时性,那我建议你使用arduino+avrgcc,甚至arduino+汇编的混编方式开发,如果这样还达不到你的要求,你还可以使用Arduino Due、Arduino Zero、chipkit、maple等32位的arduino的开发平台。
误解三:Arduino只能开发玩具,不能做产品
能不能开发产品和arduino本身无关,只与你自身能力有关。多次封装后可靠性是否会降低?没有数据或案例表明arduino库的封装导致可靠性降低,更多时候,可靠性主要依靠编程能力、电路设计能力和编译器的性能。不过可以肯定的一点是,精心维护了数年的代码理论上会比自己花几天写的代码更可靠 。
国内外很多公司都在使用Arduino开发产品,也有不少成功的商业产品(我知道肯定有人要来和我较真什么叫“成功”了),所谓的不能开发产品,只能当玩具一说,完全是无稽之谈。如果你真是从事硬件开发的人员,你会发现现在各大IC厂商都推出了自己的类库或sdk,其本质和Arduino类库是一样的,这也是硬件行业的趋势。这和大家写软件用别人的sdk是一个性质。
我个人也一直不太明白有人说arduino不能开发产品的逻辑何在,就不能把它当作avr+sdk么?如果你的理由是成本,那看下一条。
误解四:Arduino开发板成本太高,不适合做产品
我介绍Arduino时,都会告诉别人Arduino是一个开发平台。
我所说的用Arduino做开发,指的是使用arduino核心库做开发。开发产品也并不是非得集成个Arduino开发板,一个核心的控制芯片足以。
至于芯片多少钱,开发者们自己去查吧。如果你对产品体积没要求,且产量很小,也完全可以直接使用Arduino控制器。
在小批量的情况下,使用arduino开发可以大大的降低你的开发成本,这个就没啥好说的了。如果你的项目产量超级大~你当然应该选用更便宜的芯片开发,1块钱的stc,5毛钱的HT都是可以的。
总结一下:
Arduino的优势在于社区的强大和众多类库资源,其资源和影响力已经让github都加上了Arduino语言分类。
有个冷笑话:如果在任一程序QQ群说“php是最好的web语言”,必定会激起一番论战。
如果讨论众多硬件开发平台熟好熟坏,就会陷入这种无意义的逻辑中,所以请注意,我没有说过Arduino是最好的开发平台,我只是希望大家知道选择一个适合的自己,适合项目的开发平台,才是最重要的。
以下是我列举的一些情况,个人经验,可能不正确,欢迎大家讨论。
哪些情况Arduino可能适合你:
你从来没接触过硬件开发;
你想快速的开发,降低开发成本;
你的项目未来产量不大,或者就不会量产(这个需要你自己测算开发成本和生产成本的关系);
哪些情况Arduino可能不适合你:
如果你对处理能力,系统实时性有较高要求,那Arduino不适合你;
如果你的项目未来产量巨大,那Arduino也不适合你(这个需要你自己测算开发成本和生产成本的关系);
对其他一种单片机或者硬件开发平台开发极其熟悉;
你项目会使用的到的类库在其他平台也有,且其他平台硬件成本、开发成本也很低;
为什么使用Arduino做开发——以下摘自《Arduino程序设计基础》,引用转发都请注明出处
1.3 为什么使用Arduino做开发平台
用Arduino制作作品或者进行产品开发的优势是很明显的。
? 跨平台
Arduino IDE可以在Windows、Macintosh OSX、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。
? 简单清晰的开发
Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 AVRGCC库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。
? 开放性
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。
? 社区与第三方支持
Arduino有着众多的开发者和用户,你可以找到他们提供的众多开源的示例代码、硬件设计。例如,可以在Github.com、Arduino.cc、Openjumper.com等网站找到Arduino第三方硬件、外设、类库等支持,更快更简单的扩展你的Arduino项目。
? 硬件开发的趋势
Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。
因为Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发他们的项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;大学里,自动化、软件,甚至艺术专业,也纷纷开展了Arduino相关课程。
上一篇:单片机常用外设及模块
下一篇:硬件编程优秀博客