论坛首页 > 创客天地 > 第三届立创电子制作节 > 参赛作品《基于蓝牙与2.4g的智能...
查看:451  |  回复:7
参赛作品《基于蓝牙与2.4g的智能元器件盒》
天天
4
主题
35
回复
发表于Tue Jun 19 09:19:00 CST 2018   |  只看该作者 1# 电梯直达

【报名阶段需要填写的内容】


1. 参赛者姓名(必填项):杨洋


2. 单位或学校名称(选填项):环球磁卡


3. 当前职务或职称(选填项):研发工程师


4. 参赛作品的名字(必填项):基于蓝牙与2.4g的智能元器件盒


5. 简要陈述您的idea和作品(必填项):

    将蓝牙与2.4g通信方式同时使用,通过手机蓝牙控制阅读器端数据的传输,阅读器通过2.4g协议与多个标签建立通信,完成对元器件盒数据的采集,上传以及修改,设置等功能。


6. 拟用到的立创商城在售物料(必填项):

    nrf2401 ,msp430g2553,相关电容,电阻,电感,ASM1117-3.3

7. 拟用到的非立创商城物料或其它补充(必填项):

    nrf52832

8. 拟用到的EDA工具软件名称(必填项):

    Altium designer

【作品正式发表(报名成功后进入设计阶段)需要填写的内容】


一、作品简介

例如,可以包括但不局限于以下内容:

1.作品的整机外观图片或焊接组装好的PCBA图片;

 点击查看大图

2.作品的研究背景、目的和功能、市场应用前景;

    在很多电子爱好者和工程师研发设计新产品的时候,焊接样品的过程中对于器件查找是非常费时间的,有一个能够将元器件整理起来并能很快找到的装置非常必要。本系统设计主要用于元器件的查找中,通过手机蓝牙连接基站,在手机中发送需要寻找的器件,相应的器件盒上面的装置便会进行提示。该系统能够传播较远距离,并且支持500个元器件的查找,能够应用在库房中以及器件商的货物分拣中。

3.作品在创新性、趣味性、实用性甚至公益性方面,有哪些亮点可体现?

本系统使用多协议工作,手机连接蓝牙,并通过私有2.4G协议传递到各个点位上;

本系统能够完成多个点位的控制,进行了碰撞解决以及系统传递稳定性的控制,在传输失败后采取相应的操作。

本系统可以应用在各种需要大量数据采集,数据查找,物品定位的应用中。

二、系统构架图

用流程图或思维导图等形式,描述您的作品的组成构架,即方案图。

 

三、硬件部分的描述

1.附上原理图&PCB实物图的图片或者源文件(官方建议大家尽量用源文件上传),如果是图片,请确保图片是清晰可辨的;

原理图

 

PCB图

 

实物图

 点击查看大图

2.用文字把该作品的实现原理、系统的工作过程大致讲解一下。

    系统使用NORDIC公司的NRF52832芯片作为基站,其实现两种协议的应用,通过蓝牙与手机连接,接收手机的消息,判断后,将指令通过2.4G无线信号传送到各个点上,从而达到指令的指定传送,接收点位通过判断数据来控制动作,提示系统自己的位置。从而完成功能要求。

3.注明所用到的EDA工具软件名称并附上设计链接。

Altium designer 10

四、材料清单(BOM列表)

列出您这个作品所用到的主要器件(关键器件即可),比如单片机&ARM芯片、专用集成芯片(ASIC)、传感器、功能模块等。

如果所列出的芯片是来自我们立创商城上的,最好能写出该器件的商品编号或附上对应购买链接。

 

五、软件部分的描述(选填)

如果您的作品涉及到软件,请列出作品对应的软件工作流程图,及关键部分的例程、源码(如果您想开源的话请上传全部源码)。

 点击查看大图

相关程序

void OutInterrupt_Init()
{
  OUT_INTERRUPT_PDIR = 0;    //设置外部中断引脚为输入
  OUT_INTERRUPT_PIE = 1;     //使能中断                    ____
  OUT_INTERRUPT_PIES = 1;    //设置中断触发方式为下降沿触发    |____
}
 
