前回なんとかギミックが動き安心しましたが、少し気になる部分を改造してみました。
今回もarduinoを使用です。だって簡単なんですもの^^;
まずはF-4EJ改のリモコン信号を調べます。
必要なのは、バルカン砲、ライト、ランディングギア用の信号です。
バルカン砲0x99CC2E88 ライト0x6CD61778 ランディングギア0xE2EE6320のようです。
これを使ってarduinoのIR用のプログラムを元に製作しました^^。
信号線は赤外線受信機の信号線(茶色)を分岐させました。
arduinoは基板に取り付けて配線
ただ、arduinoを入れてしまうと基盤部分の外装パーツに干渉します。
中央の桁を削っておきました。
こんな感じで入れ込んでいく予定です^^。
コクピットの電飾はLEDの個数を増やしたので念のため本体の基板を通さずにarduinoで制御です。
さらに、背中の外装パーツを取り付けるとメイン基盤のLEDが見えなくなり、通電しているのかどうかわからなくなります。そのため、確認できる様に通電したら5秒間コクピットが点灯する様にしておきました。
その後はリモコンのライトのスイッチを押すと点灯/消灯するようにしました。
次バルカン砲のLEDを増設しましたので、これもリモコンのバルカン砲のスイッチを押すと点灯するようにしました。
バルカン砲の音響は途中でスイッチを離すと音が途中で止まってしまいますので、押しっぱなしなしです。その時間に合わせてバルカン砲の点滅回数を設定しました。
リモコンのリピート信号を拾って押している間だけ点滅というのもできるのかもしれませんが、そこまでの能力は私にはありませんw
実は、当初の予定ではここまでだったのですが、尾翼のライト類が点滅しないのが気になってyoutubeで調べてみると、垂直尾翼の全てのライト類、インテーク下のライト、コクピット後方の識別灯はPWM様のじんわり点滅していましたw
アシェットさん手抜き?もしくは私の基盤だけ点滅しないのかな??
てなことで、この点滅もarduinoで管理することに。
その際、テールの光ファイバーは1本につき1LEDとなっていましたが、
ファイバー用のLEDは一つにまとめちゃいました。
LEDとファイバーの接続も調整してテールポジションライトの光量も今までより少しアップですw
インテーク下のライトはランデイングギアが出ている時に点滅するようで周期は垂直尾翼のライトと同じです。ランディングギアが出ていない時は垂直尾翼と識別灯の点滅となります。
プログラム少し悩みましたが、インテーク下、垂直尾翼のライトのどちらもが点灯してもPWM波が出るようにして、それぞれのマイナスを個別のTRにつなげてインテーク下のリモコンを押した時にTRのベースに電流を流すようにしました。垂直尾翼も同様の配線としています。
この様な感じになりました。
プログラムはこんな感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
#include <SoftwareSerial.h> #include <IRremote.h> int RECV_PIN = 2;//pin割り込み0を使用 IRrecv irrecv(RECV_PIN); decode_results results; //#define vulcan 8 //PB0 //#define cokpit 9//PB1 //#define PWM 11//PB3 //#define intake 10//PB2 //#define light 12//PB4 int a,b,c,k,w,duty1=0; long key; long z1=0x99CC2E88,z2=0x6CD61778,z3=0xE2EE6320;//リモコン信号 //---------------------------関数----------------------------- void my_IR_recv() //赤外線受信関数 { if (irrecv.decode(&results)) { key=results.value; irrecv.resume(); // Receive the next value Serial.println(key,HEX); operation(); } } void operation(){ if(key==z1){a=1; key=0;} //vulcan if(key==z2){PORTB^=(1<<PB1); //cokpit PORTB^=(1<<PB4); //light b^=1; //PWM on,of Serial.println("cokpit"); key=0; delay(1000); } if(key==z3){PORTB^=(1<<PB2); //intake c^=1; //PWM on,of Serial.println("intake"); key=0; delay(1000); } } //-------------------タイマー割り込み----------------------------- ISR(TIMER1_COMPA_vect){ w^=1; if(w && a){PORTB|=(1<<PB0);k++;}else{PORTB&=~(1<<PB0);} //valcan if(k>70){k=0;a=0;} } //------------------------------------------------------------------ void setup() { Serial.begin (9600); irrecv.enableIRIn(); Serial.println("IRrecv OK"); attachInterrupt(0, my_IR_recv, CHANGE);//pin割り込み0 PIN 2使用 DDRB=0b00011111; TCCR2A=0b10000101; //PWM TCCR2B=0b00000001; OCR2A =0; TCCR1A=0b00000000; //vulcan TCCR1B=0b00001100; //比較一致タイマ CTC top=OCR1A TIMSK1=0b00000010; OCR1A =1400; sei(); PORTB|=(1<<PB1); //cokpit delay(5000); PORTB&=~(1<<PB1); } void loop() { if(b==1|| c==1){for(int i=0;i<50;i++){ ////PWM duty1=duty1+5; OCR2A=duty1; //Serial.println(OCR2A); delay(8); } for(int i=0;i<50;i++){ duty1=duty1-5; OCR2A=duty1; //Serial.println(OCR2A); delay(8); } } } |
シリアル通信と赤外線受信部分のみarduinoの関数を使用してその他は通常のCで書いてあります。
arduinoIDEが普通のCでかけるのがわかって随分楽になりました^^。今までのプログラムのコピぺでいけます^^
ただ、ちょっとわかりにくくなってしまってすみません^^;
ただこの方式も問題点がありまして、赤外線受信機のセンサーの信号線を分岐させているのですが、たまに本体の方は信号を受信しているのにarduinoは受信していないとかあります^^;
この辺のことを考えるとまだ少し改良が必要かもしれません^^;
今回この様に改造のため色々やっていたのですが、とにかく本体への給電が安定しませんね〜。
ひどい時なんかメインスイッチを入れて最初のギミックチェックの際に外翼が展開するその振動で給電が途切れるとかありますwあの台座の給電方法少し考えたほうがいいかもですね・・・・
あまりにも本体への給電が安定しないので、途中から給電用の配線を作ってそれを用いてテストしていましたw
あっ!ちなみに、色々試しているときにプラスマイナスの配線間違えてarduino nanoが1つ天に召されました^^;
その時なんと!arduinoの魂が抜けていくのが見えました!!(焼けた煙かもしれませんがw)
チップが燃えて穴が空いていましたw南無・・・・・。
関連すると思われる記事:
- None Found
こんばんは!
まずは昇天されたArduinoさんに南阿弥陀~です。(笑)
わたしもたまにPICを壊します。
F4Jのリモコン信号の解析は、手持ちのツールで簡単にできるのですか?
メーカーによって、信号の仕様が異なるので、自作したことがあるのですが、全てのメーカーには対応できませんでした。
リモコン信号が解析できれば、あとは追加の動作を仕込むのも可能ですね。ますます「妄想」が広がりますね(笑)
いずれにしても順調で何よりです!!
Vividさん こんばんは!
いつもコメントありがとうございます!
Vividさんでもそんなミスするんですね。少し安心した気がw
リモコン信号はどの形式にも当てはまらないUNKNOWNでした^^;
解析はarduinoのIR受信プログラムで行いました。
赤外線を受信すると、形式とデーターを表示してくれますので、そのデーターを使用しています。
ほんとaruduinoさまさまですw
おおっ!ギャランをピカピカさせるのにいい見本がここにっ!
いずれコピペで使わせていただきますです^^b
昇天されたチップは電源まわりなので、本体はまだ存命のような。
ってわざわざ付け替えて使う価格のものでもないですか^^;
しかし、基盤と配線が毎度のことですが凄いことになってますね^^;;;
おもわず、うひゃーって言ってページ閉じちゃいそうになる…
こんばんは
なるほど、nanoだとこのくらいのスペースでも仕込めるのですね。
PWMとTrの組み合わせでのPWMの有効利用はお見事です。こういう発想はありませんでした( ..)φメモメモ
確かに電源関係でやらかすと煙を吹いて魂が抜けるときありますね。
デバイスだけでなく基板に穴が開いたこともあります。供給能力の高いDC電源は凶器です(;^ω^)
お怪我とかなくてよかったです。
gyoさん こんばんは!
いつもコメントありがとうございます!
リモコンでピカピカの予定でしたら、リモコンの信号データーさえ書き変えれば同じ感じでいくらでもピカピカできますよね^^。
タイマー割り込みのスピードを落とせばウインカーも可能です^^
昇天されたnanoさんは例のSH60とかいうチップの部分のようでした。確かに交換すると使えるかもしれませんが、あっさり廃棄処分ですwそのチップ手に入れる労力と料金の方がたかそうですw
元のファントム自体がかなり配線ウジャウジャですから、そこにさらに配線追加したのでグチャグチャですw
なおさん こんばんは!
いつもコメントありがとうございます!
nanoだと結構入れ込むことできますね〜。今回はこの後さらに機体を分解することがありますのでピン接続のためスペースとりましたが、直接半田付けとなると大分スペースは少なくなると思います。
PWMは苦し紛れの方法です^^;それぞれに別のPWMを設定するとどうしても周期がずれちゃいますから・・・。
さらにバルカン砲のためにタイマー割り込み使用するのでarduinoではタイマーが足りなくなちゃいますw
煙吹きますよね〜w
基盤に穴が空くって・・・・・怖いですね・・・。
確かに供給能力の高いDCは下手するとほんと怖いですよね。