ラベル ARM の投稿を表示しています。 すべての投稿を表示
ラベル ARM の投稿を表示しています。 すべての投稿を表示

2015年10月18日日曜日

IchigoJam で遊ぶ その5 ムカデロボット編

 1ヶ月以上間が空いてしまいましたがIchigoJamで遊ぶ、 その1のタミヤ昆虫ロボットその2のタミヤのボクシングロボットその3のハンドロボットその4の2足歩行ロボットに続いて、第5弾はムカデロボットです。
 ハンドロボットで使ったAdafruitのI2C 16ch PWM Servo Driverを使って複数のサーボを動かすという手もありますが、やっぱり、ムカデといえば、これ・・・。


 ・・・。
 かつて、幼少の頃、マッドサイエンティストを目指した私としては、このムカデ人間方式にならって進めていきたいと思います。
 IchigoJamは公式版を使っても十分ローコストではありますが、今回はaitendoの最小構成LPC1114FN28キットを使います。ムカデの1関節(上の図の人間一人・・・)をIchigoJam一つと3関節分のサーボで1モジュールとして構成し、この同じ構成のモジュールを複数連結してムカデロボットを構成します。
 今回作ったのは、機構部は左右脚がサーボで上下方向に回転し、腹部連結関節が水平方向に回転するような機構を3Dプリンタで出力してマイクロサーボSG90を実装し、制御部はaitendo の最小構成LPC1114FN28キットにIchigoJamのファームウェアを書き込んだLPC1114FN28を載せ、3端子レギュレータでサーボ供給電源4.8VからIchigoJam用の3.3Vを作成する回路と電子工作マガジンに掲載されていたオートスタート回路を実装しています。








 実際には今回は4関節分連結します。




 本当はもう少し長くしたかったんだけど、途中で使っている3Dプリンタ(Flashforge Creator Pro)が壊れてしまったため、とりあえず4関節とします。どうもこの3Dプリンタは買ったばかりの時からX軸用のベルトが稼働中に外れて空中分解することがしばしばあり、何度かベルトを取り付け直してネジを締め直すを繰り返していたのですが、とうとうベルトをまともに取り付けることが出来ない状態で稼働後数分で綿菓子製造機(フィラメントがぐちゃぐちゃに放出される)になってしまいます。


 IchigoJamでオートスタートするプログラムは非常に単純です。

  前のモジュールからの左脚、右脚、腹部サーボのPWM値をシリアルポートで受信(INPUT文の入力)を順番に受けて、サーボに設定し、所定の待ち時間を入れて、次のモジュールへ送信(PRINT文)しているだけです。つまり、ムカデ人間の口から入れて、次の人間の口へ・・・の原理を踏襲しています。



 先頭の関節にだけ、LPC1114FN28と合わせて、ATMega 328P にArduinoファームウェアを書き込んだものを載せて、関節の動きの情報を送信させています。このArduinoからの情報が順次後ろに連結されたモジュールに伝わっていきます。それぞれのモジュール自体は基本的には同じもので前方からの信号伝達で歩行します。


2015年4月26日日曜日