//NRF24L01初始化设置
void NRF24L01_Init()
{
  NRF24L01_CSN_PDIR = 1;     //CSN设置为输出状态
  NRF24L01_CE_PDIR = 1;      //CE设置为输出状态
  NRF24L01_IRQ_PDIR = 0;     //IRQ设置为输出状态
  
  NRF24L01_CE_POUT = 0;      //CE置为低电平,进入待机模式
  NRF24L01_CSN_POUT = 1;     //CSN置高电平,SPI取消使能
  
  NRF24L01_IRQ_PIE = 1;      //使能IRQ中断                                  ____
  NRF24L01_IRQ_PIES = 1;     //IRQ低电平触发,故设置中断触发方式为下降沿触发    |____
  
  SPI_Init();                
  NRF24L01_Start();

}

//设置TX地址,写TX数据宽度,设置RX自动应答的地址,填充TX发送数据,选择RF频道,波特率和LNA HCURR
//PWR_UP,CRC使能
void NRF24L01_Start()

  NRF24L01_CSN_POUT = 0;     //CSN置低,使能SPI通信
  SPI_SendByte(0xff);  //发送任意数据,第一个有问题
  
  RX_ADDRESS[3] = StoreHead.ADDR_H;
  RX_ADDRESS[4] = StoreHead.ADDR_L;
  
  NRF24L01_Write_Buf(WRITE_REG + TX_ADDR, (unsigned char *)TX_ADDRESS, 0x05);     //写TX节点地址
  NRF24L01_Write_Buf(WRITE_REG + RX_ADDR_P0, (unsigned char *)RX_ADDRESS, 0x05);  //设置TX节点地址
  
  NRF24L01_Write_Reg(WRITE_REG + EN_AA, 0x01);          //使能通道0的自动应答
  NRF24L01_Write_Reg(WRITE_REG + EN_RXADDR, 0x01);      //使能通道0的接收地址
  NRF24L01_Write_Reg(WRITE_REG + SETUP_RETR, 0x03);     //设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
  NRF24L01_Write_Reg(WRITE_REG + RF_CH, 0x40);          //设置RF通道为40
  NRF24L01_Write_Reg(WRITE_REG + RF_SETUP, 0x07);       //设置TX发射参数,0db增益,1Mbps,低噪声增益开启
  NRF24L01_Write_Reg(WRITE_REG + RX_PW_P0, 18);         //选择通道0的有效数据宽度
  
  NRF24L01_Write_Reg(WRITE_REG + DYNPD, 0x3F);    //enable Dynamic payload length    
  NRF24L01_Write_Reg(WRITE_REG + FEATURE, EN_DPL | EN_ACK_PAY | EN_DYN_ACK);
  
  NRF24L01_CSN_POUT = 1;
}

void CH_50()

  NRF24L01_CSN_POUT = 0;     //CSN置低,使能SPI通信
  SPI_SendByte(0xff);  //发送任意数据,第一个有问题
  
  RX_ADDRESS[3] = StoreHead.ADDR_H;
  RX_ADDRESS[4] = StoreHead.ADDR_L;
  
  NRF24L01_Write_Buf(WRITE_REG + TX_ADDR, (unsigned char *)TX_ADDRESS, 0x05);     //写TX节点地址
//  NRF24L01_Write_Buf(WRITE_REG + RX_ADDR_P0, (unsigned char *)RX_ADDRESS, 0x05);  //设置TX节点地址
  
//  NRF24L01_Write_Reg(WRITE_REG + EN_AA, 0x01);          //使能通道0的自动应答
//  NRF24L01_Write_Reg(WRITE_REG + EN_RXADDR, 0x01);      //使能通道0的接收地址
//  NRF24L01_Write_Reg(WRITE_REG + SETUP_RETR, 0x03);     //设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
//  NRF24L01_Write_Reg(WRITE_REG + RF_CH, 0x7D);          //设置RF通道为40
    NRF24L01_Write_Reg(WRITE_REG + RF_CH, 0x50);          //设置RF通道为40
//  NRF24L01_Write_Reg(WRITE_REG + RF_SETUP, 0x07);       //设置TX发射参数,0db增益,1Mbps,低噪声增益开启
//  NRF24L01_Write_Reg(WRITE_REG + RX_PW_P0, 18);         //选择通道0的有效数据宽度
  
  NRF24L01_CSN_POUT = 1;
//  delay_ms(100);
}

