本项目是基于STM32F103C8T6单片机,通过串口采集TGAM的脑波数据,对TGAM的脑波数据进行解析处理,来控制RGB灯的变化,从而反应脑波的注意力或放松度等级。即通过RGB灯的变化,反馈脑波的一种形式。来个效果图

本项目全部开源,嵌入式软件和硬件资料全部放在本文结束,欢迎大家一起学习交流!

话不多说,我们开始了解一下TGAM的基本工作原理

1、TGAM的资料介绍

TGAM默认的波特率是57600,大约每秒钟发送513个包,注意是“大约每秒钟”,意思就是发送包的个数是不会变
的,只是发送513个包所花费的时间是一秒左右。512个小包+1个大包,具体数据如下图:

1.1、TGAM发送的包有小包和大包两种:

1.1.1、小包格式

AA AA 04 80 02 xxHigh xxLow xxCheckSum

说明:前面的AA AA 04 80 02 是不变的,后三个字节是一只变化的,xxHigh和xxLow组成了原
始数据rawdata,xxCheckSum就是校验和。所以一个小包里面只包含了一个对开发者来
说有用的数据,那就是rawdata,可以说一个小包就是一个原始数据,大约每秒钟会有
512个原始数据。
那怎么从小包中解析出原始数据呢?

rawdata = (xxHigh << 8) | xxLow;
if(rawdata > 32768){ rawdata ­=65536; }

现在原始数据就这么算出来了,但是在算原始数据之前,我们先应该检查校验和。校验
和怎么算呢?

sum = ((0x80 + 0x02 + xxHigh + xxLow)^ 0xFFFFFFFF) & 0xFF

什么意思呢?就是把04后面的四个字节加起来,取反,再取低八位。
如果算出来的sum和xxCheckSum是相等的,那说明这个包是正确的,然后再去计算
rawdata,否则直接忽略这个包。
注意:丢包率在10%以下是不会对最后结果造成影响的。

1.1.2、大包格式

AA 同步
AA 同步
20 是十进制的32,即有32个字节的payload,除掉20本身+两个AA同步+最后校验和
02 代表信号值Signal
C8 信号的值
83 代表EEG Power开始了
18 是十进制的24,说明EEG Power是由24个字节组成的,以下每三个字节为一组
18 Delta 1/3
D4 Delta 2/3
8B Delta 3/3
13 Theta 1/3
D1 Theta 2/3
69 Theta 3/3
02 LowAlpha 1/3
58 LowAlpha 2/3
C1 LowAlpha 3/3
17 HighAlpha 1/3
3B HighAlpha 2/3
DC HighAlpha 3/3
02 LowBeta 1/3
50 LowBeta 2/3
00 LowBeta 3/3
03 HighBeta 1/3
CB HighBeta 2/3
9D HighBeta 3/3
03 LowGamma 1/3
6D LowGamma 2/3
3B LowGamma 3/3
03 MiddleGamma 1/3
7E MiddleGamma 2/3
89 MiddleGamma 3/3
04 代表专注度Attention
00 Attention的值(0到100之间)
05 代表放松度Meditation
00 Meditation的值(0到100之间)
D5 校验和

说明:那我们怎么拿信号强度Signal,专注度Attention,放松度Meditation,和8个EEG Power的值呢?就在第513个这个大包里面

04 代表专注度Attention
00 Attention的值(0到100之间)
05 代表放松度Meditation
00 Meditation的值(0到100之间)

解析EEG Power:
拿Delta举例,Delta 1/3是高字节,Delta 1/3是中字节,Delta 1/3是低
字节;高字节左移16位,中字节左移8位,低字节不变,然后将他们或运算,得到的结
果就是Delta的值。这些值是无符号,没有单位的,只有在和其他的Beta,Gamma等值
相互比较时才有意义。

TGAM不仅仅可以检测注意力和放松度,还可以检测眨眼信号。这样可玩性就更多了!

