自作プラネタリウムの記録・兵庫県立大学天文部
はじめに
兵庫県立大学天文部では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.
