自作プラネタリウムの記録・兵庫県立大学天文部
はじめに
兵庫県立大学天文部では2016年度にプラネタリウムのエアドームの製作,2017年度に投影機の製作を行った.投影機は過去のピンホール式プラネタリウムの恒星球(投影する恒星の等級に応じた穴をあけたもの)をそのまま利用することにし,電気系統やギヤ部分の製作をメインに行った.ここでは投影機の電気系統・プログラムについての解説を行う.
システムの概要
プラネタリウムのシステムの概要を以下の図に示す.投影機とコントローラーは無線で接続されている.投影機は主に4つの機能を備えている.ステッピングモーターの駆動,EX球の点灯,RGBLEDの点灯,無線通信を行うことができる.
使用部品
- 投影機本体
- マイコン
- 電源
- ステッピングモーター
- EX球
- RGBLED
- XBee
- その他
- 抵抗器,コンデンサ等
- コントローラー
- マイコン
- 電源
- ADC
- スイッチ
- XBee
- その他
- 抵抗器,コンデンサ,LED等
ステッピングモーター
投影機の恒星球を回転することで,天球の回転を表現することができる.回転のために使用したモーターはステッピングモーターである.ステッピングモーターはパルス信号で正確な位置決めをすることができ,音も静音であるため,プラネタリウムには適している.使用したステッピングモーターはバイポーラタイプのST-42BYH1004,モータードライバにDRV8835を使用した.ステッピングモーターを動かすための関数を以下に示す。void stepper(void)
は100usごとに繰り返しタイマー割り込みが行われる.コントローラから受信してきた配列の値data[0]
の大きさによって回転スピードの調整ができ,data[0]
が大きいほど早くなる.
ステッピングモーターを制御するプログラムモータードライバDRV8835使用)
DigitalOut APHASE(p5); DigitalOut AENBL(p6); DigitalOut BPHASE(p7); DigitalOut BENBL(p8); uint8_t data[4];//受信した配列の値 /*100usごとに繰り返しタイマー割り込みする*/ void stepper(void) { static unsigned int cnt = 0; static int i = 1; static int delay = 1000; delay = (255 - data[0]) + 10; if((++cnt > delay) && data[0]!=0) { AENBL = 1; BENBL = 1; switch(i) { case 1: APHASE = 1; break; case 2: BPHASE = 1; break; case 3: APHASE = 0; break; case 4: BPHASE = 0; break; } if(++i==5)i = 1; cnt = 0; } else if(data[0]==0) { AENBL = 0; BENBL = 0; } }
投影機のギヤの部分を以下の図に示す.ステッピングモータは図中のアルミ板の裏から接続されており,ギヤを介して恒星球を回転させる。
EX球の駆動回路
ピンホール式プラネタリウムの光源としてEX球がよく用いられる。EX球はフィラメントがとても小さく,点光源に近い.そのため,綺麗な星像を投影することができる.五藤光学研究所が販売しており,一個1000円で手に入れることができる.EX球は口金E10のソケットを使えば,豆電球と同じように点灯させることができる.ただし,定格が2V2Aであるので,それに合わせて回路を設計する必要がある.
よく用いられる方法として,可変抵抗で調光する方法がある.2V以上の電源に可変抵抗とEX球を直列に接続して,分圧させることで適切な電圧をEX球に印加する。この方法の欠点として,調光するときに人が可変抵抗の大きさを変更する必要がある.そのため,マイコンから調光することができない。
LEDをマイコンで調光する方法として,PWMがよく用いられる。PWMはパルス波を与えて,LEDを連続でON・OFFさせて,あたかも明るさが変わったかのように見せる方法である。この方法をEX球にも適用すれば調光ができると考えられる.
ここで,マイコンから電圧を変化させることでEX球を調光させる方法を提案する.マイコンから任意の電圧を出力させる方法としてDAコンバータ(DAC)がある.しかし,一般的なDACは大電流を流すことは難しい.そこで,エミッタフォロワ回路を利用する.エミッタフォロワは電圧の変化がほとんどなく,電流だけを増幅させることのできる回路である.しかし,ベース・エミッタ間電圧Vbe(約0.65V(ダーリントン・トランジスタでは約1.3V))によって出力電圧はVbeだけ小さくなってしまう.EX球に印加する電圧は最大でも2VであるのでVbeの影響は非常に大きい.そこで,以下の図のような電流ブースト回路を用いる.この回路では,オペアンプを使ってDACの電圧Vdacをベース・エミッタ間電圧Vbeだけ大きくしてベースに出力するようなフィードバックをかけている.そのため,VoutはVdacと同じ大きさにして出力させることができる.
使用したDACはMCP4922-E/PでSPI通信で動かす.以下にMCP4922を動かすためのプログラムを示す.void LightBulb(void)
は50msごとに繰り返しタイマー割り込みが行われる.EX_MAX
の値を変えることで,出力する電圧の最大値を変更することができる.
SPI通信でMCP4922(DAC)を動かすためのプログラム
SPI spi(p11, p12, p13);//mosi(SDO), miso, sclk DigitalOut CS(p14); DigitalOut LDAC(p17); uint8_t data[4];//受信した配列の値 void spi_write(int config, int mask, int value) { int spi_data; spi_data = config | (mask & value); CS = 0; LDAC = 1; spi.write(spi_data); CS = 1; LDAC = 0; } void LightBulb(void) { static int mask = 0b0000111111111111; int config; int value; static int EX_MAX = 1638; config = 0b0111000000000000; value = EX_MAX * (data[1] / 255);//12bit(0-4095)で0-VREFだけ出力 spi_write(config, mask, value); }
RGBLED
投影機では3つのRGBLEDを任意の色をそれぞれ出力できるようにしている。このLEDを室内灯として用いる.LEDの明るさはPWMで調節している.今回使用したマイコン(LPC1768)のPWMを利用できるピンは最大で6本しかない.RGBLEDを3個を別々の色で調光しようとすると,合計で9本のPWMが必要になる.そこでPWMピン3本とGPIOピン3本を使って,各RGBLEDについてダイナミック点灯を行った.また,使用したRGBLEDは表面実装型であるが,ちょうど良い基板が見つからなかったので,以下の図のようなプリント基板を製作した。
XBeeによる無線通信
投影機本体とコントローラーとの無線通信を行い,モーターの回転スピードや星の明るさなどの命令を送信している.無線通信はXBeeを使うと簡単に実現できる.XBeeとマイコンの通信にはシリアル通信を利用する.具体的な流れとしてはコントローラ側で複数の可変抵抗の値をAD変換でそれぞれ読み取り,配列に保存する.シリアル通信で一度に送信できるデータ量は最大で8bitである.そのため,上位5bitを配列の値,下位3bitを配列の要素の値として符号化を行い送信する.
符号化の関数
/*floatの値data_f(AD変換で得られた値(0-1))とintの配列の要素indexを引数として,上位5bitを配列の値,下位3bitを要素の値として符号化して返り値とする*/ uint8_t ChannelCoding(float data_f, int index) { uint8_t tmp; tmp = data_f * 31;//floatの値を5bit(0-31)の値に変換 return ((tmp << 3) | index); }
復号化の関数
/*受信したデータCodeWordを引数として,配列の値と要素の値indexに分割し,グローバル変数で宣言した配列に代入する*/ #define MAX 4 uint8_t data[MAX]; void ChannelDecoding(uint8_t CodeWord) { int index; index = CodeWord & 0b00000111; if(index<MAX) data[index] = CodeWord >> 3; }
実際の使用では通信路でノイズが付加され,スパイクノイズのように現れる可能性がある.このため,過去に受信された情報を保存しておき,中央値をとるようなメディアンフィルターを通すことで,ノイズの除去をしている。
プログラム
投影機本体とコントローラーのプログラム
Import programAstroC_planetarium_master
投影機本体のプログラム
Import programAstroC_planetarium_slave
コントローラーのプログラム
過去の記録
過去の先輩方の記録
- ある天文部員の日記 プラネタリウム製作記 恒星球編 その1
- ある天文部員の日記 プラネタリウム製作記 恒星球編 その2
- ある天文部員の日記 プラネタリウム製作記 恒星球編 その3
- ある天文部員の日記 プラネタリウム製作記 恒星球編 その4
- 天体写真とか・・・ プラネタリウム制作記電気系等編No.1
- 天体写真とか・・・ プラネタリウム制作記電気系等編No.2
- 天体写真とか・・・ プラネタリウム制作記電気系等編No.3
- 天体写真とか・・・ プラネタリウム制作記電気系等編No.4
- 天体写真とか・・・ プラネタリウム制作記電気系等編No.5
- 天体写真とか・・・ プラネタリウム制作記電気系等編No.6
- 天体写真とか・・・ プラネタリウム制作記電気系等編No.7
- 天体写真とか・・・ プラネタリウム制作記電気系等編No.8
- 天体写真とか・・・ 投影機製作途中経過No.1
- 天体写真とか・・・ 投影機製作途中経過No.2
- 天体写真とか・・・ 投影機製作途中経過No.3
- 天体写真とか・・・ 投影機製作途中経過No.4
- 天体写真とか・・・ 投影機製作途中経過No.5
- 天体写真とか・・・ 投影機製作途中経過No.6
- 天体写真とか・・・ 投影機製作途中経過No.7
- プラネタリウム 投影機電気系統について
Please log in to post comments.