搜索
bottom↓
回复: 22
打印 上一主题 下一主题

无源湿度传感器(基于RFID)的实现方案求指导

[复制链接]
(31836975)

出0入0汤圆

跳转到指定楼层
1
发表于 2020-4-8 20:33:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
去年年底接了一个 无源温湿度传感器 的项目,结果没想到遇到疫情,耽误了很久, 最近开始弄了,发现存在太多问题,发出来,看看谁了解,指点一下。

项目要实现的功能是:在一个被测容器(非金属)内壁 放置一个 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智能传感器 和 读卡器 部分外包出来, 不知道谁有兴趣做?

(31836052)

出0入0汤圆

2
发表于 2020-4-8 20:48:33 | 只看该作者
1、如果没有要求必须标准射频卡协议,你可以自己做个简单点的自定义协议,125K载波实现起来应该是比较简单的,找个单片机发送125K载波,模拟搭个简易接收通道回单片机解码,容器内用个低功耗单片机模拟IC卡,顺便把温湿度采集了。
2、其实你需要的也许只是无线感应供电+短距离无线通讯。
(31834935)

出0入0汤圆

3
发表于 2020-4-8 21:07:10 | 只看该作者
你看下这篇文章“Sustainable production of highly conductive multilayer graphene ink for wireless connectivity and IoT applications”,里面一个应用跟你的要求一样的,用的一样的芯片和读卡器
(31833215)

出0入0汤圆

4
发表于 2020-4-8 21:35:50 | 只看该作者
你试验的时候开发板上是不是没装电池?你开发板上面安装电池你在用读卡器试验一下。
(31820207)

出0入0汤圆

5
 楼主| 发表于 2020-4-9 01:12:38 | 只看该作者
wanggoals 发表于 2020-4-8 20:48
1、如果没有要求必须标准射频卡协议,你可以自己做个简单点的自定义协议,125K载波实现起来应该是比较简单 ...

这个方案考虑过,但是毕竟对射频不太熟悉,更别提还要自己做射频模拟部分了,也缺少相应的仪表。 同时自己实现起来感觉集成度不高,传感器做起来可能比较大, 后来就选了带NFC的单片机
(31820141)

出0入0汤圆

6
 楼主| 发表于 2020-4-9 01:13:44 | 只看该作者
hhxb 发表于 2020-4-8 21:07
你看下这篇文章“Sustainable production of highly conductive multilayer graphene ink for wireless con ...

看到了,谢谢。 里面确实提到了我用的那款单片机, 其他部件不一样。  也没有更多的信息。
(31819743)

出0入0汤圆

7
 楼主| 发表于 2020-4-9 01:20:22 | 只看该作者
本帖最后由 huchunlei 于 2020-4-9 01:22 编辑
tage 发表于 2020-4-8 21:35
你试验的时候开发板上是不是没装电池?你开发板上面安装电池你在用读卡器试验一下。 ...


装了电池也是一样的, 也是读不出来。  TI官网的DEMO读卡器,用的是 TRF7970A,我看了他那个代码, 基本上也是 寻卡、选卡、配置传感器、读取。   

但是我买的成品读卡器,寻卡阶段就是失败,更别提后续的操作了。 TI的 TRF7970A 装不装电池,都能寻卡成功。

难道是我的读卡器不兼容这个传感器? 能帮我看下吗?读卡器支持的15693的卡如下,选那个都读不到。而且把传感器开发板放到读卡器上面后,测开发板各处电压都是对的。


感觉您用过这个开发板,能推荐一款能兼容的读卡器吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(31792482)

出0入0汤圆

8
发表于 2020-4-9 08:54:43 | 只看该作者
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=[data(23),data(24),data(21),data(22)];
   Sensor_res=[data(27),data(28),data(25),data(26)];
  
    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=[buffer(2:end), buffer(1:1)];%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;

(31792220)

出0入0汤圆

9
发表于 2020-4-9 08:59:05 | 只看该作者
huchunlei 发表于 2020-4-9 01:13
看到了,谢谢。 里面确实提到了我用的那款单片机, 其他部件不一样。  也没有更多的信息。 ...

这个程序使能内部恒流源,使用内置AD进行采样,获取传感器电阻再上传回Matlab画图,你用的湿度传感器数字通讯应该简单的多。
(31788399)

出0入0汤圆

10
发表于 2020-4-9 10:02:46 | 只看该作者
huchunlei 发表于 2020-4-9 01:20
装了电池也是一样的, 也是读不出来。  TI官网的DEMO读卡器,用的是 TRF7970A,我看了他那个代码, 基本 ...

