前回でエンジン部分の電子パーツの組み込み終わりましたので、このVF-1のギミックを統括するマスターのarduinoとの連携を確認しておかないといけません。
<追記>スレイブの設定画面間違っていたので修正しておきました。
I2Cに初挑戦ですwとはいってもarduinoですがw
今回のVF-1は色々とギミックを盛り込んだはいいけど、これを1つのarduinoでコントロールするのは困難です。
そこで何個かのarduinoを仕込んでそれを連携させて動かそうという方針です。
その連携のためにはarduino同士が連絡を取らないといけません。
その通信方式も色々とあるようですが、SPIという通信方法が通信速度は速いらしいのですが、つなげる配線が多くなるのがネックで、今回はつなげる通信用の配線が2本(SDA 、SCL)と少ないI2C方式に決定!
I2Cと言っても、いつもコメントいただく方達はよくご存じと思いますが、普通の人は私を含めて知りませんw
>I2C(アイ・スクエアド・シー、アイ・アイ・シー)はフィリップス社が提唱する通信インターフェースで,クロックに同期させてデータの通信を行う同期式シリアル通信のひとつです。
という事らしいですwちなみに読み方わからなくて勝手にアイ・ツー・シーと読んでいましたw
でも、ネット見ると同じようにアイ・ツー・シーと呼んでる人も多いみたいですねw
詳しくはこちらのサイトに丁寧に説明してあるので興味のある方はご覧ください^^
ちなみに私のように「動けばいいのwこまけーことはいいんだよw!」てな方はとりあえずarduinoのwireライブラリー使いましょうw
まずはマスター側、最初にこれ書いて
setupにもこの1行書いて
こんなコマンド作って
命令するだけw
次にスレーブの方も、最初にこれ書いて
setupにこのスレイブのIDアドレス(黄色矢印)今回は9番と書いて、赤の一行追加
(setup部分でarduinoでは普通見ないレジスタの設定項目が有りますが無視してください^^;)
受信時の関数書いて
受信したデーターでの行動分岐書いて
Vividさん、たったこれだけで動きますよww
arduino!神かおまえはw!
全く原理を理解していない私でも簡単に!!!って、実はいつものごとく簡単にいきませんでしたw
とりあえずテスト用のそれぞれのarduino配線を作り繋げました。
この時点で配線の多さに嫌気がw
まっ、何とか配線完了。
ではいよいよマスターとスレイブを接続して動かしてみますか~!
電源オン!・・・・・・・・サーボが暴走wwww
ぎゃ~~暴れまくっているwwそこからか~~~w!!!
電源オフで・・・・・・・ふ~っ危なかったギミック壊れるところだった^^;
ベクタードノズルが限界を超えた角度で曲がってますw
これ軸がネオジム磁石だったからよかったですが、通常の軸打ってたら絶対折れてた^^;
なんてったって、このサーボのトルク7kgですからw
これはI2Cがどうとかの問題でなくてただ単にサーボの瞬間的な電流量が足りてない。
エンジンパート1本分なら電流量が足りていたようですが、2本同時となると無理みたい^^;
結局以前のトルク2kgのサーボに再度交換。
これでスイッチオンでサーボの暴走無くなりました^^;怖かった・・・・・(T T)
ちなみにサーボのトルク少なくしたので、上に動いた後のセンターと下に動いた後のセンターでは結構ノズルの位置が違いますw
そのため動いてきた方向と反対方向に少し引っ張った位置でセンターとするようにしました。
例えば下からセンターに動く場合は、本来のセンターの位置よりも少し上をセンターとして戻っていくようにしました。これでノズルのセンターの位置精度が少し向上^^
サーボの暴走は収まりましたが、今度はどこも全く動いてくれないwまっそうなるだろうなと思っていましたがw
とりあえず問題点を探っていきます。
まずはマスターのarduinoから信号が出ているか?ロジアナを出してきて信号確認。
シ~~~~ンw測定さえ開始しないww
信号出てないじゃw!てなことでまずはwireライブラリーのスケッチ例でテスト。
シ~~~~ンwえっwこれでも信号でないなんて・・・配線間違ってないか?
大丈夫そう・・・・・・・・わからん・・・・・・
もしかして・・・とarduinoを交換。あっさり信号出てるw
ちゃんとスレイブ8番を呼んでる。
arduinoに書き込みとかできるから壊れていると疑わなかったのですが、どうやら壊れていたようですw
交換後、またプログラムをVF-1用の物に戻し信号チェック
よしID8にはつながってコマンド送ってる^^ID9は・・・・配線つなぎ忘れてたw
配線をつなぎなおして
よしこれで、2つのスレイブにコマンド0X01送ってる^^
これでマスターの方はオッケー。でもまだ動かないw
スレイブの方の問題だなとプログラムも見ていると、受信関数を作っているのにその受信関数をsetup内で読み込んでなかったw書き忘れですww
できた~~!!I2Cなんて全く知らないのに出来たww
arduinoすげ~~~っw!
動いたのですが、エンジン部分右側のモクモクが少し少ない。PWMの周波数を少し調整して左と同じ程度モクモクが出るように修正しました^^
ちなみに尾翼部分もサーボの配線を整理して、基板をセット
サーボの可動範囲とスピードを書き込んで
蓋は取り外し可能なようにネオジム磁石で
とりあえず一旦本体に固定して
arduino様のおかげでI2C何とか可動^^
よし、今後もI2C使えそうだな^^
関連すると思われる記事:
- None Found
スレイブにワイヤー
奴隷に紐つけなんて
まー!いやらしい。
不潔よ!不潔!!
先生の新たな性癖を見せつけられたわ!!
ぷんぷん!!
違う??
てつのさん こんばんは!
うほw
確かになんでI2Cでwireなんでしょうかねw?私もよくわかりませんww
今までarduinoでTRを間に挟んでスイッチングとかしていましたが、ようやくこれで沢山のコマンドのやり取りが出来るようになりました^^
こうなるとさらに色々と出来そうでワクワクですw
こんばんは
i2cを初めて利用されたのに、あっという間にi2cネットワークを完成させたなんて、全く持ってPIC教に対する「冒涜」だ!(笑)
いやはや、恐れ入りました!
動画もいいですね。モクモクとLED色の変化が良い雰囲気です。
一昔前は、PICでi2cなんて、物凄く手間がかかって、大変でしたが、最近では、MPLABXのMCCで手軽にできるようになりましたが、それでもここまで簡単ではありません。
負け惜しみですが、「プロセスを楽しむか」「結果を早く得るか」の違いですね(笑)
くそ~!(笑)
こんばんは!
彼女はこんなに簡単にI2Cの扉を開いてくれるのですね。すばらしい!
メガザクの時はArduinoのI2Cの使い方がわからず、PIC→I2CはGPIOで命令の送信をしてたので、次に使うときはもっとスマートにできそうです。なんやようわからんかったらまた教えてくださいね♪
ところで、スレーブ側でread関数を呼ぶとマスターwriteが行われるまでそこでスピンロックする感じの動作なんでしょうか?これが割り込みで処理できるとさらに使い勝手がよさそうです。マスターリードも簡単にできるのでしょうね。すごいポテンシャル!
楽しくエントリ拝読させていただきましたw
何ていうかですね、例えるならば。
Vividさんは無双の凄腕剣士さん。
一人で敵陣に乗り込み、冷静で正確、経験豊富な剣さばきで
敵をバッタバッタと切り倒し、首級をあげてしまうイメージ。
6jiroさんは、同じく敵陣に乗り込むんですが、
たまたま迷い込んだら敵陣ど真ん中で、大慌てで
大ハンマー振り回して、壁とか壊しまくっちゃって
行き当たりばったりで無我夢中でガンガンやってたら
倒した壁の向こうに敵の親玉がいて、壁ことやっつけた感じ。
失礼しました^^;;
Vividさん こんばんは!
arduino使うとあっという間ですww(普通の人はw)
ホント数行書くだけですw
もちろんいまだにAVRの単体でI2Cなんてできませんし、何となくしか理解できてませんからね^^;
しかしこうやって通信とか出来るようになると、今まで別々のarduinoを動かしてタイミングを計っていたのがウソのように簡単になりますねw
あとはこのI2Cが他の機能とかとどのように干渉し合うかが気になります^^;
なおさん こんばんは!お誕生日おめ~~!
arduinoでI2C簡単ですよ~w
PICのI2Cが分かって、arduinoのI2Cが分からないのは多分世界でなおさんだけだと思いますww
無茶簡単ですからw
あっ、スレイブ側の設定少し間違っていて関数書いてない物の写真上げてましたw
修正しておきました^^
それとread関数は割り込み処理されています^^他の処理が滞ることはないようですが、他の割り込み処理とかの干渉が有ると優先順位によってはうまく動かない時も有るようです。
マスターからスレイブへのデーター要求も簡単にできますよ~。wireのスケッチ例見ると、えっ!これだけ??と疑うレベルですww
gyoさん こんばんは!
たとえが上手いww
たしかにVividさんは敵陣に正面から挑んで勝てるタイプですよね~。
私の場合は、今回の様にドタバタあがいてあがいて気が付いたら出来たかもw?てな感じですww
arduinoなかったらこんなのできませんからねw
この後まだ赤外線リモコンもしくはBluetoothとか追加しようと思うのですが、色々と干渉して素直に動かないんだろうなと少し不安ですが、まっ、なんとかなるでしょうw