void CH_40()

  NRF24L01_CSN_POUT = 0;     //CSN置低,使能SPI通信
  SPI_SendByte(0xff);  //发送任意数据,第一个有问题
  
  RX_ADDRESS[3] = StoreHead.ADDR_H;
  RX_ADDRESS[4] = StoreHead.ADDR_L;
  
  NRF24L01_Write_Buf(WRITE_REG + TX_ADDR, (unsigned char *)TX_ADDRESS, 0x05);     //写TX节点地址
//  NRF24L01_Write_Buf(WRITE_REG + RX_ADDR_P0, (unsigned char *)RX_ADDRESS, 0x05);  //设置TX节点地址
  
//  NRF24L01_Write_Reg(WRITE_REG + EN_AA, 0x01);          //使能通道0的自动应答
//  NRF24L01_Write_Reg(WRITE_REG + EN_RXADDR, 0x01);      //使能通道0的接收地址
//  NRF24L01_Write_Reg(WRITE_REG + SETUP_RETR, 0x03);     //设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
  NRF24L01_Write_Reg(WRITE_REG + RF_CH, 0x40);          //设置RF通道为40
//  NRF24L01_Write_Reg(WRITE_REG + RF_SETUP, 0x07);       //设置TX发射参数,0db增益,1Mbps,低噪声增益开启
//  NRF24L01_Write_Reg(WRITE_REG + RX_PW_P0, 18);         //选择通道0的有效数据宽度
  
  NRF24L01_CSN_POUT = 1;
}

//SPI写寄存器
//reg:指定寄存器地址
//value:写入的值
//写寄存器必须使芯片处于掉电模式
void NRF24L01_Write_Reg(unsigned char reg, unsigned char value)

  NRF24L01_CSN_POUT = 0;           //使能SPI传输
  SPI_SendByte(reg);         //发送寄存器号
  SPI_SendByte(value);        //写入寄存器的值
  NRF24L01_CSN_POUT = 1;           //禁止SPI传输
}

//读取SPI寄存器值
//reg:要读的寄存器
unsigned char NRF24L01_Read_Reg(unsigned char reg)
{
  unsigned char reg_val; 
  NRF24L01_CSN_POUT = 0;           //使能SPI传输
  reg_val = SPI_SendByte(reg);     //读取寄存器内容
  NRF24L01_CSN_POUT = 1;           //禁止SPI传输
  return reg_val;                  //返回状态值
}

//在指定位置写指定长度的数据
//reg:寄存器(位置)
//*BufData:数据指针
//len:数据长度
void NRF24L01_Write_Buf(unsigned char reg, unsigned char *BufData, unsigned char len)
{
  unsigned char i;  
  NRF24L01_CSN_POUT = 0;               //使能SPI传输
  SPI_SendByte(reg);             //发送寄存器值(位置)
  for(i=0;i<len;i++)                   //写入数据
  {
    SPI_SendByte(*BufData++); 
  }
  NRF24L01_CSN_POUT = 1;               //关闭SPI传输
}

//在指定位置读出指定长度的数据
//reg:寄存器(位置)
//*BufData:数据指针
//len:数据长度
//返回值,此次读到的状态寄存器值
void NRF24L01_Read_Buf(unsigned char reg, unsigned char *BufData, unsigned char len)
{
  unsigned char i;
  
  NRF24L01_CSN_POUT = 0;              //使能SPI传输
  SPI_SendByte(reg);            //发送寄存器值(位置),并读取状态值
  for(i=0;i<len;i++)
  {
    BufData[i] = SPI_SendByte(reg);
  }
  NRF24L01_CSN_POUT = 1;              //关闭SPI传输


//该函数初始化NRF24L01到TX模式
void TX_Mode()
{
  NRF24L01_CE_POUT = 0;
  NRF24L01_Write_Buf(WRITE_REG + TX_ADDR, (unsigned char *)TX_ADDRESS, 0x05);  //写TX节点地址
  NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x3e);          //中断rx,tx,max开启,EN_CRC,16BIT_CRC,PWR_UP,发送模式。
//  NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x36);          //中断rx,tx,max开启,EN_CRC,16BIT_CRC,PWR_UP,发送模式
  NRF24L01_CE_POUT = 1; 
  delay_us(10);
}