1.2、关于眨眼

1、TGAM芯片 本身是不会输出眨眼信号的,眨眼是用rawdata原始数据算出来的。表现在原始数据的波形上,眨眼就是一个很大的波峰。只要用代码检测这个波峰的出现,就可以找到眨眼的值了。
2、眨眼其实和脑电波一点儿关系都没有,眨眼只是眼睛动的时候在前额产生的肌(肉)电,混合在了脑波原始数据中。

2、项目介绍

本项目是通过蓝牙1接收的TGAM脑波数据,控制RGB的颜色;蓝牙2向外发送TGAM脑波数据,供上位机软件实时显示分析使用。

2.1、硬件原理图

2.2、软件设计

使用STM32的串口处理脑波数据,处理脑波数据代码如下:

void Serial_Deal(void)
{uint8_t i=0;uint16_t checksum = 0;//校验if(Brain_DataStruct.receive_flag == 1){ over_time_counter = 0;Brain_DataStruct.receive_flag = 0;Brain_DataStruct.off_flag = 1;//脑波在线checksum = 0;for (i = 0;i < 32;i++)//连续读取32个字节{checksum += Brain_DataStruct.Brain_Data[i+3];//前面3位0xAA;0xAA;0x20不参与校验}checksum = (~checksum)&0xff;//获取校验if (checksum == Brain_DataStruct.Brain_Data[35]){checksum = 0;Brain_DataStruct.signal=Brain_DataStruct.Brain_Data[4];Brain_DataStruct.attention=Brain_DataStruct.Brain_Data[32];Brain_DataStruct.relax = Brain_DataStruct.Brain_Data[34];if ((Brain_DataStruct.signal != 29) && (Brain_DataStruct.signal != 54) &&(Brain_DataStruct.signal != 55) && (Brain_DataStruct.signal != 56) &&(Brain_DataStruct.signal != 80) && (Brain_DataStruct.signal != 81) &&(Brain_DataStruct.signal != 82) && (Brain_DataStruct.signal != 107)&&(Brain_DataStruct.signal != 200)){Brain_DataStruct.wear_flag = 1;//正确佩戴}else//检测到脑波值,但是脑波值有问题{Brain_DataStruct.wear_flag = 0;//错误佩戴}}} else{if (over_time_counter >= 14)//1.4s{over_time_counter=0;Brain_DataStruct.off_flag = 0;//脑波离线}}
}

3、项目开源

百度网盘链接:
https://pan.baidu.com/s/1RHTobmtOOW1WTvzRVDZR3Q
提取码:z5sv

结束

欢迎大家关注我的微信号:redeemer奇
一起交流!一起努力!

软件下载 | 学习视频 | 嵌入式书籍 | 项目资料 |公众号中持续更新…