IchigoJam が楽しい

 一週間ほど前に、(mbed) LPC1114 を試した際にLPC1114つながりで、IchigoJam というLPC1114でBASICが使える子供向けコンピュータ(と言いつつ、これを楽しんでるのは、70後半~80年代にマイコンボードやパソコンをいじっていたおっさんたちだと思う)も入手して触ってみたんですが、これがなかなか楽しいおもちゃです。小学生時代にN-BASICにはじめて触った頃を思い出してしまいました。ところで、このIchigoJamはLPC1114を使っているので、BASICと言いつつマイコンっぽい機能も使えたりします。例えば、デジタルI/Oがいくつかとアナログ入力とI2CとUARTが1chずつあります。となると、当がらくた部屋としては、やはりうごきモノの載せてみたくなるわけです。

 そこで、今回はAmazonで1400円くらいで売っている、これで行ってみようと思います。

 このリモコン昆虫よりも若干大きくなりますが、タミヤのユニバーサルプレートにIchigoJamと電池ボックスを取り付け、このリモコン昆虫の上というか背中の部分に載せます。
 まず、IchigoJam 4つの穴すべてがユニバーサルプレートの穴位置とは揃わないので、内2つをユニバーサルプレートとも固定、残り2つはスペーサを立てているだけで固定はしていません。


 電池ボックス。今回は単4エネループ三本で。


 単純にモータOn/Offができればいいので、Digital出力+Hブリッジでもいいのですが、I2Cを使ってみたかったので、あえて、DRV8830 I2Cモータドライバを使っています。またいつものPSDセンサを前方部に取り付けて、アナログ入力(IN2)に接続しています。


 シールド(ドータボード)の真ん中辺にあるのは、電池から3.3Vを生成するためのDC-DCとモータ側とIchigoJam側を切り分けるためのI2Cレベル変換です。シールドを作ってはじめて気がついたんですが、このジャンパピン用のソケットの間隔って100mil単位になっていないようです。850milとかそんな感じの半端な幅です。なので、差し込むときは、ピンを曲げるような感じで半ば強引に挿し込みました。


 PS/2のコネクタがシールドの裏面をショートさせるので、絶縁テープでカバーをしています。


 みんな大好き、タミヤの楽しい工作シリーズ。リモコン昆虫。


 リンク機構で6脚を動かす仕組みになっています。大人が組立てても十分楽しいキットでした。以下、載せたところ。



 おなか側。


 動かしてみたところ。


 やっていることは、ごく単純。

2015年4月19日日曜日

mbed LPC1114FN28 お試し

 今日のガラクタは スイッチサイエンスさんのmbed LPC1114FN28 です。入手したのはキットの方でコネクタ類は自分で♫ハンダ付け♪しています。


 合わせて、mbed LPC824も入手しました。


 いつもRaspberry Piと組み合わせてアナログ入力やPWM出力を拡張するためにArduino Microを使用するのが自分の常套手段なんですが、最近のArduinoの分裂問題なんかもあり、Arduinoの先行きが不安なので。(まあ、オープンなハードなので相当品を含めてハードを入手できなくなることはないと思いますが、どちらかというと開発環境やライブラリが分裂して使い物にならなくなって、ユーザが離れていくのが怖い気がします。)なので、代替の手段を模索しておこうかなというのが今回の目的です。

 で、今回、候補として調査対象にしたのが、mbed LPC1114FN28です。スイッチさんのこのモジュールでは、USB接続でマスストレージにプログラムを書き込めたり、シリアル通信したり、あとCMSIS-DAPデバッグもできる機能を外部チップ(LPC11U35)でできるようにしてありますが、基本的にはほとんどのLPC1114FN28のピンがそのまま右から左に出ている感じです。ただし、素のLPC1114FN28は600mil幅ですが、スイッチさんのモジュールは400milと幅が変わっています。ここはできれば、同じ幅のままピンを出しておいて欲しかったところです。そうすれば、モジュールの状態で開発・デバッグして、Fix後は素のICをそのまま挿して電源供給だけしてやれば済むわけですから。んー、なんで、幅変えちゃうかな?まあ、そもそも600milってでかすぎじゃね?機能の割りに?チップ自体が400milで十分な気がします。そんなわけで、mbed LPC1114FN28の基板上のICソケットに手持ちのゼロプレッシャーソケットを装着して、ゼロプレッシャーソケットにLPC114FN28のチップ自体を挿しています。スイッチさんで発注した際についでにmbed LPC824も頼みました。

 mbedは以前にちょっとだけ試したんですが、Arduinoの方が慣れていたので、その後、あまり手を付けていませんでした。今回は、もう少し突っ込んで、CMSIS-DAPでのローカルデバッグ等も試してみます。
 mbed のプロダクトページから ファームウェアの最新(beta)版をダウンロードして、LPC11U35側のファームウェアを更新して、mbedクラウドコンパイラで新規プロジェクト作成時に生成されるLチカプロジェクトをエクスポートして、ローカルの開発環境に取り込み、デバッグを試しました。当初、LPCXpresso形式でエクスポートして、LPCXpressoに取り込もうとしたんですがエラーが出て取り込めません。ネットで調べたところ、エクスポート機能に不具合があるようです。仕方ないのでMDKのプロジェクトとしてエクスポートして、MDK-ARMでデバッグを試しました。MDK-ARM Liteという無料版はLPCXpressoの無料版に比べてコンパイルできる容量が32KBまでと大幅に制限がきついんですが、LPC1114の場合はFlashが32kBしかないので、全く問題はありません。(他のmbedを使いたいときには容量制限が問題になるかもしれません。)
 実際にMDK-ARMでCMSIS-DAP(パソコンとUSBケーブルでの接続のみ)でステップ実行して、変数ウォッチなども出来ました。Arduinoにはこういったデバッグ環境がないので、これは便利です。
 PSDセンサをアナログ入力で読むのとI2Cコンパスの動作を確認しました。もう少し、具体的に使ってみないとわかりませんが、Arduino Microの代わりとして十分行けそうです。

 また、今回、mbed LPC1114FN28とは別にゼロプレッシャーソケットを秋月電子さんに注文したんですが、部品一個だけでは送料がもったいないので、IchigoJam というLPC1114でBASICが使えるモジュールのキットも合わせて購入しました。


 Raspberry Pi 同様に子どもたちにコンピュータやプログラミングに広く触れてもらいたいという開発者の意図ですが、Raspberry Pi 同様にまず飛びついてくるのは、我々世代のおっさんではないかと思います・・・。
 おそらくは、Tiny Basicをベースにしているのではないかと思いますが、LPC1124のADやI2Cの機能も利用できるように拡張された専用のBASICでセンサやI2Cモジュールが使えます。写真はストリナのI2C LCDとコンパス、EEPROMをI2CにPSDをADにつないでいます。この内、コンパスはまだ、動かせていませんが、他は動作を確認できました。I2CコマンドのR/Wビットの扱いの仕様でちょっとわからない部分もあるんですが、なかなか楽しいおもちゃです。