//该函数初始化NRF24L01到RX模式
void RX_Mode()
{
  NRF24L01_CE_POUT = 0;
  NRF24L01_Write_Buf(WRITE_REG + RX_ADDR_P0, (unsigned char *)RX_ADDRESS, 0x05);//写RX节点地址
  NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x3f);          //中断rx,tx,max开启,EN_CRC,16BIT_CRC,PWR_UP,接收模式
//  NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x37);          //中断rx,tx,max开启,EN_CRC,16BIT_CRC,PWR_UP,接收模式
  NRF24L01_CE_POUT = 1;
  delay_us(130);
}
//进入掉电模式
void Close_Rx()
{
  NRF24L01_CE_POUT = 0;
  NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x3d);//中断rx,tx,max开启,crc使能,16位校验,掉电,发送模式
//  NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x35);//中断rx,tx,max开启,crc使能,16位校验,掉电,发送模式
  NRF24L01_CE_POUT = 1; 
}
//进入掉电模式
void Close_Tx()
{
  NRF24L01_CE_POUT = 0;
  NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x3c);//中断rx,tx,max开启,crc使能,16位校验,掉电,发送模式
//  NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x34);//中断rx,tx,max开启,crc使能,16位校验,掉电,发送模式
  NRF24L01_CE_POUT = 1; 
}



六、作品演示

请上传您的作品的功能演示到腾讯视频,并编辑到本楼(或附上视频链接)。按要求上传视频可获得10分,具体详见活动规则。

https://v.qq.com/x/page/c07608q67cq.html

七、总结

例如您在完成该作品过程中的一些体会、碰到的技术问题或调试经验、作品的未来规划,及对我们主办方的建议和意见等。

本系统设计中对于多协议的使用遇到了很多问题,不过最终都解决了,实现了稳定的工作流程,不过系统还需要继续完善,对于其他应用中的程序通用性的设计,以及在对手机端以及电脑多的上层应用的开发不足,增加对上位机的设计与大数据的结合会更好,后期如果能够加上小米音响就更完美了


  该帖子已被天天于Sun Aug 19 13:31:48 CST 2018编辑过
回复 收藏
  举报
立创工程小...
6
主题
549
回复
发表于Tue Jun 19 10:02:01 CST 2018   |  只看该作者 2#

恭喜您已经报名成功!

您现在就可以开始进行设计工作了,后期相关内容请在一楼编辑进行完善。

当前所有参赛选手分值统计表及活动详细介绍见:http://club.szlcsc.com/article/details_12591_1.html

立创商城电子制作节(审核专员)
立创小星
【官方工作人员】
2
主题
1087
回复
发表于Tue Jun 19 15:31:39 CST 2018   |  只看该作者 3#
温馨提示:报名成功后至6月20日前的任意时间打开链接:http://club.szlcsc.com/article/details_12591_1.html,无分组转发至朋友圈,并截图(朋友圈首页截图)回复在报名帖下方即可获得3分。【注:请保持微信朋友圈动态至评审结束(8月24日),供官方核查
天天
4
主题
35
回复
发表于Wed Jun 20 09:49:31 CST 2018   |  只看该作者 4#
  点击查看大图
立创小星
【官方工作人员】
2
主题
1087
回复
发表于Wed Jun 20 19:58:38 CST 2018   |  只看该作者 5#
恭喜您传播成功,获得3分。当前所有参赛选手分值统计表及活动详细介绍见:http://club.szlcsc.com/article/details_12591_1.html
立创小星
【官方工作人员】
2
主题
1087
回复
发表于Mon Aug 06 19:25:09 CST 2018   |  只看该作者 6#
楼主,咱们这次制作节设计截止时间是2018年8月20日23时59分59秒,时间有点紧了,记得及时在1楼编辑更新!冲刺20000元大奖(注:超时更新无效)
立创小星
【官方工作人员】
2
主题
1087
回复
发表于Mon Aug 20 10:09:02 CST 2018   |  只看该作者 7#

请完善视频标题哟!


参考:第三届立创电子制作节参赛作品:《作品名》,如标题长度受限可缩减标题,保留“第三届立创电子制作节”核心字眼即可。

天天
4
主题
35
回复
发表于Mon Aug 20 14:20:50 CST 2018   |  只看该作者 8#
改好了,多谢提醒
  • 温馨提示:标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考:社区发帖规则
  • 您当前输入了 0个文字。还可以输入8000个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

顶部