【开源项目】基于神念TGAM的脑波灯相关推荐

  1. 基于神念TGAM的脑波小车(1)

    作者声明:此博客是作者的毕设心得,拿来分享. 拿到模块,在网上查了一圈,发现基本没什么有用的资料,有也是一些废话,经过我几个月的攻克,现在已初步搞定,分享给大家. 废话不多说,直接步入正题. 这是通过 ...

  2. DoNet开源项目-基于jQuery EasyUI的后台管理系统

    本文转载于 石佳劼的博客,有问题请到原文咨询,原文连接. 博主在业余时间开发了一个简单的后台管理系统,其中用到了 jQuery EasyUI 框架,上次分享过系统布局,参考文章:jQuery Easy ...

  3. 专利 | 基于微表情与脑波分析算法的心理健康状况分析算法

    Hello,大家好,这里是行上行下, 我是隔壁壹脑云的Ting Zhang~ 今天和大家一起学习的是"基于微表情与脑波分析算法的心理健康状况分析算法"这个专利.它是由上海对外经贸大 ...

  4. DoNet开源项目-基于Amaze UI的点餐系统

    本文转载于 石佳劼的博客,有问题请到原文咨询,原文连接. 点餐系统 帮朋友做的点餐系统,主要是为了让顾客在餐桌上,使用微信扫描二维码,就可以直接点菜,吃完使用微信付款. 系统演示地址,账户名和密码均为 ...

  5. 开源项目-基于Intel VT技术的Linux内核调试器

    本开源项目将硬件虚拟化技术应用在内核调试器上,使内核调试器成为VMM,将操作系统置于虚拟机中运行,即操作系统成为GuestOS,以这样的一种形式进行调试,最主要的好处就是调试器对操作系统完全透明.如下 ...

  6. Web 自动化解决方案 [开源项目] 基于 Selenium 的 Web 自动化测试框架完美版

    欢迎查阅Selenium(Web自动化测试框架体系) Selenium ) Selenium是一个用于Web应用程序的自动化测试工具,直接运行在浏览器中,就像真正的用户在操作一样• 支持的浏览器包括I ...

  7. 开源项目-基于小熊派STM32红外热成像仪

    点击上方"嵌入式应用研究院",选择"置顶/星标公众号" 干货福利,第一时间送达! 来源 | 嵌入式应用研究院 整理&排版 | 嵌入式应用研究院 中秋假期 ...

  8. React Native开源项目如何运行(附一波开源项目)

    学习任何技术,最快捷的方法就是学习完基础语法,然后模仿开源项目进行学习,React Native也不例外.React Native推出了1年多了, 开源项目太多了,我们以其中一个举例子.给大家演示下如 ...

  9. TestCaseManageSystem 自动化解决方案 [开源项目] 基于 AgileTC 的测试用例自动化框架完美版

    欢迎查阅TestCaseManageSystem(测试用例管理系统) AgileTC  TestCaseManageSystem是一套敏捷的测试用例管理平台,支持测试用例管理.执行计划管理.进度计算. ...

最新文章

  1. 理解cookie和session
  2. linux如何使用物理内存_10 张图解再谈 Linux 物理内存和虚拟内存
  3. 【数据结构与算法】之深入解析Base64编码的实现原理
  4. SQL Server XML转Table
  5. python使用HanLP命名实体识别(以识别人名为例)
  6. 关于Shiro的标签应用
  7. [记]创建常量、原子性的值类型
  8. rainmeter 修正天气插件信息不准确 设置居住城市
  9. 工具使用:利用SRS和FFmpeg搭建流媒体直播和点播系统
  10. Kotlin Flow 背压和线程切换竟然如此相似
  11. 从金山毒霸看这个社会的“底线”
  12. Latex 表格单元格内换行
  13. js获取系统当前时间,实现钟表功能
  14. 姓氏 (C++)简单贪心
  15. 指南:使用 Trickle 限制应用程序带宽占用
  16. 把OctoberCMS的web服务器由Apache更换为Nginx
  17. 综合治理GIS方案(综治)
  18. 阿里巴巴暑期实习用户体验研究员 面试经验+总结
  19. 在线计算机专业术语英译中翻译,计算机术语汉英翻译.ppt
  20. 打开UG10 C语言错误,UG打开prt文件UTF8归档报错:部件已以UTF8模式归档,但NX运行

热门文章

  1. 这是我见过最有趣的壁纸
  2. 前端图片上传发现图片倒置解决方案 图片镜像效果实现
  3. 我眼中的计算机课,我心中的信息技术课堂
  4. 算法设计与分析——布隆过滤器(Bloom Filter)
  5. kali系统安装详细(跟着图片一步一步进发)
  6. 显著性检测数据集简单介绍及下载链接
  7. STM32TIM1输出两路PWM控制平衡车
  8. 《我有一座育龙岛》丨游戏结构拆解
  9. Accesss数据库的那点事
  10. 服务器x3650查看硬件日志,查看X系列服务器硬件日志