无源湿度传感器(基于RFID)的实现方案求指导
去年年底接了一个 无源温湿度传感器 的项目,结果没想到遇到疫情,耽误了很久, 最近开始弄了,发现存在太多问题,发出来,看看谁了解,指点一下。项目要实现的功能是:在一个被测容器(非金属)内壁 放置一个 RFID智能传感器,需要的时候,使用读卡器在容器外面读取这个智能传感器,获取湿度,并通过4G上传至服务器。
我的项目规划,硬件部分主要分3块:1)RFID智能传感器2)读卡器3)人机操作界面和通信板
RFID智能传感器准备采用的方案是:使用单片机RF430FRL152H + 温湿度传感器SHTC3 来实现
读卡器部分准备使用现成的读卡器芯片来实现,比如PN5180,在加一片STM32转换成 串口或者485
人机操作界面和通信板 准备采用STM32+TFT+4G模块来实现
现在的问题是:RFID 部分,调不出来。 买了一块 RF430FRL152H 开发板(上面有温度传感器),使用 TI的DEMO版读卡器,可以读取,但是通信协议未知, 所以我买了 成品的读卡器,完全无法识别传感器,RF430FRL152H 说支持15693协议,读卡器使用 15693协议无法识别传感器, 不知道是哪里的问题了。
不知道有人用过 RF430FRL152H 没有? 指导一下,或者有没有更好的方案 实现 无源的湿度传感器? 或者我把 RFID智能传感器 和 读卡器 部分外包出来, 不知道谁有兴趣做?
1、如果没有要求必须标准射频卡协议,你可以自己做个简单点的自定义协议,125K载波实现起来应该是比较简单的,找个单片机发送125K载波,模拟搭个简易接收通道回单片机解码,容器内用个低功耗单片机模拟IC卡,顺便把温湿度采集了。
2、其实你需要的也许只是无线感应供电+短距离无线通讯。 你看下这篇文章“Sustainable production of highly conductive multilayer graphene ink for wireless connectivity and IoT applications”,里面一个应用跟你的要求一样的,用的一样的芯片和读卡器 你试验的时候开发板上是不是没装电池?你开发板上面安装电池你在用读卡器试验一下。 wanggoals 发表于 2020-4-8 20:48
1、如果没有要求必须标准射频卡协议,你可以自己做个简单点的自定义协议,125K载波实现起来应该是比较简单 ...
这个方案考虑过,但是毕竟对射频不太熟悉,更别提还要自己做射频模拟部分了,也缺少相应的仪表。 同时自己实现起来感觉集成度不高,传感器做起来可能比较大, 后来就选了带NFC的单片机 hhxb 发表于 2020-4-8 21:07
你看下这篇文章“Sustainable production of highly conductive multilayer graphene ink for wireless con ...
看到了,谢谢。 里面确实提到了我用的那款单片机, 其他部件不一样。也没有更多的信息。 本帖最后由 huchunlei 于 2020-4-9 01:22 编辑
tage 发表于 2020-4-8 21:35
你试验的时候开发板上是不是没装电池?你开发板上面安装电池你在用读卡器试验一下。 ...
装了电池也是一样的, 也是读不出来。TI官网的DEMO读卡器,用的是 TRF7970A,我看了他那个代码, 基本上也是 寻卡、选卡、配置传感器、读取。
但是我买的成品读卡器,寻卡阶段就是失败,更别提后续的操作了。 TI的 TRF7970A 装不装电池,都能寻卡成功。
难道是我的读卡器不兼容这个传感器? 能帮我看下吗?读卡器支持的15693的卡如下,选那个都读不到。而且把传感器开发板放到读卡器上面后,测开发板各处电压都是对的。
感觉您用过这个开发板,能推荐一款能兼容的读卡器吗? huchunlei 发表于 2020-4-9 01:13
看到了,谢谢。 里面确实提到了我用的那款单片机, 其他部件不一样。也没有更多的信息。 ...
这是文章里用的matlab程序,我朋友写的,读卡器用TRF7970,测试可以使用, 你试试吧。
Supplementary Note 2: Temperature monitoring system program.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Kewen Pan
%TRF7970A EVM testing program for tag2
%6/May/2016
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;clc;%Clear
i=1;
j=0;
buffer=zeros(1,50);
delay_time=0.01;
dev_name = 'Silicon Labs CP210x USB to UART Bridge';
[~,res]=system('wmic path Win32_SerialPort');
ind = strfind(res,dev_name);
if (~isempty(ind))
port_name = res(ind(1)+length(dev_name)+2:ind(1)+length(dev_name)+5);
fprintf('COM-port is %s\n',port_name);
try
s = serial(port_name);
set(s,'BaudRate', 111700,'DataBits',8,'StopBits',1,'Parity','none','FlowControl','none','terminator','ETX' );
s.ReadAsyncMode='continuous';
s.Timeout=0.02
s.InputBufferSize = 1024;
s.OutputBufferSize = 1024;
fopen(s);
fprintf('%s is opened\n',port_name);
catch err
fprintf('%s\n%s\n',err.identifier,err.message);
end
else
fprintf('COM-port is not find\n');
end
fprintf(port_name);
fprintf(' serial port open success!');
pause(1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%s.status %Serial port status check
%instrfind%Specification
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','0108000304FF0000');%find evm broad
data=fscanf(s);
if strcmp(data(1),'T');
fprintf('found TRF7970A\r');
% pause(delay_time);
else
fprintf('cannot found TRF7970A\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010A0003041001210000');%register write request1
data=fscanf(s);
if strcmp(data(1),'R');
fprintf('register1 write success\r');
% pause(delay_time);
else
fprintf('register write error1\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010C00030410002101000000');%register write request2
data=fscanf(s);
if strcmp(data(1),'R');
fprintf('register2 write success\r');
%pause(delay_time);
else
fprintf('register write error2\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','0109000304F0000000');%AGC Toggle
data=fscanf(s);
if strcmp(data(1),'A');
fprintf('AGC toggle success\r');
%pause(delay_time);
else
fprintf('AGC Toggle error\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','0109000304F1FF0000');%AM PM Toggle
data=fscanf(s);
if strcmp(data(1),'A');
fprintf('AM PM Toggle success\r');
% pause(delay_time);
else
fprintf('AM PM Toggle error\r');
end
while 1
while 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set(s,'terminator','ETX' );
fprintf(s,'%s','010B000304140401000000');%ISO15693 Inventory Request
data=fscanf(s);
if length(data)<35;
fprintf('ISO15693 Inventory Request error\r');
else
fprintf('ISO15693 Inventory Request success\r');
% pause(delay_time);
fprintf(data);
break;
end
end
%%%%%%%%%%%%%%%%%Basic configuration success%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%Write functional register%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010F00030418402100010203800000');%Reg 00
data=fscanf(s);
d=data(17);
if strcmp(data(17),']');
fprintf('Reset failed\r');
fprintf('Tag disconnected\r');
%buffer=zeros(1,50);
break;
end
fprintf(s,'%s','010F00030418402100010203000000');%Reg 00
data=fscanf(s);
if strcmp(data(1),'R');
fprintf('Reg00\r');
fprintf(data,'\r');
% pause(delay_time);
fprintf(data);
else
fprintf('Write reg 00 failed\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010F00030418402101010100400000');%Reg01
data=fscanf(s);
if strcmp(data(1),'R');
fprintf('Reg01\r');
fprintf(data,'\r');
% pause(delay_time);
fprintf(data);
else
fprintf('Write reg 01 failed\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010F00030418402102000000000000');%Reg02
data=fscanf(s);
if strcmp(data(1),'R');
fprintf('Reg02\r');
fprintf(data,'\r');
% pause(delay_time);
fprintf(data);
else
fprintf('Write reg 02 failed\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010F00030418402103000000000000');%Reg03
data=fscanf(s);
if strcmp(data(1),'R');
fprintf('Reg03\r');
fprintf(data,'\r');
% pause(delay_time);
fprintf(data);
else
fprintf('Write reg 03 failed\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010F00030418402104191919190000');%Reg04
data=fscanf(s);
if strcmp(data(1),'R');
fprintf('Reg04\r');
fprintf(data,'\r');
% pause(delay_time);
fprintf(data);
else
fprintf('Write reg 04 failed\r');
end
%%%%%%%%%%%%%%%%%%%%%%%Config finished%%%%%%%%%%%%%%%%%%%%%
while 1
set(s,'terminator',']' );
%%%%%%%%%%%%%%%%%%%%%%Start sample%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010F00030418402100010203000000');%Reg 00
data=fscanf(s);
if strcmp(data(17),']');
fprintf('Write reg 00 failed\r');
fprintf('Tag disconnected\r');
%buffer=zeros(1,50);
break;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%Start reading%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010B000304180020120000');%Read reg 0x12
data=fscanf(s);
if strcmp(data(19),']');
fprintf('Read reg 0x12 failed\r');
fprintf('Tag disconnected\r');
break;
end
if strcmp(data(18),'z');
fprintf('Read reg 0x12 failed\r');
fprintf('Tag disconnected\r');
break;
end
Stand_res=;
Sensor_res=;
Resistance=(hex2dec(Sensor_res)/hex2dec(Stand_res))*100;%cal sensor R
Temp=-1.27*Resistance+203;%exp curve fitting
if (Temp>=0)&&(Temp<=50)
buffer=;%left shift 1 bit
buffer(50)=Temp;%push in
plot(buffer,'Linewidth',3);
set(gca, 'FontWeight', 'bold', 'FontName','Calibri','FontSize',14)
title('Graphene Based Yarn Temperature Sensor');
ylabel('Temperature');
xlabel('Time');
grid on;
drawnow;
pause(0.5);
%else
end
end
end
fclose(s);
delete(s);
clear s
%close all;
huchunlei 发表于 2020-4-9 01:13
看到了,谢谢。 里面确实提到了我用的那款单片机, 其他部件不一样。也没有更多的信息。 ...
这个程序使能内部恒流源,使用内置AD进行采样,获取传感器电阻再上传回Matlab画图,你用的湿度传感器数字通讯应该简单的多。 huchunlei 发表于 2020-4-9 01:20
装了电池也是一样的, 也是读不出来。TI官网的DEMO读卡器,用的是 TRF7970A,我看了他那个代码, 基本 ...
我没用过这款开发板,但我用430的单片机,低功耗设计是电子设计中的一类,做好并不容易,你的问题具体为什么我也不知道了,但我建议你买其他大牌的读卡器试验下,因为有些读卡器程序的协议是删减过的,并不完全。所以有可能不兼容。 hhxb 发表于 2020-4-9 08:54
这是文章里用的matlab程序,我朋友写的,读卡器用TRF7970,测试可以使用, 你试试吧。
Supplementary No ...
非常感谢, 看来得努力补一下这方面的知识了。 {:lol:} tage 发表于 2020-4-9 10:02
我没用过这款开发板,但我用430的单片机,低功耗设计是电子设计中的一类,做好并不容易,你的问题具体为 ...
谢谢, 目前已经决定 使用 TRF7970A 来做读卡器了。 楼主这个无源传感器,是无需供电、还是电池都不需要? RF430FRL152H好像有两种模式的,不过之前也是用TRF7970A读的。
太久了,记不清。
后来项目停了。 EMC菜鸟 发表于 2020-4-9 22:47
楼主这个无源传感器,是无需供电、还是电池都不需要?
可以不用电池,电是从场里取出来的,而且还可以不光给152供电,还可以对外围设备供电的,但功耗有限制。
EMC菜鸟 发表于 2020-4-9 22:47
楼主这个无源传感器,是无需供电、还是电池都不需要?
准备做成像 RFID 标签一样, 不带电池, 完全靠射频 供电和通信。 yaya001 发表于 2020-4-9 23:46
RF430FRL152H好像有两种模式的,不过之前也是用TRF7970A读的。
太久了,记不清。
后来项目停了。 ...
是的, RF430FRL152H 有两种模式, 就是因为第一次接触这样的单片机,而且也是第一次做 RFID 类似的技术,所以觉得上手特别慢。 给楼主的建议,你这个所需的功率略大了,而且还有容器的厚壁,参照RFID不如参照无线充电的标准弄。 有超高频无缘温湿度传感器,你贴到容器内,外部用读写器读,串口送到4g clesun 发表于 2020-4-10 19:37
有超高频无缘温湿度传感器,你贴到容器内,外部用读写器读,串口送到4g
哪里有卖的? 有没有渠道? 之前找了很久没有找到,只找到单纯测量温度的。 有一种NFC温湿度记录仪,但是需要电池才能工作。 我刚巧做过这东西,不过是个显示用的,功耗肯定比湿度传感器大多了,还要用手机NFC驱动
用的复旦微的 NFC通道芯片,加上大电容储能,MSP430G2203做主控 RF Micron (2018年公司更名为Axzon),无源无线,深圳南频国内代理,温度标签我们在用国产的 again 发表于 2020-4-10 23:03
RF Micron (2018年公司更名为Axzon),无源无线,深圳南频国内代理,温度标签我们在用国产的 ...
谢谢提供信息,用您给的公司名作为关键字,在网上确实能搜索到一些信息, 我想办法联系一下看看 {:handshake:} 请问你这个RF430无源方案可出售吗?有酬 1031881482 发表于 2022-7-4 18:16
请问你这个RF430无源方案可出售吗?有酬
(引用自24楼)
你是什么场景下要用?如果仅是测量温度, TI官网有个现成的Demo, PCB和程序什么的都有。 无源RFID ,距离能做到多少呢? lyping1987 发表于 2022-7-9 10:05
无源RFID ,距离能做到多少呢?
(引用自26楼)
我这个当时把读取器天线做的稍微大了一些, 实测无遮挡距离7-8cm左右。跟需求不是太满足,之前需求本想做到15-20cm。 我需要测量外界的电阻值
huchunlei 发表于 2022-7-8 10:38
你是什么场景下要用?如果仅是测量温度, TI官网有个现成的Demo, PCB和程序什么的都有。 ...
(引用自25楼)
根据官网的手册,配套的RTF7970读写器已经买不到了,想咨询下有什么代替方案。需求是测量自己外接的电阻传感器。 本帖最后由 huchunlei 于 2022-7-11 15:30 编辑
1031881482 发表于 2022-7-10 15:19
根据官网的手册,配套的RTF7970读写器已经买不到了,想咨询下有什么代替方案。需求是测量自己外接的电阻 ...
(引用自29楼)
你这个应用,跟TI官方的 “Battery-Less NFC_RFID Temperature Sensing Patch”比较类似。
官方这个测量温度的应用,其实也是测量外部的一个电阻阻值实现的,我把PDF传上来。
至于TRF7970 实际就是个读写器,读写器跟无线传感器的通信是基于 NFC的, 如果你能找到其他型号的兼容芯片,或者手机的NFC应该也是可以实现的。 这个项目后期停了, 我没继续深入了。 huchunlei 发表于 2022-7-11 15:27
你这个应用,跟TI官方的 “Battery-Less NFC_RFID Temperature Sensing Patch”比较类似。
官方这个测量 ...
(引用自30楼)
大佬能分享下RF430发送数据的ccs程序吗,官网例程有很多问题 你好,请问一下之前你使用的那款RF430NFC芯片是否自带ROM,无需额外编程直接通过手机APP就可以读取外接传感器的数据?谢谢
页:
[1]