goo blog サービス終了のお知らせ 

カブですゝめAdvance with Super Cub

スーパーカブ110+プロと共に生きましょう。

ソ レ コ ン(6)

2018-02-18 | カブ以外

分かるように挫折しろって。




現実にこんな人が居たら避けるけど、今回は避けては通れない。

なぜなら、挫折プログラムが発動中はソレノイドがOFFの状態になるため
起動中なのか分からないんだ。

ただ、実行中の場合はマイコンの13ポートのLEDを点灯させれば
判別が可能なんだ。

LEDだと・・!?


そうか! そうだったんだ! じっちゃん!


うぉぉぉぉ!!!燃えてきた!!!




炎のエンブレムが誕生した



ホットボンド(グルーガン)で作ってみたんだけど
1発目のものが一番形がよかったわ。

下には、赤色LEDを仕込んだんだ。
マイコンの出力ポートはアナログ出力ができるポートを使う。

なぜなら、ON → ピカー だけだど面白くないでしょ。

せっかくの炎なんだしねっ

<炎の明るく暗くのプログラム>

for (le = 0; le <= 255; le++) {
time = millis() / 1000; //タイマー
analogWrite(LED_PIN, le);
delay(10);
}

for (le = 255; le >= 50; le--) {
time = millis() / 1000; //タイマー
analogWrite(LED_PIN, le);
delay(10);
}

LED_PINはアナログ出力ポートに設定しています。
255が最大に明るくなる。

こんな感じで点灯するはず。




これで、状態を表現することが可能になりました。


この炎を「情熱」の代わりとする!




さてさて、起動方法も特殊になりました。
炎を点火するためには

そうですね


今回は、マッチを使います。


100均一でほぼ揃いました

なぜマグネットを埋め込んだかですか?

世の中にはこういう100均一の商品がありまして・・・

※ 4個ほど破壊しました・・・

本体側にリードスイッチというマグネットに反応するスイッチがありまして。



コレが100均一で手に入ったのでやってみたのですよ。
まず、接点容量が雑魚過ぎて、電気ONしたら溶着した。(くっついたまま戻らない)

ガラスがもろい。さすがすぎて、ちゃんとしたのを買った。


コレを並列で3つ繋げて感知範囲を増やす。


情熱の横・下に固定して自己保持回路のスタート部に繋げばOK



次回、完成へ

ソ レ コ ン(5)

2018-02-12 | カブ以外
あと3回ぐらい書くことありそう・・・

前回は、振動させるプログラムの説明でした。

今回は、さらに遊び心を取り入れていきます!


遊び心って重要なんですよ!




面白くなければ、ワクワクしないじゃん


さて、挫折プログラムを作ってみましょうか。





できなくて、悩み苦しむこともあるだろう。

自分の能力の低さに嘆く日々。

なぜ、僕はこの程度もクリアできないんだろう。

もうダメだ・・・





あきらめんなよ!!
(※ 繰り返し)


そういう、時期が来ます。
それは、すべての事象で訪れるのではないのでしょうか。


そう、壁とも言われている成長の試練。


