スキップしてメイン コンテンツに移動

ミニ四駆(Nyampass風)をBLEで走らせよう

今回はちょっと変わった見た目のミニ四駆をBLEで走らせたいと思います。
ゴールとしてはラズベリーパイ3BからBLE接続で定時にミニ四駆を前進・後進させることです。

今回主に使用したもの

  • ミニ四駆
  • BLE nano v1.5(nRF51822)
  • リチウムポリマー電池 400mAh
  • モータドライバ md08a
  • 抵抗10kΩ 2本
  • 電気二重層コンデンサ 1F(1000,000uf)
  • 10Ω抵抗 2本(必要に応じて)
  • ノイズ除去コンデンサ(必要に応じて)
  • スイッチ(必要に応じて)

また今回使用したミニ四駆はこちら

www.amazon.co.jp

BLE nanoにプログラムを書き込む

今回はmbedを利用して書き込んでいきました。
簡単な仕組みとしてはBLE UARTを使ってBLE nanoに特定の文字列が届いたらモータを回転させるといった仕組みです。
mbedでの開発準備などは記事が長くなってしまうので、下記のブログでわかりやすく説明されているのでブログを参考に各自セットアップしてください。

jellyware.jp


また今回作成したプログラムは下記のURLにて確認できますので、気になる方はご覧ください。

os.mbed.com

内蔵させる回路の作成

回路の方はシンプルでBLE nanoとモータドライバの接続が主な回路となっています。
接続は以下のようにします。

BLE nanoモータドライバ
VIN(電源)VCC と VMOT
GNDGND
P06AIN2
P07AIN1

さらにモータドライバはPWMAとSTBYがHIGHの状態でないと走らないので、モータドライバのVCCと10kΩでそれぞれ接続しておきます。
* 今回はPWMでの速度操作は目的としていないのでモータドライバのPWMAピンをHIGH状態にしています。
この回路を半田付けすると、図のようになります。

BLE nanoとモータドライバの接続

図ではBLE nanoのCLK、DIO、VIN、GND、TXからも線が出ていますが、これはBLE nanoにプログラムを書き込むために必要な最低限のピンになります。
ミニ四駆に合体させた後にもプログラムを書き換えられるようにするためにつけました。
必要なければつけなくても良いです。

ミニ四駆側の下準備

ミニ四駆側では電池ボックスに回路を入れ込みたいので、モーターと電池の接点に半田付けで線を取り付けます。
この時モータから発生するノイズを考慮する際はモーターの接点に無極コンデンサを並列に挟んでおくと良いでしょう。

接点に半田付け

回路をミニ四駆に組みこむ

次は作成した回路を実際にミニ四駆に組み込んでいきます。
さらにバッテリーや電気二重層コンデンサも回路に追加していきます。
バッテリーを半田付けする際はショートしない様に細心の注意を払って作業しましょう。


配線は以下の様になります。
モーターの線は先ほどの図のから見ての向きになります。
* 赤色の部分が追加の配線です。

BLE nanoモータドライバモーターバッテリー
VIN(電源)VCC と VMOTプラス
GNDGNDマイナス
P06AIN2
P07AIN1
AO1左の線
AO2右の線

この時必要に応じてバッテリーのBLE nanoのVCCとバッテリーのプラスの間にスイッチを入れることで電源を落とすことができます。
この状態でも動作しますが、モーターによる急激な電力消費によってBLE nanoに供給される電圧が下がってしまい、高確率でBLE nanoが落ちてしまいます。
対策として、電源をマイコン用とモータ用で分けるなどが挙げられますが、今回はスペースがないので分けるのは厳しそうです。
そこで電源に電気二重層コンデンサという大容量のコンデンサを並列に挟むことで電源が強化され落ちる確率を減らすことができました。
しかしこの方法でも落ちることが多かったのでモーターのノイズを疑いましたが、モータードライバのVMOTとBLE nanoのVIN(バッテリーのプラス)の間に5Ω(10Ω抵抗を並列接続)抵抗を直列に挟んだところ、モーターに流す電流を抵抗で制限することでBLE nanoが落ちる回数を減らせました。
下の表が追加した回路です。
* 赤色の部分が追加の配線です。

