CN101715356A - 引导眼镜 - Google Patents

引导眼镜 Download PDF

Info

Publication number
CN101715356A
CN101715356A CN200880021657A CN200880021657A CN101715356A CN 101715356 A CN101715356 A CN 101715356A CN 200880021657 A CN200880021657 A CN 200880021657A CN 200880021657 A CN200880021657 A CN 200880021657A CN 101715356 A CN101715356 A CN 101715356A
Authority
CN
China
Prior art keywords
slm
frequency
led
ripple
firmware
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200880021657A
Other languages
English (en)
Other versions
CN101715356B (zh
Inventor
米切尔·A·奥尔特曼
威廉·阿莱西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Publication of CN101715356A publication Critical patent/CN101715356A/zh
Application granted granted Critical
Publication of CN101715356B publication Critical patent/CN101715356B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61MDEVICES FOR INTRODUCING MEDIA INTO, OR ONTO, THE BODY; DEVICES FOR TRANSDUCING BODY MEDIA OR FOR TAKING MEDIA FROM THE BODY; DEVICES FOR PRODUCING OR ENDING SLEEP OR STUPOR
    • A61M21/00Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61NELECTROTHERAPY; MAGNETOTHERAPY; RADIATION THERAPY; ULTRASOUND THERAPY
    • A61N5/00Radiation therapy
    • A61N5/06Radiation therapy using light
    • A61N5/0613Apparatus adapted for a specific treatment
    • A61N5/0618Psychological treatment
    • GPHYSICS
    • G02OPTICS
    • G02BOPTICAL ELEMENTS, SYSTEMS OR APPARATUS
    • G02B27/00Optical systems or apparatus not provided for by any of the groups G02B1/00 - G02B26/00, G02B30/00
    • G02B27/01Head-up displays
    • G02B27/017Head mounted
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61MDEVICES FOR INTRODUCING MEDIA INTO, OR ONTO, THE BODY; DEVICES FOR TRANSDUCING BODY MEDIA OR FOR TAKING MEDIA FROM THE BODY; DEVICES FOR PRODUCING OR ENDING SLEEP OR STUPOR
    • A61M21/00Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis
    • A61M2021/0005Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis by the use of a particular sense, or stimulus
    • A61M2021/0011Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis by the use of a particular sense, or stimulus in a subliminal way, i.e. below the threshold of sensation
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61MDEVICES FOR INTRODUCING MEDIA INTO, OR ONTO, THE BODY; DEVICES FOR TRANSDUCING BODY MEDIA OR FOR TAKING MEDIA FROM THE BODY; DEVICES FOR PRODUCING OR ENDING SLEEP OR STUPOR
    • A61M21/00Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis
    • A61M2021/0005Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis by the use of a particular sense, or stimulus
    • A61M2021/0027Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis by the use of a particular sense, or stimulus by the hearing sense
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61MDEVICES FOR INTRODUCING MEDIA INTO, OR ONTO, THE BODY; DEVICES FOR TRANSDUCING BODY MEDIA OR FOR TAKING MEDIA FROM THE BODY; DEVICES FOR PRODUCING OR ENDING SLEEP OR STUPOR
    • A61M21/00Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis
    • A61M2021/0005Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis by the use of a particular sense, or stimulus
    • A61M2021/0044Other devices or methods to cause a change in the state of consciousness; Devices for producing or ending sleep by mechanical, optical, or acoustical means, e.g. for hypnosis by the use of a particular sense, or stimulus by the sight sense
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61NELECTROTHERAPY; MAGNETOTHERAPY; RADIATION THERAPY; ULTRASOUND THERAPY
    • A61N5/00Radiation therapy
    • A61N5/06Radiation therapy using light
    • A61N2005/0635Radiation therapy using light characterised by the body area to be irradiated
    • A61N2005/0643Applicators, probes irradiating specific body areas in close proximity
    • A61N2005/0645Applicators worn by the patient
    • A61N2005/0647Applicators worn by the patient the applicator adapted to be worn on the head
    • A61N2005/0648Applicators worn by the patient the applicator adapted to be worn on the head the light being directed to the eyes
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61NELECTROTHERAPY; MAGNETOTHERAPY; RADIATION THERAPY; ULTRASOUND THERAPY
    • A61N5/00Radiation therapy
    • A61N5/06Radiation therapy using light
    • A61N2005/065Light sources therefor
    • A61N2005/0651Diodes
    • A61N2005/0652Arrays of diodes

Abstract

声光机(SLM)产生具有脑波频率的声音脉冲和光脉冲。所述SLM被编程以将用户诱导至特定意识状态。所述SLM声光机包括:左右发光二极管(LED)(3)。LED(3)被配置为分别置于用户的左眼和右眼前面,并且被编程以发出将用户诱导至特定意识状态的频率的光脉冲。所述SLM具有左右耳机扬声器(4)。扬声器(4)被配置为向右耳和左耳播放不同的音调以产生与LED脉冲频率相匹配的双耳节拍。所述SLM还具有位于电路板上的微控制器(5),微控制器(5)运行固件以控制LED和耳机扬声器。

Description

引导眼镜
相关申请
本申请是于2007年4月24日提交的第60/926,028号美国临时申请的非临时申请。
背景技术
你无需成为佛教僧侣而冥想,也不需要成为睡美人而睡得好。拥有这个简易的微控制器装置就可以实现这些不同的意识状态、或者其他状态。
大脑根据其当前的放松、集中以及其他精神状态产生不同比例的脑波类型。每种类型的波有其自身的特征频率范围,可通过脑电图进行读取。
发明内容
图1示出了SLM的实施方式的由佩戴者使用中的装置;
图2是示出了SLM的实施方式的结构的示意图;
图3是示出了本发明的“引导眼镜”实施方式的不同实施方式的结构的示意图;
图4示出了引导眼镜固件系统图;
图5示出了引导眼镜实施方式中软件对象的体系结构。
具体实施方式
一天我在冥想时突然蹦出这样一个问题:“如果你可以在某人的大脑里播放脑波记录,会发生什么?”,结果证明存在能够实现这种功能的装置。声光机(SLM)产生具有脑波频率的声音脉冲和光脉冲,帮助人们睡眠、醒来、冥想或者体验对机器编程的任何意识状态。第一次我尝试的是旅行!我不仅按顺序进入深度冥想,然后再出来(感觉棒极了!),而且伴随着美妙、非凡的幻觉。
本文将会揭示如何构造SLM。我们通过采用现有的微控制器项目:Limor Fried的MiniPOV工具包,以简单的方式实现SLM。这个酷玩具能够在你将其挥过的空间内闪现图片和文字,我们能够通过改变固件和某些小硬件,简单地将该玩具变换为SLM。
许多人的脑波将同步至具有脑波频率的光和声音脉冲,这使大脑改变其状态-该过程称为“诱导(entrainment)”。通过在你的眼睛和耳朵里播放脉冲序列,你可以对你的大脑进行编程以实现你喜欢的任何脑波体验。
我们给我们的SLM编程,以实现追踪冥想体验的14分钟序列。由于该装置每次只能产生一个频率,因此它通过来回切换频率来定位到新的大脑状态。例如,从完全清醒到有些恍惚(dreamy),我们首先产生一会儿β(beta)波,接着产生α(alpha)波,然后在β波和α波之间转换,在每次循环中减少β波的持续时间和增加α波的持续时间。我们代码中的brainwaveTab数组定义了完整的序列。
图1示出了本发明的引导眼镜(guide glasses)实施方式的下列部件:
1.将大脑诱导至编程的波序列,由此改变大脑的状态。
2.电池组为电子设备供电。
3.位于用户(闭上的)眼睛前面的LED发出2.2、6.0、11.1或14.4Hz的光脉冲,以分别发出δ(delta)波、θ(theta)波、α波或β波。
4.耳机扬声器在左耳和右耳播放不同的音调,以产生与LED脉冲频率匹配的双耳节拍(binaural beats)(见下面)。
5.电路板上的微控制器运行固件、以及位于微控制器内且控制LED和耳机的程序。
6.串口连接器将固件写入到微控制器,让你对你自己的脑波频率序列进行编程。
7.图形只是看起来很酷。
双耳节拍
我们采用更加有效的方法来取代通过两个耳机扬声器简单播放诱导频率的方法。当我们在每个耳朵里播放不同的频率时,大脑感知到双耳节拍频率,就像在吉他弦上先后演奏两种音调。该节拍来自于以等于这两频率差的速率循环增强和相互抵消的两种音调。为了产生β波双耳节拍,我们在一只耳朵播放400Hz的音调,在另一只耳朵播放414.4Hz的音调。用户感知到类似于每秒钟14.4次淡入淡出(fade inand out)的“wah oo wah oo wah”的声音。
材料
[A]安全眼镜
[B]耳机
[C]Limor Fried的MiniPOV v3工具包来自:
store.makezine.com/ProductDetails.asp?ProductCode=MKPO VKIT,可从makezine.com/10/brainwave下载的固件和全部文档。
[D]1k#电阻器,1/4w
[E]1.0μF双极电容器
[F]与你的耳机相匹配的3.5mm立体声插孔
[G]AA碱性电池(2)
[H]单芯镀银线(Kynar wire),也被称为30线号(gauge)的绕接线(wire-wrap wire),任意2种颜色;我使用蓝色和黄色,RadioShack#278-502和#278-503
[I]硅酮粘合剂,也被称为RTV(室温硫化);无色或任何其他颜色,在你喜欢的五金店大约5美元就可买到。
[J]用来涂抹硅酮粘合剂的牙签
[K]电缆扎带,10cm长×2.5mm宽
[L]10cm长的1.5mm管子
[M]永久性标记器(marker)或干擦标记器
[N]玻璃纸带(cellophane tape)
[O]在MAKE magazine.com/10/brainwave下载眼睛图形(可选的)和打印使用的模板。
[P]如果你出错了,则用外用酒精和卫生纸清除永久性标记器标记。
构建和测试编程PCB
我们电子器件的核心是MiniPOV v3工具包。我们参考该工具包的网站ladyada.net/make/minipov3。
1a.按照MlniPOV网站的优异说明,将除了LED1、LED2、LED3、LED4、RS、R6以外的所有元件焊接到所包含的印刷电路板(PCB)上。将这6个元件留在外面。
1b.将两个AA电池插入到电池盒中,打开开关。微控制器运行MiniPOV固件,4个填充的(stuffed)LED应该发光。
1c.如果LED没有发光,则进行调试。电池是否正确?检查电源连接。检查是否有坏的焊接或者桥连(两焊点之间短路)。检查所有LEO、以及01、02和D3是否没有向后填充。现在我们将改变MiniPOV的固件,因此你可以学习如何使用开发工具,并且会看到这有多容易。
1d.下载并安装你的操作系统所需的AVRDUDE软件。该软件的链接都在上面列出的MiniPOV网站的“下载”下方。如果你采用USB/串口适配器,还要下载USB/串口转换器驱动程序。
1e.在你的计算机上新建名为slm的文件夹。将MiniPOV的固件从MiniPOV网站下载到slm文件夹,并对其进行解压。使用文本编辑器打开mypov.c文件,将图像数组(在文件的顶部附近)中的图案改为右侧的图案。由于a1使LED发光,a0关闭LED。当你在空中来回挥动Mini-POV时,在4个LED上产生看起来象“VVVVV”的图案。断开MiniPOV的电池组,将MiniPOV插入到你的计算机的串口,重新接通该电池组。
1f.根据MiniPOV网站上针对你的操作系统的说明,对微控制器进行编译和编程。在Windows下,你输入如下(右侧)到命令窗口。关闭MIniPOV电池组并从串口拔出PCB板。重新接通电池组,4个LEO发光。挥动MIniPOV,并观察你刚才所编程的VVVVV图案!
注意:加入电容器会产生低通滤波器,该低通滤波器将方波平滑成为正弦波,以获得更多令人愉快的音频。
构建SIM控制器
从MiniPOV获取的用于SLM的完整示意图可从makezine.com/10/brainwave得到,并且在图2中提供。R5/C2和R5/C1都是将微控制器的方波输出转换成正弦波(或多或少)的低通滤波器。这是数学公式:我们希望低通滤波器的截止频率(Fc)小于400Hz音调的一半,我们将使用:Fc=1/(2*Pi*R*C)=1/(6.26*1000*.0000001)=160Hz。这能够实现,因为400Hz的方波能被转换成叠加有许多400Hz倍频的400Hz正弦波。所述LPF极大地减少了大于400Hz的所有频率的音量,而不影响400Hz正弦波。
2a.从rnakezine,com/lO/brainwave将SLMfirmware.zip下载到你的slm目录,并对其解压。如果被询问,则允许其用新的makefile覆盖原有的makefile文件。用新的固件对微控制器进行编程。按照上而的步骤1e链接到你的计算机。接着编译和上传固件到微处理器。这个过程等同于步骤1f,但是我们对slm进行编程而不是对mypov进行编程。在Windows下,你在右边输入看到的代码。
2b.断开并拔出MiniPOV,尽管由于我们还没有任何与之相关的输出,它还不能做太多,但是现在它是SLM控制器。将两个IJ1F电容器焊接到LED3和LED4的焊点上。将两个1kD电阻焊接到R5和R6的焊点上。修剪PCB背面的多余引线。
2c.为立体耳机插孔剪2″长的蓝线(地线)。剪两根2″长的黄线。将每根导线的一端剥去1/8″,并涂上锡。
2d.将蓝地线的被剥端插入插孔的接地端并焊接。将黄色扬声器导线插入插孔的空接线端中的一个并焊接。按照同样方法处理剩下的扬声器导线。
注意:在耳机插孔有三个接线端。一个是接地端,偏离其他接线端;其他两个分别是用于左扬声器和右扬声器。对于该项目来说,左扬声器和右扬声器怎么连接都可以。
2e.整齐地绞合这3根导线,但留出大约W’不绞合。剪断它们使它们延伸相同的长度,将每根导线剥去1132″并涂上锡。将地线(蓝)焊接到将所有LEO地连接到一起的PCB印制线上。接着将左、右扬声器(黄)焊接到LED3和LED4的输出端。
2f.通过将耳机插入插孔,戴上耳机,打开电源开关进行试音。你的两耳将听到某些间断的声音。如果没有,最可能的问题是坏的焊接连接或者焊接桥连。
3.准备电池组
3a.从PCB板上拆焊2电池组导线
3b.剪两根4″长的导线(一黄,一蓝),将每根导线的一端剥去3mm,并将被剥端涂锡。
3c.抓住蓝线和黑色电池组导线(负),将它们焊接到一起。将12mm的热缩管套在连接处,并用烙铁轻轻地在其所有边上来回摩擦几秒钟,直到管子围绕该连接处收缩为止。对红色电池组导线(正)重复上述操作,但是用黄线来延长该红色电池组导线。
4.准备眼镜
4a.眼镜需要面对着每个眼睛的1个LED。把眼镜戴在脸上,直视前方,将标记器尖端对准你的右眼。慢慢地将这个标记器向你的眼睛移动,使标记器直接在你的眼睛的正前方做标记。对左眼重复这个动作。如果你想在你的眼镜上涂上酷的图形,将每个镜片的形状描到一张纸上,然后剪下这2模板备用。
4b.用小尖钉在眼镜上的2个标记处划指示凹痕。为每只眼睛钻4.5mm的孔,注意不要让钻头滑动。测试将来自MiniPOV工具包的剩余LEO装入这两个孔中。如果你不能将它们完全推入,则将孔的边靠近旋转的钻头以使孔变大一点。
注意:眼镜上的标记在某种程度上应该是对称的,如果不对称,则用卫生纸或者外用酒精清除该标记,重试。
4c.将LED推入各眼镜孔中,这样当你戴上眼镜的时候它们就正对着你的眼睛。剪四根8″长的导线(2黄,2蓝)。将每根导线的一端剥去Vs″,并在被剥端涂上锡。
4d.每个LED的较长引线是正端。剪短每个LED的所有引线,但是正引线只1/8″,将它们涂上锡,并将它们焊接到8″的黄线。用同样的方法处理负引线,将它们焊接到蓝线上。
4e.向上折曲两个LED上的导线,使其位于眼镜的上边缘,通过硅酮粘合剂从外边将每个LED粘合在适当的位置。用牙签创建实心半球的硅酮,该硅酮与眼镜接触良好并且涂覆LED引线和暴露的导线。让该粘合剂变硬(1-2小时)。
注意:硅酮粘合剂是电子项目的好选择,因为它不导电,而且易于使用。
连接电池组和PCB
5a.通过将一对电缆扎带相对于另一对电缆扎带滑动大约18mm,准备2对电缆扎带。
5b.沿着眼镜的右眼镜脚(temple)涂抹2%″的硅酮粘合剂以跨越电池组的长度,将电池组压入粘合剂中并且用双电缆扎带固定。修剪电缆扎带的多余长度。然后见步骤(5h TK)。
5c.将来自LEO的4根导线和来自电池组的2根导线沿眼镜上边朝左眼镜脚(在此他们将连接到PCB板)引导,沿着该路径将这些导线绞合在一起。保持来自电池组的2条导线在一起。这样你就不会将它们与LEO导线弄混。
5d.将PCB板保持在左眼镜脚的适当位置处(但是还没有粘合),PCB被定位使得在眼镜展开时连接器伸出左镜片的前方。这将使你将眼镜插到你的电脑上。修剪这六根导线,使得当它们连接到LED和电池组时仅有一点松。将六根导线中每一根的端剥去1.5mm,并将它们焊接到未填充的LEO和电池组接点,保持正确的极性。
5e.沿眼镜的左眼镜脚涂抹PCB长度的硅酮粘合剂。将PCB压入粘合剂中并用另一对电缆扎带固定。记住连接器需要插入到你的计算机的串口而不受到眼镜的阻碍。将PCB下方任何多余的导线剪掉,并切除电缆扎带的多余部分。
6固定耳机插孔和松线
6a.将导线推至侧边,在PCB板上的D2和R11上滴一滴硅酮。并从侧面将耳机插孔推入这一滴硅酮。用牙签加入更多的粘合剂直到完全覆盖插孔的接线端和大约每根连接的导线的第一个3mm为止。
6b.为了在粘合松线时将它们保持在适当的位置,通过将每一端折叠一小部分粘到其自身上来准备8条4″的魔术带。将该魔术带片粘贴在你在下一步骤的粘贴时可以够得着的地方。
6c.使用牙签在平铺的导线之间和沿眼镜上边缘稀疏地涂抹硅酮粘合剂,然后沿眼镜粘合这些导线。当粘合剂变硬时,使用该魔术带将导线保持在适当的位置。而且还用该魔术带将耳机插孔保持在适当的位置。
等粘合剂变硬,大概需要1-2小时,接着移除魔术带。
7.应用酷图形(可选)
7a.使用你前面创建的模板,从你的图形为左右镜片剪出镜片形状片。在每一片上剪一个孔,LEO的背部将从该孔中穿过。
7b.在剪切块后面的水平带内涂抹一层非常薄的硅酮粘合剂(用你的手指涂抹)。将其粘贴到眼镜的前面。现在它们看起来很酷!
使用眼镜
让自己舒适一点,戴上眼镜和耳机,闭上你的眼睛(LED亮了!),轻轻地打开电源开关。当你进入深度冥想时享受幻觉,思考你的内心世界,14分钟程序之后出来会感到妙不可言。重新进行冥想?这里有几个主意。平静地呼吸,关注你的呼吸。如果你分心,不要着急——只要再次集中到你的呼吸上。或者不用关注任何事:只需跟随你的思想畅行。你也可以在开始前专注于某件事,解决一个技术问题,探究一个困难的决定,感受事情之间的关联。如果你分心,只需要重新集中于你的意图。在冥想状态你可以干任何事。
注意:对于容易痉挛的人都应该避免闪光。如果你容易痉挛,请在该项目中不要连接LED;仅用双耳节拍音频有效地诱导你的大脑。如ADHD的特定条件可能随着θ波和δ波的诱导而恶化。如果你有任何不适,请停止使用这个SLM。
编程你自己的脑波序列
你可以通过编辑slm.c文件中的brainwaveTab定义来编程你自己的脑波序列。每一行定义了(bwType.bwDuration)对,该对设置用于一定量时间(在千分之十秒)内的脑波类型。例如,第一对{′b′,600000}运行60秒的β波频率(14AHz)。
你可以将该会话编程为持续超过14分钟,花费更多的时间在较深的状态。
为了帮助睡眠,你还可能想减少音频的音高(pitch),因为较低的音高让人更放松。这点你可以通过调节主函数(main)中的OCRDA设置和也在slm.c文件中的函数do_brainwave_element中的OCRIA设置来实现。探索与享受!
固件文档
固件是控制微控制器的计算机程序。[为什么不叫它软件?固件是介于软件与硬件之间的东西-是直接控制硬件的软件]。本项目中,我们通过地改变固件以及某些较小的硬件变化,简单地将MiniPOV转换为了声光机(SLM)。
本文档的目的是教会你关于SLM固件的足够知识以使你能够建立你自己的脑波序列。下一节(“SLM固件概述”)是你真正需要阅读的。但是如果你对学习更多的固件工作原理感兴趣,我也已经给出了大量的细节。
固件实际上是文件中的多行文本,用文本编辑器编写。文本的全部的行共同告诉微控制器该做什么。用固件对微控制器进行编程,很方便地使用称为“makefile”的特殊脚本文件(script file)。(对于该项目,makefile运行C编译器、汇编器、链接器、对象转换器和编程软件-但是你不需要真正懂这些知识,因为一切都由makefile为你做了。)
SLM固件概述
用于SLM的微控制器包括SLM的大部分硬件,主要用作定时装置以输出方波,该方波向每只眼睛前的LED和每只耳朵的扬声器提供脉冲。该SLM固件告诉微控制器如何产生这些方波序列,该方波序列使LED闪烁并且向扬声器提供具有脑波频率的脉冲。该方波序列模仿大脑进入期望的意识状态时的大脑频率序列。我所写的SLM固件产生从清醒状态开始、进入深度冥想、停留一会儿后、接着再次进入清醒状态的序列(感觉棒极了)。
SLM的脑波序列由SLM固件开始处称为“脑波表”的表确定。该脑波表包含某些“脑波元素”。每个脑波元素由“脑波类型”(β、α、θ或δ)和“脑波持续时间”(指在播放表中下一个脑波元素之前,播放该脑波类型的时间)。为了改变SLM的脑波序列,只需简单地在文本编辑器中改变脑波表,保存文件,运行makefile(如本文所述)。
在第8页的脑波表是我为冥想序列创建的固件中实际表的易读表达。在第12和13页示出了固件中的实际表,称为“brainwaveTab”。你可以发现它和第8页更为可读的表是如何相关的,其中‘b’表示β,‘a’表示α,‘t’表示θ,以及‘d’表示δ。最后一个元素必须用‘0’表示脑波类型(告诉固件已到表的结尾)。每个脑波播放的时间(持续时间)是以1/10毫秒为单位的-用期望的持续时间除以10,000得到brainwaveTab中的这些值。
注意:如果你容易痉挛或者认为自己容易痉挛的话,请不要使用SLM。也请注意,例如ADHD特定条件可能通过诱导至较低的脑波频率而恶化。如果有任何问题,请停止使用这个SLM。
上述是建立你自己的脑波序列真正需要知道的所有知识。
本文档其余部分给出了SLM固件工作原理的更深入说明。
关于微控制器的某些话
该项目中使用的微控制器是由Atmel制造的ATTINY2313。该微控制器是他们的AVR微控制器系列中的一部分。该芯片的数据表可以从Atmel的网站下载:http://www.atmel.com/dyn/resources/prod documents/doc2543.pdf
尽管许多不同的微控制器都能够很好地执行声光机所需的任务,但是Atmel AVR系列的芯片有很多优点。优点之一是不需要为这些芯片购买编程器,因为它有内置编程器——你所需要的就是一台带串口的计算机(或者USB连接器和便宜的USB-串口转换器)以及某些软件。另一优点是用于芯片编程所需的所有软件都是免费和开源的。可获得免费的C语言编译器,因此不需要学习AVR汇编语言[汇编语言是一种微控制器能够理解且写入所有固件内的低级语言。每个微控制器系列有其自己的固件语言。当你编译C程序时,编译器创建微控制器运行的汇编语言。但是,这不是太精确,事实上汇编语言是面向人(非常讨厌)的,而微控制器运行机器语言,机器语言是由汇编语言表示且存储在程序内存中的二进制数。有另外一款软件称为汇编程序,可将汇编语言转换为机器语言]。另一个真正奇妙的优点是它有被称为AVRfreaks.org,24/7的用户论坛,这里面有很多乐于回答你可能有的关于使用AVR系列微控制器的问题的人。刚接触AVR芯片时,当我碰到问题需要帮助时我就采用用户论坛来获得帮助。在晚上11点我发布了我的问题,到晚上11:30时就有人指点可以解决我的问题的信息。真是太好了!
用于设计硬件和创建固件的大部分软件针对运行Windows的PC。使用AVR芯片另一个很好的方面是所有需要的软件都可以在Windows、Mac OS和Linux下运行。
SLM固件产生的脑波频率
大脑产生跨越一段频谱的脑波。该频谱分为四个波段:β波、α波、θ波或δ波。[最近增加了第五个脑波波段:γ(Gamma)波,但是我们在该项目中坚持用最初的四个波段,因为他们更容易理解,而且只用这四个波段我们能够实现很多功能。]对于SLM,我为每种脑波类型选择了一种频率。见下面的表格:
  类型   波段   SLM中使用的频率   相关状态
  δ波   1/2Hz至4Hz   2.2Hz   深度无意识、直觉和内省
  θ波   4Hz至8Hz   6.0Hz   下意识、创造性、深度放松
  α波   8Hz至13Hz   11.1Hz   昏沉和恍惚、感受和被动
  β波   13Hz至30Hz   14.4Hz   有意识思考、外部集中
用微控制器产生方波
LED方波定时
向用于每只眼睛的LED提供脉冲的方波是由固件中的定时循环产生的。在定时循环中固件手动切换(toggle)微控制器的输出引脚。[“切换”表示:如果这个输出引脚是高电平,将它变成低电平;如果该引脚是低电平,将其设置为高电平。]每个LED连接到微控制器上的输出引脚。固件同时切换这些输出引脚,从而完全同时向连接到这些输出引脚的LED输出脉冲。
作为LED定时如何工作的实施例,假设我们希望用于眼睛的LED以14.4Hz的β波频率闪烁。这意味着在每只眼睛处的LED将每秒钟在高低电平间来回闪烁14.4次。这意味着该LED将每0.0347秒钟切换高低电平(34.7毫秒,或34.7ms)。这是计算公式:
LED闪烁高电平然后闪烁低电平的持续时间(一个循环,或者“周期”):
1/14.4Hz=0.0694秒=69.4ms
1/2周期的持续时间(这是高电平持续时间和低电平持续时间):
69.4ms/2=34.7ms
由于微控制器的数据表告诉我们微控制器执行每个指令所需的时间,因此我们可以写不做任何事而只实现这个时间长度延时的循环代码。接着,以β波频率切换LED,我们打开LED(通过设置微控制器的输出引脚为高),延时34.7ms,接着关闭LED(将输出引脚变成低电平),延时34.7ms,重复该过程。
扬声器方波定时
我们能够对音频实现同样的功能,但是定时将变得复杂,由于脑波音频应该是双耳节拍(如SLM论文中所说明的),而不是简单地产生具有脑波频率的脉冲。幸运的是,微控制器有某些内置功能,这些内置功能极大地简化了我们在扬声器中创建双耳节拍频率的任务。
在SLM项目中使用的微控制器有两个内置的硬件定时器。SLM固件通过使用这两个定时器来产生双耳节拍。将称为定时器0(或者T0)的一个定时器设置为产生馈入到一个耳朵的扬声器中的大约400Hz的基频。将称为定时器1(或者T1)的另一个定时器设置为产生馈入到另一个耳朵的扬声器中的偏移频率。当一只耳朵的偏移频率和另外一只耳朵的400Hz一起被听到时,听众听到具有期望的脑波频率的节拍频率。为了获得14.4Hz的节拍频率,T1被构造为输出约414.4Hz。
一旦固件启动T0和T1,在没有固件干涉的情况下,它们将产生其自身的方波,直到固件告诉定时器停止为止。
微控制器的硬件定时器(详细资料)
这里介绍了固件是如何设置微控制器的两个硬件定时器以输出双耳节拍的详细内容。
微控制器中的两个定时器根据微控制器数据表里的说明,设置为不同模式。为了产生馈入耳机的声音的方波,固件将定时器设置为这样一种模式,即每当定时器超时时,切换每个定时器的输出引脚(下面详细解释)。该数据表称这为CTC模式(他们所说的模式表示比较匹配的清零定时器)。在该模式下,存在存储定时值的比较寄存器。定时器从0开始增加计数,每个时钟计一次数(下面给出了更多关于时钟的内容)。当该定时器达到比较寄存器中的值时(这称为“超时”,定时器的输出引脚自动切换,定时器开始再次从0开始计数)。时钟频率由微控制器的时钟和预分频器(Prescaler)确定。在该项目中,我们采用位于微控制器内部且被设置为在8.0MHz下运行的时钟振荡器。该频率由预分频器以2的幂、即1,2,4,8,...,256进行分频。用于确定该模式(数据表中给出)下定时器输出引脚的输出方波频率Fo的公式是:
Fo=Fclk/(2*P*(1+C))
其中,
Fclk=8,000,000Hz
P=预分频值
C=比较寄存器值
Fo=输出方波频率
每个定时器(T0和T1)可以独立设置。每个定时器都有其自身的输出引脚。
作为实施例,我们来看如何使用两个定时器来产生β波双耳节拍。为了产生约400Hz的基频,使用T0,其中T0预分频=256,T0比较寄存器=38,得到Fo=400.641Hz(这是我们可以得到的最接近400Hz的值)。双耳节拍的偏移频率在T1中产生,其中T1预分频=1,T1比较寄存器=产生脑波类型的适当值。为了得到约14.4Hz的双耳节拍频率(β波频率),我们需要设置T1以输出比T0的频率高14.4Hz的频率,该频率为415.041Hz。通过使用上面的公式来得到尽可能接近415.041Hz的频率,我们将T1比较寄存器设置为9637,得到415.024Hz的输出频率。感知到的节拍频率为:
415.024Hz-400.641Hz=14.383Hz
这个频率非常接近14.4Hz。
给定400.641Hz的基频(在T0产生),下面的表格给出了T1比较寄存器的值,该值用于为四种脑波类型中每一种创建我们所能得到的尽可能接近的偏移频率(“OCR1A”是数据表对T1比较寄存器的缩写)。见下面的表格:
Figure G2008800216579D00141
一起定时LED和扬声器
为了播放给定脑波类型一段特定持续时间,固件启动具有400.64Hz基频(进入一个扬声器)的T0,接着启动具有用于给定脑波类型的偏移频率(进入另一扬声器)的T1,这时用户听到了给定脑波类型的双耳节拍。固件保持T0和T1运行给定的持续时间(持续时间的定时是由下一段描述的延时循环实现)。这里只关心声音,闪光是怎么回事呢?
回顾早期,我们会使用延迟循环来产生使LED闪烁的方波。我们可以使用同样的延时循环来等待用于给定脑波元素的特定持续时间。很酷,是吗?当硬件定时器播放双耳节拍时,我们只是用定时循环使LED闪烁给定的持续时间。然后我们实现了产生用于给定的脑波类型的双耳节拍、以及具有相同脑波类型的闪光,该双耳节拍和闪光播放给定的持续时间。
用实施例来清楚地说明这一点。如果我们想要播放60秒的β波频率,固件运行如下:
启动T0以将一个耳朵切换到400.64Hz的基频
启动T1以将另一个耳朵切换到415.024Hz的偏移频率
通过延迟循环,以14.4Hz手动切换每个眼睛处的LED
保持手动切换LED,直到延迟循环的所有延迟加起来达到60秒为止(在后面会描述如何实现该功能)
在60s的持续时间结束后,固件停止手动切换LED以关闭光,然后关闭T0和T1以停止扬声器的声音。或者,固件可以开始在LED和扬声器处播放另一个持续时间的不同脑波频率。
SLW固件产生脑波序列
在脑波表中的脑波元素序列决定了SLM所产生的脑波序列。
通过播放脑波表的第一个脑波元素,启动固件。如上所述,这通过如下实现:通过(在脑波元素中给出)启动具有基频的T0,启动具有用于脑波类型的偏移频率的T1,允许定时器继续工作持续时间(在脑波元素里给出),同时以用于给定脑波类型的速率闪烁LED。接着(保留T0继续播放基频)它从脑波表中获取下一个脑波元素,设置T1用于新指定的脑波类型,并播放它,同时以新的脑波类型的频率使LED闪烁,并且播放新指定的持续时间。然后(保留T0继续播放基频)它从脑波表中获取下一个脑波元素等。
该过程一直持续到在脑波表里没有脑波元素为止。接着固件关闭T0和T1,停止手动切换连接到LED的输出,并将微控制器的模式切换成低功率(low-power)模式。
(第8页显示了我为冥想序列建立的脑波表的易读表达方式)
我们可以更加简明地进行以上内容的描述:
初始化硬件和变量
启动具有进入扬声器#1的基频的定时器0
从brainwaveTab中获取下一个脑波元素(包括类型和持续时间)
启动具有进入扬声器2#的、用于脑波类型的双耳节拍偏移频率的定时器1
以该脑波类型的脑波频率使LED闪烁
等待指定的持续时间
直到到达brainwaveTab的结尾
停止定时器0和定时器1以停止两个扬声器的声音
关闭LED
将微控制器设置为休眠状态(低功率模式)
让我们更令人讨厌点,以我们的特定微控制器喜欢看事物(根据数据表)的方式陈述事情。首先,如何设置硬件:
用于每只眼的1个LED:
LED#1:PB0(引脚12)
LED#2:PB1(引脚13)
用于每个耳朵的1扬声器:
扬声器#1:0C0A/PB2(引脚14)
扬声器#2:0C1A/PB3(引脚15)
下面是固件的算法:
主程序:
初始化
设置端口B用于输出(DDRB=0xFF)
设置定时器0用于CTC模式和用于切换OC0A(定时器0的输出引脚)
启动定时器0上的基频方波=400.641Hz
(预分频=256,OCR0A=38)输出声音到OC0A(连接到扬声器#1),设置定时器1用于CTC模式和用于切换OC1A(定时器1的输出引脚)
(预分频=1,OCR1A还没有设置)
主循环:
获取下一个brainwaveElement(由brainwaveType和brainwaveDuration构成)
如果brainwaveType=0,则退出主循环(当brainwaveType=0时结束)
否则,执行如下操作:
启动T1方波=用于该脑波类型的双耳节拍偏移频率
(0CR1A=用于brainwaveType的偏移频率),以输出声音到OC1A(连接到扬声器#2)
循环,以用于brainwaveType的正确定时使PB0和PB1处的LED闪烁
保持brainwaveDuration的循环
主循环结束
停止定时器0和定时器1来停止扬声器的声音
关闭两个LED
将处理器设为休眠状态(低功率模式)
实际的固件从第11页开始给出。在第9页开始给出了更详细的描述。
如何为SLM指定脑波序列
  注意:任何易于痉挛的人都应该避免闪光。如果你容易痉挛,在该项目中,请断开LED(你的大脑将仅由双耳节拍音频诱导)。如ADHD的特定条件可能进一步恶化。
由于在这个SLM项目中每次只能产生一种脑波频率,我们需要建立这样一种脑波序列,即通过在两种脑波频率间来回切换的方法来尝试保持你的大脑活跃在不同脑波频率。例如,如果我们想要从完全清醒的状态到有些幻觉,我们要产生片刻的β波,然后产生片刻的α波,接着在β波和α波之间来回切换,但是在每次循环中减少β波的长度增加α波的长度。
当创建你自己的脑波序列时需要记住的另一件事情是,从满足你的用户他们所处的状态开始,接着带他们去他们想要达到的境界。例如,如果你想创建使人入睡的序列,则从清醒和有意识(β波)状态开始,然后,开始增加某些昏沉(α波)状态。
我创建的冥想脑波序列使用了上述技术。下面给出了该脑波表。
脑波表
(冥想序列)
  元素号   脑波类型   脑波持续时间(秒)
  1   β波   60
  2   α波   10
  3   β波   20
  4   α波   15
  5   β波   15
  6   α波   20
  7   β波   10
  8   α波   30
  9   β波   5
  10   α波   60
  11   θ波   10
  12   α波   30
  13   θ波   20
  14   α波   30
  15   θ波   30
  16   α波   15
  17   θ波   60
  18   α波   15
  19   β波   1
  20   α波   15
  21   θ波   60
  22   δ波   1
  元素号   脑波类型   脑波持续时间(秒)
  23   θ波   10
  24   δ波   1
  25   θ波   10
  26   δ波   1
  27   θ波   30
  28   α波   15
  29   β波   1
  30   α波   15
  31   θ波   30
  32   α波   15
  33   β波   1
  34   α波   20
  35   β波   5
  36   α波   20
  37   β波   15
  38   α波   15
  39   β波   20
  40   α波   10
  41   β波   25
  42   α波   5
  43   β波   60
  44   结束   总持续时间=856秒(约141/4分钟)
实际SLM固件描述
我将从脑波表开始进行说明(有点接近固件的顶部)。脑波表在固件中被称为″brainwaveTab″。该brainwaveTab包含几行,每行是一个″brainwaveElement″。每个brainwaveElement包括bwType(′b′表示β,′a′表示α,′t′表示θ,′d′表示δ)和bwDuration(它表示一段不固定的时间——为了得到秒,用该数除以10,000)。最后一个brainwaveElement的bwType必须是‘0’,表示brainwaveTab的结尾。
现在让我们来看一下固件的底部的“main”函数。这个main函数通过初始化微控制器的硬件寄存器开始:没有中断[中断是当事件发生时硬件调用函数的一种方式——我们不能在SLM固件中使用中断],将所有的引脚设置为输出,并确保所有的这些输出引脚是低电平。接着启动T0以通过CTC模式输出基频,切换输出引脚OC0A(连接至扬声器#1)。然后设置T1以输出偏移频率(但是这里我们不启动T1——我们在do_brainwave_element函数中启动T1,如下面的段落里描述的那样)。接下来是获取brainwaveTab中的每一个brainwaveElement的循环,将每个brainwaveElement送到do_brainwave_element函数中完成任务。如果找到一个bwType为‘0’的brainwaveElement,则该循环结束。一旦我们已经遍历了整个brainwaveTab,则固件停止T0和T1(以停止声音),启动休眠模式(使微控制器进入低功率模式),等待1秒钟(以使事情确定——这比必须的时间长,但是这不会有任何损失),断开所有输出引脚,将所有引脚设置为输入(因为这样使用较少的电池功率),然后使微控制器进入休眠状态。
好的,现在重新回到固件的顶部。开始的“include”声明让C编译器知道去哪里寻找预写入(pre-written)且与编译器一起提供的代码(这指众所周知的库函数)。
随后的″define″声明定义微控制器的硬件定时器用到的某些常量。
接下来是前面所述的脑波表。
接下来的是延迟循环函数″delay_one_tenth_ms″。它的功能就是完成指定次数的循环,除了延迟正确量的时间以外不执行任何有用的任务。它延迟给定的0.1ms(1/10毫秒)。因此,例如为了延迟60秒,该程序的输入应该是600000。关于该程序有一点奇特的是必须告诉它干什么;否则C编译器将把它看成没有实际执行任何有用任务的程序,这段代码将会被″优化″掉(这是因为我们使用的C编译器是“优化编译器”)。在延时循环中我告诉微控制器切换端口D(这是我们不用的)的输出引脚,这使得该编译器不会将该循环优化为不存在。该函数采用称为″DelayCount″的常量。我通过试验将这个值选择为DelayCount=87,使得该函数延迟非常接近1/10ms的增量。
下一个函数称为″blink_LEDs″。它有三个输入,它的功能如其名字所示。它以给定的定时执行并且执行给定的持续时间(所有都以1/10ms为单位)。这个函数可以产生具有指定的高电平时间(称为“onTime”)和不同的低电平时间(称为“offTime”)的方波,而不是产生具有相等的高电平时间和低电平时间的方波。该函数打开LED,等待onTime(通过调用delay_one_tenth_ms),关闭LED,等待offTime(通过调用delay_one_tenth_ms)。它在一个循环中完成这些动作直到达到指定的持续时间。通过将指定的持续时间除以(onTime+offTime)来计算执行这个循环的次数。让我们用一个实施例来说明这是怎么工作的:如果我们想要LED以14.4Hz的β波频率闪烁60秒,则持续时间=600,000,onTime=347和offTime=347。每次运行这个循环需要花费34.7ms+34.7ms=0.0694秒,因此我们可以运行这个循环600,000/(347+347)=864次(去尾数取整)。总的时间是864×0.0694秒=59.96秒,这个时间已经非常接近给定的60秒的持续时间了。
下一个函数是“do_brainwave_element”。它有一个输入,这个输入指出了执行哪个brainwaveElement。(记住在C语言中,表中的第一个元素是0,而不是1)。该函数从brainwaveTab表中获取指定的brainwaveElement,得到brainwaveElement的bwType和bwDuration。该函数包括四种脑波类型中每一种的一段(section)。每段都非常类似。例如,我们来看一下用于α波的段(bwType=′a′)。它将T1的输出比较寄存器(称为“OCR1A”)设置为9714,启动具有411.734Hz偏移频率的T1来为用户产生频率为11.1Hz(α波)的双耳节拍。接着以正确的onTime和offTime时间以及总持续时间调用blink_LEDs函数来使LED以α波频率闪烁给定时间长度。这是LED闪烁速度的计算公式:
onTime=451(0.0451秒)
offTime=450(0.0450秒)
因此LED以这个速度在开和关上闪烁:
1/(0.0451+0.0450)秒=11.1Hz(α波)
这是用于每个脑波类型的值的表:
Figure G2008800216579D00211
从上面的表可以看出对于每个脑波类型,do_brainwave_element能够使LED以非常接近双耳节拍频率的速度闪烁。
最后的函数是一个主函数,这在之前也已说明。
这就是所有的程序。除了有个问题。当我创建固件时,为了使它更容易调试,我使用了只有5个brainwaveElements的brainwaveTab小表。最终我用该小brainwaveTab使固件工作良好。但是当我创建完整的brainwaveTab表时,固件不能运行。为什么?!在试图找出为什么该固件不能处理完整的brainwaveTab之后,我最终形成了一个问题,并在之前提到的AVR的用户论坛上发帖寻求解答。我在30分钟后得到了答案。事实证明,当固件启动时,C编译器命令微控制器将整个brainwaveTab结构转移到RAM。但是这不可能工作,因为微控制器的RAM只有128个字节——而brainwaveTab远远大于128个字节。解决方法是使用某些库函数(pgm_read_byte和pgm_read_word)以及C编译器自带的宏指令(PROGMEM),有了这些替换,固件将不会把brainwaveTab转移到RAM中,而是将它留在程序ROM中——这时该固件工作得很好!(这在实际的固件中有记述,见12页)。
后面的几页显示了完整的固件。你可以从下载该文档的makezine.com网站下载在其自身的文件中的该固件(带有makefile),称为“slrnFirmware.zip”。
mypov.c-用于MiniPOV3工具包的固件
#include<avr/io.h>       //this contains all the IO port definitions
#include<avr/interrupt.h>
#include<avr/signal.h>
#define TIMER1_PRESCALE_1 1
#define TIMER1_PRESCALE_8 2
#define TIMER1_PRESCALE_64 3
#define TIMER1_PRESCALE_256 4
#define TIMER1_PRESCALE_1024 5
/*turn a numeric literal into a hex constant
   (avoids problems with leading zeroes)
   8-bit constants max value 0x11111111,always fits in unsigned long
*/
#define HEX__(n)  0x##n##LU
/*8-bit conversion function*/
#define B8__(x)  ((x&0x0000000FLU)?1:0)\
                +((x&0x000000F0LU)?2:0)\
                +((x&0x00000F00LU)?4:0)\
                +((x&0x0000F000LU)?8:0)\
                +((x&0x000F0000LU)?16:0)\
                +((x&0x00F00000LU)?32:0)\
                +((x&0x0F000000LU)?64:0)\
                +((x&0xF0000000LU)?128:0)
#define B8(d)  ((unsigned char)B8__(HEX__(d)))
const static int image[]={
  B8(10000000),
  B8(01000000),
  B8(00100000),
  B8(00010000),
  B8(00100000),
  B8(01000000)
};
#define NUM_ELEM(x)(sizeof (x)/sizeof (*(x)))
int imagesize=NUM_ELEM(image);
//This function basically wastes time,in case you want to
//do some other timing stuff
void delay_ms(long int ms){
  unsigned long int timer;
  while(ms !=0){
    //this number is dependant on the clock frequency
    for(timer=0;timer<=4200;timer++);
    ms--;
  }
}
  //this function is called when timer1 compare matches OCR1A
  uint8_t j=0;
  SIGNAL(SIG_TIMER1_COMPA){
    if(j>=imagesize)
      j=0;
    PORTB=image[j];
    j++;
  }
  int main(void){
    DDRB=0xFF;      //set all 8 pins on port B to outputs
    /*
      the frequency of the interrupt overflow is determined by the
      prescaler and overflow value.
      freq=clock_frequency/(2*prescaler*overflow_val)
      where prescaler can be 1,8,64,256,or 1024
      clock_freq is  8MHz
      and overflow_val is 16bit
      the overflow value is placed in OCR1A,the prescale is set in
  TCCR1B
      so for exampLe:
      A good POV frequency is around 400Hz
      desired freq=400Hz
      clock freq=8MHz
      8MHz/(400Hz *2)=10000
      since 10000 is less than 655536(largest 16 bit humber)
      OCR1A=10000 and the prescale is 1
  */
  TCCR1B=(1<<WGM12)|TIMER1_PRESCALE_1;
  OCR1A=(uintl6_t)10000;
  TIMSK|=1<<OCIE1A;  //Output Compare Interrupt Enable(timer 1,
OCR1A)
  sei();                 //Set Enable Interrupts
  while (1);
}
/*
Sound & Light Machine
Firmware
for use with Attiny2313
Make Magazine issue #10
Mitch Altman
19-Mar-07
*/
#include<avr/io.h>           //this contains all the IO port definitions
#include<avr/interrupt.h>    //definitions for interrupts
#include<avr/sleep.h>        //definitions for power-down modes
#include<avr/pgmspace.h>     //definitions or keeping constants in program memory
#define TIMER0_PRESCALE_1 1
#define TIMER0_PRESCALE_8 2
#define TIMER0_PRESCALE_64 3
#define TIMER0_PRESCALE_256 4
#define TIMER0_PRESCALE_1024 5
#define TIMER1_PRESCALE_1 1
#define TIMER1_PRESCALE_8 2
#define TIMER1_PRESCALE_64 3
#define TIMER1_PRESCALE_256 4
#define TIMER1_PRESCALE_1024 5
/*
The hardware for this project is very simple:
     Attiny2313 has 20 pins:
       pin 1   connects to serial port programming circuitry
       pin 10  ground
       pin 12  PB0-Left eye LED1
       pin 13  PB1-Right eye LED1
       pin 14  OC0A-Left ear speaker (base-frequency)
       pin 15  OC1A-Right ear speaker (Offset Frequencies for binaural beats)
       pin 17  connects to serial port programming circuitry
       pin 18  connects to serial port programming circuitry
       pin 19  connects to serial port programming circuitry
       pin 20  +3v
    All other pins are unused
    This firmware requires that the clock frequency of the Attiny
      is the default that it is shipped with:8.0MHz
*/
/*
The C compiler creates code that will transfer all constants into RAM when the microcontroller
resets.Since this firmware has a table (brainwaveTab)that is too large to transfer into RAM,
the C compiler needs to be told to keep it in program memory space.This is accomplished by
the macro PROGMEM (this is used,below,in the definition for the brainwaveTab).Since the
C compiler assumes that constants are in RAM,rather than in program emory,when accessing
the brainwaveTab,we need to use the pgm_read_byte()and pgm_read_dword()macros,and we need
to use the brainwveTab as an address ,i.e.,precede it with″&″.For example,to access
brainwaveTab[3].bwType,which is a byte,this is how to do it:
     pgm_read_byte(&brainwaveTab[3].bwType);
And to access brainwaveTab[3].bwDuration,which is a double-word,this is how to do it:
     pgm_read_dword(&brainwaveTab[3].bwDuration);
*/
// table of values for meditation
//   start with lots of Beta (awake/conscious)
//   add Alpha (dreamy/trancy to connect with subconscious Theta that′ll be coming up)
//   reduce Beta (less conscious)
//   start adding Theta (more subconscious)
//   pulse in some Delta (creativity)
//   and then reverse the above to come up refreshed
struct brainwaveElement (
  char bwType;//′a′for Alpha,′b′for Beta,′t′for Theta,or  ′d′for Delta (′0′signifies last
entry in table
  unsigned long int bwDuration;//Duration of this Brainwave Type (divide by 10,000 to get seconds)
} const brainwaveTab{}PROGMEM={
  {′b′,600000},
   {′a′,100000},
   {′b′,200000},
   {′a′,150000},
   {′b′,150000},
   {′a′,200000},
   {′b′,100000},
   {′a′,300000},
   {′b′,50000},
   {′a′,600000},
   {′t′,100000},
   {′a′,300000},
   {′t′,200000},
   {′a′,300000},
   {′t′,300000},
   {′a′,150000},
   {′t′,600000},
   {′a′,150000},
   {′b ′,10000},
   {′a′,150000},
   {′t′,600000},
   {′d′,10000},
   {′t′,100000},
   {′d′,10000},
   {′t′,100000},
   {′d′,10000},
   {′t′,300000},
   {′a′,150000},
   {′b′,10000},
   {′a′,150000},
   {′t′,300000},
   {′a′,150000},
   {′b′,10000},
   {′a′,200000},
   {′b′,50000},
   {′a′,200000},
   {′b′,150000},
   {′a′,150000},
   {′b′,200000},
   {′a′,100000},
   {′b′,250000},
   {′a′,50000},
   {′b′,600000},
   {′0′,0}
};
// This function delays the specified number of 1/10 milliseconds
void delay_one_tenth_ms(unsigned long int ms){
  unsigned long int timer;
  const unsigned long int DelayCount=07,//this value was determined by trial and error
  while (ms !=0){
    //Toggling PD0 is done here to force the compiler to do this loop,rather than optimize it away
    for (timer=0;timer<=DelayCount;timer++){PIND }=0b0000001;);
    ms--;
  }
}
//This function blinks the LEDs(connected to PB0,PB1-for Left eye,Right eye,respectively)
//  at the rate determined by onTime and offTime
//  and keeps them blinking for the Duration specified(Duration given in 1/10 millisecs)
//This function also acts as a delay for the Duration specified
void blink_LEDs (unsigned long int duration,unsigned long int onTime,unsigned long int offTime){
  for (int i=0;i<(duration/(onTime+offTime));i++){
    PORTB |=0b00000011;           // turn on LEDs at PB0,PB1
    delay_one_tenth_ms(onTime);    //   for onTime
    PORTB &=0b11111100;           // turn off LEDs at PB0,PB1
    delay_one_tenth_ms(offTime);   //   for offTime
  }
}
this function starts the Offset Frequency audio in the Right ear through output OC1A (using Tiner 1)
  to create a binaural beat (between Left and Right ears)for a Brairwave Element
  (the base-frequency of 400.641Hz is already assumed to be playing in the Left ear before calling this function)
  and blinks the LEDs at the same frequency for the Brainwave Element
  and keeps it going for the Duration specified for the Brainwave Element
the timing for the Right ear is done with 16-bit Timer 1(set up for CTC Mode,toggling output on each compare)
  Output frequency=Fclk/(2*Prescale*(1+OCR1A))=8,000,000/(2*(1+OCR1A))
i do_brainwave_element(int index ){
 char brainChr=pgm_read_byte(&brainwaveTab[index].bwType);
 if (brainChr==′b′){
     // PORTB&=0b00001100;  //(for debugging purposes only-commented out for SLM)
     // PORTB|=0b10000000;
  // Beta
  // start Timer 1 with the correct Offset Frequency for a binaural beat for the Brainwave Type
  // to Right ear speaker through output OC1A (PB3,pin 15)
  OCR1A=9637;//T1 generates 415.024Hz,for a binaural beat of 14.4Hz
  // delay for the time specified in the table while blinking the LEDs at the correct rate
  //   onTime=34.7ms,offTime=34.7ms→14.4Hz
  blink_LEDs(pgm_read_dword(&brainwaveTab[index].bwDuration),347,347);
  return;  //Beta
}
else if (brainChr==′a′){
     // PORTB &=0b00001100; // (for debugging purposes only-commented out for SLM)
     // PORTB |=0b01000000;
  // Alpha
  // start Timer 1 with the correct Offset Frequency for a binaural beat for the Brainwave Type
  //   to Right ear speaker through output OC1A (PB3,pin 15)
  OCR1A=9714;  // T1 generates 411.734Hz,for a binaural beat of 11.1Hz
  // delay for the time specified in the table while blinking the LEDs at the correct rate
  //   onTime=45.1ms,offTime =45.0ms→11.1Hz
  blink_LEDs(pgm_read_dword(&brainwaveTab[index].bwDuration),451,450);
  return;  //Alpha
}
else if (brainChr==′t′){
     // PORTB &=0b00001100; //(for debugging purposes only-commented out for SLM)
     // PORTB |=0b00100000;
  // Theta
  // start Timer 1 with the correct Offset Frequency for a binaural beat for the Brainwave Type
  //   to Right ear speaker through output OC1A (PB3,pin 15)
  OCR1A=9836;  // T1 generates 406.628Hz,for a binaural beat of 6.0Hz
  // delay for the time specified in the table while blinking the LEDs at the correct rate
  //   onTime=83.5ms,offTime=83.5ms→6.0Hz
  blink_LEDs(pgm_read_dword(&brainwaveTab[index].bwDuration),B35,835);
  return;  //Theta
}
else if (brainChr==′d′){
     // PORTB &=0b00001100; //(for debugging purposes only-commented out for SLM)
     // PORTB |=0b00010000;
  // Delta
  // start Timer 1 with the correct Offset Frequency for a binaural beat for the Brainwave Type
  // to Right ear speaker through output OC1A (PB3,pin 15)
  OCR1A=9928;// T1 generates 402.860Hz,for a binaural beat of 2.2Hz
  // delay for the time specified in the table while blinking the LEDs at the correct rate
  //   onTime=225.3ms,offTime=225.3ms→2.2Hz
  blink_LEDs(pgm_read_dword(&brainwaveTab[index].bwOuration),2253,2253);
  return;  //Delta
}
// this should never be executed,since we catch the end of table in the main loop
else {
     // PORTB &=0b00001100;//(for debugging purposes only-commented out for SLM)
     // PORTB |=0b00000010;
  return;     //end of table
}
  nt main(void){
   TIMSK=0x00;  //no Timer interrupts enabled
   DDRB=0xFF;   //set all PortB pins as outputs
   PORTB=0x00;  //all PORTB output pins Off
   //start up Base frequency=400.641Hz on Left ear speaker through output OC0A(using Timer 0)
   //  8-bit Timer 0 OC0A(PB2,pin 14)is set up for CTC mode,toggling output on each compare
   //  Fclk=Clock =8MHz
   //  Prescale=256
   //  OCR0A=38
   //  F=Fclk/(2*Prescale*(1+OCR0A))=400.641Hz
   TCCR0A=0b01000010; // COM0A1:0=01 to toggle OC0A on Compare Match
                        // COM0B1:0=00 to disconnect OC0B
                        // bits 3:2 are unused
                        // WGM01:00=10 for CTC Mode(WGM02=0 in TCCR0B)
  TCCR0B=0b00000100;  // FOC0A=0(no force compare)
                        // F0C0B=0(no force compare)
                        // bits 5:4 are unused
                        // WGM2=0 for CTC Mode(WGM01:00=10 in TCCR0A)
                        // CS02:00=100 for divide by 256 prescaler
  OCR0A=38; // to output 400.641Hz on OC0A(PB2,pin 14)
  //set up T1 to accept Offset Frequencies on Right ear speaker through OC1A(but don′t actually start
the Timer 1 here)
  //   16-bit Timer 1 OC1A(PB3,pin 15)is set up for CTC mode,toggling output on each compare
  //   Fclk=Clock=8MHz
  //   Prescale=1
  //   OCR0A=value for Beta,Alpha,Theta,or Delta(i.e.,9520,9714,9836,or 9928)
  //   F=Fclk/(2*Prescale*(1+OCR0A))
  TCCR1A=0b01000000;// COM1A1:0=01 to toggle OC1A on Compare Match
                        // COM1B1:0=00 to disconnect OC1B
                        // bits 3:2 are unused
                        // WGM11:10=00 for CTC Mode(WGM13:12=01 in TCCR1B)
  TCCR1B=0b00001001;  // ICNC1=0(no Noise Canceller)
                        // ICES1=0(don′t care about Input Capture Edge)
                        // bit 5 is unused
                        // WGM13:12=01 for CTC Mode(WGM11:10=00 in TCCR1A)
                        // CS12:10=001 for divide by 1 prescaler
  TCCR1C=0b00000000;  // FOC1A=0(no Force Output Compare for Channel A)
                        // FOC1B=0(no Force Output Compare for Channel B)
                        //bits 5:0 are unused
  // loop through entire Brainwave Table of Brainwave Elements
  //   each Brainwave Element consists of a Brainwave Type(Beta,Alpha,Theta,or Delta)and a Duration
  // Seeing the LEDs blink and hearing the binaural beats for the sequence of Brainwave Elements
  //   synchs up the user′s brain to follow the sequence(hopefully it is a useful sequence)
  int j=0;
  while{pgm_read_byte(&brainwaveTab[j].bwType)!=′0′)(//′0′signifies end of table
    do_brainwave_element(j );
    j++;
  }
  // Shut down everything and put the CPU to sleep
  TCCR0B &=0b11111000;//CS02:CS00=000 to stop Timer0(turn off audio in Right ear speaker)
  TCCR1B &=0b11111000;//CS12:CS10=000 to stop Timer1(turn off audio in Left ear speaker)
  MCUCR |=0b00100000; //SE=1(bit 5)
  MCUCR |=0b00010000; //SM1:0=01 to enable Power Down Sleep Mode(bits 6,4)
  delay_one_tenth_ms(10000);  //wait 1 second
  PORTB=0x00;         //turn off all PORTB outputs
  DDRB=0x00;          //make PORTB all inputs
  sleep_cpu();         //put CPU into Power Down Sleep Mode
}
在知识共享2.5-署名&相同方式共享下发布
用于SLM固件的Makefile清单
MCU=attiny2313
F_CPU=8000000        # 8 MHz
AVRDUDE_PROGRAMMER=dasa
AVRDUDE_PORT=com1    # programmer connected to serial port
# Default target.
all:   begin gccversion\
       minipov.hex all_leds.hex alt_leds.hex mypov.hex test_leds.hex\
       largeimage.hex\
       finished end
# Program the device w/various programs
program-minipov:minipov.hex
program-all_leds:all_leds.hex
program-test_leds:test_leds.hex
program-alt_leds:alt_leds.hex
program-mypov:mypov.hex
program-test_sensor:test_sensor.hex
program-largeimage:largeimage.hex
program-makefair:makefair.hex
program-slm:slm.hex
# this is necessary if you′re burning the AVR for the first time...
# sets the proper fuse for 8MHz internal oscillator with no clk div
burn-fuse:
       $(AVRDUDE) $(AVRDUDE_FLAGS)-u-U lfuse:w:0xe4:m
# this programs the dependant hex file using our default avrdude flags
program-%:
       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)$<
FORMAT=ihex         # create a.hex file
OPT=s               # assembly-level optimization
# Optional compiler flags.
#  -g:        generate debugging information (for GDB,or for COFF conversion)
#  -O*:      optimization level
#  -f...:     tuning,see gcc manual and avr-libc documentation
#  -Wall...:  warning level
#  -Wa,...:  tell GCC to pass this to the assembler.
#    -ahlms:  create assembler listing
CFLAGS=-g-O$(OPT)\
-funsigned-char-funsigned-bitfields-fpack-struct-fshort-enums \
-Wall  -Wstrict-prototypes  \
-DF_CPU=$(F_CPU) \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst%,-I%,$(EXTRAINCDIRS)) \
-mmcu=$(MCU)
# Set  a  ″language standard″compiler flag.
CFLAGS +=-std=gnu99
# Optional assembler flags.
#  -Wa,...:    tell GCC to pass this to the assembler.
#  -ahlms:      create listing
#  -gstabs:     have the assembler create line number information;note that
#               for use in COFF files,additional information about filenames
#               and function names needs to be present in the assembler source
#               files --see avr-libc docs [FIXME:not yet described there]
ASFLAGS=-Wa,-adhlns=$(<:.S=.lst),-gstabs
# Optional linker flags.
#  -W1,...:    tell GCC to pass this to linker.
#  -Map:        create map file
#  --cref:      add cross reference to map file
LDFLAGS=-W1,-Map=$(TARGET).map,--cref
# ---------------------------------------------------------------------------
# Programming support using avrdude.
AVRDUDE=avrdude
# Programming support using avrdude.Settings and variables.
AVRDUDE_WRITE_FLASH=-U flash:w:
AVRDUDE_FLAGS=-p $(MCU)-P $(AVRDUDE_PORT)-c $(AVRDUDE_PROGRAMMER)
# ---------------------------------------------------------------------------
# Define directories,if needed.
DIRAVR=c:/progra-I/winavr
DIRAVRBIN=$(DIRAVR)/bin
DIRAVRUTILS=$(DIRAVR)/utils/bin
DIRINC=.
DIRLIB=$(DIRAVR)/avr/lib
# Define programs and commands.
SHELL=sh
CC=avr-gcc
OBJCOPY=avr-objcopy
OBJDUMP=avr-objdump
SIZE=avr-size
REMOVE=rm-f
COPY=cp
# Define Messages
# English
MSG_ERRORS_NONE=Errors:none
MSG_BEGIN=--------begin--------
MSG_END=-------- end  --------
MSG_SIZE_BEFORE=Size before:
MSG_SIZE_AFTER=Size after:
MSG_FLASH=Creating load file for Flash:
MSG_EXTENDED_LISTING=Creating Extended Listing:
MSG_SYMBOL_TABLE=Creating Symbol Tab1e:
MSG_LINKING=Linking:
MSG_COMPILING=Compiling:
MSG_ASSEMBLING=Assembling:
MSG_CLEANING=Cleaning project:
# Define all object files.
OBJ=$(SRC:.c=.o)$(ASRC:.S=.o)
# Define all listing files.
LST=$(ASRC:.S=.lst)$(SRC:.c=.lst)
# Combine all necessary flags and optional flags.
# Add target processorto flags.
ALL_CFLAGS=-I.$(CFLAGS)
ALL_ASFLAGS=-mmcu=$(MCU)-I.-x assembler-with-cpp$(ASFLAGS)
# Eye candy.
# AVR Studio 3.x does not check make′s exit code but relies on
# the following magic strings to be generated by the compila job.
begin:
        @echo
        @echo $(MSG_BEGIN)