この期間をプログラムしてみた(え゛

とりあえず、40秒以内に任煮の角度になったら発動するようにした。


なぜなら、少しずつ地道に頑張って成長する人って
挫折をしない気がしたから。


まぁ、俺がそうなんだけどね! ・・・申し訳ない。


いずれ超えられそうも無い壁の出現に怯える日々を過ごしております。


<挫折プログラム>
測定角度が任意の角度になったら、
ソレノイドを一定時間、OFFにする。

簡単でしょ?




でも、挫折プログラムが発動しているのかが分からない。  よね。


つづく。

ソ レ コ ン(4)

2018-02-11 | カブ以外
加速度センサを用いたプログラムは
Arduinoの動かせ方入門をコピペから改造。

とりあえず基本的なものを貼り付けておく。

---------------------------------------------------------------------
void setup()
{
// シリアルモニターの初期化をする
Serial.begin(9600) ;
}
void loop()
{
int i ;
long x , y , z ;

// 各データを100回読込んで平均化する
x = y = z = 0 ;
for (i=0 ; i < 100 ; i++) { //>←html回避。
x = x + analogRead(3) ; // X軸を読込む
y = y + analogRead(4) ; // Y軸を読込む
z = z + analogRead(5) ; // Z軸を読込む
}
x = x / 100 ;
y = y / 100 ;
z = z / 100 ;
// 読み込んだ各軸をそのまま表示する
Serial.print("X:") ;
Serial.print(x) ; // X軸
Serial.print(" Y:") ;
Serial.print(y) ; // Y軸
Serial.print(" Z:") ;
Serial.println(z) ; // Z軸

delay(500) ;
}
---------------------------------------------------------------------

で、Z軸は必要なかったので無くします。
立ち上がったところがX=0 Y=0になるようので?
現在の角度を合成角度として値を出して使用します。



結果

3.3は電圧がMAX3.3Vなので。
---------------------------------------------------------------------
for (i = 0 ; i < 5 ; i++) { //>

float x = (analogRead(0) / 1024.0) * 3.3 * 1000 ; // X軸を読込む
float y = (analogRead(1) / 1024.0) * 3.3 * 1000 ; // Y軸を読込む
float z = (analogRead(2) / 1024.0) * 3.3 * 1000 ; // Z軸を読込む

// 電源電圧3.3V時のオフセット電圧(0G = 1.65V = 1650mV)←買った取説に書いてある。
float offset_voltage = 1650.0;

// XYZからオフセット電圧を引いた電圧を求める
x = x - offset_voltage;
y = y - offset_voltage;
z = z - offset_voltage;

// XYZから電圧Vを求める
//1gあたりの出力振幅 660mV=0.66Vの数値が1Gとなる。
float xg = x / 1000.0 / 0.66;
float yg = y / 1000.0 / 0.66;
float zg = z / 1000.0 / 0.66;

// 角度を計算して表示を行う
//https://qiita.com/NaotakaSaito/items/a8186ad41d1844408eca
//Θx = atan(x /√(y^2+z^2)) * 180 / 3.14
//二乗の書き方がわからなかったから・・・
x = atan(xg / sqrt ((yg * yg + zg * zg)) ) / 3.14159 * 180.0 ;//X角度
//Serial.print("X角度=") ;
//Serial.print(x) ; // X軸方向角度表示
//Serial.print(" Y角度=") ;
//Θy = atan(y /√(x^2+z^2)) * 180 / 3.14
y = atan(yg / sqrt ((xg * xg + zg * zg))) / 3.14159 * 180.0 ; //Y角度
//a = atan2(yg, zg - 0.66) / 3.14159 * 180.0 ;
//Serial.println(y) ; // Y軸方向角度表示

//出力する
//角度によって速度を変える。計算式は適当
x = abs(x); //絶対値
y = abs(y); //絶対値
z = sqrt((0 - x) * (0 - x) + (0 - y) * (0 - y));//距離を利用
def = z;//基準値とする。
}
---------------------------------------------------------------------

defの値が合成角度となる。これを使って制御を行います。

ついでに、上記の角度の取得は初期値の状態の傾きを
取得するためのプログラムです。

オフセット電圧は、KXR94-2050の取説を参照する。



ずっと動かしてるのもあれだったので
60秒経ったら止まるようにもプログラムしてました。

タイマーはArduinoボードがプログラムの実行を
開始した時から現在までの時間をミリ秒単位で返す

millis()

を利用。


time = millis() / 1000; //タイマー



まずは、起き上がるまでのソレノイドONのタイミングを決めましょうか。
共振よりも連打のほうが、なぜか揺れが大きくなるので
初期値は50ms(ミリ秒)で動かします。

初期角度と実行中の測定角度の差を算出し
マイナスになったらソレノイドを動かさない。
プラスのときのみ連打させます。



しかし、なかなか揺れが大きくならず
指でちょっと押すと大きくなっていく。


うーん。
タイミングを50msからずらしたりしますが改善しない。

















やりおるな!
























何回も試して、絶望し眺望していると
タイムアップした際に一瞬だけ大きく揺れた・・・


!!






まさかと思って、
傾きが3度より小さいとき、連打を300msとめるプログラムを追加。

ssが傾きの差
skは、どうやら測定値が3度より小さい値が
8回ループしたときの次を実行するカウンターだった。
(書いていたことを忘れてた・・・)


if (ss < 3) {
 sk = sk + 1;
 if (sk >= 8) {
  delay(300);
  digitalWrite(6, LOW);//OFF
  sk = 0;
 }
}



コレにより、揺れを大きくするキッカケを生み出すことができた!!!




まだつづく。

ソ レ コ ン(3)

2018-02-09 | カブ以外
カッコン カッコンの音だけが鳴り響く。
見つめ続ける起き上がらないタマゴ。

ただただ、時は過ぎ去る。



そして・・・















出来ない・・・
もうダメだ・・・















あきらめんなよ!




諦めんなよ、お前!!

どうしてそこでやめるんだ、
そこで!!
もう少し頑張ってみろよ!

ダメダメダメ!諦めたら!
周りのこと思えよ、
応援してる人たちのこと
思ってみろって!

あともうちょっとの
ところなんだから!





!!




炎の松岡さんが光臨した。





よし、起き上がろう!

起き上がる方を優先することにした。



重りとして、鉛を買ってきた。



あとは、ホットボンドを駆使してまた調整と調整。

中心に貼り付けると、立ち上がりにくくなった。
なので、なるべく外側に貼るのを多めに。




さらに、振り子が最大に活かせる向きに自然に傾くようにも考慮して。


重りの調整と共に、振動数を求めてたんだ。

今までは、共振させて揺れを大きくしてたんだけど、
立ち上がったり、しなかったり。


ただ、共振よりも振動を早くすると揺れが大きくなることが分かった。

そこで、最初の倒れた傾きから立ち上がる傾きまでは振動をONさせて
最初の傾きからより倒れたときはOFFにするようにプログラムを組んだ。

いい感じ


さらに、立ち上がる寸前で振動すると勢いが弱まる場合があるので
ある傾きになったら、OFFにするのも実装した


意味が分からんと思うが、まぁ小細工しないとダメっぽい。



つづく。

ソ レ コ ン(2)

2018-01-28 | カブ以外
さて、ここまで来たら何のコンテストかわかりましたね



ソレノイドを使ったコンテストです

詳しくはこちら



これらを卵形ケースに詰めます

重心位置が重要なので電池の入れ方とか、ちょっと工夫が必要


トランジスタ回路は、最小化して搭載した。

予定では、6Vラインの電源をONにしたら、
マイコンもONになるようにしようと思ったけど失敗したんだ
途中で自己保持回路を追加。
自己保持するためのリレーは、電気をあまり食わないフォトカプラで代用
抵抗器を間違えて2つ直列に繋いじゃったけど動いたからいっか


なぜ知ってるかというと、高校のときに使ったことあるんだなー
電子部品はうちに置いてないから、入手するのが面倒なんだ。


ソレノイドは、中心に置いてリンク機構で おもりを動かします。

リンクさせる棒は、ラジオペンチ2個使って曲げたら、マメ出来た



※ 部品増えてるけど、ケースに入れた途中の写真がこれしか無かった。


このおもちゃのやりたい動作は、
一端 倒れる。その後、元に戻ること。


まず、重心位置が高くて速攻、倒れるっていうねー
とりあえず、10円玉を束ねておもりを作って隙間に埋めていく。

大体130g必要だったのでー
初めての、お湯で金属が溶ける物質を購入。


鉛成分が入っているので、中毒にならないように
食品に使わない容器で溶かします。

70℃以上で溶け、そっと容器に入れて冷凍庫へ。

これで、倒れにくい状態になったけど・・・

今度は倒れない・・・



仕方ないので、振り子の周期を自動で変更するプログラムを作って試験した。

ふむー


ブリ



仕方ないので、加速度センサーを搭載した(←!!)

加速度センサーって、スマホに搭載されてて傾けると、なんかなるやつ。

コレを使うことで、あいつ自身で振り子の周期を調整してくれるようになるんだ。


とりあえず、どっかのブログで勉強して配線。


角度取得プログラムは、もちろんコピペ。
角度は立ち上がったとき(0,0)と、X軸Y軸の測定値との
座標距離を算出した値を角度と定義した。



この値を使って、ON-OFFのタイミングを計算させる。
出てきました、一次関数


ここで、2週間ほど彷徨う。

最終的に、最初のタイマープログラムを使って最小から最大まで振らせて
いい感じの振動数が判明したら、そこからまた1週間。

やり方は、一番共振するところを調べる。
100msから600msまで振動数を10秒ずつに20ms増幅させて見る。

倒れる最大値を仮入力して検証。

結果
y=5.2x+280

さらに、5.2のとことが5.4とか増やして検証。
yは振動数、xは角度。





できたけど、今度は立ち上がれない。 今の俺と一緒だな。


つづく。