就活思い出し1


就職活動っていう「一生を決めるイベント」とも「茶番で不毛な時間」とも取れるのを去年12月頃から5月頃までしたのでその思い出のまとめを忘れないように書き留めておこうと思います。

特に誰に対して有意義な記事にしようとか、どこかの企業を陥れたいという意図は全く無くて、ただ単に個人的な思い出です。受けようと思った企業は適度に悩んだ末に、自分の人生をかけても良いと思えるような企業だと思って受けました。それに、このブログに書こうと思ったのも、それぞれ自分の意識を変えるほど大きく影響を受けた”人”や”製品”があるところを名前上げてみたいと思ったまでです。自由応募では全滅だったので失敗談として書くつもりです。

続きを読む

AVRライターでArduinoのスケッチを書き込む


 

組み込みのプログラムはArduinoやってて、それ以外のマイコンを勉強するのは面倒くさくて、でも小さいマイコンを安く使いたいなぁというズボラでケチな発想で色々いじったことの自分用メモです。

Arduinoはいいんだけど大きすぎるということで、表面実装のATmega328-Pを使いたいと考えています。Arduino miniだかproだかを買えばすごく簡単だけど、値段が高いのでただのチップにAVRライターで書き込もうと考えました。

  1. AVRにブートローダだけライターで書き込んで、USB-シリアル変換基板でプログラムは書き込むという方法
  2. ライターだけでArduino IDEを使って書き込む。

 

1の欠点は変換基板買わないといけないし、外にシリアル変換基板と繋げやすい配線つくらないといけないのがめんどくさい。2には欠点はないと思ったのが大間違い、いくつかひっかかった。

 

ブートローダの書き込み

この記事の最後に書いてるやり方だとブートローダは必要ないけど、手続きがほぼ同じなのでまとめておきます。

AVRにArduinoブートローダーを焼き込み成功までの過程」「ATMEGA328P の Arduino化まとめ」「本家」とか参考にしました。ただ、チップが違ったりソフトがAVR Studioから新しいAtmel Studioになってたりするので変更部分だけまとめ。

Atmel Studio 6を起動して、「ツール」→「Device programing」。左上の「Tool Device Interface」をそれぞれ「AVRISP mkⅡ Atmega328P ISP」に設定。Apply押すと画面のようなものが出てくる。書き込み速度などはいじらず、ブートローダを書き込みました。ヒューズはチットと設定によって変えなければならないが、今回はAtmega328-Pの最初のままのものにしましした。

EXTENDED:0xFD
HIGH:0xDA
LOW:0xFF
Lock bits:0xFF

ライターを使ってArduinoIDEから書き込めない

Arduino IDEで書いたスケッチ(プログラム)はライターを使って「書込装置を使って書き込む」でOKだと思ったら、「avrdude: usbdev_open(): did not find any USB device "usb"」というエラーを吐いてしまう。Atmel Studioで使っているAVR ISP mk2のドライバとArduino IDEで使っているドライバが違く、しかも共存できないのが原因でした。しかも自分の環境だとArduino IDEの方のドライバを認識してくれないというトラブルがあって、方針変更しました。参考:「AVRISP mkII とAVR StudioとArduinoIDE

Arduino IDEでスケッチを書き、書き込み用のファイルであるHEXファイルを出力させてAVRライターを使ってAtmel Studioで書き込む。

HEXファイルの出力とライターで書き込み

Arduino IDEからHEXファイルを作るためには以下を参考にさせてもらった。

Arduinoのスケッチを買ってきたマイコンに書き込む

Arduino1.0だとC:\$$!User]\AppData\Roaming\Arduino\preferences.txtに設定ファイルがあるのでそのtxtファイルに

preproc.save_build_files = true
build.path = build

と追記した。変更したら、Arduino.exeがあるフォルダにbuildフォルダを作る。フォルダ作り忘れるとIDEでエラーが出る。

ここまでくれば簡単で、Ardino IDEでターゲットとなるマイコンボードの種類と書込装置の設定を確認して、コンパイル(「検証」ボタン)するとArduino.exeの中のbuildフォルダに沢山のファイルができる。この[プロジェクト名].cpp.hexファイルをブートローダを書き込んだのと同様に「ツール」→「Device Programming」→「Memories」の中のFlashに書き込むHEXファイルを参照して「Program」ボタンを押す。

これで無事動きました。

先にブートローダのことを書きましたが、この方法だとブートローダは必要無いです。色々と遠回りをしてるような気がして滅入りぎみ・・・

MPU-6050基板作ってみた(後半)リフローしてみた


前半からの続きです。

作った基板のセンサのハンダをつける足は外にでてない恥ずかしがり屋さんばかりです。特に地磁気センサや気圧計は基板につけると足が全く見えない真性の引きこもりです。このハンダ付けについてのことです。

QFNパッケージなどのハンダ付けはホットエアーを使えばできたのと、Fenrirさんがやってる方法もあるみたいです。しかし、手先の器用さが関係なく誰でも作れるようになるといいなと思ってリフローを試してみました。

