2019年2月5日火曜日

Lenovo A285を購入しました

大学で使用するため購入しました。

Lenovo ThinkPad A285です。スペックなどの詳細はHPで確認してもらうとして、まずカスタムした部分と構成のポイントを説明します。
ベースは価格.comのRyzen5 2500U PROモデルです。

①メモリを8GBから16GBにグレードアップ
②SSDを256GBから180GBにグレードダウン
③ディスプレイはノングレア1920x1080(タッチパネルなし)
④日本語キーボードをバックライト付きにグレードアップ


今回私が求めていた最低条件は
・書籍などと一緒に持ち運びやすいサイズ
・日常的に持ち出すのが苦にならない重量
・長く(最低でも3年)使い続けられること
・予算12万以下
でした。特に重量についてはあらかじめ家電量販店で持ってみて1.2kgが上限と感じました。さらに希望条件として
・動画編集ができ、軽量な3Dゲームがスムーズに動作する性能
・外出先でのプログラミングや書類作成が苦にならないキーボード
・好みのデザイン

他の候補としてマウス、ドスパラといったBTOメーカーのノートやThinkPadの他モデルがありました。特に、強力なMX150を搭載し非常に軽量なASUS Zenbook 13や同じくRyzen APUを搭載する14インチモデルのA485などと迷ったすえ購入を決意しました。

まず①についてですが、私はブラウザはChoromeを愛用しています。メモリを”あるだけ食う”とか言われるChoromeですが、裏返せばメモリさえ足りていればこれ以上便利なブラウザはありません。8GBでも使えるとは思うのですが画像・動画編集もすることと、長く使うにはCPUよりメモリが先にボトルネックになるだろうという判断から贅沢しました。

②のSSDに関しては、大規模なデータはデスクトップPCに保存することにOS+αの容量としました。これでNVMeではなくSATA(どちらも端子はM.2)となってしまいますが、起動時間に関わるランダムアクセス速度はほぼ変わらないため問題なしと判断しました。

ディスプレイの選択肢には他に1366x768(タッチパネルなし)と1920x1080(タッチパネル)が選べるのですが、両者とも重量が1.2kgを超えてしまいます。また私の使用するソフトの多くがフルHDを想定して作られているための選択となります。

キーボードに関しては夜間・屋外でテザー撮影をしたい、航空機の中で使用するといった理由もありますが、ほとんど自己満足です。数千円の差ならつけておいた方が満足感が得られるかと思います。


ここからは購入後の感想となります。

まずメモリについて注文ページからは「オンボード」とだけ記載してあってデュアルチャンネルかわからなかったのですが、Passmark上から8GBx2と認識されていたのでGPUの足を引っ張るということはないと思います。またRyzen APUの強みである内蔵GPUについてもMinecraftを遊んでみて4チャンク表示で58~60で安定しており、比較的快適にプレイできました。筐体はつや消し黒と赤の組み合わせが美しく、好みにドンピシャでした。付属ソフトに関しては、ドライバーの更新などをサポートするLenovo Vantageのみで、常駐するのはパフォーマンス抑制と全力運転を切り替えるツールのみでメモリが不要なソフトに食われるといったことはありませんでした。発注から2~3週間程度かかるとの記載がありましたが13日間で到着しました。

ほとんどの点に関して満足していますが、2点だけ不満な点がありました。
まず1点目はベゼルが想像以上に広かったことです。他社最新製品の細枠ベゼルを見慣れているとかなり広く感じました。2点目は使いたかった動画編集ソフトの一つであるDaVinci Resolve 15が内蔵GPUを検出せず起動すらできなかったことです。グラフィックドライバ更新など試しましたがどうしても解決できず、結局使い慣れたAviUtlを使うことにしました。

これらの点を除けば、製品・サービスともにおおむね満足できる内容でした。今書いているこの投稿が初めての長文入力となりますが、打ちやすく疲れにくいです。A285はThinkPadの特長である頑丈さとAPUによって実現した軽量ボディ、ほぼA4用紙と同じサイズとあわせて日常的に持ち出せるまさに”ノートPC”であると感じました。

2018年12月9日日曜日

PENTAX K-70を購入しました

ついにやってしまった

そのとき私は「受験も終わったし自分にご褒美~」とキタムラの中古市場を漁っていた。
探していたのはPENTAXの最新機(といっても最近ほとんど新製品などでないのだが)である K-70のボディである。


店舗に行って手に取ってうんうん唸りながらシャッターを半押しすると

す~っ、ぴたっ。

なんだこのAFの速度と静粛性は⁉



調べるとK-70のキットレンズは超音波モーターで駆動し、18-135というすさまじいレンズであることが分かった。
父親から受け継いだK100D Superと中古で買ったK-50しか使ったことのなかった私は、PENTAXの内蔵モーターのAFが標準であると思っていたのだ。
聞けば他メーカーはもうレンズ内モーターが標準となっているらしい。

もちろん「モーターを内蔵しない分、古いレンズも使えるし、軽く安くレンズを作って供給できる」というPENTAXの戦略もアリだとは思う。
ただ確かに動画を撮影したときに「ぎぃい~ぎぎっ」という音が入ってしまって不便だったのも確かだ。撮られるのがイヤだという私のガールフレンドにいつもAF音でばれるのにも困っていた


気持ちは若干レンズキットに傾いたがこの時点では確かにボディだけ買うつもりだった。


だが今私の手にはボディとレンズがある。

ちょうどサイトを開いたタイミングでいい状態のレンズキットをこれまたいい値段で流してきやがったキタムラが悪い。意思に反して確約を押しやがった私の手も悪い。

そんなわけで私はK-70を購入した。
これでK100D Super、K-50、K70と望遠ズーム、広角ズーム、単焦点、標準ズーム超音波モーターと見事にカメラ沼はまってしまっている。



