fc2ブログ

ハーフの進捗【2015/12/20】

こんばんは

ここ数日,マウスの進捗が無くて悲しい...シーズンじゃないのでそこまで悲しくないですが(笑)

バッテリー乗せました.ハイペリオンの100mAhです.とてつもない存在感ですね.寝かせておいたほうがいいかも?でもそうすると基板を大きくしなきゃいけないんですよね.う~ん.悩ましい...
ハーフ進捗【2015/12/20】_1

あと,磁気式エンコーダも設置しました.初磁気式エンコーダなので不安しかないです.つかうエンコーダはA/B/I相が取れるらしいので,アブソリュートな角度がとることができます.したがって,うまくやれば角速度のブレは気にならないのではないか?と思っています.しかし,シャフトと基板上面との距離や,シャフトとモータの距離が近くエンコーダ基板がかなりぎりぎりです.本当に設置できるんですかね.とても怖い.
ハーフ進捗【2015/12/20】_2

マイコンですが,表に置こうか裏に置こうか迷っています.裏におけたら幸せなんだろうな~とか思っていますが.
ハーフ進捗【2015/12/20】_3

裏におい時に,真横から見た場合が下図で.路面とマイコンが0.5mmしか開いていません.
ハーフ進捗【2015/12/20】_4

マイコンの基板の裏面におく場合,床にするということも考慮にいけませんが,吸引もするつもりなので,スカートとの兼ね合いも考えなくてはいけないでしょう.足回り設計は終わりましたがまだまだ考えるべきことは山積みです.

ブログかいてて思ったんですが,なんか新しいこと考えた場合こんな時期にブログかけないなと.この時期にブログで書いたら真似されちゃいますし(笑)そのぶん,私のマウスは”オーソドックス”であるのでそこは問題なし(笑)

まあ,”オーソドックス”なマウスを作るからには,作る過程をブログに逐次書いて後輩の参考になればなと(参考にならんかw)
スポンサーサイト



ハーフの部品について【リポ・マイコン】

こんばんは

今日はハーフで使うリポとマイコンの話をしようと思います.

まずはリポの話から.

現在使用しようと思っているバッテリーはハイペリオンの1S 100mAh
放電容量は25C~45Cと書いてあり,0.1×25~45=2.5A~4.5Aという計算になります.(本当に出るとは信じてませんが)

ハイペリオン_1S_100mAh

このリポはコネクタ部分が邪魔であるので,コネクタが無い端子むき出しのリポが欲しいのですが120mAhからしか無いんですよね...ってことで,コネクタをとっちゃいましょう!

※これから書く話は,端子のショートやリポ破壊により,怪我や火災の恐れがあり,非常に危険な作業であるので,自己責任でお願いします.やるとしても,周りの安全に注意し,慎重に作業しましょう.

まずは黒い部分をとりましょう.ニッパでガチガチやると取れます.このとき,勢いあまってリポまで切りそうになるので注意です.

ハイペリオン_1S_100mAh_バラシ①

黒い部分をとると,消しゴムのようなやわらかい樹脂(?)っぽいものがたくさん詰まっています.これを取り除きます.除いたら,白いコネクタ部分を持ち,ぐいぐい引っ張ります.

ハイペリオン_1S_100mAh_バラシ②

端子さんコンニチワ!端子さんが見えてきました.本当はこの端子だけでいいんですよね...目的の端子に手を出せるようになったので,端子を切ってコネクタ部分をサヨナラします.このとき,2つの端子を同時に切ってはいけません.大事なのでもう一回言います.2つの端子を同時に切ってはいけません!ニッパの刃を通してショートするので.

ハイペリオン_1S_100mAh_バラシ③

はい完成です!後は端子を半田付けすれば普通のリポと同じように使えますね.これから使う人の参考になればと,定規を当あてておきました.

続いてマイコンについてです.


ハーフの実装面積は非常に小さい.そのため,マイコンのサイズは小さければ小さいほど良いということになります.自分はルネサスのRXシリーズマイコンを使うので,RXシリーズのマイコンにおける話となります.

64pinマイコン
64pin

48pinマイコン
48pin

64pinLGAマイコン
64pin_LGA


サイズを比較すると,
64pinが12×12mm
48pinが9×9mm
64pinLGAが7×7mm
ハーフで2mm縮まるというのは非常にデカイので,できれば64pinLGAを使いたい!が,このピン配置は本当に使えるのだろうか?周りでやってる人は誰もいないので,人柱になってやってみたいものだが...その前に問題が.入手性である.RX631のR5F5631PFDLHかR5F5631MFDLHをネットで検索しても,20個からの購入であるマルツと,中国の店1つしか見つけられませんでした.一個あたり1000円ちょいするので20個を買うのは難しく,かといって中国の店では偽者の可能性もある.これは困った.どなたか,入手できる場所を知りませんかね.
中国の店:AliExpress
マルツ:マルツ

あと,AmericaのDigikyにはあるが,輸出規制何たら~で日本へ輸入できないらしい...なぜだっ!!!