参考にしたのはスイッチサイエンスのご自宅リフローキットのページです。

準備

大学にいると環境が良く、以下のものが使えました。スイッチサイエンスの例ではクラフトロボというカッティングマシーンではんだのマスク(ステンシル)を作っています。自分はEagleで基板設計したものを直接読み込めるメリットを考えて基板切削機を使いました。

  • ステンシル作り:基板切削機(LPKF社製)
  • ヒーター:ホットプレート(加熱実験用)
  • ステンシル1:OHPシート(厚さ100μm)
  • ステンシル2:レーザープリンター専用紙(サンワのつやなしマット紙厚手0.174mm)
  • クリームはんだ:鉛ありのもの(鉛フリーの方が健康的に使えそうだったと反省)
  • 道具類:ピンセット、スキージ(使用済みクオカード)、基板固定用基板、両面テープ、薄刃カッター

最初に試したOHPシートはちょうどいい厚み(100μm)で硬さも良さそうで、紙みたいに濡れないので使ってみました。しかしこれが上手くいきませんでした。

OHPシートの失敗

OHPシートを切削機で削るとバリが出るのではんだを塗るときに浮いてしまい、境界がきちっとでませんでした。目で見えるバリは取ったつもりでも、端面が曲がっているようなバリは取りきれませんでした。

写真は最初にOHPシートでカットしてプリヒートまで行った一番ヒドイときのものです。基板とステンシルが離れているためにクリームはんだが広がって細かい部分が全部潰れてしまっています。あと、プリヒートすると少し粘度が下がってはんだが流れていくので写真のような状態になりました。

このまま部品を付けずにリフローすると多くがブリッジしてしまいました。

レーザープリンター専用紙

そこでスイッチサイエンスのページの通りにポリプロピレン合成紙というのを使ってみようと思いました。同じ物かわからなかったのですが、似ていると思いレーザープリンター専用の紙(生協で売っていたサンワのつやなしマット紙厚手0.174mm)を使いました。

基板切削機のユニバーサルカッターは刃が円錐状になっているので表面と裏面でステンシルの大きさが違うので広い方が基板につくようにした方が良さそうでした。

以前作った基板用のステンシルはこんなです。薄刃カッターで切り残りなどアヤシイ部分を手直ししています。

やってみて

スイッチサイエンスのページにほとんど書いてるようなことですが、ポイントだなと思った点は以下です。

  • Eagle上のCAM ProcessorでtCreamを表面反対にして(Mirrorをチェック)ガーバーデータ(GERBER_RS274X)を出力する
  • そのままだとtCREAMを残して切削してしまうので、カットオフを利用して読み込んだガーバーデータを切り抜く形にする
  • 基板をしっかり固定する
  • ステンシルを浮かせない(浮かないように周りの押さえの基板よりハンダ塗布の基板の下に紙を挟んで高くした)
  • スキージはカードが薄くて良かった
  • スキージで細かい部分にしっかりクリームはんだを入れ込む
  • スキージを立ててしっかりこそぎ落とす
  • リフローの温度管理を時間を守ってしっかり
  • リフローしたらルーペで検査

全部の端子がうまくいくわけではないので手ハンダである程度修正を行なっています。ルーペは大事です。

ステンシルを基板に貼ったところと、出来た基板はこんなです。

参考

スイッチサイエンスさんが作ったサイトと動画が参考になります。

http://trac.switch-science.com/wiki/HomeReflowKit

 

リフローをせずにホットエアーでハンダ付けようと思うと以下の動画が参考になるみたいです。

 

MPU-6050基板作ってみた(前半)基板設計