ここからが本題であるK-70についてだ。
性能とかは仕様を参照してもらうことにして、公式に書いてなさそうなとこをレポートする。


とりあえず写真
左側面 PENTAXエントリーの特権である2つ目のダイヤルが見える 撮影:K-50


右側面 フォーカスモードの選択はAF.CとAF.Sはボタンですることになった

K-50からの乗り換えである私には全体的に四角くなったような感じがした。グリップが深くなっているためと思われる。
それでもボタン類の配置は変わっていないらしく前ダイヤルに指が届かないということもなかった。
上部にはWi-Fiなどボタンが増えたが間違って押すような位置でもないので問題ないだろう。

個人的に特筆すべきはその軽さである。お店で最初に持った時は展示品で中身が入っていないと勘違いしたほどだ。
最大の要因はバッテリーが電池からLiバッテリーになったことだろう。
それでも昨今の他社カメラではもっと軽いモデルも多いがどうせレンズをつけてしまえば変わらない。
むしろある程度の重さがないと安っぽく感じる私にとってはちょうどよかった(ひいき目かもしれない)。


だが何枚かとってスクロールしているとフリーズ。
電源も切れなくなったのでやむなくバッテリーを抜いて再起動。
なんどかフリーズさせて「画像を縮小して閲覧中に素早く前ダイヤルで次の写真に行こうとする」とフリーズするっぽいことに気づいた。
これが売られた理由かもしれない。

ひやひやしながらネットで検索すると、よくある症状だったのだろう、安定性が向上したファームウェアの配布が公式からアナウンスされている。
説明に従ってファームウェアをアップデートする。

直った!!

たぶん。とりあえず症状は出なくなったし、AF速度も心なしかあがった気がする。
やっぱり公式チェックは大事だ。



今回、中古をキタムラさんから購入したが記載してあった通り目立った傷はなく付属品もすべて揃っていた。使われていなかったらしくホコリがついているところもあったがブロワー拭いたらきれいになった。
すこし手間はあったが総合的には大満足である。


ちなみに

ごくまれにだがキタムラ中古では、買い足したバッテリーと一緒に売られて「バッテリー2個」とかが出ていることもあるので付属品欄もよくチェックするのをオススメしておく。

(つぎはストロボ欲しいなぁ)

2018年9月26日水曜日

バッチファイルで自動バックアップ

バックアップは必要だと思うけどRAIDは大げさだし、手動でするのもあほらしい…

ということを考えていた矢先、大阪豪雨と北海道地震&ブラックアウトでこりゃバックアップは必要だとなった次第。RAIDはもうすぐPCを大幅改修する予定があるので却下。バックアップ専用ソフトだとなんかよくわからんファイルにまとめられ、このファイルだけ復元~とかできないしソフトは極力増やしたくない。

ということでwindows標準機能のみで自動バックアップを目指す。仕様は以下。

①D:\ から E:\ へフォルダ構造ごと全コピー
②PCを使っていない4:00にスリープから復帰させて差分コピー
③隠しフォルダもコピーするけど隠し属性はつけたまま
④F:\ にも普通にアクセスできる

基本的にはROBOCOPYコマンドのバッチファイルをタスクスケジューラで起動するだけ。
紆余曲折あって落ち着いたROBOCOPYのオプション構成がこちら

robocopy "D:" "E:" /log:"D:\copylog.txt" /mir /copyall /r:3 /w:3 /zb /mt:3 /xa:st /np


実際に設定していく。
まずHDDを買ってきた。


一番安かったTOSHIBA製1TB。今使ってるPCに既にDドライブとしてついてて特に不具合も出てない。動作音?そんなもんは知らん(CPUファンよりは静か)。

windows10から左下のロゴ右クリックでディスクの管理にアクセスできるようになった。
パーテーションは分けずにフォーマットしてEドライブを割り振る。いちおうDドライブとアロケーションユニットサイズは揃えた。

アクセスできるのを確認したら適当なフォルダ(Eドライブ内以外)にテキストファイルを作る。
前述のコマンドを書き込んで保存(オプションはご自由に)。ここで"D:\"とかにしない。
あと「DからE」の順番間違えると全ファイル消えるので各自環境に合わせてください。
「○○.bat」に拡張子を変更(ファイル形式表示してない人は表示のオプションで表示に切り替え)する。ここで○○をrobocopyにすると自分で自分を実行して永久ループするのでしないこと(体験談)。

ここで管理者権限でバッチファイルを実行する。130GBで3時間程度かかった。
ちゃんとコピーできていたらタスクスケジューラにバッチファイルの実行をスケジューリングする。
全般タブの「最上位の特権で実行する」にチェックを入れ忘れないこと。トリガーの設定は各自ご自由に。「新しい操作」ウィンドウの「開始」にバッチファイルのフォルダのパスを入れ忘れないよう注意。「条件」タブの「コンピューターをAC電源で使用している場合にのみタスクを開始する」はデスクトップでもチェックを外しておく「タスクを実行するためにスリープを解除する」はチェックを入れる

タスクスケジューラから実行すると終わっても実行中表示が消えなくなるので終わったら強制終了させるか、数分後にトリガーを設定して動作を確認。「前回の実行結果」は(0x1)などと出るが8以下なら問題はない(とはいえできればきっちり成功と書いてほしい)。

以上で自動バックアップが構築できた。どちらかのHDDが壊れたらバッチファイルのコピー先を交換したHDDにして書き込めば復旧できるし、間違って消したファイルも前日まであったならバックアップからコピーしてくればよろしい。

私はスマホの大量の写真もここに放り込み、デスクトップフォルダなどのライブラリも入れてしまったのでシステムディスクを変えてもHDD刺せば環境が復元できる。PC改修する前にやっておくと意外と便利かもしれない。

バックアップ、大事!!


どうでもいいけどしっくりくるPCケースが見つからない

2018年6月2日土曜日

近況報告

Twitterは底知れぬ沼です