finished:
        @echo $(MSG_ERRORS_NONE)
end:
        @echo $(MSG_END)
        @echo
# Display compiler version information.
gccversion:
        @$(CC)--version
# Create final output files (.hex)from ELF output file.
%.hex:%.elf
       @echo
       @echo$(MSG_FLASH)$@
       $(OBJCOPY)-O$(FORMAT)-R.eepcom $<$@
# Link:create ELF output file from object files.
.SECONDARY:$(TARGET).elf
.PRECIOUS:$(OBJ)
%.elf:%.o
       @echo
       @echo$(MSG_LINKING)$@
       $(CC)$(ALL_CFLAGS)$<--output $@ $(LDFLAGS)
# Compile:create object files from C source files.
%.o:%.c
       @echo
       @echo $(MSG_COMPILING)$<
       $(CC)-c $(ALL_CFLAGS)$<-o $@
# Compile:create assembler files from C source files.
%.s  :%.c
       $(CC)-S$(ALL_CFLAGS)$<-o$@
# Assemble:create object files from assembler source files.
%.o : %.S
       @echo
       @echo $(MSG_ASSEMBLING)$<
       $(CC)-c $(ALL_ASFLAGS)$<-o$@
# Target:clean project.
clean:begin clean_list finished end
clean_list:
       @echo
       @echo$(MSG_CLEANING)
       $(REMOVE)*.hex
       $(REMOVE)*.lst
       $(REMOVE)*.obj
       $(REMOVE)*.c
       $(REMOVE)*.elf
       $(REMOVE)*.o
