目次
前
次
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 ; }
}
}
インダクタは、インクを使い切ったボールペンを
利用して自作します。
目次
前
次