• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

だれす@ずら。のブログ一覧

2016年01月31日 イイね!

第二次UC計画

第二次UC計画今日はガンプラですw

1/100MGユニコーンガンダムをLEDで光らせると言う目的を達成しましたが、覚醒状態(緑色)のユニコーンを作ってないなぁって事で、覚醒デストロイモードでやってみようかと思いました。

ネットで調べたら、HGUCですでにLED内蔵を実践してる人がいました。

関節部分にチューブがあるのが個人的にはいただけない(←そこ?

・・・これは俺もやっておかないと、半田付け技能特A級が泣くぜ!
と下手な対抗心を燃やして、はじめてみました。

今回の餌食は

1/144 RX-0「フルアーマー・ユニコーンガンダム(デストロイモード)HG
です。


例によって塗装設備がないので、素組みに墨入れ程度の組み立てですが・・・(汗


発光させるとこんな感じです。
1608サイズのチップLEDと0.38mmのポリウレタン銅線を手半田で接続。
電源は12Vで、電流はE-183(18mA)定電流ダイオードで、1回路4発の接続です。


照明を消すと、怪しい発光現象を再現できるかと思いますw

胴体が腰で連結されるので、まだ宙ぶらりんです・・・


目標としては、劇中のこのシーンを再現する事です。

ウェポン関連は正直どうでもいいです(ぉ


写真を撮ろうと思っていたら、SDカードが認識されなくなると言うトラブルが発生。
PCからでも認識されなくなっているので、たぶんアロケーションテーブルが壊れたかなんか。
まぁ、ノントラブルで2年使ってればこうもなるでしょうねぇ・・・
そろそろスマホのSDカードも新しいのに換えたいなぁ~と思う今日この頃。
・・・さすがに8GBは小さい・・・SDXCの64GBが使えるので買ってみようかしら?
密林で2000円程度かぁ・・・時代は変わったなぁ・・・(マテ


PCに接続して、FAT32でアロケーション4096で物理フォーマットをしてみたら、問題なく認識されるようになった。でも、写真の連番が初期化されて、同じ番号が重複するようになってしまった・・・
(OneDrive側でファイル名に装飾してくれるようになってるみたいだけど)


1/144HGUCユニコーンが終わったら、バンシィ・ノルンの覚醒デストロイモードをニコイチで作るかなぁ?

Posted at 2016/01/31 22:10:57 | トラックバック(0) | プラモデル | 趣味
2016年01月30日 イイね!

赤外線リモコンで遠隔操作

赤外線リモコンで遠隔操作先日の赤外線リモコンの解析から、入力されたビットデータから、キーコマンドのLCD表示と、ステッピングモーターの駆動を実践してみました。
今までやってきた、LCD表示と、ステッピングモーター駆動と、赤外線リモコンのプログラムを全部混ぜてやってみた感じですw

参考にさせてもらったサイトはこちら

参考サイトのサンプルスケッチだと、シリアルモニターにキー入力の値を表示をさせるようになってますが、そこのcase構文を書き換えて、LCDの表示コマンド「lcd.print」に表示内容を渡してます。
で、NEXT,PREVボタンで正回転、逆回転(1回転)を
VOL+,VOL-ボタンでステッピング(32/2048ステップ)動作をするように出力関数を持たせています。



・・・スマホで録画だからブレブレですね・・・まぁDV売っちゃったしなぁ・・・
これでリモコンの入力から出力制御まで出来るようになりました。
赤外線のデータ解析が出来るようになったので、たとえば、内蔵するモニターのリモコンボタンで、ある程度コマンドを吐き出させることも出来るかと思います。
そうすれば、余計なリモコンを用意しなくてもいい感じになるしw

この次はDCモーターをつかっての駆動と、実機の設計ですかね。
メカニカルな部分は作ってみないとわからないので、資本的な問題で、もう少し先になりそうです・・・


====赤外線でモーターとLCD表示をさせるスケッチ=============

#include <Stepper.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define STEPS_PER_MOTOR_REVOLUTION 32
#define STEPS_PER_OUTPUT_REVOLUTION 32 * 64 //2048ステップ

#define IR_IN 2
#define IR_DATA_SIZE 100

byte ir_data[IR_DATA_SIZE];
byte ir_code[32];
byte ir_result;

char f[16] = "FORWARD!";
char r[16] = "REVERSE!";

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // 液晶I2Cアドレス宣言
Stepper small_stepper(STEPS_PER_MOTOR_REVOLUTION, 8, 10, 9, 11);//ステッピングモーター出力端子宣言


int Steps2Take;

void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); //LCD開始座標
lcd.backlight();//バックライトON
pinMode(IR_IN, INPUT_PULLUP); //赤外線入力端子
}
void loop()
{
ir_result = ir_read(IR_IN);
if (ir_result > 0) {
//Serial.println(ir_result,DEC);
print_comand(ir_result);
}
}

//データ受信
byte ir_read(byte ir_pin) {
unsigned long now, last, start_at;
boolean stat;
start_at = micros();

//2.5秒以上入力がなかったら終了
while (stat = digitalRead(ir_pin)) {
if (micros() - start_at > 2500000) return 0;
}

digitalWrite(13, HIGH);
for (int i = 0; i < IR_DATA_SIZE; i++) {
ir_data[i] = 0;
}

start_at = last = micros();
for (int i = 0; i < IR_DATA_SIZE; i++) {
//入力が反転するまで待ち(上限25ms)
while (1) {
if (stat != digitalRead(ir_pin)) break;
//信号終了
if (micros() - last > 25000) {
digitalWrite(13, LOW);
return ir_get_data();
}
}
now = micros();
ir_data[i] = (now - last) / 100; //byteに格納するため
last = now;
stat = !stat;
}

}

//データ解析
byte ir_get_data() {
int j = 0;
byte result = 0;

//1or0判定
for (int i = 3; i < 66; i += 2) {
if (ir_data[i] > 10) {
ir_code[j] = 1;
} else {
ir_code[j] = 0;
}
j++;
}

//データを数値化
for (int i = 0; i < 8; i++) {
if (ir_code[i + 16] == ir_code[i + 24]) { //反転データチェック
result = 0;
break;
} else {
bitWrite(result, i, ir_code[i + 16]);
}
}
return result;

}

//コマンド出力
void print_comand(byte ir) {
switch (ir) {
case 69:
lcd.setCursor(0, 0);
lcd.print("CH-");
delay(1000);
lcd.clear();
break;
case 70:
lcd.setCursor(0, 0);
lcd.print("CH");
delay(1000);
lcd.clear();
break;
case 71:
lcd.setCursor(0, 0);
lcd.print("CH+");
delay(1000);
lcd.clear();
break;
case 68:
stepRev();
break;
case 64:
stepFwd();
break;
case 67:
lcd.setCursor(0, 0);
lcd.print("PLAY&PAUSE");
delay(1000);
lcd.clear();
break;
case 7:
stepSRev();
break;
case 21:
stepSFwd();
break;
case 9:
lcd.setCursor(0, 0);
lcd.print("EQ");
delay(1000);
lcd.clear();
break;
case 22:
lcd.setCursor(0, 0);
lcd.print("0");
delay(1000);
lcd.clear();
break;
case 25:
lcd.setCursor(0, 0);
lcd.print("100+");
delay(1000);
lcd.clear();
break;
case 13:
lcd.setCursor(0, 0);
lcd.print("200+");
delay(1000);
lcd.clear();
break;
case 12:
lcd.setCursor(0, 0);
lcd.print("1");
delay(1000);
lcd.clear();
break;
case 24:
lcd.setCursor(0, 0);
lcd.print("2");
delay(1000);
lcd.clear();
break;
case 94:
lcd.setCursor(0, 0);
lcd.print("3");
delay(1000);
lcd.clear();
break;
case 8:
lcd.setCursor(0, 0);
lcd.print("4");
delay(1000);
lcd.clear();
break;
case 28:
lcd.setCursor(0, 0);
lcd.print("5");
delay(1000);
lcd.clear();
break;
case 90:
lcd.setCursor(0, 0);
lcd.print("6");
delay(1000);
lcd.clear();
break;
case 66:
lcd.setCursor(0, 0);
lcd.print("7");
delay(1000);
lcd.clear();
break;
case 82:
lcd.setCursor(0, 0);
lcd.print("8");
delay(1000);
lcd.clear();
break;
case 74:
lcd.setCursor(0, 0);
lcd.print("9");
delay(1000);
lcd.clear();
break;
default:
;
}

}


void stepFwd() //反時計回り(1回転)
{
lcd.setCursor(0, 0);
lcd.print(f);

Steps2Take = STEPS_PER_OUTPUT_REVOLUTION ;
small_stepper.setSpeed(700);
small_stepper.step(Steps2Take);
delay(1000);
lcd.clear();

}
void stepSFwd() //反時計回り(32ステップ)
{
lcd.setCursor(0, 0);
lcd.print(f);

Steps2Take = 32 ;
small_stepper.setSpeed(700);
small_stepper.step(Steps2Take);

}
void stepRev() //時計回り(1回転)
{
lcd.setCursor(0, 0);
lcd.print(r);

Steps2Take = - STEPS_PER_OUTPUT_REVOLUTION ;
small_stepper.setSpeed(700);
small_stepper.step(Steps2Take);
delay(1000);
lcd.clear();

}
void stepSRev() //時計回り(32ステップ)
{
lcd.setCursor(0, 0);
lcd.print(r);

Steps2Take = - 32 ;
small_stepper.setSpeed(700);
small_stepper.step(Steps2Take);

}

==============================================================

・・・ホップアップモニターへの道は長いな・・・

Posted at 2016/01/30 19:22:05 | トラックバック(0) | Arduino | 日記
2016年01月26日 イイね!

赤外線リモコンの解析

赤外線リモコンの解析昨日に引き続き、引き篭もってますw

暇さえあれば、スクフェスやって、エアガン撃って、ゴロ寝して・・・

完璧に駄目人間ですね!(ぉ

そんな感じのお休みですが、またまたArduinoを使って実験君です。

今日は赤外線リモコンが吐き出すデータをハッキングして見よう。って内容です。


Arduinoのセットに入ってた、赤外線リモコンと赤外線受光モジュール。

参考にしたのは、こちらのサイトです。

ほぼ、同じ中華製のリモコン(表面が違うだけ?)だと思ったので、そのまま使えるだろうと思って、スケッチをコピペして、回路を接続。



・・・うまく動作しない・・・


どうやら、赤外線受光モジュールの配線を間違ってたらしい。

直してつけて見たけど、まったく反応なし。


・・・どうやら誤配線で壊したらしい・・・orz


さてどうしよう?と思っていたところに、そういえば昔赤外線送受信モジュールを遊びで買った覚えがあったなぁ~とパーツ箱をあさって見る。



・・・あった。



基盤から半田を温めて抜き取る。
そのままだとブレッドボードにうまく刺さらないので、配線を接続。

こんな感じになりました(汗


Fritzingのイラストだとこんな感じ。

=================================================
//IRリモコン解析用

#define BUTTON 9
#define IR_IN 10
#define IR_DATA_SIZE 100

byte ir_data[IR_DATA_SIZE];
byte ir_code[32];

void setup() {
Serial.begin(9600);
pinMode(IR_IN, INPUT_PULLUP);
pinMode(BUTTON, INPUT_PULLUP);
}

void loop() {
if(digitalRead(BUTTON) == 0){
digitalWrite(13,HIGH);
ir_read(IR_IN);
ir_print_1();
ir_print_2();
digitalWrite(13,LOW);
}else{
digitalWrite(13,LOW);
}
}

//データ受信
void ir_read(byte ir_pin){
for(int i = 0; i < IR_DATA_SIZE; i++){
ir_data[i] = 0;
}
unsigned long now, last, start_at;
boolean stat;
start_at = micros();

//2.5秒以上入力がなかったら終了
while(stat = digitalRead(ir_pin)){
if(micros() - start_at > 2500000) return;
}

start_at = last = micros();
for(int i = 0; i < IR_DATA_SIZE; i++){
//入力が反転するまで待ち(上限25ms)
while(1){
if(stat != digitalRead(ir_pin)) break;
if(micros() - last > 25000) return;
}
now = micros();
ir_data[i] = (now - last)/100; //byteに格納するあため
last = now;
stat = !stat;
}

}

//生データ出力
void ir_print_1(){
for (int i = 0; i < IR_DATA_SIZE; i++){
Serial.print(ir_data[i]);
if(ir_data[i] < 1) break;
Serial.print(",");
}
Serial.println();
}

//解析データ出力
void ir_print_2(){
int j = 0;
byte result = 0;

//1or0判定
for (int i = 3; i < 66; i+=2){
if(ir_data[i] > 10){
ir_code[j] = 1;
}else{
ir_code[j] = 0;
}
j++;
}

//データを数値化
for (int i = 0; i < 8; i++){
if(ir_code[i+16] == ir_code[i+24]){ //反転データチェック
result = 0;
break;
}else{
bitWrite(result,i,ir_code[i+16]);
}
}

//出力
for(int i = 0; i < 32; i++){
Serial.print(ir_code[i]);
Serial.print(",");
}
Serial.println();
Serial.println(result,DEC);

}
===========================================

ボタンを押すと入力待機(2.5秒)その間赤外線の入力がなければ終了。
赤外線の入力があったら、シリアル通信で出力。
で、出力データの整頓プログラムつきです。


シリアルモニターの出力はこんな感じです。


参考にしたサイトのリモコンと同じデータビットを吐き出してるのがわかりました。
まぁ、同じ中華製なので妥当な結果ですね。

この受信データをプログラムで動的に出力させることが出来れば、リモコンで、モーターを動かしたりする事が出来るようになります。
今回はその足がかりとして、サンプルスケッチの構文解析がメインですね。

データビットの解析が出来るようになったら、リモコンコピー機とか色々作れるようになりますね。

とりあえず、今日の研究結果は以上です。



Posted at 2016/01/26 18:01:57 | トラックバック(0) | Arduino | 日記
2016年01月25日 イイね!

モーターを回そう

モーターを回そう昨日から3連休です。

連休だけど特に予定もありません。
昨日は映画行っただけです・・・外出すると余計な金使うから引篭もってます(ぉ

そんな感じで、今日は自宅にこもってArduinoを使った研究&実験な感じです。
今回はステッピングモーターを動作させる回路に挑戦。

最終目標はホップアップモニターの作成なので、モーター駆動の原理をある程度把握しておけば、実機にするときに参考になるだろうということです。

で、今回使うのが「28BJY-48」ってステッピングモーター。

大体、「ULN2003AN」ってトランジスタアレイってICを使ったドライブ回路基盤がついてます。

Arduinoをつかった28BYJの動作回路をググったら、こちらのサイトにありました。

ステッピングモーターの動作原理とかは、こちらを参照しました。2-2相励磁ってパルス駆動をつかってみました。消費電力は上がるけど、トルクが増大するらしい。

Fritzingって基盤イラストを作成できるツールを使ってみました。

ただ、うちの環境だと、最新のバージョン0.9.2bが動作しなかったので、0.8.7bのバージョンを使用してます。なぜだろう?・・・VisualStudioのライブラリがコンフリクトしてんだっぺか?

とりあえず、Fritzingってこういう図をスケッチするのに便利。


回路図で言うとこんな感じ。
スイッチに抵抗を使ってデジタル入力をするのですが、これはプルアップ抵抗って呼ばれる方式で、
スイッチがOFFの場合、入力に5V(HIGH)が入力されています。
スイッチがONの場合、入力に0V(LOW)が入力されます。
抵抗を入れていないで単純にスイッチでON/OFFさせると、ショートする事になるので、デジタル回路には良く使われます。



実際はこんな状態ですけどね(ぉ


動作が判り易いように、ステッピングモーターにチノちゃんを乗せてみました(ぇ


2ボタンで、ボタンを押すと、正転・逆転をする単純な仕組みです。
ステッピングモーターだから、本当は角度指定で回したりが出来るはずだけど、今回は練習って事で、単純に回すだけのプログラム(スケッチ)です。



===サンプルスケッチ=================================================
int motorPin1 = 8; // Blue - 28BYJ48 pin 1
int motorPin2 = 9; // Pink - 28BYJ48 pin 2
int motorPin3 = 10; // Yellow - 28BYJ48 pin 3
int motorPin4 = 11; // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)

int motorSpeed = 800; //速度。数値が小さいほど速くなる。800以下は脱調して動かない
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
// 2-2相励磁のデジタル出力アドレス。

void setup() {
//declare the motor pins as outputs
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
}

void loop(){
if(digitalRead(2)==LOW){   //入力スイッチ(2番ピン)が押される
clockwise();          //時計回り関数へ
}
else if (digitalRead(3)==LOW){ //入力スイッチ(3番ピン)が押される
anticlockwise();         //反時計回り関数へ
}

}

//////////////////////////////////////////////////////////////////////////////

void anticlockwise() //反時計回り関数
{
for(int i = 0; i < 8; i++) //加算ループ
{
setOutput(i);      //数値を関数に渡す
delayMicroseconds(motorSpeed);
}
}

void clockwise() //時計回り関数
{
for(int i = 7; i >= 0; i--) //減算ループ
{
setOutput(i);   //数値を関数に渡す
delayMicroseconds(motorSpeed);
}
}

void setOutput(int out)  //2-2相励磁出力関数
{
digitalWrite(motorPin1, bitRead(lookup[out], 0));  
digitalWrite(motorPin2, bitRead(lookup[out], 1));
digitalWrite(motorPin3, bitRead(lookup[out], 2));
digitalWrite(motorPin4, bitRead(lookup[out], 3));

// int lookup[8]で設定したアドレス出力を選択

}

=============================================================

まぁ、こんな感じです。
・・・いまいち参考にならないなぁ・・・

C言語自体、久しぶりだから、関数とかメソッドとか色々悩みつつ、解読しつつソースを書いてみましたが、 まだまだ詰められそうな感じ。

ただ、実際にはステッピングモーターを使うか、普通の単相モーターの、ウォームギヤを使ってトルクを稼ぐかは今のところ未定ですが、サーボモーターはちょっと違う気がする。
ウォームギヤってのはこんなやつです。

田宮さんから工作キットで出てます。
速度とトルクを得るにはこれが最適のような気がします。
そうなると、モータードライバICとか使って勉強する必要があるかなぁ?
TA7291Pとか・・・
これ使うと、正転・逆転・ストップ・ブレーキの制御が3chで出来るようになる。
DCモーターを使うなら、やっぱりこれかなぁ・・・

Arduinoで色々電子工作の幅が広がる感じが楽しいです♪
車いじり+マイコンはDIYの可能性が広がります・・・たぶん(ぇ

エーモン工業で満足できないって人向けですけどねw



Posted at 2016/01/25 21:21:10 | トラックバック(0) | Arduino | 日記
2016年01月24日 イイね!

増えた!

増えた!エアコンプレッサー導入で、冬でも快適ガスガン撃ちまくりを夢見て色々用意しましたが、「銃刀法」という壁が立ちはだかったので、その対策を講じることにしました。

・・・なのに、なぜか銃が一丁増えました(滝汗


KSC M93R-Ⅱ
KSCのサイトで増産が決定したとの事で、思わず購入してしまいました。
セミオート・フルオートの切り替えができて、KSCオリジナルの三点バースト機能(1トリガーで3発発射する)もついた高性能マシンピストルです。

フルオートが出来るハンドガンだとグロック18Cとかがいいかなぁ~と思ってたけど、M93R再販のニュースにそっちを選んでしまった・・・グロックは電動の10禁でもいいかなぁ~
増弾した39連マガジンは、M92バーテックと互換があるので、外部ソースを使う場合とHFC134aを使った場合と、色々な応用ができそうです。

で、外部ソースのお話。

エアコンプレッサーを導入しましたが、友人に指摘され、そのままの内容でネットにアップすると問題があることがわかりました。


銃刀法で遊戯銃ではパワーが0.98ジュール以下であること。簡単に言えば、それ以上になると、逮捕されるという事になります(汗

安全に楽しく遊ぶために、パワー規制に準拠したエネルギーに設定しないといけません。

圧力を0.45Mpa以下に制限するリリースバルブを取り付けてみたものの、KSCのシステム7では、圧力抜けが激しく、動作不足な感じです。

そこで、圧力を動作するレベルまでレギュレータを調整したのですが、結局出力が不明のままだと、違法改造銃を所持してしまうことになる。
弾速計は買うと8000円くらいするので、なかなか手が出せないので、
ASGK日本遊戯銃協同組合
http://www.asgk.jp/
こちらから販売されている、簡易弾速測定器を購入して、パワーを測定してみることにしました。


KSCのシステム7が動作するレベルの空気圧が0.45Mpa程度。リリースバルブがちょうど開いてしまう圧力です。リリースバルブの動作の仕組みが不明ですが、動作すると、0.4Mpaまで圧力が下がるまで弁が開きっぱなしになる為、マガジンチャンバーの内圧が一定にはならないようです。
レギュレーターを0.45~0.50Mpaの間で固定して、弾速測定。

一応、0.8ジュール位で収まり、システム7の動作も問題なく動くレベルです。
この設定値なら、合格。規制値に収まりました。
もう一枚抜いていたら、精密計測が必要なレベル。赤紙まで抜いたら完全にアウトです。
ただ、エアーツールなどを使う際にレギュレータを動かしてしまうと、結局調整をし直すたびに弾速を計測しないといけなくなるので、エアガン専用のエアレギュレータを用意しないと駄目ですね。
次は東京マルイの製品を買って、威力を比べてみたいと思います。
・・・結局、M9になっちゃうんだろうなぁ~ベレッタカッコいいしwww


ガンケースに2丁入るけど、ちょっと窮屈な感じ。
ケースももうひとつ買ったほうがいいかも?
バーテックの握りがちょっと細身なので、持った感じが全然違います。同じM9系でもこんなに違うんだなぁ~って思いました。
東京マルイ製品は持ってないので、そっちも試してみたい感じです。

2丁のベレッタと言うと、やっぱりツーハンドですよねw


そして、今日も映画を見てきました。
昨晩友人とAM3時まで電話してたおかげで、半分くらい寝てましたが・・・(汗

無事にドロシーの色紙をゲット♪


コレクター魂を揺さぶるカントク色紙がそろいました。


映画といえば、ガルパンの4DXが決定しましたね。
非常に楽しみです。近場だと、ユナイテッドシネマ春日部ですかね?
あの熱い戦車戦に臨場感が足されると思うと、失禁してしまいそうです(マテ

Posted at 2016/01/24 17:58:24 | トラックバック(0) | エアガン | 日記

プロフィール

「禁断の果実(りんご)の誘惑 http://cvw.jp/b/2036390/44515607/
何シテル?   10/28 00:21
放置プレイ実施中 ぼちぼち復帰します。 改名しました。
みんカラ新規会員登録

ユーザー内検索

<< 2016/1 >>

     12
345 678 9
10111213 141516
17181920212223
24 25 26272829 30
31      

リンク・クリップ

プッシュスタートスイッチ 
カテゴリ:その他(カテゴリ未設定)
2021/02/06 22:50:27
オートパーラー上尾 コンビーフサンドはここだけ 
カテゴリ:その他(カテゴリ未設定)
2017/12/17 20:49:21
オートレストラン 鉄剣タロー レトロ自販機の牙城@サイタマー 
カテゴリ:その他(カテゴリ未設定)
2017/12/17 20:49:16

愛車一覧

スズキ スペーシアカスタムハイブリッド スズキ スペーシアカスタムハイブリッド
パレットがポンコツ過ぎて買い替える予定でしたが、事故って直すのも勿体ないと、前倒しで買い ...
スズキ パレット スズキ パレット
パレットに乗り換えました。 憧れだった軽です(ぇ ・乗り降りがしやすい ・頭がぶつから ...
日産 シルビア 苺たん (日産 シルビア)
S15シルビアを新車で乗って19年・・・ 当時周りが180SXやらS14やらに乗って ...
ヘルプ利用規約サイトマップ
© LY Corporation