我没用过这款开发板,但我用430的单片机,低功耗设计是电子设计中的一类,做好并不容易,你的问题具体为什么我也不知道了,但我建议你买其他大牌的读卡器试验下,因为有些读卡器程序的协议是删减过的,并不完全。所以有可能不兼容。
(31743383)

出0入0汤圆

11
 楼主| 发表于 2020-4-9 22:33:02 | 只看该作者
hhxb 发表于 2020-4-9 08:54
这是文章里用的matlab程序,我朋友写的,读卡器用TRF7970,测试可以使用, 你试试吧。

Supplementary No ...


非常感谢, 看来得努力补一下这方面的知识了。
(31743304)

出0入0汤圆

12
 楼主| 发表于 2020-4-9 22:34:21 | 只看该作者
tage 发表于 2020-4-9 10:02
我没用过这款开发板,但我用430的单片机,低功耗设计是电子设计中的一类,做好并不容易,你的问题具体为 ...

谢谢, 目前已经决定 使用 TRF7970A 来做读卡器了。
(31742511)

出5入14汤圆

13
发表于 2020-4-9 22:47:34 来自手机 | 只看该作者
楼主这个无源传感器,是无需供电、还是电池都不需要?
(31738976)

出0入0汤圆

14
发表于 2020-4-9 23:46:29 | 只看该作者
RF430FRL152H  好像有两种模式的,不过之前也是用TRF7970A读的。
太久了,记不清。
后来项目停了。
(31738882)

出0入0汤圆

15
发表于 2020-4-9 23:48:03 | 只看该作者
EMC菜鸟 发表于 2020-4-9 22:47
楼主这个无源传感器,是无需供电、还是电池都不需要?

可以不用电池,电是从场里取出来的,而且还可以不光给152供电,还可以对外围设备供电的,但功耗有限制。
(31698697)

出0入0汤圆

16
 楼主| 发表于 2020-4-10 10:57:48 | 只看该作者
EMC菜鸟 发表于 2020-4-9 22:47
楼主这个无源传感器,是无需供电、还是电池都不需要?

准备做成像 RFID 标签一样, 不带电池, 完全靠射频 供电和通信。
(31698620)

出0入0汤圆

17
 楼主| 发表于 2020-4-10 10:59:05 | 只看该作者
yaya001 发表于 2020-4-9 23:46
RF430FRL152H  好像有两种模式的,不过之前也是用TRF7970A读的。
太久了,记不清。
后来项目停了。 ...

是的, RF430FRL152H 有两种模式, 就是因为第一次接触这样的单片机,而且也是第一次做 RFID 类似的技术,所以觉得上手特别慢。
(31698378)

出10入80汤圆

18
发表于 2020-4-10 11:03:07 | 只看该作者
给楼主的建议,你这个所需的功率略大了,而且还有容器的厚壁,参照RFID不如参照无线充电的标准弄。
(31667533)

出0入4汤圆

19
发表于 2020-4-10 19:37:12 来自手机 | 只看该作者
有超高频无缘温湿度传感器,你贴到容器内,外部用读写器读,串口送到4g
(31663138)

出0入0汤圆

20
 楼主| 发表于 2020-4-10 20:50:27 | 只看该作者
clesun 发表于 2020-4-10 19:37
有超高频无缘温湿度传感器,你贴到容器内,外部用读写器读,串口送到4g

哪里有卖的? 有没有渠道? 之前找了很久没有找到,只找到单纯测量温度的。 有一种NFC温湿度记录仪,但是需要电池才能工作。
(31656682)

出0入0汤圆

21
发表于 2020-4-10 22:38:03 | 只看该作者
我刚巧做过这东西,不过是个显示用的,功耗肯定比湿度传感器大多了,还要用手机NFC驱动

用的复旦微的 NFC通道芯片,加上大电容储能,MSP430G2203做主控
(31655157)

出0入0汤圆

22
发表于 2020-4-10 23:03:28 来自手机 | 只看该作者
RF Micron (2018年公司更名为Axzon),无源无线,深圳南频国内代理,温度标签我们在用国产的
(31566141)

出0入0汤圆

23
 楼主| 发表于 2020-4-11 23:47:04 | 只看该作者
again 发表于 2020-4-10 23:03
RF Micron (2018年公司更名为Axzon),无源无线,深圳南频国内代理,温度标签我们在用国产的 ...


谢谢提供信息,用您给的公司名作为关键字,在网上确实能搜索到一些信息, 我想办法联系一下看看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-4-12 08:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表