2014年3月23日日曜日

Adafruit の 2.8inch Raspberry Pi 用タッチスクリーン液晶

 今日のガラクタは、Adafruit の Raspberry Pi用2.8inch タッチスクリーン液晶です。いつものごとく、使用目的もないまま入手・・・。まあ、消費税増税前の駆け込み無駄遣いということで・・・。

 入手先は、スイッチサイエンスさんです。Raspberry Piくらいの大きさの段ボール箱に入っていました。


 中身は、液晶本体と、Raspberry Piの拡張コネクタに接続すためのメスコネクタと、同コネクタ信号をスルーして他のものをつなげる用のオスコネクタ。液晶の基板にはプッシュボタンのパターンも有るんですが、部品は入っていませんでした。必要なら自分で用意するみたいです。


 とりあえず、両コネクタをハンダ付け。



 液晶モジュールの基板への固定は両面テープです。


 ハード的なインストレーションは、これで終わりです。ソフトのインストール、設定の方が手間がかかりますが、Adafruitに丁寧なチュートリアルがあるので、躓くことはないと思います。


 無事、表示されて、タッチスクリーンも動作しています。あとは、使い道を考えるだけだ・・・。

2014年3月8日土曜日

ST Nucleo STM32F103 お試し

 今日のガラクタは ST Nucleo STM32F103 です。mbedの開発環境に対応していて、Arduinoとピン互換(ただし、I/Oは3.3V)だそうです。スイッチサイエンスさんで入手しました。このST Nucleoのシリーズは値段が一緒でCortex M0、M3、M4のCoreの物があり、F103はM3でFlash128kBです。M3でもFlashの容量が512kBと大きいL152というのもあるんですが、Visual GDBのコンパイラがサポートするSTM32デバイスにF103はあったんですが、L152はなかったので、あえてF103の方を選びました。まずは、mbedでのお試しですが、そのうち、mbedではなく素で使って見るときにVisual GDBでビルド・デバッグが試せたらいいなと思ったので。



 さて、例によって、使い道があるわけではありません。ただ単に、新しいものが好きで、ちょっとだけいじってみたいだけです。今回はmbedのクラウド開発環境からLチカサンプルのプロジェクトをダウンロードして、ローカルでデバッグ(ステップ実行)を試してみます・

 まずは、開封して、外観はこんな感じでArduino配置のピンの外側に独自のピン配置が用意されていて、基盤表裏両側にピンヘッダが突き出た形になっています。



  mbed のオンラインコンパイラで「ST Nucleo F103RB」というデバイスが選択できるので、サンプルのLチカ(blink_led)をテンプレートで作成しました。

 クラウドでビルドしてダウンロードされたバイナリをUSBストレージとして見えるNucleoのフォルダにおいてリセットして、LEDが点滅するのをまずは確認。



 続いて、プロジェクトツリーの当該プロジェクトを右クリックして表示されるメニューから「Export Program」を選択。


 すると、「Keil uVision4」というToolchain形式でダウンロードできるようなので、これをダウンロード。


 ダウンロードしたzipファイルを解凍すると、Keil uVision形式のプロジェクトファイルが展開されます。そこで、このKeil uVisionについて調べてみたところ、「MDK-ARM」というARM本家の開発環境のIDEらしいです。無料のお試し版をダウンロードして、試してみました。

 ダウンロードしたMDK-ARM(Ver.5でした)のお試し版をインストールして、先ほど解凍したプロジェクトファイルを開いてビルドしたところ、ビルドに成功。

 そこで、デバッグボタン(Start/Stop Debug Session)を押したんですが、「フラッシュ書き込みエラー・・」っぽいニュアンスのエラーメッセージ。そこで、「Flash」 → 「Configure flash tools」というメニューを開いてみると、「Debug]設定なるタブがあります。


 「Debug」タブ → 「Flash Download」タブ と進むと、書き込みアドレスを設定するような画面がありました。といっても、このチップのアドレスマッチングは全然わかりません。とりあえず、「Add」ボタンを押すと、リストの中に「STM32F103」があった(これは、MDK-ARMをインストールした時に使用するデバイスのライブラリをダウンロードする画面が表示されたので、そこで選んでダウンロードしてあったために表示されているんだと思います。この表示がない場合は、デバイスファイルのダウンロートで該当するデバイスファイルをダウンロードすればよいのだと思います。)ので、選択。


 再度、ビルド&デバッグボタンを押すと、ダウンロードが始まり・・・・



 おっ。動きました。Lチカとメッセージ出力をブレーク、ステップ実行出来ました。やた。

 あいかわらず、使い道もないのに、ボードのコレクションが増えていきますが、まあ、色々なボードを集めて、Lチカ程度に動かすこと自体が趣味ってことで・・・。




