PICで波動砲を打ってみる
波動砲(はどうほう)
波動砲(はどうほう)は、宇宙戦艦ヤマトに搭載されている、超強力な大砲です。(正式名称は「艦首波動砲」だそうです)
波動砲 - Wikipedia
そう、エネルギー充填中に、砲口がどんどん赤く明るくなって、120%充填が完了した後、「打て!」の号令でドカンと打つやつ(わかる人にしか伝わらない・・・)
今回は、この光る部分を、LEDで表現してみました。
回路
色々検索すると、タイマーとコンデンサーで調整された回路が、公開されていますが・・・コンデンサの容量とか考えるのが面倒なので、PICでプログラムしました。
電源は、乾電池3本(4.5V)を想定しています。PICのデータシートによると、電源入力は4.0~5.5Vって事なので、レギュレータ(安定化)とか省略しちゃってます。
予熱(赤色LED)は、CCPによるPWMで表現し、白色LEDは、単純にデジタルポートでON/OFFしているだけです。
また、クロックも、4Mで充分なので、PIC内臓のものを使用しています。
※PIC16F819は、PIC16F84とかの定番じゃないため、公開されている情報等が少ないせいか、性能は、84より全然上なのに値段は安いというコスパ大なPICです。
プロググラム
#include<16F819.h> //INTRC_IO//内部クロックを使用してクロック用ピンをIOとして使用できるようにする設定 //「NOMCLR」を追加すると、「リセット端子を使用しない」設定となり、ICD2のMCLRを外さなくてもPICが動作する #fuses INTRC_IO,NOPUT, NOWDT, NOLVP, NOBROWNOUT,NOPROTECT//,NOMCLR #use delay(CLOCK=8000000)//4MHz void main(void){ int c=0; int duty=0; set_tris_b(0x80); //CCPの初期化 setup_timer_2(T2_DIV_BY_1,0xFF,1); setup_ccp1(CCP_PWM); // 赤色LEDをOFF(真っ暗) set_pwm1_duty(0); while(true){ // 徐々に赤色LEDを明るくする for(duty=0;duty<0xFF;duty++){ delay_ms(50); set_pwm1_duty(duty); } // 白色LEDをON output_high(PIN_A1); delay_ms(3000); // 3秒待機 // 赤色・白色LED共にOFF set_pwm1_duty(0); output_low(PIN_A1); delay_ms(3000); // 3秒待機 } }
全プロジェクトは、こちらです。github.com
動作確認
動作確認している様子です。

色が違うとか、タイミングが変とか、色々ツッコミありそうですが、そこはPICなので、プログラムを変えたらOK!
後は、実装ですが・・・なんか、ここに来て、必要性を全く感じなくなって来てしまった・・・