ブルートゥースアプリを構築する


(注:これらの投稿は前から移動されますmedium.com ブログ
私はレゴ、特に技術シリーズの大ファンです.これらのセットのいくつかは、モータ/サーボ/ライトをモデルに追加し、IRリモートで制御できます.

私のお気に入りの2、掘削機とメルセデスベンツアーチ

レゴパワー機能
すべてのセットは、リモートと来ると、各チャンネルの場合は、IRレシーバが必要になります場合は、Bluetooth経由でお使いの携帯電話ですべてを制御できる場合はクールではないだろうか?

電力機能:どのように動作するか?


すべてのレゴ力機能コネクタは、4本のワイヤーを持っています;それらのうちの2つはバッテリーボックスから+/- 9 vを運びます、他方で2は方向と速度支配を提供します:

ワイヤC 1&C 2は、モータ/サーボ/ライトに制御することができます.速度を制御するためにPWMで、そして、地面で他のワイヤーでドライブの1つ;入力をスワップすると方向が反転します.パワーファンクションアクチュエータの詳細については、以下のようになります.http://www.philohome.com/tech.htm

概念図



このビルドには3つの主要コンポーネントがあります.
  • コマンドの送受信のためのBluetoothモジュール
  • それらのコマンドを解釈して、PWM信号を出力するArduino
  • アクチュエータを駆動するのに十分な電流を供給できるモータコントローラ
  • 私は通常、これらのコンポーネントのすべてを一緒に配線し、それを一日と呼ぶでしょうが、今回は私はよりクリーンなソリューションを望んで、自分のPCBを作成してみてください.

    PCB設計と製作


    私たちのビルドは、すべての手を配線することができますし、それで行われるのは簡単ですが、どこで楽しいですか?あなた自身のPCBを設計することは、楽しくて、やりがいがあるすばらしい学習経験です;あなたがより洗練されたプロジェクトに取り組むように、それは道を下ってあなたを助けます.そこにはいくつかの無料ツールがあります.KiCad , Eagle , EasyEDA , Upverter , などの方法を学ぶためにオンラインリソースのトン.
    私は、このポスト(YouTubeはあなたの友人)でこれらのツールを使用する方法の詳細には行きません、しかし、最初のステップは概念図を回路図に変えて、適切な構成要素を選ぶことです:

    主ArduinoコントローラのためにArduino Pro Micro 私はそれらの周りのいくつかを持っている.また、小さなフォームファクタに必要なGPIOピンの右側の数があります.私たちのBluetoothモジュールが2.7 V - 3.3 Vで動くので、私は3.3 V変動を選びました.
    ブルートゥースLEモジュールのためにHM-10 ; これは、CC 2541に基づいており、eBayで数ドルで見つけることができます.それは、単にカスタムサービス&特徴を介してそれを送信する任意のデータを通過する簡単なUARTインターフェイスを持っています.
    モーターコントローラのためにTB6612FNG 東芝から.私は元々人気を使いたかったですL298N それはより多くの電流を駆動できるように.残念ながら、それはMultiWatch 15パッケージで一般的に見つかります.それぞれのTB 6612 FNG ICは2つのチャンネルをドライブすることができます.私もノイズを減らすためにいくつかのデカップリングコンデンサを投げた(10 uF電解質と0.1 ufタンタル).
    最後に、少なくとも、我々は力機能レゴコネクタのために4つのピン・コネクタを必要とします.我々は直接ワイヤーをボードにはんだ付けすることができました、しかし、私はものをモジュラー(加えて、コネクタがよりよく見えます)を保ちたかったです.私は人気のJST XHコネクタを選びました.
    上記のすべてのコンポーネントはDigiKey またはeBay.私は、はんだ付け(または私がそれらの超小型のSMD部品を失うとき)を台無しにした場合、常にエクストラを注文します.

    次のステップは、回路図をボードレイアウトに変換することです.私は2層設計を選び、コンポーネントをボードの周りに戦略的に配置しました.Bluetoothモジュールがスペースを節約するために下に行く間、プロMicro、モーターコントローラとコネクタは簡単なアクセスのためにトップに行きます.私はまた、ルートルートを行う必要はありませんので、自動ルート機能を使用しますしかし、トレースをルーティングすると手動でよりきれいな結果が得られることがわかります.上記のスクリーンショットはデザインの最初の反復でした.


    したら、ボードのレイアウトに満足している、あなたのボードのレンダリングを生成することができます.これは、優れた問題のための素晴らしい視覚的なチェックです(そしてそれはまた、シルクスクリーンにレゴの男を追加するように、デザインで遊ぶことができます).
    最後のステップは、あなたのデザインからガーバーファイルを生成し、PCBファブにそれを送信することです!GerberファイルはPCB製造のための標準です、そして、彼らは板(例えばレイアウト、一番上の/一番下の絹のスクリーン、ドリル穴、ビアなど)をつくるための指示として用いられます;それを3 D印刷でgcodeと考えてください.そこにPCBファブのトンがありますが、私のお気に入りはOSHpark ; 彼らは迅速なターンアラウンド回を提供し、彼らはまた、Kicad/イーグルプロジェクトファイルを受け入れる、これはあなたがそれらをGerberファイルを生成/変換し、直接プロジェクトをアップロードすることができないことを意味します.

    私のボードは、デザインを送った2週間後に来ました.私は、私のレンダリングのような青いPCBを得たかったです、しかし、それは10ドル以上になりましたhttps://github.com/w4ilun/lego-ble-controller/tree/master/hardware

    ボードアセンブリ



    我々は、いくつかのSMDコンポーネントを持っているが、彼らは着実に手を持っていない場合は、はんだにトリッキーすることができます.私はkesterフラックスと'ドラッグはんだ付けSMDのコンポーネントを使用し、すべてのスルーホールのコンポーネントを行った.簡単な代替案は、はんだペーストを使用し、全体をリフロー炉に入れることである.



    また、あなたの4ピンコネクタにレゴ拡張線を取り付ける必要があります.回路図を参照することで正しい方向にそれらを持っていることを確認してください.また、コネクタなしでボードに直接延長線をはんだ付けすることができます.


    ファームウェア


    ファームウェアは非常に基本的です:シリアルポートからいくつかの入力文字列を読んで、それに応じて適切なピンをオン/オフにします.すべてのチャネルには、その方向と速度を制御するために3 GPIOピンが必要です

    回路図にピン番号マッピングを見つけることができます.以下のコードスニペットは、モーターを1方向に1回転させる方法を示します.
    digitalWrite(m1en1, HIGH); //CW or CCW
    digitalWrite(m1en2, LOW);
    analogWrite(m1pwm, 128); //values can be 0-255
    
    コマンド・プロトコルに対しては、単に1つの整数値である.例えば、×128・・・255・・・10・・・・・・・、駆動チャネル1を50 %、駆動チャネル2をフル・スピードで、駆動チャネル3を10/255速(最大4 %)、ブレーキ・チャネル4を意味する.チャンネルがLEGOサーボに接続されるならば、- 255は- 90度を表します、0は中心です、そして、255は+ 90度を表します.定期的な趣味のサーボとは異なり、レゴのサーボは、各方向に7ステップを持っているので、その範囲間の中間値は無視されます(あなたはこのYouTubeでレゴのサーボについての詳細を学ぶことができます).
    すべての一緒に、ファームウェアは単にシリアル経由でBluetoothモジュールからのコマンドを待つ無限ループであり、その後、各チャネルのためのモータの方向と速度を設定します.私のgithubのファームウェアコードを見つけることができますhttps://github.com/w4ilun/lego-ble-controller/tree/master/firmware

    Web Bluetoothアプリケーション


    我々のLEGO力機能モーター/サーボ/照明を制御するために、我々は若干の方法で我々のブルートゥースLEモジュールと話をする必要があります.我々は、IOSの/Android用のネイティブのモバイルアプリケーションを作成したり、PythonやノードのBluetooth LE APIのいずれかを使用します.JSなどBleno で).
    このプロジェクトのために、私はクロム45 +で利用できる最先端のウェブ・ブルートゥースAPIを活用することに決めました.最初にこの実験機能を有効にする必要がありますchrome://flags(この機能はデフォルトではChrome 56+ )
    Web Bluetoothについてのクールなことは、追加のライブラリ/プラグインを必要とせずに、それはあなたのブラウザから右動作することです!デスクトップとAndroidの両方で動作し、余分な何かをダウンロードする必要はありません単にWebブルートゥースが有効になっているWebページを訪問し、オプションの近くのBluetooth LEデバイスと対話するために提示されています.下のJavaScriptのスニペットは、デバイスを発見し、接続し、サービス/特性を発見し、それらに読み書きする方法を示します.
    navigator.bluetooth.requestDevice({ filters: [{ services: [service] }] })
        .then(device => device.gatt.connect())
        .then(server => server.getPrimaryService(service))
        .then(service => service.getCharacteristic(characteristic))
        .then(characteristic => {
            characteristicInstance = characteristic;
        setInterval(updateSpeed,200); //send commands every 200ms
        return characteristic.writeValue(str2ab("0#0#0#0"));
        })
    .catch(error => { console.log(error); });
    
    完全なコードはこちらhttps://github.com/w4ilun/lego-ble-controller/blob/master/index.html ; 私は私のrepoの上でgithubページを有効にしました、それで、あなたが私と同じコントローラを構築するならば、あなたはhttps://w4ilun.github.io/lego-ble-controller/ そしてあなたのレゴを制御開始!

    私はテストのためのこのインターフェイスで2つの制御チャネルを作成しましたこの例で展開するには、追加のUI要素(トグルボタン、ダイヤルなど)を追加し、コマンド列(Check 1 Ch 2 Cache 2 Ch 2 Cage 3 Ch 3 Ch 4 Chch 4、現在のCH 3とCH 4のデフォルトを0に設定)に追加できます.また、入力としてお使いの携帯電話の加速度データを使用することができます.

    試してみる



    私はすべてをテストするために“車”を入れ、私の喜びに大いに、すべてが完全に働いた)
    この学習経験はとても楽しかったです、そして、私はこのデザインで改善するのを楽しみにしています.次の繰り返しでは、Bluetooth LEモジュールと主なマイクロコントローラを統合する予定です.
    あなたが私に必要なすべてを見つけることができますGitHub ; 私はまだいくつかの余分なPCBを持っているので、無料で手を伸ばすと私はあなた自身のために試して1つを送ってうれしいです.
    楽しむ!