2014年2月27日木曜日

タミヤの楽しい工作シリーズ レスキュークローラ で BBクローラ

 Google+ でタミヤの楽しい工作シリーズを作った人の投稿を見て、久々に作りたくなったので、何種類か買ったまま、積んである在庫の中から レスキュークローラを引っ張り出してきて作ることにしました。みんな大好きタミヤの楽しい工作シリーズは、自分も大好き。


  モータ3つを有線リモコンでコントロールできるようになっていて、うち2つは左右のクローラを前後に回転、残り1つが車体前部のアームを上下にコントロールできるようになっています。リモコンでアームを上下にコントロールしながら上手く障害物を乗り越えるように操作するということでしょうか。

 箱を開けてみます。結構色々なパーツが入っていて、楽しそう。


 まずは、下準備でアーム用の棒状のパーツと本体ベースになるプレート状のユニバーサルプレートを指定のサイズにカットしていきます。



 次にアーム上下を操作するクランクギアボックスを組み立てます。


 続いて、クローラを駆動する両輪型のギアボックスを組み立て。




 クランクギアボックスをベースプレートに取り付け。


 クローラ駆動用のギアボックスをクランクギアを取り付けたベースプレートの反対面に取り付けるのですが、ここで、ちょっと気が変わって、説明書通りに作るのを放棄しました・・・。
 手持ちのユニバーサルプレートをもう一枚加工して、そちらにクローラ駆動用のギアボックスを取り付けることに。


 タミヤの楽しい工作シリーズで 同じような機構をもった アームクローラ というのがあって、こちらはアーム部分の上下をモータで制御せずに、成り行き任せになっているんですが、動画等をみるとその方法で十分というかなまじモータでコントロールするよりもいい感じで動いているように見えるので、そちらの方式を採用することにしました。前進中に障害物に乗り上げると、アーム部分のクローラの回転で障害物を下側に巻き込もうとして、結果アームが上方向にせり上がって、障害物の上に乗り上げて行くような動作をするはずです。

 と、いうわけで、足回りを組み立てていきます。


 モータを取り付けて、


 クローラ(履帯)を取り付けます。


 裏側。


 続いて、アーム部を組み立てます。



 履帯をはめたところ。


 本体と合体させて、間の履帯も取り付けました。


 かっこいい。こういう感じ、好きです。

 上部のクランクアームをやめて、別のユニバーサルプレートを追加したのは、元々有線リモコン式でリモコン側から有線経由でパワー供給する仕組みなんですが、これを、バッテリー搭載して無線化してみようと思ったためです。試しに小型のモバイルバッテリと小型の無線LANルータを載せてみたところ、ピッタリサイズ。ただし、実際にはバッテリに接続するUSBコネクタや無線LANルータへの電源供給コネクタやLANケーブルコネクタに挿さるものが出っ張るので、それぞれを斜めに配置して左右に中心をずらすように配置してやろうと思っています。


 モバイルバッテリの高さ(厚み)が23mm~24mm位なので、10mmと14mmのプラ支柱を連結してベースプレートに立てます。



 せっかくバッテリを積んだので、マイコンを積みたくなります。今回は Beaglebone Black で行ってみようと思います。ただ、BBB はユニバーサルプレートには上手く載ってくれません。これが Raspberry Pi だとネジ穴がいい位置(5mm単位の穴と重なる位置)にあり、そのまま支柱を立てて載せられるのですが、BBBはダメです。そこで、間にアクリルの板でマウンタを作成してネジ穴位置を調整します。


 支柱とネジにはプラスティック製を使用しました。これは、絶縁の問題もあるんですが、今回マウンタの切り出しや穴あけは採寸せずに現物合わせで適当にやっているので、かなり位置がずれています。金属の硬いネジだとずれてしまうと当然ハマりませんが、プラスティック製は弾力で吸収させて、位置ずれをごまかすことがある程度できるためです。


 キットに元々入っていたベースプレートからクランクギアを外してしまい、BBBのマウンタを取り付けました。


 あとは、無理やり?ナットで止めて、はみ出したプラネジの部分をニッパで切り落として、ネジの長さも調整します。

 レスキュークローラのベースプレートの支柱に固定して、バッテリ・無線LANとBBBの2階建て構造にしました。
 ただ、モバイルバッテリに挿したUSBコネクタや無線LANに挿した電源供給用マイクロUSBとBBBへ接続するLANケーブルが予想以上にかさばってしまい、非常に収まりの悪い配置になってしまいました。




 さて、次に、モータ駆動周りを考えます。BeagleBone BlackなのでPWMも複数利用できますが、コントローラをRaspberry Piに変えたりすることも考えて、I2Cモータドライバを使ってみようと思います。プログラムもそのほうが楽なんじゃないかな?


 まずは、BeagleBone Black とI2Cモータドライバ単体で動かしてみます。


 I2Cモータドライバは例によってDRV8830です。部品棚にはストリナのモジュールと秋月のモジュールが転がっているんですが、お試しは秋月版で行ってみます。コネクタや配線は違いますが、制御方法は当然共通なので、実装するときは現物合わせでどちらかを選定すればいいやということで、秋月版で試しましたが、実際に基板に載せるときは、実装ステペース的にストリナ版を使うことになりました。



 まずは、モータを動かすところからですが、一応、I2Cコンパスとジャイロも載せられるようにしました。BeageleBone 単体でとりあえず、モータが回転することを確認。


 クローラに載せて実装します。





 正面から見ると綺麗に収まっているようにみえるんですが・・・・


 実は後ろ側がUSBケーブルでグチャグチャ・・・


 なにか綺麗に収める、または、配線できる方法があるといいんですが・・・

 とりあえず、クローラをテスト稼働。


 現時点では特にセンサ情報のフィードバックや制御は行っていませんが、とりあえず、プリセット的にプログラムして、走行テスト。


 このくらいの山は乗り越えられるようです。今後、センサ(コンパス、ジャイロ)等を使えたらいいなと考えています。