お久しぶりです。Twitterを始めてから全然更新してませんでした。
楽しみにしてくださっていた方申し訳ございません!!

もうすぐ1年になりかけてるのでその間にいくつか工学に関連する(?)近況を報告します。

まず自慢させてください笑

・学校でしていた3Dスキャンの研究発表で東北大会で入賞しました
・パソコン甲子園全国に出場しました
・情報オリンピック全国に出場しました

決してライフテーマである工学男子をさぼっていたわけではないのですっ!!

次にいくつかの趣味にはまりました。

・一眼レフカメラ
・自作PC
・ロードバイク

…見事に”沼”と呼ばれる趣味ばかり。一眼レフはPENTAX K10DとK-50を使ってます。レンズはすでに4本(沼)。PCは学校の部室のPCがゴミすぎるから自作しよう!!ってなってズブズブと。
さらに大学受かったらバイク乗りたいなーとか思ってます。なぜこんなにも沼に吸い寄せられてるのだろうか。好きなWWⅡ航空機が飛燕で好きなヘリがOH-1となるともうkawasakiに乗るしかないなと。

これから受験なので制作は1年ほどお休みです。来年このブログに工学部合格の投稿ができるよう頑張ります。

2017年11月18日土曜日

twitter始めました

途中経過じゃないですスイマセン

投稿するほどでもないけど共有したいことがけっこうあったのでtwitterを始めました(サブアカですが)。

アカウントはこちらから

もちろんきっかけは界隈で有名なペットボトルロケット迫撃砲の人が始めたからです。

工作、プログラミング、PCその他のモノづくり一般に関するツイートが多くなると思います。OpenCVとかArduinoなどわかる範囲でDMでお答えします。
よかったらフォローしてください。

2017年7月20日木曜日

RSS実験機「Aries」製作記⑨

お久しぶりです

なかなか地味な作業ばかり続いていて投稿するタイミングを逃していました。
地味ですが完成にはだいぶ近づきました。
今回行った工程は以下の通りです。

①前回壊れた機関部作り
②弾受けの接点素材変更
③弾受けのロープ交換
④スコープ到着と可変マウント制作
⑤レール延長

相変わらずバイス無し、グラインダ無し、ボール盤無しのほぼ全手動でお送りします。

①前回壊れた機関部作り

最初はアルミ部分だけ変えるつもりだったのですがケースも作り直すことになり、挙げ句固定方法も変わりました。
前回アルミ加工はもうしないといったな。あれは嘘だ。

作り方は
けがく→切る→削る→穴あけ
手作業で糸ノコ、金ヤスリ、電動ドライバで合計3日ほどかかりました。まあ、テスト勉強の合間にちょこちょこ進めたりしてたんですが。

そんなわけでクリアランスの大きい丈夫な機関部ができあがりです。


②弾受けの接点素材変更

前回までは3mmビスを切断して内側からナットで固定するという無駄に器用な方法だったのですが、接点の負担がすごかったので(当たり前)大き目の釘を切断してピンのように固定することにしました。(硬かった…。)

③弾受けのロープ交換

強度、摩擦などの問題で2mmの綿のロープから3mmの十六打ナイロンロープに交換です。末端処理臭かったです。
これにともない弾受けの穴も拡大しました。接着はいまだに接着剤ですが今のところ問題は無さそうです。

④スコープ到着と可変マウント制作