BLE nanoモータドライバモーターバッテリー電気二重層コンデンサ抵抗5Ω
VIN(電源)プラスプラス片足
VCCとVMOTもう片足
GNDGNDマイナスマイナス
P06AIN2
P07AIN1
AO1左の線
AO2右の線

下の図が配線した後の図になります。

ミニ四駆に組み込み

さらに書き込みのために半田付けした線はミニ四駆のバッテリーボックスの下部の穴から外に出してピンヘッダなどを半田付けすればより書き込みが楽になります。
また、バッテリーのプラスとマイナスから線を出せば、バッテリ充電用として使えます。

背面に出した書き込み線と充電線

最終形態

ミニ四駆完成

これらの配線ができればひとまず動作できる様になります。
私はmacOSでの開発だったので、BLEのデバッグに使ったのはLight Blueというソフトでした。

https://itunes.apple.com/jp/app/lightblue/id639944780?mt=12&at=10l8JW&ct=hatenablog

実際に動かしている様子はこちらです。

前進

後進

マイコンと電源を共用しているので速度は電池駆動のミニ四駆には程遠いですが、これで前進と後進をBLEで遠隔操作できる様になりました。

操作側プログラム

今回はラズパイ3Bを使っていくので、内蔵のBluetoothモジュールをしていきます。
紹介するプログラムはNodejsのnobleを使用しますので、適宜以下のURLを参考にnobleのインストールをお願いします。

hawksnowlog.blogspot.com

こちらが今回作成したプログラムになります。

github.com

起動手順は、 1. プログラムを$ git cloneしたら$ npm installで必要パッケージをインストールします。
2. local_propaty.js.exampleというファイルをlocal_property.jsに名前を変更します。
3. $ sudo node app.js forwardで起動するとBLEアドバタイジングを飛ばしているミニ四駆が前に走り出します。
プログラムを見てもらうとわかる様に、コマンドの第一引数に"forward"を渡すと前進、"back"を渡すと後進します。
* nobleを使ったプログラムは実行に管理者権限を要します。
* 上記のリポジトリにforward.shとback.shがあるのでそちらを利用するとより安定して操作できます。

cron(クーロン)で定時に走らせる。

ラズパイでcronを使って定時に上記のNodejsプログラムを起動して走らせる様にします。
cronの編集は$ crontab -eコマンドで行います。
書き方は何分 何時 何日 何月 何年 コマンド といった具合です。
編集画面に出たら、
20 8 * * * sudo node {プロジェクトディレクトリ}/app.js forward
と記述しましょう。 これは、毎日の午前8時20分にミニ四駆を前に走らせるという命令になります。
書き終えたら、開いたエディタを閉じればこれで毎日午前8時20分にミニ四駆が走る様になりました。
この様に、cronを応用すれば電車が駅に到着する時間の何分間か前にミニ四駆を走らせて知らせてくれる様なシステムも簡単に作れます。

まとめ・学んだこと

  • モーターからはノイズが出るため、無極コンデンサを並列に挟んだ方が良い。
  • モーターを回すと急激に電気が消費されるため、出来るだけ電源は分けた方が良い。
  • cron(クーロン)を使えば定時にコマンドを実行できる。

コメント

このブログの人気の投稿

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その2