# Listing of phony targets.
.PHONY:all begin finish end\
                                clean clean_list program
脑机器II
更为复杂的声光机具有很多改进以加强放松和娱乐。它逐渐减弱和增强声音和光,处理多个同时发生的频率,为不同脑波类型匹配不同颜色的LED和双耳基频,用音乐或者其它声音掩盖双耳节拍。物理上,它装配在柔软的织物睡眠罩并使用轻型、挠性、可充电的电池。还有其它改进。
″引导眼镜(GuideGlasses)″是脑机器II电子脑波装置的一个实施方式例的内部名称。该固件是用Zilog Z8汇编语言编写的。该固件的源代码包含在本申请的后面。
前言
该固件最初是使用在PC机的DOS上运行的C语言软件进行开发的,然后转换为Zilog Z8汇编语言。
原始C语言软件清单也附在该文档的后面。该原始开发软件包括最新版本的Z8固件未包含的某些元素。这些元素将包含在固件的最终版中。
该软件产生具有脑波频率的声和光脉冲。每只耳朵的声音由四种音高组成,每种脑波类型(β波、α波、θ波和δ波)对应一种音高,产生音乐和弦(chord),类似于一种印度音乐中的持续低音(drone)。光由位于每只眼睛前面的四种不同颜色的LED构成,每种脑波类型对应一种不同的颜色。
音乐和弦中的每种音高采用音频文件作为样本来为用户产生悦耳的声音、即掩盖脑波频率中刺耳声音的一种声音。对于每种音高,一只耳朵里是标准的音高,另一只耳朵里是具有偏移频率的音高。该偏移频率根据脑波类型,与标准音高相差特定量:
β波26.0Hz
α波11.0Hz
θ波6.0Hz
δ波2.25Hz
标准的音高结合偏移的音高产生用户能感知到并将他们的大脑诱导至该脑波类型的双耳节拍。这些脑波类型可以淡入淡出,从而容易地将用户诱导至进出的脑波类型。
有四种音高且每一种脑波类型对应一种音高的原因是,这使得更加容易将用户的大脑诱导至每种脑波类型,即使这四种脑波类型独立地淡入淡出。
每种LED输出与双耳节拍声音具有相同速率和相位的正弦脉冲。用于每只眼睛的LED有四种颜色:
β波蓝色
α波禄色
θ波黄色
δ波红色
用于每只眼睛的每种颜色的LED的正弦脉冲完全相同。虽然确切的颜色不重要,但是光的频率和对应的脑波类型的频率之间存在关联。由于β波是我们使用的最高频率的脑波类型,它使用最高频率的LED(蓝色)。δ波是我们使用的最低频率的脑波类型,因此它使用最低频率的LED(红色)。α波和θ波的频率在β波和δ波之间,因此他们获得具有在β波和δ波使用的频率之间的频率的那些LED。因而,即使四种脑波类型分别独立地淡入淡出,还能更容易地将用户大脑诱导至每种脑波类型。具有四种颜色且每种脑波类型对应一种颜色的原因是更容易地将用户的大脑诱导至每种脑波类型,即使这四种脑波类型分别独立地淡入淡出。
每种具有其自身脑波类型的四种双耳节拍、以及每种具有自身脑波类型的四种不同的LED与彼此同相的声音和光的组合,使用户大脑很容易追踪正在进行的是什么,因此很容易在他们的大脑产生由GuideGlasses呈现的序列。
该软件采用会话(session)文件的脑波序列。该会话文件给出了脑波类型序列、以及每种脑波类型的持续时间。这个会话文件也告诉软件折曲(bend)听得到的音高,同时减慢序列。见在这篇文档的后面给出的mitch-OJ.ses清单,给出了简短冥想序列的会话文件实施例。下面的会话文件也在本文档后面列出:
mitch_03.ses简短的冥想序列
mitch_04.ses较长的冥想序列
sleepl.ses入睡序列
wake-up.ses唤醒序列
当前没有会话文件是用于再次入睡的,但是该序列类似于唤醒序列之后紧接着入睡序列(因为我的实验显示,对于醒来的人来说,为了更加容易再次入睡,完全清醒是非常重要的)的组合。
这个会话文件有4种命令:HOLD,FADE,TEMPO和BEND,以及注释。
HOLD有一个参数,即单位为秒的时间,不随引导眼镜的输出而变化。
FADE包含5个参数。第一参数是执行淡入淡出的秒数。接着4个参数,每个参数对应一个脑波类型:β波、α波、θ波和δ波(按此顺序)。每一参数都是每种脑波类型淡入淡出的幅度。
TEMPO包括3个参数。第一参数是总是O。第二参数是速度(tempo)增加或减少的量,第三参数是速度向上或者向下偏移所花费的秒数。
BEND包含3个参数。第一参数是总是O。第二参数是音高折曲增加或减少的量,第三参数是音高向上或者向下偏移所花费的秒数。
这些会话文件可通过使用GG.exe转化成可由Z8固件使用的形式。
该固件如其表现的那样,在LED脉冲产生算法中存在需要解决的程序缺陷。所产生的脉冲不是用于给定脑波类型的低幅值的正弦脉冲。而且,该固件当前不支持TEMPO和BEND。所有这些功能都将在成品中实现。
下面是对引导眼镜的描述,接着是对固件的描述,再后面是固件清单。然后是样本会话文件清单。最后是C语言开发软件和应用程序清单。
引导眼镜硬件
请参考如图3所示的示意图。该硬件由具有两个定时器的20MHzZilog Z8微控制器控制,每个定时器都有PWM(脉宽调制)。
具有四个输出,用于将正弦脉冲输出至LEO。每个输出控制两个LEO,一个LEO用于右眼,一个LEO用于左眼。因此共有8个LED,LED1到LED8,每个LED都具有其自身的晶体管驱动器,该晶体管驱动器由Q1到Q8和R1到R12构成。
声音来自被设置为用16KHz载波进行PWM的两定时器。每只耳朵具有滤除16KHz的低通滤波器,留下所有低于8KHz的有用音频内容。
S1是启动给定序列的瞬时按钮开关,S1和S2一起由用户任选。S2可选择4种不同的序列:入睡、再次入睡、唤醒和冥想。
硬件由可充电的锂离子扁平封装电池供电。该电池重量轻,充电速度快。
戴在用户头上的该电子装置安装在挠性电路上,该电路缝制在环绕用户头部的舒适睡眠罩上,用凸起的杯状物(convex cups)蒙住眼睛和耳朵。该睡眠罩柔软且韧性,具有Velcro带,使得不同尺寸的头部的人都能舒适地佩戴,即使他们带着该装置入睡,即使用户在睡觉时翻来覆去。
音频波形的性质
音频波形保存为有符号的8比特值的数组,其最后一个元素可用作第一个元素的前一个元素。例如,周期为8、幅值为4的三角波形,将会存储为值(0,2,4,2,0,-2,-4,-2)。
实际上,该波形是可能为1秒的一个周期记录的乐器演奏恒定音符的数字采样。对该采样进行数字预处理以在波形开始到结束之间产生无缝听觉连接。
用于对乐器进行录音的采样速率和乐器演奏的音符的音高被保存为恒定的采样速率和初始音高。
音高计算
如果一次遍历波形数组的一个元素,则以等于初始采样速率的速率,顺序地将每个元素的值馈入到连接到适当放大器/扬声器的D/A转换器,然后可以听到初始音高。如果每次遍历该波形数组的两个元素(即,我们首先选择元素0,接着选择元素2等),则听到2倍初始频率的音高。我们用playbackJate表示遍历速率,用step表示每次遍历元素的个数。则通常:
音高=step*(Pla.vback_rate/s8/Jlple_rate)*original.._pitch
或者,更有用地,如果我们希望以任何给定的音高来演奏音高,则我们仅需要计算遍历数组的相应step。
step=(sample_rate/pla.vback_rate)*(desiredyitch/original_pitch)
音调对象
音调对象保存了用于以特定音高发出音调的状态信息。该状态变量index保存音调在波形数组中的当前位置。状态变量step是每次循环中index递增的量。两个状态变量都是实数。在启动时,将index设置为0,从期望的初始音调计算step。随着在连续循环中将index递增step,index将最终超过波形数组的大小。这时指针index是通过将其自身减去数组的大小来“返回(wrapped)”的。
第三状态变量value包含由index所指的音调的当前听觉值,即:waveform-array[index]。由于指针几乎确定不是整数,因此我们采用最接近元素的值,或者取两个最接近元素的平均值,以减少混淆。
光对象
光对象保存用于(以其所附的脑波频率)产生规律输出的光的状态信息。它是通过用每次循环递增step的index指向正弦波形来实现的。step的值最初是从与光对象相关联的脑波频率计算得到的。所指的正弦波形元素的值被认为是亮度百分数(illumination percentage),可被转换成脉冲宽度值并且用于驱动在光帧中光对象的对应LED。
双耳声音(Binaural Voice)对象
双耳声音对象用于在演奏四声部(part)歌曲的单声部时产生双耳节拍。每个双耳声音都具有一个相关联的脑波:α波、β波、δ波或θ波。
双耳声音对象由Base_tone和Beat_tone的两个音调对象以及光对象构成。在启动时将状态变量节拍频率(beat frequency)设置为与声音相关联的脑波的频率。当指示双耳声音演奏给定的音符(例如“A”)时,将Base_tone的音高设置为相应的频率(440Hz),将Beat_tone的音高设置为用这个频率加上相关联的脑波频率的频率(440Hz+节拍频率)。
当该声部改变音符时,重复这个过程。由于在音调对象中音高的改变仅仅涉及到计算新的step值,而不影响index的值,双耳声音发出的音符可以自由地变化而不会影响双耳节拍的相位或者连续性。
合奏对象
合奏对象包括四个双耳声音对象(每一个脑波频率对应一个双耳声音对象),双耳声音对象用于演奏如歌曲文件中所描述的四声部歌曲,而以特定方式临时改变双耳节拍的强度,如会话文件所述。
歌曲文件
歌曲文件是一列长度变化的记录,隐含地按时间排序(例如,小节1的第一音符位于小节1的第二音符前),描述了音符的音高及其持续时间、以及其所属的声音。当到达歌曲文件的结尾时,指引过程则将其指针重置到文件的开始处,并重复该歌曲直到会话结束。
歌曲记录包括音阶(step)值,该音阶值能产生相应音符、即“基(Base)”音调的音高和“节拍”音调的音高。
会话文件
会话文件是隐含地按时间排序的一列记录,描述了双耳节拍的强度,以及每种双耳节拍的强度应该如何随时间变化。例如,初始记录(0,20,10,30,50)意味着“将α波双耳节拍的初始强度设置为20%,将β波节拍的初始强度设置为10%,将δ波节拍的初始强度设置为30%,将θ波节拍的初始强度设置为50%。”紧随其后的记录(15,5,20,10,40)意味着“在下一个15秒钟将α波节拍的强度衰减到5%,将β波节拍的强度衰减到20%,将δ波节拍的强度衰减到10%,将θ波节拍的强度衰减到40%。”当处理完最后记录时,该会话结束。
算法流程
算法的实现包括两个阶段。第一个阶段为启动时的主线代码,初始化各种状态变量以及指针。一旦该阶段发生,则在由定时器触发的中断下循环执行算法,该定时器的复位值等于音频播放速率。这样,这个算法的每次循环产生至少新的音频输出。
开发软件和应用程序
最初是用运行在PC机的DOS环境下的C语言开发装置的固件。该软件的源文件是GG.c。
wavfreq.c应用程序用于向标准的.WAV文件里增加专有程序块。该程序块保存记录在wave file中的音符的频率。C版本的GG.c程序使用该信息来初始化初始音高状态变量。Wavinfo.c应用程序在PC机的显示屏上显示该程序块信息。
GG.c的源代码、wavfreq.c以及wavinfo.c都包含在固件清单后面。
Figure G2008800216579D00391
Figure G2008800216579D00411
Figure G2008800216579D00431
Figure G2008800216579D00441
Figure G2008800216579D00451
Figure G2008800216579D00461
Figure G2008800216579D00481
Figure G2008800216579D00491
Figure G2008800216579D00501
Figure G2008800216579D00511
Figure G2008800216579D00521
Figure G2008800216579D00531
Figure G2008800216579D00541
Figure G2008800216579D00551
Figure G2008800216579D00561
Figure G2008800216579D00571
Figure G2008800216579D00591
Figure G2008800216579D00601
Figure G2008800216579D00621
Figure G2008800216579D00641
Figure G2008800216579D00661
Figure G2008800216579D00681
Figure G2008800216579D00691
Figure G2008800216579D00701
Figure G2008800216579D00711
Figure G2008800216579D00721
Figure G2008800216579D00731
Figure G2008800216579D00741
Figure G2008800216579D00761
Figure G2008800216579D00771
Figure G2008800216579D00781
Figure G2008800216579D00791
Figure G2008800216579D00801
Figure G2008800216579D00811
Figure G2008800216579D00821
Figure G2008800216579D00831
Figure G2008800216579D00841
Figure G2008800216579D00861
Figure G2008800216579D00871
Figure G2008800216579D00881
Figure G2008800216579D00891
Figure G2008800216579D00901
Figure G2008800216579D00911
Figure G2008800216579D00921
Figure G2008800216579D00931
Figure G2008800216579D00941
Figure G2008800216579D00951
Figure G2008800216579D00961
Figure G2008800216579D00971
Figure G2008800216579D00981
Figure G2008800216579D00991
Figure G2008800216579D01001
Figure G2008800216579D01011
Figure G2008800216579D01021
Figure G2008800216579D01031
Figure G2008800216579D01041
Figure G2008800216579D01051
Figure G2008800216579D01061
Figure G2008800216579D01071
Figure G2008800216579D01081
Figure G2008800216579D01091
Figure G2008800216579D01121
Figure G2008800216579D01131
Figure G2008800216579D01141
Figure G2008800216579D01151
Figure G2008800216579D01161
Figure G2008800216579D01171
Figure G2008800216579D01181
Figure G2008800216579D01191
Figure G2008800216579D01211
Figure G2008800216579D01221
Figure G2008800216579D01231
Figure G2008800216579D01241
Figure G2008800216579D01251
Figure G2008800216579D01261
Figure G2008800216579D01271
Figure G2008800216579D01281
Figure G2008800216579D01291
Figure G2008800216579D01311
Figure G2008800216579D01321
Figure G2008800216579D01331
Figure G2008800216579D01341
Figure G2008800216579D01351
Figure G2008800216579D01361
Figure G2008800216579D01371
Figure G2008800216579D01381
Figure G2008800216579D01391
Figure G2008800216579D01401
Figure G2008800216579D01411
Figure G2008800216579D01421
Figure G2008800216579D01431
Figure G2008800216579D01441
Figure G2008800216579D01451
Figure G2008800216579D01461
Figure G2008800216579D01471
Figure G2008800216579D01511
Figure G2008800216579D01521
Figure G2008800216579D01531
Figure G2008800216579D01551
Figure G2008800216579D01561
Figure G2008800216579D01571
Figure G2008800216579D01581
Figure G2008800216579D01601
Figure G2008800216579D01611
Figure G2008800216579D01621
Figure G2008800216579D01631
Figure G2008800216579D01641
Figure G2008800216579D01661
Figure G2008800216579D01671
Figure G2008800216579D01691
Figure G2008800216579D01701
Figure G2008800216579D01711
Figure G2008800216579D01721
Figure G2008800216579D01731
Figure G2008800216579D01741
Figure G2008800216579D01751