ロケットなど飛翔体の姿勢計測を気軽な値段でなんとかならないかと思案している今日この頃です。(もっと他にやらないといけないことがあるけど・・・w

その中で目をつけているのがInvenSence社のMPU-6000というセンサーです。

SparkfunからMPU-6050という型番違いのセンサは売られているのですが、これはインターフェイスがI2Cだけなので高速サンプリングを考えてSPIも対応しているMPU-6000を使って動きの早いものの姿勢を計測したいと考えていました。

MPU-6000が発売されたタイミングでTOIDAさんがInvenSenceから購入するということで複数人で共同購入しました。

同時にTOIDAさんが試しに使っていたMPU-6050のRev.Cがなぜか加速度のレンジが2倍になっている(最大±16Gのはずが±32G)になっているということからロケットなどに使えるのではないかということでMPU-6050を譲ってもらいました。

そこで以下のような基板を作ってみました。

  • 加速度ジャイロはMPU-6050
  • 地磁気はHMC5883L
  • 気圧計はMPL115A2
  • 以上をI2Cで外に出す

加速度ジャイロと地磁気以外は秋月で買える部品にしようとした結果、かなり微妙な基板になったのですが、これのハンダ付けをどうしようか悩んで試行錯誤したのでそれは後半に書こうと思います。

写真はFusionPCBに発注かけて2枚しか使う予定無いのに18枚届いてテンションあがったところです。

参考

市販品でセンサは違うけど近いものとしてはこのようなものがありました。

http://www.pololu.com/catalog/product/1265

今後やりたいことは全部下のリンク先のもの十分という市販品もありますが、勉強のために自作することは悪いことではないかと思っているところです。

http://www.pololu.com/catalog/product/1256

http://www.pololu.com/catalog/product/1255

誘導損失最小のプロペラ設計プログラム作ってみた


ちょっと前になりますが、「流体機械工学」という本に出ていた設計法でのプログラムをExcelで作りました。

一般運動量理論と翼素理論によるプロペラ設計

この設計法はいわゆるAdkins &Liebeckの設計手法であり、式の導出に問題があるようです。ほとんど誤差が出ないにしても気持ちが良いものではないです。式が複雑になる上に後発の論文なのでAdkins Liebeckの手法の方が格が上に見えますが、今回作ったLarrabeeの手法の方が精度が高いようです。

そこで、今回はこのAdkins &Liebeckの手法ではなく、Larrabeeの手法の設計プログラムを作ってみました。ただし、上と異なって、任意の飛行条件での性能計算は実装していません。

Larrabeeの手法の中身をブラックボックス化しないために数式が読みやすいMatlab(系)で作っているのであって、簡単に設計するのであれば信頼性のあるXROTORを使うのがオススメです。

公開場所

プログラムソースを置く場所としてGithubというのがどうやら流行っているということでGithub上にリポジトリを作りました。

https://github.com/ina111/Larrabee

ダウンロードもすぐにできるし、ソースもブラウザから見られるので便利かと思います。自分は複数PCで開発したい人なので自分にとっても便利でした。Githubなので共同開発みたいなこともやろうと思えば簡単です。

この矢印のZIPボタンからソースを落とせます。

雑記

Simple-Larrabeeフォルダの中身は参考にしている論文読み始めて1日で作りました。参考論文の中身の機能としては揃っています。その後、1週間ぐらいかけてゆっくりXFLR5の解析データから情報を読み込む部分や解析データから必要なデータを補間する部分を作りました。主にGithubに慣れるのに時間がかかったり、CADとの連携をどうしようか思案してプロトタイプを作ったりで時間がかかりました。一通り出来たと思うので完成としました。

Excelで開発した方が多くの人に使ってもらえるだろうけど、Matlab(Octave)だと行列演算が式の見た目通り書けること、積分や補間が非常に簡単で開発にかかる時間が減らせるという理由でOctaveで作りました。

Matlabのようなスクリプト系の言語だと1つのファイルにソースをまとめる人が多いようです。しかし、機能別にサブルーチンにして最上流のファイルでコメントアウトによってサブルーチンのスイッチにする形が好きなので、このような構成にしてみました。

使い方

Githubの方に書いているのでそちらを見るのがいいです。

ソースを自分のフォルダの中に適当に入れて、Octaveを起動します。Larrabee.mのあるところまで作業ディレクトリを移動して、

Larrabee

と入れるとresultフォルダに計算結果が出てきます。

Larrabee.mの中を覗いてやるといくつかのサブルーチンが見えます。"Larrabee_input"と"Larrabee_airfoil_ini"の中身を弄って設定値を変えることで任意の状態の誘導損失最小のプロペラが設計出来ます。

"Larrabee_airfoil_ini"の代わりに"Larrabee_airfoil"を有効にするとCd(抗力係数)とα(迎え角)がCl(揚力係数)とレイノルズ数によっても求まります。ただし、エラーが出やすいことと、プロペラの翼型解析に置いてはXFLR5(XFOIL)の値を信じるのは良くないとは言われているためにデフォルトではコメントアウトしています。

参考になるもの

Larrabee.E.,"Practical Design of Minimum Induced Loss Propellers,"SAE Technical Paper 790585, 1979

作ったプログラムの参考にしたものはこれです。他にも同じような内容の論文をネット上にもありました。

Design of Propellers for Motorsoarers(PDF注意)

著者のE.E.Larrabee先生はMITの教授で”Mr Propeller”と呼ばれ、この論文の内容を生かしてGossamer Albatrossの設計にも携わったようです。

Larrabee先生が亡くなった時の記事

Togetter

http://togetter.com/li/301414

低レイノルズ数でのプロペラ設計の論文も出されている原田さんのTwitterも非常に参考になります。Togetterにまとめてみました。

その他

手前味噌ではありますが、ちょっと前からプロペラに興味を持って、既存のツールの使い方の解説を書いたりしていました。

プロペラ・風車の設計解析ソフトXROTORの使い方

XROTORがフリーソフトになってたのでUbuntu上で動かしてみた

QPROP(QMIL)の使い方

 動画

Larrabee先生も携わったGossamer albatrossとalbatrossの前に作られたGossamer condorの動画は非常に面白いです。