前回の記事 に引き続きPhaser3+Typescriptを使って RPG の基礎を作っていきます。 この記事は前回の記事を呼んだ前提で説明していきますので、ぜひそちらを先に読むことをお勧めします。 また、今回の記事は前回よりも難易度と内容量が上がっていますが、記事の最後に作業後の リポジトリ のリンクがありますので、そちらを先にダウンロードしてそちらと比較しながら学習することができます。 前回まで作成した状態のプログラムが以下の リポジトリ からダウンロードできますので前回まででうまくいっていない方は参考にしてみてください。 github.com 最終目標(再掲) ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・ゲームの作り方の断片を知る ・キャラの表示できるようにする ・キャラを移動できるようにする ・当たり判定をつける ・ NPC の追加してみる ・話しかけられるようにする 開発前提(再掲) ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール(再掲) ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 当ブログ仕様の画像素材の注意点 当ブログで使用する画像素材は『 ピポヤ倉庫 』より許可なしで無償再配布・改変が認められたものを改変して作成されたものです。 中には許可なく再配布・改変してはいけない素材もインターネット上には多く存在するのでそれらを使用するときは十分に規約を呼んでから使用しましょう。 1. キャラの表示 想定画面 今回は、はじめにキャラつまり操作

M5Stackで、においセンサー(TGS2450)を使ってみる。(LCDに表示編)

今回は、においセンサー(TGS2450)から取得したデータをM5Stackの LCD にグラフ表示をしていきます。 今回主に使用したもの M5Stack 10Ω抵抗 5本 Pch  MOSFET  2SJ334(スイッチとして利用) M5StackSideBB(ブレッドボード) M5Stackのピンはそのままだと配線するとき手間がかかるかと思いますので、今回はM5StackSideBBを利用しました。 ブレッドボードも付いているので、手軽に電子工作できるので個人的にオススメです。 SideBB for M5Stack www.switch-science.com 諸注意 本ブログのプログラムはArduinoIDEまたはPlatformIOでM5Stackの開発ができる状態であること前提のものですので、各自導入をお願いします。 過去に Windows のArduinoIDEで M5Stackの開発環境を構築する記事 があるので、参考にしてください。 においセンサー(TGS2450)について 今回使用したセンサーは 秋月電子通商 で購入できます。 http://akizukidenshi.com/catalog/g/gP-00989/ akizukidenshi.com TGS2450には4つのピンがあり、使用するのはそのうちの3本でヒーターを温めるピン、センサー情報を得るピン、GNDがあります。 ここで注意したいのは、ヒーター電圧は1.6Vと記述されているのでM5Stackで利用するときは分圧して3.3Vを1.6V近くまでに降圧することをお勧めします。 TGS2450のセンサーは可変抵抗になっており、データシートには5.62kΩ〜56.2kΩの間を抵抗が変化し、においが強いとより低くなると記述されていました。 よって、センサーの値をM5Stackで取得するにはセンサー抵抗と外部に接続する任意の値の抵抗による分圧回路によって求めることができます。 TGS2450の動作方法は、250ms周期でセンサーに電圧を5ミリ秒on、245ミリ秒offの状態にしてヒーターは8ミリ秒on、242ミリ秒offにすることで値を取得します。 配線 においセンサーとM5Stackの配線 上の図が配線図です。 30Ωの抵抗は10Ωの抵抗を三つ直列に接続して作成しました。 また、上部の抵抗10Ω二

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その1

今回はPhaser3とTypescriptを使って簡単な RPG ゲームを作る方法を紹介していきます。 内容はPhaser3およびゲーム作りについての記事なので、Nodejsの周辺モジュールなどの説明は一部省いての説明になりますのでご了承ください。 またこの記事では Phaser2 ではなく Phaser3 を使用するので注意してください。 この記事は二部構成になりますので、この記事を読んだ際はぜひ次の記事も読むことをお勧めします。 最終目標 ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・開発環境を整える ・Phaser3の開発構成を知る ・スタート画面を作る ・マップ表示をさせる 開発前提 ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 1. 最低限の開発環境の準備 今回最低限の環境を整えるために、『Typescript + Phaser3』の開発テンプレートを github リポジトリ で公開しました。 以下からZIPをダウンロードするか、 git clone コマンドで各自環境に展開してみてください。 ここから先は リポジトリ のプログラムを元に説明していきます。 github.com 展開するとファイル構造は以下のようになっているかと思われます。 注: 他にもファイルやフォルダがあるかと思われますが、表記されているのは今回使うものになっています。 - src/ (これから書くプログラムの保存領域)