Claims (12)

1.一种产生具有脑波频率的声音脉冲和光脉冲的声光机(SLM),所述声光机被编程以将用户诱导至特定意识状态,所述声光机包括:
左发光二极管(LED)和右发光二极管(LED),所述LED被配置为分别置于所述用户的左眼和右眼前面,并且被编程以发出具有将所述用户诱导至所述特定意识状态的频率的光脉冲;
左耳机扬声器和右耳机扬声器,所述扬声器被配置为向右耳和左耳播放不同的音调,以产生与所述LED脉冲频率匹配的双耳节拍;以及
电路板上的微控制器,运行固件以控制所述LED和所述耳机扬声器。
2.如权利要求1所述的SLM,还包括串口连接器,所述串口连接器将所述固件写入所述微控制器,从而允许对所述LED和所述耳机扬声器中的脑波频率序列进行编程。
3.如权利要求1所述的SLM,还包括置于所述左LED和所述右LED中每一个上的图形。
4.如权利要求1所述的SLM,其中,所述SLM被编程以实现声音和/或光的淡入淡出。
5.如权利要求1所述的SLM,其中,所述SLM被编程以处理多个同时发生的频率。
6.如权利要求1所述的声光机,其中,所述SLM被编程以将脑波类型与不同颜色的LED和/或双耳基频相匹配。
7.如权利要求1所述的SLM,其中,所述SLM被编程来用音乐或其他声音掩盖双耳节拍。
8.如权利要求1所述的SLM,其中,所述SLM被编程以帮助人们入睡或醒来。
9.如权利要求8所述的SLM,其中,所述SLM装配在柔软的织物睡眠罩中,并且使用轻型、挠性、可充电的电池,从而使睡眠舒适。
10.如权利要求1所述的SLM,其中,所述SLM被编程以帮助人冥想。
11.如权利要求1所述的SLM,其中,所述SLM被编程以使得所述LED的脉冲频率选自2.2Hz、6.0Hz、11.1Hz和14.4Hz,以分别发出δ波、θ波、α波或β波。
12.一种将用户诱导至特定意识状态的方法,包括:提供根据前述权利要求中任一项所述的SLM;放置所述SLM使得所述LED在所述用户的眼睛前面,耳机扬声器在所述用户的耳朵附近;打开所述SLM以运行被设计以诱导至所述特定意识状态的频率序列。
CN200880021657.9A 2007-04-24 2008-04-24 引导眼镜 Expired - Fee Related CN101715356B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US92602807P 2007-04-24 2007-04-24
US60/926,028 2007-04-24
PCT/US2008/061460 WO2008131454A1 (en) 2007-04-24 2008-04-24 Guide glasses