amazonに注文していたスコープが届きました。一緒に注文したベースプレートと12mmアルミレールで可変マウントを作りました。
前回アルミ加工はもうしn(ry
大まかに下のナットで固定し、バネで押し上げながら上のナットで微調整します。
まあ、精度はオモチャレベルです。ロマンですよロマン。


⑤レール延長

足りていなかったレールを延長しました。これも12mmコの字アルミレールです。
前回アルミ加工はm(ry

すべての作業を終えた状態です。

残っている作業は

・トリガーガード取り付け
・弾道調整
・ストック研磨
・塗装

などです。


  • とりあえず制作編ということで実射結果は次の投稿にしたいと思います。

2017年6月10日土曜日

部活で始めるArduino④「シリアル通信編」

コンピューターやほかの機器と連携する

(マウスでモーターを動かせたらな…)
 とか
(コンピューターの近くの気温が知りたい…)
 と思ったことはありませんか?

ArduinoにはUSBポートとシリアル通信の機能が付いているのでとても簡単に実装することができます。
シリアル通信とはUSBケーブル等を通して0と1の信号を送ったり受け取ったりする技術です。かなり歴史のある通信方法でシンプルかつ汎用性が高いです。

では作業に移りましょう。
今回はArduinoに文字を送り、Arduinoの内蔵LEDを点灯・消灯させてみます。

文字を送り、Arduinoの内蔵LEDを点灯・消灯させる

Arduinoでシリアル通信をする場合、数字や半角文字を送るのが一般的です。そこで例えば「a」が届いたらLEDを点灯、「b」が届いたらLEDを消灯することにします。LEDの点灯消灯については部活で始めるArduino① 「入手と準備と確認編」のプログラムを改造することにします。

ここで使用する関数は

・Serial.begin(通信速度)  … 初期化と通信速度の設定(最初に一回実行)速度はパソコン側の設定と合わせる
・int型もしくはchar型変数 = Serial.read()  … 受信済みの1バイトを読込む(何も届いていないときは−1が返る)
・int型変数 = Serial.available()  … バッファに何バイトたまっているかを返す

の3つだけです。

1バイトを読み込むというのがわかりずらいかもしれませんが、1バイト≒1文字と考えてもらえば分かりやすいです。

▽詳しい説明ですが読まなくてもいいです▽
例えばシリアル通信でパソコンから"a b ¥n"(¥nはwindowsで改行を表す文字コードです)と送ったとします。
パソコンが文字列をASCIIコードで16進数に変換、さらに16進数を2進数に変換してUSBケーブルでピコピコーと発射します。
受け取ったArduinoは2進数を16進数(=1バイト)に戻しバッファ(一時置き場)に届いた順にためていきます。
Serial.read()を実行すると届いた順に1バイトずつ読み込まれる、というわけですさらにchar型変数に格納すると逆のルートをたどって文字に変換されます。

プログラムはこんな感じです。



void setup() {
     pinMode(LED_BUILTIN, OUTPUT);
    Serial.begin(9600) ;
}
void loop() {
    char c ;
    if (Serial.available() > 0) {
        c = Serial.read() ;
        if(c == 'a'){
            digitalWrite(LED_BUILTIN, HIGH);
        }
        if(c == 'b'){
            digitalWrite(LED_BUILTIN, LOW);
        }
    }
}

こちらのサイトやArduino日本語リファレンスを参考にしています。

パソコン側の操作は

①Arduinoと接続する
②Arduino IDEのツール→シリアルモニタを開く
③入力して送信ボタンを押す

です。
文字列で送るとバッファに一文字ずつたまって順番に読み込まれます。

a を送ってLEDが点灯し、bを送ってLEDが消灯したら成功です。

このシリアル通信を使えるということは

  外の世界の状況を観測する(センサーやカメラ)
   ↓
  計算や処理を行う(AIやキーボードからの入力)
   ↓
  外の世界に影響を及ぼす(モーターやLED)

の流れができるということです。ほかの技術と組み合わせれば日々の生活やロボコンにも役立てることができます。


シリアル通信はパソコン側のソフトも(比較的)簡単に自作できるので画像処理なんかと組み合わせても面白いと思います。私は二軸のサーボモータの台座にWebカメラを乗せて顔を追いかけてくる装置を部活で作りました。

このページが困っている人の助けになれば幸いです。

2017年4月6日木曜日

RSS実験機「Aries」製作記⑧

玉受け完成

前回機関部がぶっ壊れたので、新規で作りました。もうアルミの加工ヤダ…。
それに伴い玉受けも木製からアルミ製に、レールの配置も変わりました。

とりあえず2㎜のアルミアングルを切り出してやすりをかけます。


左側が玉受けの部品でこの後穴をあけたりして組み立てます。
右側はトリガーとシアーです。


玉受けはアルミ板4枚を表面をやすり掛けして接着剤で張り合わせています。今のところ強度に問題はなさそうです。

左に写っているのはワイヤーです。
玉受けとゴムを繋ぐところに使おうと思っていたのですが、輪を作った時の接合部の強度不足で没です。普通に繊維系のロープ使います。

とりあえず玉受けは完成しました。機関部の方も新しく作り直さないといけないので完成にはもうちょっとかかる予定です。
早く試射したいなあ。

今スコープとレールも配達待ちなので急いで作業したいと思います。

2017年3月1日水曜日

部活で始めるArduino③「サーボモータ応用編」

サーボモータをより精密に制御する

サーボモータの応用編です。
今回は前回1°単位で制御したサーボモータをもっと精密に制御します。

サーボモータはマイコンなどから送られてくるパルスのパルスの幅で角度を決めています。
たとえば前回使ったSG90はこちらによれば
・動作角度 180°
・動作パルス幅 500~2400μs
だそうです。どういうことかというと
※波形は誇張してあります

上の図のようにサーボモータの角度が、ある決められたパルスの幅、つまりONとOFFが高速で切り替わるうちのONの時間に対応しているということです。
500~2400μsなので-90°は500μs、90°は2400μs、0°は真ん中の1450μsに対応します。
前回やった方法では、入力された角度に対応した波形を自動で出してくれていた、というわけです。

サーボモータをより精密に動かすにはこのパルス幅を直接指定してやります。
2400-500=1900 なのでおよそ0.1°の精度が期待できます(実際はもう少し誤差が出ます)。


作業に移りましょう。
パルス幅を直接指定する関数は
  writeMicroseconds(r)  //rはμs単位のパルス幅
です。前回同様Servo.hの中の一つです。

では前回のプログラムを上の関数を使うよう書き換えてみましょう。

-45° → 500(=-90°) + 1900(=180°) × 45°/180° ≒ 975(μs)
45° → 500(=-90°) + 1900(=180°) × 135°/180° ≒  1925(μs)

となるので

#include<Servo.h>       //サーボモータのライブラリをインクルード
Servo servo1;            //servo1というServoオブジェクトを作る

//最初に一度だけ実行
void setup() {
    servo1.attach(9);   //servo1が刺さっているのは9番ピン
}

//setupの後無限ループ
void loop() {
    servo1.writeMicroseconds(975);    //置き換えたところ
    delay(1000);          //1000ms(ミリ秒)=1秒待つ
    servo1.writeMicroseconds(1925);  //置き換えたところ
    delay(2000);         //2000ms(ミリ秒)=2秒待つ
                             //「{」のところに戻る
}

赤くなっているところが置き換えたところです。
同じように動作すると思いますが違いが分かりませんね。

この関数は角度を直接指定する用途より、ある角度からある角度に動かす用途に使った方が輝きます。下のプログラムで確かめてみます。

#include<Servo.h>       //サーボモータのライブラリをインクルード
Servo servo1;            //servo1というServoオブジェクトを作る
int angle,pulse;     //angle : °単位の角度、pulse : パルスの幅//最初に一度だけ実行
void setup() {
    servo1.attach(9);   //servo1が刺さっているのは9番ピン
    angle = 0;     //angleを0にする
    pulse = 0;     //pulseを0にする
}

//setupの後無限ループ
void loop() {
    for(angle=45;angle<=135;angle++){
    servo1.write(angle);
    delay(10);     //10ms待つ
    }     //servo1をangle度にしてangleに1足す処理をangleが135になるまで繰り返す
    delay(10000);    //1秒待つ
    for(pulse=1925;pulse>=975;pulse--){
    servo1.writeMicroseconds(pulse);
    delay(1);     //1ms待つ
    }     //servo1にpulseを出力してpulseから1引く処理をpulseが975になるまで繰り返す
    delay(2000);         //2000ms(ミリ秒)=2秒待つ
                             //「void loop() {」のところに戻る
}

最初が角度単位の移動、次がパルス幅を基準とした移動です。
より滑らかでトルクも高くなることが分かっていただけると思います。

今回はこんな感じです。
正直プログラムに組み込むのはちょっと面倒な代物ですが、カメラをサーボで動かしたりする用途にはいいかもしれません。

次回はシリアル通信機能を紹介します。

2017年1月11日水曜日

RSS実験機「Aries」製作記⑦

機関部がお亡くなりになりました。


それは何度目かの試射の時・・・。平ゴム4本を「ぐぎぎぎぃぃ」と言いながら装填し、的に向けた瞬間、暴発しました。
写真からわかるようにパーツの回転の軸となっていた釘が「く」の字型に曲がってしまい、その後はゴムがかかってもすぐ外れるようになってしまいました。パーツを交換しても数回で同じようになります。

私の機関部は
このような仕組みなのですが(赤い点が回転軸の釘)

ゴムによって矢印のような力がかかって耐え切れず曲がってしまったようです。
これは釘を太くするほかに解決策がないように思ったのですが、図で省略したバネが干渉したり、そもそもいつ曲がるかわからない機関部を使い続けるのはどうかと思うので、新しい方法を考えることにしました。

まず、機構が単純なこと、加工が少ないこと、ゴムの強さに関わらず動作すること、万一壊れても使用者に危険が及ばないことなどを考え、下のようなデザインになりました(シア付けたかった・・・泣)。とりあえずこれで作ってみます。


試射の結果ですがこちらの画像になります。
ゴムはユタカメイク22mm×折径160mm平ゴム、加速距離40cm、パチ玉、一枚目は水缶、二枚目は空です。
アルミビール缶は両面貫通、アルミ蓋付きコーヒー缶は少し切れ目ができた程度です。
おそらく25~27m/sくらいでしょうか・・・。
この後は玉受けとレールを作り直すつもりです。

最後に現在の状態です。



部活で始めるArduino② 「サーボモータ入門編」

サーボモータ入門編

今回はarduinoでサーボモータを動かしてみましょう。

arduinoは単体だとLEDを光らせることくらいしかできないのですが、ピンを使って様々なものと接続することで多くのことができるようになります。

今回はロボットを作ったり動く工作をするのに使われるサーボモータをarduinoで制御してみましょう。



今回はとりあえず動かすことが目的なので
・小さいサーボモータ
・3ピン制御
・簡単プログラム
で行きたいと思います。

まずサーボモータを入手します。
今回私が使用したサーボモータはSG90(¥420)です。一番小さいお手頃なやつです。アマゾンで2日
で届きました。



arduinoとサーボモータのほかに前回使ったUSBケーブルB型、サーボモータと接続するためのジャンパ線(針金でも可)を用意します。


あと前回の投稿を参考にarduinoとPCを接続してプログラムが書き込める状態にしておいてください。PCによっては繋ぐたびにドライバの更新が必要になる場合があります(私の学校のPCがそうでした)。

作業を始めるまえに注意です。サーボモータは普通のモータとちょっと違うので以下のことに気を付けてください。

・手で無理に回さないこと
・製品ごとに決められている角度以上に回さないこと(できれば±3°180°なら3°~177°で運用する)

では早速作業を始めましょう。
まずarduinoとサーボモータを接続します。サーボモータはコードの色ごとに役割が決まっています。

こげ茶→GND(電池でいうマイナス)
→IN(電源、電池でいうプラス)
→制御(デジタル信号で角度の指示を出す)

今回はこげ茶はarduinoのGNDに、赤は5Vに、黄はデジタル出力の9番(プログラムによってはほかの場所でも可)に接続します。
ジャンパ線を互いの端子の穴に深く差し込みます。



接続している間はサーボモータからキュイキュイという音が聞こえるかもしれませんがサーボモータが現在の角度を保とうと微妙に動かしているためで問題はありません。

次は実際にサーボモータを45°から135°に動かしてみます。
以下のプログラムをPCのarduinoIDEに入力して書き込んでください。
(ちなみに//と入れた場所は「その場所からその行の終わりまで無効」ということを表す文法です。無効になるのでそのままコピーして貼り付けてもらって大丈夫です。)

#include<Servo.h>       //サーボモータのライブラリをインクルード
Servo servo1;            //servo1というServoオブジェクトを作る

//最初に一度だけ実行
void setup() {
    servo1.attach(9);   //servo1が刺さっているのは9番ピン
}

//setupの後無限ループ
void loop() {
    servo1.write(45);    //servo1を45°にする信号を出す
    delay(1000);          //1000ms(ミリ秒)=1秒待つ
    servo1.write(135);  //servo1を135°にする信号を出す
    delay(2000);         //2000ms(ミリ秒)=2秒待つ
                             //「{」のところに戻る
}


サーボモータが45°から135°の間を往復しましたか?
失敗した方はこれまでの手順をよく読んで再挑戦してみてください。

arduinoのプログラムはスケッチと呼ばれ、C言語とほぼ同じ文法で書くことができます。
が、ちょっと使うためだけにプログラミング勉強するのは…。という方もいると思います。
そのうち「当てはめるだけでスケッチが書ける表」みたいなのを作るかもしれません。

次回は「サーボモータ応用編」か「シリアル通信編」になります。
この記事がArduinoに挑む方の助けになれば幸いです。

2016年12月10日土曜日

部活で始めるArduino① 「入手と準備と確認編」

新シリーズスタートです。
今回から部活のプロジェクトで始めたArduinoについてやっていきたいと思います。

そもそもなぜタイトルにわざわざ「部活」とつけたのか。

・同じ中高大学生の開発者さんに見てもらいたいから
・部活ではPCが選べなかったり、管理者権限がなかったり、Cドライブに保存できなかったり、と制約が多いから
・部活では予算が限られているため容易にトライ&エラーができないから
・ただ楽しむだけでなく成果発表を求められたりするから

などなど、趣味でやったり会社で開発を行うのと大きな差があるからです。
「俺もそうだー!!」という部活開発者はコメントをお願いします(笑)

このシリーズの指針は
・なるべく互換機体で安く
・新しく購入するものを減らしてないものは作る
・買うものは最低限、あるものを代用
・部活の先生よりGoogle先生
・やるからには世界を目指す
こんな感じです。

ここから第一回本編です。

まずArduinoを入手しましょう。
Amazon、Yahoo!、秋月、海外サイト、町の部品屋さん、どこでも買えます。
やはりおすすめは純正品です。出回ってる情報量が段違いです。
相場は¥3500くらいでしょうか。

ですが安く済ませたいなら断然互換品です。

今回は比較用として純正品と最安値の互換品の二種を用意しました。
↑左が互換 右が純正
台湾製です。注文から発送まで9日でした。
400円台って信じられませんね、オープンソースハードウェアってすごい。

そのほかUSBケーブルBタイプケーブルが必要です(互換機についてきますがAmazonのコメントを見る限り不良品が多いそうです、本体の評価はすごく高いのに…)。

次にIDE(統合開発環境)を入手します。プログラムを書くためのソフトだと思ってください。
Arduino IDE
自分のパソコンに合わせて選んでダウンロードしてください。
ダウンロードできたら好きなフォルダに解凍してください。このソフトはフォルダごと移動すればUSB、学校等のサーバなどに入っていても動作します。

注意:パスに日本語(全角文字)が入っていると書き込みができないので英語のみのパスの場所に保存してください(フォルダ名が「アルディーノ」などはダメ)。

ドライバ(接続のためのソフト)をインストールします。
これは各機体、OSなどでも違うので各自調べてください。
また管理者権限が必要な場合もあるので顧問の先生などに協力してもらいましょう。

純正品はスイッチサイエンスさんのサイトが、上の写真の互換品はこのサイト(中でNANOとあるがCPUが同じなので同手順)がわかりやすかったです。

わたしは先に純正品のドライバをインストールした状態からのスタートだったのでもしかすると同じ手順ではできないかもしれません。その時はコメントお願いします。

Arduino IDEを開いてツール→シリアルポートと開いて認識されていることを確認します。

試しにファイル→スケッチの例→01.Basics→Blinkをクリックしてサンプルプログラムを動かしてみます。
そのままだとわかりずらいのでdelayの後の数字を適当に変更しておきます。例えば
digitalWrite(LED_BUILTIN, HIGH);
の後のdelayは点灯時間なので500にすると500ms=0.5秒点灯します。
変更したら右矢印のマークの「マイコンボードに書き込む」をクリックして本体にインストール。

本体のLEDがついたり消えたりを繰り返したら成功です。

今回はここまでです。次回からはサーボモータを使っていきたいと思います。

2016年12月2日金曜日

RSS実験機「Aries」製作記⑥

ストック取付!!

プログラミングやってたせいで前回からだいぶ空いてしまいました。
もう外で作業するのはきつい季節になってしましました。

今回の作業は
・フレーム調整
・フレームとストックの接合
・機関部取付

です。また、玉受けは仮のものを木片で作ってあります。
まず前回のフレームの、全部のパーツを玉受けがより長く動けるように一部切断します。
線を引いて・・・
ゴムへの負荷を減らすため断面をやすりで整えます。
出来上がり。
フレームとストックをボルトで接合します。といっても穴をあけるだけなので省略。
こうなりました。
M2みたいに上フレームが上がってますが閉じてボルトで固定します。機関部ははさむだけでしっかり固定されます。
今回の作業はこれで以上です。
一応撃てる状態にはなったので仮撃ちをしました。
 輪ゴム左右それぞれ8本ずつ、2本直列でボトル型アルミ缶水入りがへこんだだけでした。
たぶん20m/sも出てないです。今度ちゃんと平ゴム買ってきます。

今回は仮撃ちまですることができました。
残りの作業は

・玉受け制作
・やすり掛け
・トリガーガード取り付け
・スコープやらなにやら調達
・塗装

です。がんばります。

2016年11月16日水曜日

Re:ゼロから始める開発者生活④

今回はちょっとめんどくさいかもしれませんがあとちょっとなので頑張って行きましょう‼

今回やることは

③「opencv_world310d.dll」を配置したり「opencv_lib.hpp」を作ったりする。


ちょっと説明します。

opencv_lib.hppについて


この方法を試す前にNuGetで導入を試みた方なら分かってもらえると思いますが、NuGetで導入成功と表示されても実際にソースコードを書くとエラーを返されます(注:2016年11月1日現在)。

なぜか?ソースコードでインクルードする「opencv_lib.hpp」が存在しないからです。
これは各ファイルの場所が書いてあるらしいファイルで、前のバージョンでも自作する必要があったみたいです。
試しに2.4.4用のテンプレートを244→310にして突っ込んでみましたがエラーorz
いろいろ探した結果、見つかりました。

「3.1から場所を表すファイルはworldファイルにまとまったからworldファイルの場所を書くだけでいい」

ということらしいです。

opencv_world310d.dllについて


これは正しいやり方では「パスを通す」のが一般的みたいですが管理者権限がないので基本に立ち返り(?)「プロジェクトごとにsourceファイルと同じフォルダにopencv_world310d.dllを突っ込む」という方法でやりましょう。
ちなみに310の後についている「d」は「デバッグ用」を表す「d」ですので、リリース用の環境を作るときは「d」のついていない方に入れ替えてください。


では実際の作業に移ります。

まずVS 2015を起動して好きな場所に空のプロジェクトを作成します。
場所はデフォルトだと「ドキュメント」フォルダになっていると思います。
これは共有フォルダなどに変更しても大丈夫です。ファイルがいじれる場所にしてください。
ちなみにUSBメモリに環境を作ろうとしたら失敗しました。たぶんできる方法があるんだとは思いますが、この方法では無理でした。(絶対パスだからなんでしょうか…。)

最初にでるウィンドウでは空のプロジェクトにチェックを入れて完了を押してください。
「ソースフォルダ」を右クリックして「新しい項目」から「ソースファイル」を作成してください。
これで空のプロジェクトに空のソースファイルが入っている状態になりました。
ここからする作業は下の3つです。

Ⅰ.プロジェクトプロパティを設定する


プロジェクトを右クリック→プロパティ
→C/C++→追加のインクルード ディレクトリ→編集
と選択していくとウィンドウが開きます。
矢印のボタンをクリックしてビルドしたOpenCVのフォルダのbuild→install→includeと開いていってincludeフォルダを指定してください。表示されるパスが ~\includeとなっていますか?

次にライブラリディレクトリを追加します。
プロパティウィンドウの左側の「リンカ」をクリックし、「追加のライブラリディレクトリ」を開いて「編集」をクリックします。
上と同じようなウィンドウが開きます。
矢印のボタンを押してbuild→install→×86→vc14→lib と選択していきます。
パスの最後が上の写真のようになっていることを確認してください。

次に「リンカ」をダブルクリックしてタブを開きます。
その中の「入力」をクリックしてください。
赤の矢印のところを開いて上の二つと同じく編集をクリックしてください。
上の写真のようなウィンドウが出ると思います。
この入力はウィンドウではなくファイルのパスを直接入力します。
上で指定した「lib」フォルダの中の「opencv_world310d.lib」のパスを黄色の矢印のスペースに貼り付けてください。
写真と同じ状態になったことを確認してください(310の後にdが付くので間違えないように)。
すべて終わったらOKを押してウィンドウを閉じてください。VS 2015も閉じても構いません。


Ⅱ.opencv_lib.hppを作成する


メモ帳を開き、下の内容を入力して保存してください。
#if _DEBUG
#pragma comment(lib, "opencv_world310d.lib")
#else
#pragma comment(lib, "opencv_world310.lib")
#endif
ファイル名を「opencv_lib.hpp」に変更して保存します。「拡張子を変更すると~」という警告がでるかもしれませんが無視して変更してください。

こうなります(Windows7での表示です、若干異なるかもしれません)。
opencv→build→install→include→opencv2に移動させてください。


Ⅲ.opencv_world310.dllをコピペする


このファイルはopencvを使ったソフトが動くたびに読み込まれます。
build→install→×86→vc14→binに入っているopencv_world310d.dllをコピーして


ソースファイル(Sourse.cpp)が入っているフォルダに貼り付けてください。

ポイッと。



これで環境構築は終了です。

きちんと動作するかテストします。ソースファイル(Sourse.hpp)と同じフォルダに test.jpg と名前を変更したJPEGファイルを入れてください。これを表示してみます。
サンプルコードをソースファイルに入力してデバッグボタンを押して起動してみましょう。


サンプルコード


#include <opencv2/opencv.hpp>
#include <opencv2/opencv_lib.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <windows.h>

int main(void)
{
char path[] = "test.jpg";
cv::Mat src_img;
cv::namedWindow("Image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
while (1) {
src_img = cv::imread(path, 1);
if (src_img.empty()) return -1;
cv::imshow("Image", src_img);
cv::waitKey(1);
if (GetKeyState(VK_LSHIFT)<0) { return 0;}
}

}

きちんと動作すれば成功です。

これで開発を始める準備が終わりました。

ここからは楽しいですよ~!!
間違っていてもなにが間違っているのかVSが教えてくれますから(笑)
私も環境構築が終わった日は一日中ニコニコしながらコード書きまくってました。

私の顧問いわく、
「環境構築が一人でできるようになって初めて本当の開発者を目指せる(低音)。」
だそうです。

お疲れ様でした。
別シリーズで実際の開発も報告していきます。

2016年10月29日土曜日

Re:ゼロから始める開発者生活③

今回は前回準備をしたOpenCVVSでビルドしていきます。

VSOpenCVを「ビルド」する。

今回は英語もパスもほとんど出てこないので安心して取り組んでください(笑)

まず、前回準備をしたOpenCVのフォルダの「build」フォルダの中からOpenCV.slnというファイルを見つけてください(めんどくさい方は検索かけてみてください)。見つけたらダブルクリックで起動してください。VSが正しくインストールされていればVSが起動するはずです。
読み込みに時間がかかるので左下に準備完了と表示されるまで待ちましょう。

OpenCVを「ビルド」していきます。

まず上の方にある「ビルド(B)」をクリックします。
開いた選択肢から「バッチビルド(T)...」をクリック。
ビルドする対象を選ぶウィンドウが開きます。

「INSTALL」というプロジェクトの「Debug」「Release」の二つのチェックボックスにチェックを入れます。
「ビルド」ボタンを押します。「出力」というツールボックスに文字列が表示されていくと思います。

ここからかなり時間がかかります(私は20分以上かかりました)。
気長に休憩して待ちましょう。

表示が止まって「ビルド: 2 正常終了、0 失敗、0 更新不要、0 スキップ」という表示が「出力」ツールボックスに表示されていれば成功です。違う表示の場合はどこかに間違いがあるか仕様が変わったかなのでもう一度やり直したり情報を集めたりしてみてください。

これで「ビルド」の作業は終わりです。次回はちょっとわかりにくい内容になるかもしれませんが楽しい画像処理ライフのためにがんばりましょう!!

2016年10月27日木曜日

Re:ゼロから始める開発者生活②

さて、始める前に前回書き忘れた私の環境について書いておきます。

学校のパソコン

Windows8.1
・64bit
VS 2015 64bit
・ローカルディスク使用不可、管理者権限なし

自宅のパソコン

Windows7
・64bit
VS 2015 64bit
・ローカルディスク・Cドライブ使用可、管理者権限あり

ここからの作業に当たって、いくつか注意事項があります。
まず、うまく行かないときはもう一度繰り返してみたり、再起動してからやってみましょう。
時間がかかる処理も多いので表示が変わらないからといってソフトを消したり、中断しないようにしましょう。作業によっては20分近くかかることもあります。
私は超初心者なので質問が来ても自分の環境についてくらいしか答えられないと思います。過度な期待はしないでくださいね。


前置きが長くなりました。作業を初めましょう。
下記の作業が全行程になります。

CmakeOpenCVを「ビルド」する下準備をする。
VSOpenCVを「ビルド」する。
③「opencv_world310d.dll」を配置したり「opencv_lib.hpp」を作ったりする。
VSでファイルパスを設定する。



わざわざファイル名を書いたのはその場所でつまずいている方が検索したときに見つけてもらうためです。意味はあとで説明します。

今日やる作業は

CmakeOpenCVを「ビルド」する下準備をする。

です。

まず展開したCmakeを起動してください。binの中のcmake-gui.exeです。

「Where is source code:」の右の欄に ~/opencv/sources となるようにOpenCVを展開したフォルダフォルダの中のsourceフォルダを指定します。
同様に「Where to build the binaries:」の右の欄に ~/opencv/build となるようにsourceフォルダと同じ場所に入っているbuildフォルダを指定します。

指定が終わったら「Configure」ボタンを押します。
VSのバージョンを聞かれるので「Vidual Studio 14 2015」を選んでください。
下のチェックボックスはデフォルトのまま「Use default compilers」です。
私の環境では64bitで失敗したので無印(32bit版)が無難かと思います。

5~20分ほど待つとチェックボックスが並んだ赤い画面に代わります。
ここでビルドするときのオプションを選びます。
「BUILD_opencv_world」にチェックを入れてください。

「Generate」ボタンを押します。
しばらくして「success」とか「finish」みたいな文が出てきたら成功です。
「failed」みたいな文が出てきたら失敗なのでもう一度やり直したりしてみてください。

これでビルドの準備は完了です。OpenCVのフォルダにたくさんフォルダやファイルが増えていると思います。

次回はVSでOpenCVを「ビルド」します。

2016年10月26日水曜日

Re:ゼロから始める開発者生活①

いつもは銃がどーたら、ボルトがどーたら言ってますが、実は私の部活は情報系です。

このシリーズは、部活のプロジェクトで取り組むことになった画像処理について、同じ初心者の方とときにともに悩み、ときに発見を共有するために始めました。
ですので、もちろん同じ初心者の方は質問や議題を、経験者の方はアドバイスや指摘をコメントしていただけると嬉しいです。

本題に入りましょう。
今回使うのは画像処理といえばこれしかないというくらいの大定番にして大本命、

OpenCV3.1

です。
開発環境はこちらも定番

Visual Studio 2015

です。が、しかしどちらも最新版ということもあり、最初から大きくズッコケました(笑)。
そういうわけでタイトル通り、「ゼロから」解説していきます。また、学校で取り組む方(私を含め)のためになるべく管理者権限、ローカルディスクを使わない方法を目指したいと思います。
このブログが画像処理に取り組まんとする同志の皆さんのささやかな助力になれば幸いです。


まずは環境構築に必要なものをそろえていきましょう。

さしあたって開発を始めるのに必要だったのは
・Visual Studio 2015
・OpenCV3.1
・Cmake
の三つです。
Visual Studio 2015(以下VS)は日本語化しておきましょう。(日本語化もバグ?みたいなのがありましたが日本語化するファイルを何回かダウンロードすると直ったりします)
OpenCV3.1は公式サイトからインストーラをダウンロードして適当なフォルダに展開しておきましょう。
Cmakeも同様にインストーラからインストールしておきます。

長くなってしまったので今回はここで一旦休憩です。
ここまででつまずいた方はダウンロードしなおしたり、ほかのサイトから情報を見つけてみてください。

次回に続きます。

2016年10月16日日曜日

RSS実験機「Aries」製作記⑤

新兵器導入!!

ちょっと臨時収入があったので、ホームセンターで気になっていた工具を買ってしまいました。
それがこちら。
なんとこれ、電動ドライバーに取り付けて使うやすりなんです。
木材はもちろん樹脂、軽金属まで対応。¥1200くらいです。
今回はこれを使って加工していきます。
あとトリガーガードになりそうな金具を買ってきました。ドアノブ(?)だったはずです。



まずは前回からの改良です。
片方にしかバネが入っていなかったせいで撃つたびに調整が必要だった機関部ですが・・・、
これをこうして・・・

こうなりました。
これで引っ掛けるだけで再装填できます。

ではメインの加工行きます。
ストックを作っていきます。
前の投稿にあげた型紙をもとに
切り出して、
角を削り、

フレームの溝に合わせて加工します(下手だけどどうせ見えないからこれでOK)。

電動やすり、ものすごく便利です。ものすごく。

10分ほどで削り終わりました。サクサク削れて楽しいです。すごく楽です。
グラインダ等を持っていない人に自信を持ってお勧めできます。

このあとより細かいやすりをかけます(フレームとかその他やすり掛け予定の部品がたまっていく・・・)。


実はもう玉受けの試作品は出来上がっていて、一応撃てる状態にはなっていますがあまりきれいなものではないので、きちんとしたものが出来上がったら投稿します。
残りの作業は
・フレームとストックの接合
・玉受け制作
・やすり掛け
・フレーム調整
・トリガーガード取り付け
・機関部取付
・スコープやらなにやら調達
・塗装
といった感じです。

最後に今回の成果です。