ハーフのマイコンは48pinがやはり無難なのだろうか

ハーフの進捗【2015/12/16】 - 機械設計完了!!

こんばんは

本日のハーフの進捗デス

機械設計は完了しました!!(センサーの角度決まってないけど...)問題は基板に部品が乗るかどうか.まあ,地獄を見るのでしょう.今までEagleで設計しましたが,4層基板という誘惑につられてこの基板はKicadで設計ですかね.年内に基板設計まで終わらしたいですね~(ほぼ達成不可能)

ハーフ進捗20151216

ハーフマウスの進捗【2015/12/15】

こんばんは

 今日のハーフの進捗デス

ハーフの進捗_20151215

 だんだんとマウスっぽくなってきました.今のところ幅は37mm35mm(修正),長さは50~55mm程度になりそうです.ハーフの壁センサー,何使えば良いのかわからない..

 来年のハーフの機体ですが,今年のクラシックと同様に”オーソドックス”なマウスにしたいと思います.何を面白くない機体を!と言われるかもしれません.言い訳させてもらうと,ハーフってむちゃくちゃ難しそうじゃないですか!!ハーフ始めたはいいもののなかなか走れないじゃモチベーションの維持も大変そうなので....来年は32×32を安全に探索でき,きちんと最短走行できることが目標ですかね.(32×32の迷路を走るためには予選を突破しなきゃいけない問題)ハーフフレッシュマンは出なくていいかなと思います.

ハーフの進捗【2015/12/14】

こんばんは

ハーフの進捗デス

ホイールを設計しました.車のタイヤのホイールを目指して作りましたが,エンドミルがφ1であることを考えて作ったら,お見事,レンコンになりました.
ホイール_れんこん

足回りも形ができてまいりました.

足回りできてきた

クラシックと違ってハーフの足回りは工夫をしないと車体の幅が広くなりすぎてしまいます.難しい...

ハーフの進捗【2015/12/13】

こんばんは

ポインタまみれのブログで久しぶり,ハーフの進捗であります.
といっても,前回から何も進んでおりません.設計の仕方をSylpheedの人に習い,3DCADでアセンブリしながら設計していく方針に変更しました.やはり,3DCADやるからには,色々組み合わせながら,トライ&エラーでやるのが良いかと.ってことで,基板の形とかマウントの形とかを一度ばらして設計しなおしています.

ハーフの進捗【2015/12/13】

長方形のベースに色々のせて,最後に削って基板外形を決めようと考えています.設計してる最中ですが,Nseさんのように四角い基板も良いかな?と思ってきました.

ポインタ祭りだぜ!!

こんばんは

本日のタイトルは「ログホラ」の直継のセリフをもじっております.昨日は型修飾の話題であったので,自分のマウスのプログラムで一番長い型でも紹介しようかと.

static const turn_t *const*const

これが一番長い型です.turn_tは,typedefしてある構造体の型です.

この型は,[{static const turn_t型のポインタ)の定数}(ポインタの定数)]です.分解して考えましょう.static const turn_t型の変数があります.これは,他のソースファイルから参照できない定数であるturn_t型の変数です.このポインタを保存する定数変数が,static const turn_t *constです.このポインタを保存する定数変数がstatic const turn_t *const *constです.

この記事を書くとき,ふと思い出して調べたのが,

①int *a[10];
②int (*a)[10];

の違い.①は要素数10個のint型のポインタ変数の配列ということはわかる.②は要素数10のint型の配列のポインタらしい.ポインタって難しい!

変数の型修飾

こんばんは

本日書かないと,まだしばらく更新しなくなりそうなので書きます.

みなさんは変数の型修飾を利用しているでしょうか?たとえばvolatileとかconstとかstaticとかexternです.

volatile : 最適化により変数が省略されることが無い
volatile char i; のように修飾します.main文と割り込み関数の両方から使う変数はvolatileで修飾したほうが良いです.

const : 定数にする.(定義とともに代入しなければならず,後で値を変更することはできない.ROMに保存される)
const char i = 65; のように修飾します.変数を確保するときにしか代入できません.なので,後で,
i = 64;をすると,コンパイルエラーとなります.

static : グローバル変数を,他のソースファイルからアクセスできなくする.また,ローカル変数をプログラムが終了するまで保持する.
static char i; のように修飾します.ソースファイルを分けてプログラミングしてる人には非常に重要な修飾詞です.まずは,グローバル変数を修飾した場合です.別のソースファイルからstaticで修飾した変数は見えなくなるので,隠蔽化に非常に重要です.これが無ければ,たまたま同じ名前でextern宣言されていると意図せず変数にアクセスされてしまいます.グローバル変数には必ずstaticをつけるつもりでプログラミングしましょう!続いてローカル変数を修飾した場合です.ローカル変数は通常,関数を出るとその値は保持されません.再び関数が呼び出されたとき,そのローカル変数の値は不定となります.しかし,staticで修飾していると関数を抜けても値が保持されます.これは使い方によっては非常に便利です.たとえば,関数が呼び出された関数をカウントできるとかですかね.