Publications (2)

Publication Number Publication Date
CN101715356A true CN101715356A (zh) 2010-05-26
CN101715356B CN101715356B (zh) 2013-10-30

Family

ID=39875990

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200880021657.9A Expired - Fee Related CN101715356B (zh) 2007-04-24 2008-04-24 引导眼镜

Country Status (4)

Country Link
US (2) US8597171B2 (zh)
EP (1) EP2150315A4 (zh)
CN (1) CN101715356B (zh)
WO (1) WO2008131454A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103381280A (zh) * 2013-07-10 2013-11-06 上海昭鸣投资管理有限责任公司 基于可视脑电波诱导技术的视听统合康复训练系统及方法
CN103796702A (zh) * 2011-06-22 2014-05-14 剑桥学习技术有限公司 由于诱发和维持睡眠的设备
CN109143577A (zh) * 2017-06-28 2019-01-04 宏碁股份有限公司 头戴式显示器及其控制方法
CN113274613A (zh) * 2021-06-30 2021-08-20 胡柳俊 一种声光诱导脑视觉装置

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101406531B1 (ko) * 2007-10-24 2014-06-13 삼성전자주식회사 스테레오 오디오 신호로부터 바이노럴 비트를 발생시키는 장치 및 방법
CN102413874B (zh) * 2009-04-24 2015-09-30 皇家飞利浦电子股份有限公司 用于向对象的眼球递送电磁辐射的系统和方法
WO2012011869A1 (en) * 2010-07-22 2012-01-26 Osim International Ltd Therapeutic device
US8552860B2 (en) 2010-11-10 2013-10-08 International Business Machines Corporation Binaural audio signal-based applications
WO2012106775A1 (en) * 2011-02-11 2012-08-16 Resmed Limited Method and apparatus for treatment of sleep disorders
WO2012166621A1 (en) * 2011-06-01 2012-12-06 Trachtman Joseph N Device to measure functions of the eye directly
WO2013056742A1 (en) 2011-10-21 2013-04-25 Patrimoine De L'universite De Liege Photo-stimulation device
US9326086B2 (en) 2014-02-21 2016-04-26 City University Of Hong Kong Neural induced enhancement of audio signals
US9588490B2 (en) 2014-10-21 2017-03-07 City University Of Hong Kong Neural control holography
US9280960B1 (en) * 2014-12-15 2016-03-08 Amazon Technologies, Inc. Navigating music using an index including musical symbols
US10162197B2 (en) 2015-06-12 2018-12-25 Alan D. Parks Method and portable aid for mindfulness meditation
CN105302297A (zh) * 2015-09-16 2016-02-03 国网山东东营市东营区供电公司 一种通过脑电波蓝牙耳机的手机交互方法
CA3029198A1 (en) * 2015-11-23 2017-06-01 Sana Health, Inc. Methods and systems for providing stimuli to the brain
US10905846B2 (en) * 2016-02-08 2021-02-02 Cornelia Weber Phototherapy sleep mask
US10449326B2 (en) 2016-03-03 2019-10-22 Headwaters R & D Inc Audio tone programmed hygienic and therapeutic sleep and wake eye mask having remotely controlled sunrise and sunset multimodes
CN106419908A (zh) * 2016-04-26 2017-02-22 深圳市思立普科技有限公司 一种睡眠控制电诱导信息控制方法
US10993636B2 (en) * 2017-05-05 2021-05-04 Daniel Joseph Couser Systems and devices for proactively influencing brainwaves
EP3684463A4 (en) 2017-09-19 2021-06-23 Neuroenhancement Lab, LLC NEURO-ACTIVATION PROCESS AND APPARATUS
US11717686B2 (en) 2017-12-04 2023-08-08 Neuroenhancement Lab, LLC Method and apparatus for neuroenhancement to facilitate learning and performance
US11318277B2 (en) 2017-12-31 2022-05-03 Neuroenhancement Lab, LLC Method and apparatus for neuroenhancement to enhance emotional response
US11364361B2 (en) 2018-04-20 2022-06-21 Neuroenhancement Lab, LLC System and method for inducing sleep by transplanting mental states
WO2020056418A1 (en) 2018-09-14 2020-03-19 Neuroenhancement Lab, LLC System and method of improving sleep
US11786694B2 (en) 2019-05-24 2023-10-17 NeuroLight, Inc. Device, method, and app for facilitating sleep
CN110975106A (zh) * 2019-12-25 2020-04-10 深圳创维-Rgb电子有限公司 一种催眠方法、装置、电子产品及存储介质
GB2598799A (en) * 2020-09-15 2022-03-16 Margot White Music Ltd Binaural signal composing apparatus
KR20230104909A (ko) * 2020-11-10 2023-07-11 더 트러스티즈 오브 프린스턴 유니버시티 원격 신경 행동 테스트 시스템 및 방법
GB2605832A (en) * 2021-04-15 2022-10-19 Ed Can Help Ltd Methods and systems for generating sound for use in treating a mental disorder
US20230126680A1 (en) * 2021-10-21 2023-04-27 Optoceutics ApS Modulation of the theta-gamma neural code with controlled light therapeutics
CN113952582B (zh) * 2021-12-20 2022-03-08 深圳市心流科技有限公司 一种基于脑电信号的中断冥想音效控制方法和设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1068456A (zh) * 1991-07-05 1993-01-27 戴夫康姆公司 一体的潜水员面罩和超声频水下话音通讯装置
US6071229A (en) * 1992-05-05 2000-06-06 Rubins; Tye Video or compact disk encoder/decoder for brain wave synchronizer

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4315502A (en) * 1979-10-11 1982-02-16 Gorges Denis E Learning-relaxation device
JPH0712378B2 (ja) 1989-08-10 1995-02-15 パイオニア株式会社 脳波誘導用ゴーグルおよび脳波誘導装置
US5507716A (en) * 1991-08-21 1996-04-16 The Lucidity Institute, Inc. Equipment and methods used to induce lucid dreams in sleeping persons
US5549118A (en) 1993-09-22 1996-08-27 New York University Simultaneous testing of two motor capabilities of a human subject
US5518497A (en) * 1993-12-28 1996-05-21 Cognitech Corporation Trophotropic response system
KR960020941A (ko) * 1994-12-28 1996-07-18 가나이 쯔또무 생체신호 측정 및 유도장치
CA2265032A1 (en) * 1998-04-24 1999-10-24 J.J. Mackay Canada Limited Multiple electronic purse parking meter
CN2408893Y (zh) * 2000-03-10 2000-12-06 钟真一 催眠治疗仪
KR100416966B1 (ko) * 2001-02-07 2004-02-05 주식회사 드림프리 뇌파학습기
KR200263482Y1 (ko) * 2001-11-09 2002-02-04 주식회사 토이랩 휴대용 스트레스 이완기
KR200305663Y1 (ko) * 2002-11-01 2003-03-03 변정식 학습보조용 안경
US8142015B2 (en) * 2003-10-28 2012-03-27 Venetian Holdings, Llc. Baby and toddler sunglasses
CN2678683Y (zh) * 2003-12-09 2005-02-16 张啸峰 生物脑波智能助学器
US7179979B2 (en) * 2004-06-02 2007-02-20 Alan Steven Howarth Frequency spectrum conversion to natural harmonic frequencies process
WO2006009771A1 (en) * 2004-06-18 2006-01-26 Neuronetrix, Inc. Evoked response testing system for neurological disorders
CN100490921C (zh) * 2005-06-28 2009-05-27 王图南 激光音乐疏导仪
KR20070035882A (ko) * 2005-09-28 2007-04-02 박민 뇌파를 유도하는 멀티미디어 콘텐트 생성 장치 및 그 방법
CN1899640A (zh) * 2006-06-21 2007-01-24 王仁庆 一种提高右脑记忆的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1068456A (zh) * 1991-07-05 1993-01-27 戴夫康姆公司 一体的潜水员面罩和超声频水下话音通讯装置
US6071229A (en) * 1992-05-05 2000-06-06 Rubins; Tye Video or compact disk encoder/decoder for brain wave synchronizer

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103796702A (zh) * 2011-06-22 2014-05-14 剑桥学习技术有限公司 由于诱发和维持睡眠的设备
CN103796702B (zh) * 2011-06-22 2016-03-09 剑桥学习技术有限公司 用于诱发和维持睡眠的设备
US9987459B2 (en) 2011-06-22 2018-06-05 Cambridge Learning Technology Limited Device for inducing and maintaining sleep
CN103381280A (zh) * 2013-07-10 2013-11-06 上海昭鸣投资管理有限责任公司 基于可视脑电波诱导技术的视听统合康复训练系统及方法
CN109143577A (zh) * 2017-06-28 2019-01-04 宏碁股份有限公司 头戴式显示器及其控制方法
CN113274613A (zh) * 2021-06-30 2021-08-20 胡柳俊 一种声光诱导脑视觉装置
CN113274613B (zh) * 2021-06-30 2024-03-15 胡柳俊 一种声光诱导脑视觉装置

Also Published As

Publication number Publication date
EP2150315A1 (en) 2010-02-10
US20100076253A1 (en) 2010-03-25
EP2150315A4 (en) 2011-03-23
US8968176B2 (en) 2015-03-03
WO2008131454A1 (en) 2008-10-30
US20140088341A1 (en) 2014-03-27
CN101715356B (zh) 2013-10-30
US8597171B2 (en) 2013-12-03

Similar Documents

Publication Publication Date Title
CN101715356B (zh) 引导眼镜
Feld et al. Vocal anthropology: From the music of language to the language of song
CN108648520B (zh) 一种钢琴演奏学习方法及装置
US10783884B2 (en) Electronic device-awakening method and apparatus, device and computer-readable storage medium
Pardue Violin augmentation techniques for learning assistance
Teboul A method for the analysis of handmade electronic music as the basis of new works
CH704084B1 (fr) Dispositif et procédé pour l&#39;enregistrement et la restitution d&#39;histoires lues.
CN107993518A (zh) 可穿戴虚拟多功能弦乐弹奏器
WO2021234663A1 (fr) Dispositif de réalité virtuelle et/ou de réalité augmentée, système et méthodes correspondantes
CN112466354A (zh) 一种基于五行音乐的音乐播放装置
CN204856974U (zh) 钢琴仿真学习设备
Mang An investigation of vocal pitch behaviors of Hong Kong children
Cook Arduino music and audio projects
CN201955934U (zh) 平板式益智游戏动脑机
Drymonitis Digital electronics for musicians
US20170178533A1 (en) Natural orientation induction tool apparatus and method
Rose Relations between segmental and prosodic structure in first language acquisition
Bell et al. Simon Says
CN211427071U (zh) 一种ai音乐唤醒闹钟
Silva et al. A preliminary study of Augmented Musical Instruments for Study (AMIS) using research through design
Barela Getting Started with Adafruit Trinket: 15 Projects with the Low-Cost AVR ATtiny85 Board
JP2004086140A (ja) 耳装着装置および電子メトロノーム
McNamara Designing Platforms for Creative Expression
Bortoletto Vaz Algorithmic authority in music creation: the beauty of losing control= De l’autorité algorithmique dans la création musicale: la beauté de la perte de contrôle
Burloiu Dynamic Music Representations for Real-Time Performance: From Sound to Symbol and Back

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20131030

Termination date: 20190424

CF01 Termination of patent right due to non-payment of annual fee