小米手环2如何使用用UG画手环

【开源盛世】基于onenet的心率定位手环 -
“云”上的你创客嘉年华 -
OneNET设备云论坛
查看: 6323|回复: 14
【开源盛世】基于onenet的心率定位手环
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
本帖最后由 胥豪 于
20:52 编辑
【参赛类别】:开源盛世
自从参加互联网+这个比赛,对互联网产生了浓厚的兴趣。由于自己的专业是工业上面的自动控制,对互联网控制这方面的知识比较欠缺,学习过程效率低走了许多弯路,但是功夫不负有心人,经过不知多少日夜奋战,当室友睡得正香我还在实验室调试。在onenet的支持下我成功的做出了我的互联网+作品。多的都不说了只有技术人员能懂其中的不容易
下面来介绍一下作品组成部分:
& && & 手环分为四部分:一,北斗+GPS定位,采用中国的北斗比美国的GPS精度更高尽量降低误差;二,GSM用于设备与onenet通信和基站定位,即使在没有卫星信号的情况下也可以定位;三,stm32c8t6主控,高达72M主频,保证能快速处理各项数据但是我降低了频率,其中的原因后面再说先卖个关子;四:心率检测,由于学生党经济条件有限用了某宝比较便宜的光电反射式心率模块,实际使用过程检测数据还是比较准确的。
基本原理及基本:
& && &1. 北斗+GPS定位,通过串口发送到单片机,单片机简析串口收到的数据,通过简单的算法之后算出大致经纬度;2.单片机AD检测心率模块模拟量输出,通过一系列算法得出心率;3.数据整合打包通过GSM上传至onenet之后再调用地图纠偏在地图上显示原始的坐标位置。
下面是最激动的制作过程:
1,先用模块搭建一个简易测试平台,写出代码的大致结构。
IMG_108.jpg (0 Bytes, 下载次数: 375)
这是用模块搭建的测试
11:03 上传
2,有了前面的基础就开始设计电路,原理图到PCB。& &现在想想还是很不错的哈
QQ截图16.jpg (0 Bytes, 下载次数: 342)
20:50 上传
QQ截图47.jpg (0 Bytes, 下载次数: 342)
20:50 上传
3,拿到心率模块了,先上示波器看看波形,哈哈怎么有种医院心点图的感觉。
IMG_542.jpg (0 Bytes, 下载次数: 592)
心率波形,有没有种医院做心电图的感觉
11:03 上传
4,打样回来的PCB,看着上面的0603有点蛋疼啊。
IMG_228.jpg (0 Bytes, 下载次数: 376)
打回来的样板
11:24 上传
废话不多说开始焊接
IMG_948.jpg (0 Bytes, 下载次数: 376)
11:00 上传
IMG_022.jpg (0 Bytes, 下载次数: 374)
全部0603贴片,手动贴片贴的美滋滋
11:00 上传
IMG_715.jpg (0 Bytes, 下载次数: 381)
设计上面的失误,忘了留串口还好留了SWD。
11:00 上传
经过一上午的努力终于焊接好了,由于串口被占用只能用SW模式下载程序了
IMG_953.jpg (0 Bytes, 下载次数: 374)
串口被占用了只好用ST-Link下载代码
11:00 上传
IMG_516.jpg (0 Bytes, 下载次数: 351)
完全焊接好之后
09:06 上传
下面来回答前面买的关子,为什么要降频呢?
答:说实话STM32功耗真的好高,不适合做穿戴设备主控。前期没有想到功耗问题现在想换MSP430但是板子都打样回来了,学生党穷舍不得在打一次,也不能浪费这个板子就将就用吧,办法都是人想出来的STM32有那么多低功耗模式但是都是休眠了。不能及时处理MC20过来的数据,只有选择降频运行来降低功耗。说这么多还不如来点实际的来看看怎么 降低频率
只需要把#define SYSCLK_FREQ_72MHz&&& &这段注释掉
取消& &&&# define SYSCLK_FREQ_24MHz&&& &的注释就行
QQ截图36.jpg (0 Bytes, 下载次数: 341)
20:50 上传
本来想用3D打印一个外壳的,结构有点复杂暂时没有画出来就先不打印外壳了。先去学学UG,等画出来在来跟新。部分调试过程在后面回复帖子里面有。
09:17 上传
点击文件名下载附件
493.18 KB, 下载次数: 1940
09:18 上传
点击文件名下载附件
164.27 KB, 下载次数: 1959
经过长时间的调试,最终确定硬件方面没有问题
09:18 上传
点击文件名下载附件
2.02 MB, 下载次数: 1948
代码有点bug后面还在修复
主题帖子积分
新手上路, 积分 6, 距离下一级还需 44 积分
新手上路, 积分 6, 距离下一级还需 44 积分
以前经常去川教踢球,楼主是遂宁人么?
主题帖子积分
中级会员, 积分 289, 距离下一级还需 211 积分
中级会员, 积分 289, 距离下一级还需 211 积分
多谢分享,开发过程的描述可以再详细点,期待后期继续跟新
主题帖子积分
不错不错,期待楼主做出更多有意思的东西跟我们分享
1、麒麟座开发板交流QQ群:
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、中移OneNET微信公众号:中移OneNET
关注中移OneNET官方公众号随时掌握最新资讯和活动信息
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
先在开发板上面搭建一个测试品台,测试一下心率模块
(0 Bytes, 下载次数: 378)
10:32 上传
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
多谢分享,开发过程的描述可以再详细点,期待后期继续跟新
后期会贴出关键代码
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
大哥,能不能把你的工程发我。我想好好参考一下。对这方面学的时间不长,太差。谢谢啦。或者我买也行,总之 ...
不知道你是要pcb工程还是源代码,源代码的话还没有写完还在不断完善中。。。
主题帖子积分
新手上路, 积分 2, 距离下一级还需 48 积分
新手上路, 积分 2, 距离下一级还需 48 积分
好东西,希望楼主开源
主题帖子积分
新手上路, 积分 15, 距离下一级还需 35 积分
新手上路, 积分 15, 距离下一级还需 35 积分
大哥,能不能把你的工程发我。我想好好参考一下。对这方面学的时间不长,太差。谢谢啦。或者我买也行,总之希望你分享一下。&&.
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
以前经常去川教踢球,楼主是遂宁人么?
我不是遂宁人,只是在这读书
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
本帖最后由 胥豪 于
08:55 编辑
解析GPS数据,提取位置信息,移动速度,心率。打包上传onenet平台。
void parseGpsBuffer()
{
& && &&&char *subS
& && &&&char *subStringN
& && &&&char i = 0;
& && &&&if (Save_Data.isGetData)
& && &&&{
& && && && && & Save_Data.isGetData =
& && && && && & printf(&**************\r\n&);
& && && && && & printf(Save_Data.GPS_Buffer);
& && && && && & for (i = 0 ; i &= 7 ; i++)
& && && && && & {
& && && && && && && && &if (i == 0)
& && && && && && && && &{
& && && && && && && && && && &&&if ((subString = strstr(Save_Data.GPS_Buffer, &,&)) == NULL)
& && && && && && && && && && && && && & errorLog(1);& && &&&// 1/2 ????í?ó
& && && && && && && && &}
& && && && && && && && &else
& && && && && && && && &{
& && && && && && && && && && &&&subString++;
& && && && && && && && && && &&&if ((subStringNext = strstr(subString, &,&)) != NULL)
& && && && && && && && && && &&&{
& && && && && && && && && && && && && & char usefullBuffer[2];
& && && && && && && && && && && && && & switch(i)
& && && && && && && && && && && && && & {
& && && && && && && && && && && && && && && && &case 1:memcpy(Save_Data.UTCTime, subString, subStringNext - subString);& && &&&
& && && && && && && && && && && && && && && && &case 2:memcpy(usefullBuffer, subString, subStringNext - subString);& && && && &
& && && && && && && && && && && && && && && && &case 3:memcpy(Save_Data.latitude, subString, subStringNext - subString);& && &&&
& && && && && && && && && && && && && && && && &case 4:memcpy(Save_Data.N_S, subString, subStringNext - subString);& && && && &
& && && && && && && && && && && && && && && && &case 5:memcpy(Save_Data.longitude, subString, subStringNext - subString);& && &&&
& && && && && && && && && && && && && && && && &case 6:memcpy(Save_Data.E_W, subString, subStringNext - subString);& && && &
& && && && && && && && && && && && && && && && &case 7:memcpy(Save_Data.Speed, subString, subStringNext - subString);
& && && && && && && && && && && && && && && && &default:
& && && && && && && && && && && && && & }
& && && && && && && && && && && && && & subString = subStringN
& && && && && && && && && && && && && & Save_Data.isParseData =
& && && && && && && && && && && && && & if(usefullBuffer[0] == 'A')
& && && && && && && && && && && && && && && && &Save_Data.isUsefull =
& && && && && && && && && && && && && & else if(usefullBuffer[0] == 'V')
& && && && && && && && && && && && && && && && &Save_Data.isUsefull =
& && && && && && && && && && &&&}
& && && && && && && && && && &&&else
& && && && && && && && && && &&&{
& && && && && && && && && && && && && & errorLog(2);
& && && && && && && && && && &&&}
& && && && && && && && &}
& && && && && & }
& && &&&}
}复制代码GPS解析部分源码。
上传onenet源码,串口1与GPS模块通信,并发送调试信息到电脑串口,串口2与GSM通信上传数据。
void OneNet()
{
& && &&&
& && &&&double j,k;
& && &&&Speed1=atof(Save_Data.Speed);
& && &&&
& && &&&if (sendCommand(&AT+CIPSTART=TCP,183.230.40.33,80\r\n&,&CONNECT&, 30000, 10) == Success);
& && &&&else errorLog(4);
& && &&&delay_ms(10);
& && &&&if (sendCommand(&AT+CIPSEND\r\n&,&&&, 1000, 10) == Success);
& && &&&else errorLog(4);
& && &&&delay_ms(10);
& && &&&
& && &&&j=longitudeToOnenetFormat(Save_Data.longitude);& && &&&//×?>>>>×?±ê
& && &&&k=latitudeToOnenetFormat(Save_Data.latitude);
//& && &&&sprintf(test,&{\&datastreams\&:[{\&id\&:\&location\&,\&datapoints\&:[{\&value\&:{\&lon\&:%0.10f,\&lat\&:%0.10f}}]}]}&,j,k);
& && &&&sprintf(test,&{\&location\&:{\&lon\&:%0.10f,\&lat\&:%0.10f},\&xinlv\&:\&%d\&,\&sudu\&:\&%0.2f\&}&,j,k,BPM,Speed1);
& && &&&i=strlen(test);
& && &&&u2_printf(&POST /devices/********/datapoints?type=3 HTTP/1.1\r\n&);& && &//**符号为自己的设备ID
& && &&&printf(&POST /devices/*********/datapoints?type=3 HTTP/1.1\r\n&);
& && &&&u2_printf(&api-key: *************************\r\n&);& && && && && && && && && && && && & //这里的**是api-key
& && &&&printf(&api-key: ************************\r\n&);& && &&&//UART1
& && &&&u2_printf(&Host: api.heclouds.com\r\n&);
& && &&&printf(&Host: api.heclouds.com\r\n&);& && && && && && && & //UART1
& && &&&sprintf(tmp,&Content-Length: %d\r\n&,i);
& && &&&u2_printf(tmp);
& && &&&printf(tmp);& && && && &//UART1
& && &&&u2_printf(&\r\n&);
& && &&&printf(&\r\n&);
& && &&&u2_printf(test);
& && &&&printf(test);& && && && && && && && && && && && && && && &&&//UART1
& && &&&u2_printf(&\r\n&);
& && &&&printf(&\r\n&);& && && && && && && && && && && && && && &&&//UART1
& && &&&USART_SendData(USART2,0x1a);
& && &&&USART_SendData(USART1,0x1a);
& && &&&delay_ms(1000);
& && && && && && && && && && &&&if (strstr(USART2_RX_BUF, &OK\r\n&) != NULL)
& && && && && && && && &{& && && && && && && && && && &&&
& && && && && && && && && && &&&printf(&\r\n***************receive****************\r\n&);
& && && && && && && && && && &&&printf(USART2_RX_BUF);
& && && && && && && && && && &&&USART2_CLR_Buf();
& && && && && && && && &}
& && && && && && && && &delay_ms(1000);
& && && && && & if (sendCommand(&AT+CIPCLOSE\r\n&, &OK\r\n&, 1500, 10) == Success);
& && &&&else errorLog(5);
& && &&&delay_ms(10);
& && &&&
}复制代码
(0 Bytes, 下载次数: 371)
14:31 上传
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
检测的心率值通过串口打印输出&&
(0 Bytes, 下载次数: 391)
14:20 上传
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
本帖最后由 胥豪 于
14:28 编辑
void TIM3_IRQHandler()
{
& && &&&unsigned int runningT
& && &&&
& && && &TIM_ClearFlag(TIM3,TIM_FLAG_Update);& && && && && &&&
& & ADC_SoftwareStartConvCmd(ADC1, ENABLE);
//& && && & while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
& && && && && & Signal=ADC_GetConversionValue(ADC1);& && && && && && && && && && && && && &&&// read the Pulse Senso
& && && && && & sampleCounter += 2;& && && && && && && && & // keep track of the time in mS with this variable
& && && && && & Num = sampleCounter - lastBeatT& && & // monitor the time since the last beat to avoid noise
//& && && && && & HAL_ADC_Start(&hadc1);& && && && && && && && && && && && && && && && && && && && && && && && &//restart ADC conversion
& &ADC_ResetCalibration(ADC1);
& && && && && & //&&find the peak and trough of the pulse wave
&&if(Signal & thresh && Num & (IBI/5)*3){& && & // avoid dichrotic noise by waiting 3/5 of last IBI
& & if (Signal & T){& && && && && && && && &// T is the trough
& && &T = S& && && && && && && && & // keep track of lowest point in pulse wave
&&if(Signal & thresh && Signal & P){& && && & // thresh condition helps avoid noise
& & P = S& && && && && && && && && &&&// P is the peak
&&}& && && && && && && && && && && && && & // keep track of highest point in pulse wave
&&//&&NOW IT'S TIME TO LOOK FOR THE HEART BEAT
&&// signal surges up in value every time there is a pulse
&&if (Num & 250){& && && && && && && && && && && &&&// avoid high frequency noise
& & if ( (Signal & thresh) && (Pulse == false) && (Num & (IBI/5)*3) ){& && &&&
& && &Pulse =& && && && && && && && && && & // set the Pulse flag when we think there is a pulse
& && &GPIO_ResetBits(GPIOE,LED2);& && && && && & // turn on pin 13 LED
& && &IBI = sampleCounter - lastBeatT& && && &// measure time between beats in mS
& && &lastBeatTime = sampleC& && && && && &// keep track of time for next pulse
& && &if(secondBeat){& && && && && && && && &// if this is the second beat, if secondBeat == TRUE
& && &&&secondBeat =& && && && && && &// clear secondBeat flag
& && &&&for(i=0; i&=9; i++){& && && && & // seed the running total to get a realisitic BPM at startup
& && && & rate[i] = IBI;& && && && && && && &
& && &&&}
& && &}
& && &if(firstBeat){& && && && && && && && & // if it's the first time we found a beat, if firstBeat == TRUE
& && &&&firstBeat =& && && && && && & // clear firstBeat flag
& && &&&secondBeat =& && && && && && & // set the second beat flag
//& && & sei();& && && && && && && && && && & // enable interrupts again
& && &&&& && && && && && && && && && &// IBI value is unreliable so discard it
& && &}& &
& && &// keep a running total of the last 10 IBI values
& && &runningTotal = 0;& && && && && && &// clear the runningTotal variable& &
& && &for(i=0; i&=8; i++){& && && && && & // shift data in the rate array
& && &&&rate[i] = rate[i+1];& && && && && && &// and drop the oldest IBI value
& && &&&runningTotal += rate[i];& && && && &&&// add up the 9 oldest IBI values
& && &}
& && &rate[9] = IBI;& && && && && && && && &&&// add the latest IBI to the rate array
& && &runningTotal += rate[9];& && && && && & // add the latest IBI to runningTotal
& && &runningTotal /= 10;& && && && && && && &// average the last 10 IBI values
& && &BPM = 60000/runningT& && && && && &// how many beats can fit into a minute? that's BPM!
& && && && && && && && &if(BPM&200)BPM=200;& && && && && && && && &
& && && && && && && && &if(BPM&30)BPM=30;& && && && && && && && && && &
& && && && && && && && &sprintf(tstr,&%d&,BPM);
& && &QS =& && && && && && && && && && &// set Quantified Self flag
& && &// QS FLAG IS NOT CLEARED INSIDE THIS ISR
& & }& && && && && && && &&&
&&}
&&if (Signal & thresh && Pulse == true){& &// when the values are going down, the beat is over
& &&&GPIO_SetBits(GPIOE,LED2);& && && && &// turn off pin 13 LED
& & Pulse =& && && && && && && && & // reset the Pulse flag so we can do it again
& & amp = P - T;& && && && && && && && && &// get amplitude of the pulse wave
& & thresh = amp/2 + T;& && && && && && &&&// set thresh at 50% of the amplitude
& & P =& && && && && && && && && & // reset these for next time
& & T =
&&}
&&if (Num & 2500){& && && && && && && && && &// if 2.5 seconds go by without a beat
& & thresh = 512;& && && && && && && && &&&// set thresh default
& & P = 512;& && && && && && && && && && & // set P default
& & T = 512;& && && && && && && && && && & // set T default
& & lastBeatTime = sampleC& && && & // bring the lastBeatTime up to date& && &&&
& & firstBeat =& && && && && && && & // set these to avoid noise
& & secondBeat =& && && && && && &&&// when we get the heartbeat back
&&}
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
2ms中断一次检测心率模块AD电压值,计算其心率值。手机手环支架
手机手环支架手机手环支架等轴视图手机手环支架后视图手机手环支架左视图
ID文件名称文件格式文件大小(KB)操作
正在加载...请等待或重新刷新本页面!
手机手环支架可有效减小在行走,拥挤的场所,手持数码产品防跌落,防盗抢的危险。并且可以折叠,方便携带,让您在工作和休闲时余的操作过程中更加得心应手!欢迎下载。
下载地址 (所需金额:0沐风币)
图纸发布者
研发工程师,11年工作经验。
作者热门图纸
作者其他图纸
当前分类本月下载排行
下载之前,如有问题,请UG怎么用命令画边倒圆角
UG怎么用命令画边倒圆角
  经常画图的小伙伴,一定少不了画圆角或者是半圆角,那么在UG中我们怎么利用命令功能,去实现一个长方体一边的圆角呢?接下来小编教大家用命令画圆角。
  1、首先打开UG软件,进入建模功能区,如下图所示。
  2、倒圆角需要对实体的边进行倒圆角,所以我们首先用拉伸命令做出一个实体模型。如图所示,做出一个长方体。
  3、可以通过&插入&细节特征&边倒圆&进入倒圆角对话框,或者通过菜单栏的快捷按钮,直接进入边倒圆对话框。
  4、在对话框中,我们首先选择&要倒圆的边&,选择模型的一条竖边。
  5、这时候,我们可以对倒圆角进行大小设置。
  6、如果还需要倒圆角其他的边,我们点击:添加新集,这时文字会变灰色,我们可以在绘图区选择其他的边。
  7、最后点击确定,完成倒圆角设置。如图所示效果。
大家都在下
还没关注下载之家微信 的亲们赶紧扫一扫左侧的二维码吧!或搜账号:
还没关注下载之家微信 的亲们赶紧扫一扫左侧的二维码吧!或搜账号:
微信公众号
Copyright &
下载之家(www.xiazaizhijia.com).All Rights Reserved
备案号:闽ICP备号-8
京公网安备 19号Huawei/华为手环怎么样,好不好
Huawei/华为手环怎么样,好不好:
1、试用了一天,通话音质还不错,手环功能少了点,但主要作为耳机用,加上信息通知计步等功能应该还算不错。
2、超级赞的腕表,买第二个了,时尚,大气,美,超级满意,给五分。
3、质量没问题,但就表带不同,贵了几百块,我在问自己:值吗?
4、发貨快!24小时到达!华为国产的精品!
5、送给爸爸的 爸爸很喜欢~金属表带很适合夏天~
6、果然高端大气上档次!支持国貨!只是还没操作熟练,暂且吧?
7、还没熟练使用功能,功能好多,手环高大上,不错的产品,正品,快递很给力 那么远隔天到。赞 五分
Huawei/华为手环怎么样,好不好更多评价:
8、第二次买了,给老公买的,用着还行,就是开车打电话方便
9、试用了一天,通话音质还不错,手环功能少了点,但主要作为耳机用,加上信息通知计步等功能应该还算不错。
10、超级赞的腕表,买第二个了,时尚,大气,美,超级满意,给五分。
11、质量没问题,但就表带不同,贵了几百块,我在问自己:值吗?
12、发貨快!24小时到达!华为国产的精品!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。女性手环设计
效果图电子元器件图纸装配图
ID文件名称文件格式文件大小(KB)操作
正在加载...请等待或重新刷新本页面!
女性手环设计,整体外观漂亮,产品内部结构齐全。模型是个装配体,由许多零部件装配而成。上传的是装配图,文件STP格式,喜欢的朋友欢迎下载。谢谢
下载地址 (所需金额:25沐风币)
图纸发布者
专业团队设计,产品外观,产品结构,CAD制图---敏也工作室
作者热门图纸
作者其他图纸
当前分类本月下载排行
下载之前,如有问题,请

我要回帖

更多关于 如何编手环还用皮筋 的文章

 

随机推荐