5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
12
返回列表 发新帖
楼主: ogrobot
打印 上一主题 下一主题

脑电波诱导器 The Brain Machine (Sound & Light Machine[SLM])

[复制链接]
21
 楼主| 发表于 2010-10-12 22:42 | 只看该作者
现在饿了,出去找东西吃

欢迎继续阅读楼主其他信息

22
发表于 2010-10-12 22:44 | 只看该作者
神奇!如果这东西能控制人的意志的话就太可怕了:em17:
23
发表于 2010-10-13 07:13 | 只看该作者
LZ是能人,佩服你.:em26:
24
发表于 2010-10-13 08:28 | 只看该作者
不错不错,神奇又刺激:em15:
25
发表于 2010-10-13 09:55 | 只看该作者
欣赏LZ的想法
有一次做试验,把信号发生器接音响
在30Hz附近产生低频共振,
柜门和门窗都振动起来了,
不敢加大功率了
否则就是破坏性试验了
题外话...

搞声音的话,也可以参考音乐的和铉
不同的频率混合在一起,有的和谐,有的不稳定
这对脑也会有诱导作用的吧
26
发表于 2010-10-13 10:50 | 只看该作者
支持楼主
楼主加油
27
 楼主| 发表于 2010-10-13 16:51 | 只看该作者
这是针对 ATMega8 修改的代码

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>
#include <util/delay.h>

/*
ATMega8 Port Define:

PB0        Left eye LED
PB1        Right eye LED
OC2        Left ear speaker (base_frequency)
OC1B    Right ear speaker (Offset Frequencies for binaural beats)
*/



struct brainwaveElement
{
    char    bwType;            // 'a' for Alpha, 'b' for Beta, 't' for Theta, or 'd' for Delta ('0' signifies last entry in table
    float     bwDuration;        // Duration of this Brainwave Type (ms)
} const brainwaveTab[] PROGMEM =
{
    { 'b', 60000 },
    { 'a', 10000 },
    { 'b', 20000 },
    { 'a', 15000 },
    { 'b', 15000 },
    { 'a', 20000 },
    { 'b', 10000 },
    { 'a', 30000 },
    { 'b',  5000 },
    { 'a', 60000 },
    { 't', 10000 },
    { 'a', 30000 },
    { 't', 20000 },
    { 'a', 30000 },
    { 't', 30000 },
    { 'a', 15000 },
    { 't', 60000 },
    { 'a', 15000 },
    { 'b',  1000 },
    { 'a', 15000 },
    { 't', 60000 },
    { 'd',  1000 },
    { 't', 10000 },
    { 'd',  1000 },
    { 't', 10000 },
    { 'd',  1000 },
    { 't', 30000 },
    { 'a', 15000 },
    { 'b',  1000 },
    { 'a', 15000 },
    { 't', 30000 },
    { 'a', 15000 },
    { 'b',  1000 },
    { 'a', 20000 },
    { 'b',  5000 },
    { 'a', 20000 },
    { 'b', 15000 },
    { 'a', 15000 },
    { 'b', 20000 },
    { 'a', 10000 },
    { 'b', 25000 },
    { 'a',  5000 },
    { 'b', 60000 },
    { '0',     0 }
};



void blink_LEDs( float duration, float onTimeMS, float offTimeMS )
{
    for( int i=0; i<(duration/(onTimeMS+offTimeMS)); i++ )
    {
        PORTB |= 0b00000011;          // turn on LEDs at PB0, PB1
        _delay_ms( onTimeMS );
        PORTB &= 0b11111100;          // turn off LEDs at PB0, PB1
        _delay_ms( offTimeMS );
    }
}


void do_brainwave_element(int index)
{
    char brainChr = pgm_read_byte(&brainwaveTab[index].bwType);

    // Beta
    if( brainChr == 'b' )
    {
        OCR1A = 19090;    // 214.719Hz for a binaural beat of 14.4Hz
        blink_LEDs( pgm_read_float(&brainwaveTab[index].bwDuration), 34.7, 34.7 );
        return;
    }

    // Alpha
    else if (brainChr == 'a')
    {
        OCR1A = 19400;    // 211.416Hz for a binaural beat of 11.1Hz
        blink_LEDs( pgm_read_float(&brainwaveTab[index].bwDuration), 45.1, 45.0 );
        return;
    }

    // Theta
    else if (brainChr == 't')
    {
        OCR1A = 19886;    // 206.324Hz for a binaural beat of 6.0Hz
        blink_LEDs( pgm_read_float(&brainwaveTab[index].bwDuration), 83.5, 83.5 );
        return;
    }

    // Delta
    else if (brainChr == 'd')
    {
        OCR1A = 20280;    // 202.521Hz, for a binaural beat of 2.2Hz
        blink_LEDs( pgm_read_float(&brainwaveTab[index].bwDuration), 225.3, 225.3 );
    }

    else
    {
        // this should never be executed, since we catch the end of table in the main loop
        return;
    }
}


int main(void)
{

    TIMSK    = 0x00;  // no Timer interrupts enabled
    DDRB    = 0xFF;   // set all PortB pins as outputs
    PORTB    = 0x00;  // all PORTB output pins Off

    TCCR2    = 0b00011110;
    OCR2    = 79;

    TCCR1A    = 0b00010000;
    TCCR1B    = 0b00001001;

    int j = 0;
    while( pgm_read_byte(&brainwaveTab[j].bwType) != '0' )
    {
        do_brainwave_element( j );
        j++;
    }

    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_ms( 1000 );
    PORTB   = 0x00;          // turn off all PORTB outputs
    DDRB    = 0x00;          // make PORTB all inputs
    sleep_cpu();             // put CPU into Power Down Sleep Mode
}

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

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