extern : このソースファイル内では変数は定義されていないが,どっかのソースファイルで変数が定義されていることを示す.
extern char i; のように修飾します.externをつけた場合変数の実態(メモリ)は確保されません.どっかのソースファイルにありますよ.という宣言になります.(宣言と定義の違いがわからない人は調べましょう!)裏を返すと,これが無ければ他のソースファイルに書かれているグローバル変数にアクセスすることができません.他のソースファイルのグローバル変数にアクセスするときは,型をexternで修飾して宣言しましょう.

まあ,詳しいことは"型修飾"とでも検索してGoogle先生に教わりましょう.

↓以下ポインタ(用法用量お守りください)


では,この型がどんな型かわかりますでしょうか?(グローバル変数であるとします)

const static unsgined char *const i = 0;

正解は,”他のソースファイルから見えない定数である符号なしの8bit整数型変数”の”定数であるポインタ変数”
深遠なるポインタの世界へようこそ

構造体のススメ

こんばんは

 本日は構造体を積極的に使おうということで,「構造体のススメ」と題しております.PCを使ってる人なら,.txtとか.xlsxとか.jpg...etc を一つの場所に全部保存することはないでしょう.フォルダ分けして,目的のファイルをすぐいつけられるように整理していると思います.C言語の変数にも同じことが言えます.グローバル変数やローカル変数に変数が多くなるとごちゃごちゃしてしまいます.そこで,変数をフォルダのようにまとめてしまおうというのが構造体です.まあ,詳しいことはグーグル先生が私の説明よりわかりやすく教えてくれるはずなので調べてみてください.
 構造体の利用例の一例といっては大げさですが,自分が構造体を用いてどのようにターンパラメータを保存してるかを紹介したいと思います.

typedef

 これが私がターンパラメータの保存に使っている構造体の型です.typedefして新たな型"turn_t"を定義しています.typedefした場合は,型名を"_t"とするのが通例らしいです.中身を上から説明しますと,

①ターンする角度
②最小曲率半径
③ターン速度
④前距離
⑤後ろ距離
⑥ターン方向
⑦ターン後斜め走行か?
⑧このターンパラメータは有効か?

 です.そして,このtypedefした型を用いて,

para

 のようにconstな変数に代入しています.構造体は,宣言と同時に代入する場合は,配列と同じように中括弧で囲まれた範囲内でまとめて代入することができます.これをうまく利用すると,エディタ上で縦にターンの種類,横にターンの各パラメータを並べられるため,パラメータの代入が表のようになるため,コードがすっきりします.

以下,ポインタまみれ #用法用量をお守りください

私のコードでは,各ターンの構造体のポインタを,ターン速ごとにポインタ配列でまとめています.↓

para_p

 さらに,"速度ごとに構造体のポインタをまとめたポインタ配列"のポインタ(つまり,ポインタのポインタ)を,ポインタのポインタ配列でまとめています.↓

para_pp

 こうすることにより,ターンパラメータへのアクセスをPara[5][10]のように,配列的にアクセスできるようになるため,ターン速度を速度ごとにenum,ターンの種類ごとにenumしておけば,ターンパラメータへのアクセスが便利です.なら,普通に構造体配列を宣言すればいいんじゃないの?と思うかもしれませんが,そのとおりです. "turn_t[10][16]"のようにすればよいのです.しかし,constにこだわったため,こうなりました.(constでも構造体配列が使えるなら誰か教えて...)

 今日の記事を書いているとき,型の理解て重要だな.って思ったので次は変数の型について書くかもしれません.ではまた次回!

ハーフの進捗

こんばんは

昨日はMice総会飲みと,その後のダーツで帰りが遅くなり更新しませんでしたが,今日は更新します.(まあ,帰ってからずっとFPGAに関して調べてたのが原因ですが...)

ハーフの進捗ですが,なかなか全体の形が頭の中で収束しません.ハーフ一年目だし,オーソドックスでいいでしょ.という自分と,面白みのないそんな機体でいいのか?という2つの意見が自分の中で衝突しています.悩んでいてもしょうがないので,とりあえず3DCADでそれぞれの部品を作って,アセンブリしながら全体を考えようという方針です.なので現在は3DCADで部品を作っています.

・基板外形
half2016_pcb

・モーターマウント
half2016_mount

・ピニオンギア(m0.3 Z9)

half2016_pinion

・mk06-4.5
half2016_motor

 機械工の授業で3DCADの使い方はある程度わかります.授業では部品の形が確定してから3DCADで部品を作るという流れでした.しかし,本当の3DCADの使い方ってどうなんでしょう?3DCADでアセンブリし,組みあがり具合から,個々の部品の形を変えていくと思うのだが,どうなんでしょう.まあ,マウスの設計が終わるころには,どんな風に使えばいいのか答えは見えてるでしょうか.早ハーフの設計を形にしたい.
プロフィール

tennisyi

Author:tennisyi
現在、東京理科大学miceに所属しており、マウスを制作しています。
目指せハーフマウス脱初心者!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR