目次

Schumann resonanceスケッチ

 Schumann resonanceとは、地球の地表と電離層の間に
 存在している極極超長波で、周波数が7.83Hzです。
 1952年、ドイツの物理学者であるWinfried Otto Schumann博士
 が発見しました。

 Schumann resonanceの周波数で、電磁波を生成している場は
 リラックス効果がある空間になると言われています。

 Arduinoを利用して、7.83Hzの電磁波を生成する回路を
 インダクタを利用して作ります。



 全体回路は、以下。




 10kHzを1277分周すると、7.83Hz前後になりますが
 127msごとにタイマー割込みを発生させて7.8Hz前後
 を生成します。

 タイマー割込みにはMsTimer2を利用し、127msごとに
 イベントフラグをセットします。

void  update_trigger(void)
{
  eflag = ON ;
}

 loopの中では、イベントフラグを受取り、カウンタを
 インクリメントして、カウンタ値に応じてLEDの点灯
 消灯を確定します。

  if ( eflag == ON ) {
    /* clear flag */
    eflag = OFF ;
    /* generate code */
    tmp = *(pat+idx) ;
    if ( PIND & (1 << SEL_BIT) ) {
      tmp = *(pat+2-idx) ;
    }
    /* impress */
    PORTB = tmp ;
    /* increment */
    idx++ ;
    /* judge */
    if ( idx == 3 ) { idx = 0 ; }
  }

 変数idxを利用して、点灯するLEDを変えていきます。
 雪の結晶の頂点にLEDがあるようにし、インダクタに
 電流を流します。

 タイミングチャートでみると、さざ波のように
 電流を流しています。



 3進カウンタを用意して、カウンタ値に対応する
 ビットパターンを出力して、さざ波を実現します。

 カウンタ値に対するビットパターンは、配列に格納。

  *(pat+0) = ~0x09 ;
  *(pat+1) = ~0x12 ;
  *(pat+2) = ~0x24 ;

 回転の左右判断は、スイッチの状態で利用。

 回転は、ビットパターンを取出す順序を変えて対応します。

 スケッチにまとめると、以下。

#include <MsTimer2.h>

#define OFF 0
#define ON  OFF+1

#define INTERV 127

/* pin assign */
#define SEL_BIT 2

/* variables */
volatile byte eflag ;
volatile byte idx ;
volatile byte pat[3] ;
volatile byte tmp ;

void update_trigger()
{
  eflag = ON ;
}

void setup()
{
  /* port values */
  PORTB = 0x00 ;
  PORTD = 0x04 ;
  /* port directions */
  DDRB = 0xff ; /* all outputs */
  DDRD = 0xfb ;
  /* clear flag */
  eflag = OFF ;  
  /* initialize values */
  idx = 0 ;
  *(pat+0) = ~0x09 ;
  *(pat+1) = ~0x12 ;
  *(pat+2) = ~0x24 ;
  /* 127ms period */
  MsTimer2::set(INTERV,update_trigger);
  /* enable */ 
  MsTimer2::start();
}

void loop()
{
  /* handling */
  if ( eflag == ON ) {
    /* clear flag */
    eflag = OFF ;
    /* generate code */
    tmp = *(pat+idx) ;
    if ( PIND & (1 << SEL_BIT) ) {
      tmp = *(pat+2-idx) ;
    }
    /* impress */
    PORTB = tmp ;
    /* increment */
    idx++ ;
    /* judge */
    if ( idx == 3 ) { idx = 0 ; }
  }
}

 インダクタは、インクを使い切ったボールペンを
 利用して自作します。




目次

inserted by FC2 system