工房

スマートランプの作り方:3つのステップ(写真付き)

株式会社博展 - 東芝実績動画

株式会社博展 - 東芝実績動画

目次:

Anonim

このInstructableはあなた自身のスマートランプを作ることについてです!このInstructableはかなり深くなります、そして私たちはあなたがあなた自身の美しいスマートランプをデザインして構築するのに成功するために必要なすべてを調べます!このInstructableは、あなたがFusion 360についてかなり知っていて、あなたのエレクトロニクスの経験がもう少し進んでいると仮定します、しかしこれは非常に徹底的でありそしてちょうど3Dプリンターにアップロードしてあなたのランプを印刷するのに必要なすべてのSTLファイルを含みますすべての回路図とコードも含まれています。これらはあなたがあなた自身のスマートランプを作るのを手助けするでしょう!

モノのインターネット:「よりスマートな」ランプ

モノのインターネットは、今日のハイテク社会における流行語です。あなたはそれを至る所で聞いていますが、誰もその定義を正確に指摘することはできません。それは本当に人によって違うことを意味します。 Techの世界で最大のプレーヤー、つまりGooglesとFacebookは、定義に同意できないようです。しかしこれにもかかわらず、すべての企業が現在IoT関連の内部グループまたは部門を持っているようです。 2020年までに400億の接続機器 「と」 企業は、今後5年間で、コネクテッドデバイスソリューションに6兆ドルを投資する予定です。 潜在的な成長の機会を見逃すことができるかどうかを企業に再評価するよう強制します。しかし、これは誰もがIoTから落胆させるべきではありません。実際、IoTは素晴らしいです。大量のデータを実際に利用する機会はこれまでにありませんでした。周囲の地域の天気パターンの結果としてあなたの車があなたの家の庭で繁栄するであろうどのような種類の植物が整備される必要があるかのようなものから、私達がこれまで正確に知ることができなかった土壌の種類と飽和レベルIoTはあなたのデバイスの維持費から推測作業を取り除きます。一言で言えば、それは人生を少し楽にすることができます。我々は常にデータを持っていました。これまで実際にどうすればよいのかわからないだけでした。 IoTはまだ初期段階にあります。それは途方もない速度で成長しています、そして業界がIoTの増大する苦痛のいくつかを解決し始めると同時に、私たちは本当に接続されたデバイスを見始めるでしょう。私たちはあなたのトースターがあなたの冷蔵庫と話す、そして両方ともあなたのテレビと話すところの未来のそれらのイメージを見ることができます。これらのビジョンは、ネットワークプロトコルの問題が解決されるまで実現できません。つまり、フィリップスのような特定の会社は、I²Cのような非常に伝統的なデバイス間通信の方法のコピー権を所有しています(これらが何であるかわからなくても心配しないでください、ランプを完成させる能力に影響を与えません)それは、そこで使われる言語の性質のために、多くのチップ製造業者がその特定のプロトコルのバリエーションを作成することによってこの著作権を回避することを可能にしました。これは、SPI、UART、ANTなど、他のすべての主要な機器でも発生します。これにより、機器間のハンドシェイクに関する膨大な数の置換が発生し、会社の接続機器が他の機器と話すことが不可能になりました。いずれにせよ、IoTはまだ初期段階にあり、成長して日常生活の中で役立つ可能性がたくさんあります。

あなたがまだ読んでいるのであれば、素晴らしい!それはあなたがIoTに情熱を持っているか、あなたが本当にこのランプまたはその両方が好きだったことを意味します!いずれにせよ、私はスマートランプを分解します。これはIoTデバイスで、インターネットに接続されており、データは興味深い目的で使用されています(以下で詳しく説明します)。このスマートランプは、WiFiチップとマイクロコントローラを介してインターネットに接続されています。さらに、静電容量式タッチボードがタッチボタンインターフェースに使用されています。必要に応じて、環境光センサーを組み込み、ランプの現在の照明の種類を読み取ることができます(コードにはこのサポートが含まれています)。たとえば、そのデータを使用してランプをいつ点灯させるかを決定できます。ランプは、WPAまたはWPA2パーソナルネットワーク(残念ながらエンタープライズサポートはありません)またはWEPに接続するように構成でき、データは構成したパーソナルホームサーバーに送信できます。私たちはランプを設定し、そこからデータをゲームエンジンに引き込むリモートサーバーに接続しています。このランプには、単なるインターネット接続ランプよりもはるかに多くのものが提供されています。

スマートランプの目的は、あなたのランプ(またはデバイス)に完全にアクセスし、あなたのシステムについて常に興味深い情報を得ることです。私たちはゲームエンジンを使って仮想環境で私たちのランプの仮想モデルを構築しました。 2つのランプを接続するためにネットワーキングを使用し、それらを互いに影響させます。バーチャルモデルでは、ランプをオン/オフして明るさを調整することができます。物理的なランプはこれらの変化を瞬時にそして遠隔的に反映します。他の方向では、明るさを変えるだけでなく、あなたのランプをつけたり消したりすることができます、そしてあなたのモデルはこれを正確に反映するでしょう。さらに、ランプが単にネットワークに接続されていない場合、ランプはレガシーモードに入り、通常の動作中のランプに戻ります。ゲームエンジンでこの情報の仮想モデルを構築することは完全に任意です。データを送信する場所として機能するフロントエンドWebクライアント、またはAndroidまたはiOSアプリを簡単に構築できます。また、ゲームエンジンモデルによって提供されるリモートコントロールを使用することもできます。

WiFi対応のランプが必要なのはなぜですか?

このプロジェクトの真価は物理的なランプではありません。それは美しくデザインされていて非常に素晴らしいランプですが、接続されているデバイスのネットワークを監視および制御する機能を持つことにはすべての価値があります。例えば、工場を見てください。工場では、通常、同様のタスクを実行するマシンが多数存在します。産業機械のネットワークを接続すると、管理者はデータを収集し、機械の状態を監視しながら、工場を遠隔操作することができます。収集したデータは実際には非常に重要であり、そうでなければ明らかではなかったかもしれない結論を出すのに役立ちます。たとえば、車の場合は、エンジン温度、車の力、毎分の回転数、燃費などを監視するIoTセンサーを使用できます。これらを組み合わせることで、ある程度の確実性であなたの車の全体的な健康状態を把握することができます。あなたのオイルやタイヤを交換する時期を知る必要がある代わりに、車はすでにあなたの携帯電話への通知を通してあなたを知っていてあなたに話します。さらに、自動車を含むデータセットと走行距離に関する平均修理時間からデータのレイヤーを追加すると、その予測をはるかに正確にすることができます。別の例として、3Dプリンタを使用して工業用部品を加工する工場は、夜間の仕事がいつ完了したかを知ることから大きな恩恵を受けます。それが起こると、マネージャはアプリを通して彼らの電話で通知を受け取るでしょう。それはマネージャが光熱費を節約するすべての非アクティブなプリンタをオフにすることを可能にするでしょう。 IoTが今日のハイテク世界で非常に重要なのは、自分の機械で何が起こるのかを知り、よりスマートにそしてリモートで操作できること、そしてその過程を通してお金を節約できることの便利さです。言い換えれば、スマートランプはお金の節約になりますか???

用品:

ステップ1:ランプの設計と一般的な組み立て

設計

何かを設計するときは、まず制約と目標を特定することから始めることが重要です。私たちの場合、インターフェースはだれでも歩いて使用するのに十分直感的でなければなりませんでした。一日の終わりにはまだランプを作っていましたが、技術を追加してもそれを損なうことはできませんでした。ユーザーがデジタルランプから入力するため、ボタンは「ステートレス」のままにする必要がありました。ステートレスとは、物理的な状態にあるトグルスイッチと入力を避けなければならないということです。標準のスイッチが使用された場合、スイッチの状態は光の状態と一致しない可能性があり、ユーザーにとって混乱を招くことになります。

有機的な形はまたランプのボディを3D印刷するという決定に影響されました。 3Dプリントにより、ボディの加工に費やす時間を短縮し、手作業では不可能だった複雑さを導入することができました。欠点は何日もの清掃と表面の仕上げが必要だったことです。 3Dプリンティングがしばしば生み出すでこぼこの表面は、ランプに最終的な製造品質の仕上げを与えるためにそれらが塗装される前に紙やすりで磨かれて埋められました。

印刷

このランプを印刷するために必要なすべてのSTLファイルはGrabCADにあります。

十分な大きさの封筒を持つすべての3Dプリンタがこれらの部分を印刷することができる間、利用可能な公差と材料が異なるかもしれないことを理解することは重要です。ランプの本体はStratasys Fortus 450mcに印刷されています。ボタンと拡散板はStratasys Objet Connex500に印刷されました。

木のように3Dプリントにも木目があるため、ランプの本体を印刷するときは向きが非常に重要です。あなたはランプが首に最大の強度を与えるためにその側面に印刷されていることを確認する必要があります。印刷物の視覚的表現については添付の写真を参照してください。

仕上げ

次のステップでは、3Dプリントの表面を「プリントされた」ように見えなくなり、拡散板以外のすべての部分に適用できるようになるまで、表面を洗練するプロセスについて説明します。

3Dプリンタはまだメーカーや消費者コミュニティの間であらゆる種類の概念的な誇大宣伝をしていますが、それらが主にツールであることを理解することは重要です。それはあなたがこれまでよりも速くあなたをあなたの物理モデルに近づけることを可能にします。あなたは(他のほとんどの方法よりも)スピードを上げ、(射出成形と比較して)コストを削減しますが、かなりのクリーンアップが可能です。

ステップ1:全ての支持材料を除去/溶解する。
ステップ2:中程度の厚さ(120グリット)のサンドペーパーを使用して、印刷物を軽く磨きます。
ステップ3:プラスチックと互換性のあるエポキシ接着剤でランプの上下(キャップ​​ではなく)を接着します(5〜10分のエポキシをお勧めします。残りの印刷物で滑らかになるまで接着剤をはさみます)。
ステップ4:Bondoの薄い層を印刷の層によって作成された尾根を埋めるために適用します。
ステップ5:乾いたら、印刷が表示されるまでBondoをサンドバックします。 120グリットはまだ大丈夫ですが、80グリットで始めることができます。常にマスクを着用し、換気の良い場所で作業してください。あなたの印刷物にはさまないでください、私たちはオリジナルのジオメトリを変更せずに尾根を埋めることを試みています。
手順6:手触りが完全に滑らかになるまで必要に応じて手順4と5を繰り返してから、220グリットで砂をかけます。
ステップ7:湿らせた、糸くずの出ない雑巾で、徹底的にプリントを拭きます。

ボディをペイントする

最後のプリントは3層に塗られました:サンダブルプライマー、エナメル塗料(任意の色)、そしてマットクリアエナメル。下塗りと塗装のステップを分けることで(そして2-in-1タイプの塗料を使用しないで)それはあなたが塗料を置く前に最後の表面欠陥のいくつかを捉えることを可能にします。私はつや消しエナメルが光沢のように簡単に傷を付けないことがわかった。どちらか試してみてください!

ステップ1:内部の表面をテープで固定します(ベースとフード内のLEDの位置)
ステップ2:触れないで回転できるようにランプを配置/吊り下げます。内部のタブでひっくり返すことができるジグを作ることをお勧めします。ベースキャップも同じ塗料になります
ステップ3:プライマーを2層塗ります。 1時間以上乾かしてから検査します。
ステップ4:下塗りしたすべての面を220グリットの紙やすりで軽く磨きます。表面の欠陥があるがそれほど多くない領域に焦点を当てます。ピットを入れようとしているのではありません。
ステップ5:再度プライマーを塗って軽い層を塗ります。塗りつぶしの粗い部分がある場合は、これらの部分にやや重いコートを塗ると効果的です。 1時間以上乾かします。
ステップ6:最後のサンディングのために320グリットのサンドペーパーを使うことができます。鋭いエッジをシャープに保ち、均等に研磨することに集中します。
ステップ7:今、私たちはペンキのエナメル質の薄い層、次に中間層を塗布します。乾くまで少なくとも一日を与えなさい。
ステップ8:400グリットのサンドペーパーでそれを軽くサンディングし、湿らせた、光の当たらない布で拭きます。
ステップ9:透明でつや消しのエナメル質を薄く張ってから中程度の厚さに塗り直します。少なくとも1日は乾かしてください。

これでランプのボディとベースキャップの仕上げは完了です。次に、ボタンについても同様のプロセスを進めます。それらは非常に小さい公差でモデル化されたので、約220グリットのサンドペーパーで完璧にフィットすることを見つけて、それからペイントの厚さを考慮するためにそれをもう少し少し減らします。

ボタンをペイントする

ボタンをペイントする手順は上記と同じですが、LEDから光を通過させる必要があるため、電源ボタンの下にある手順を除いています。ボタンがランプに収まりきらないため、ボタンの厚さを厚くしすぎないように注意してください。

ボタンを取り付ける

ボタンには、正しい奥行きを見つけるのに役立つ小さなタブが付いています。ランプの首に使用したのと同じエポキシ接着剤を使用して、各ボタンを所定の位置に接着します。接着剤であなたの美しいペンキの仕事をめちゃくちゃにする可能性を制限するためにベースを囲む外部領域をテープで切るようにしてください。

周囲光センサーを取り付ける

このランプで使用されている環境光センサーはAdafruit TSL2561光センサーです。 LEDが取り付けられる前に入る必要があります。リボンケーブルはセンサーボードの底面からできるだけ平らに取り付ける必要があります。それはそれから余分なたるみでランプの首に供給されます。あなたのプリンタ/はんだ付け作業に応じて、フィットは少しきついかもしれません。もう少し部屋が必要な場合は、鋭い#11 Exactoナイフが鍵になります。

LEDストリップを取り付ける

LEDストリップは3つの4つのセグメントに切断する必要があります(そして写真で見られます)。 LEDには、それらを所定の位置に保持するのに十分である接着剤が内蔵されています。はんだ付けが容易になるため、すべて同じ向きに取り付けてください。すべての色と12V +は並行してはんだ付けする必要があります。ストリップを取り付けたら、首を下に向けて、色分けされた4本のリード線をセンターストリップに半田付けします。熱接着剤は、はんだ接合部に強度を加えます。 12V +ワイヤを電源に接続し、R、G、またはBのいずれかのワイヤを接地します。 3つのライトがすべて点灯したことを確認したら、次の手順に進みます。

ディフューザーを設置する

フードアセンブリを完成させ、ディフューザーを取り付ける準備が整いました。塗料に接着剤が付く可能性がないように、LEDアレイの周囲を慎重にテープで固定します。 LEDキャビティレベルでランプを背面に固定します。アプリケーターとして小さな棒を使用して、注意深く接着剤をLEDキャビティの両側の隆起面に追加します。接着剤が両側に均等に塗られたら、接着剤がしみ出すかどうかを監視しながら慎重に拡散板を置きます。もしあれば、それが設定する機会がある前に素早くそれを拭き取ってください。

ステップ2:エレクトロニクスロック!

電気製品:現代の魔法使い

技術は今日の私たちの技術の能力と魔法のように見えるかもしれません。しかし、私はあなたが誰でも電子工学を学ぶか、またはすることができると確信します。私たちはあなたがこのランプを複製することができるようにすべてを分解し、うまくいけば1つか2つを学ぶだけでなく、いくつかの電子機器の背後にある基本原理を説明します。

パーツリスト:

以下は、このランプのネットワークと電子機器を完成するために必要なすべてのものです。

  • 3Dプリンタ
  • AdafruitからのWINC1500ブレイクアウトボード
  • Nチャンネルの3倍
  • Adafruit TSL2561光センサー
  • Adafruit MPR 121容量性タッチボード
  • バックライト用LED電源ボタン(LEDが2、3個必要です)
  • より芯線
  • ワイヤーカッター
  • ワイヤーストリッパー
  • ソリッドコアワイヤー(静電容量式タッチボタン用)
  • LEDストリップ
  • 双方向スイッチング通常(12Vから5V)
  • Teensy 3.2またはArduino Mega(拡張メモリーが必要)
  • 3倍のsparkfunプロトボード(または同じようなサイズのもの - それより大きくはありません!)
  • 12V DC電源と2.1 mmバレルジャック(リンクされているものは両方を含みます!)
  • 3 x 68オームの抵抗器(バックライトLEDごとに1つ)
  • 熱収縮チューブ1/8 "
  • ブレッドボード(あなたが最初に非永久バージョンをプロトタイプ化したい場合)
  • ヒートガン
  • はんだごて(リンクに含まれるはんだ関連のすべてが含まれています - はんだは含まれています)
  • 半田
  • 水(はんだパッド清掃用)

ステップ1:WIFIブレイクアウトをTeensyに接続する

このランプの接続性を取得することは、このデバイスの「クール」ファクタの50%およびIoT部分の100%なので、非常に重要です。上の写真は、Teensyの各ピンを正しいピンに接続する方法を正確に示しています。

このリンクはAdafruitからのチュートリアルで、各ピンをマイクロコントローラに接続する方法を段階的に説明しています。彼らは特にピン配列が異なるArduinoを使用しました。しかし、私はこのボードに含まれている他のボードと同様に誰もがWiFiボードをTeensyに正しく接続するのを助けるべきである上記の2つのバージョンのイーグル回路図イメージを含めました。より高度な回路図では、回路図は各ブレイクアウトボードとサブサーキットの機能を細分化し、ボードを1つのボードに統合することを望んでいる場合に備えて、すべての適切な寸法を満たします。 「基本回路図」では、WiFiボードはピンが突き出ているブラックボックスになるよう抽象化されています。これらのピンはすべて、正確な名前を付けてTeensyで接続するピンと一致するネットラベルでラベル付けされています。 この回路図は、統合ボード設計の基礎として使用しないでください。正しい寸法やボード上の適切な回路がありません。

各部分をテストして接続を確認したい場合は、これをブレッドボードにすることができます。これは、あなたが現在プロトタイピングボードに取り組んでいることを前提としています。テストとブレッドボードの反復を独自に行ったので、接続を簡単にはんだ付けできます。

これはあなたがはんだ付けする方法を知っていると仮定していますか。あなたがまだ学んでいるならば、このリンクをチェックしてください!

あなたは最初にあなたのヘッダーピンをTeensyにハンダ付けする必要があるでしょう。 その方法がわからない場合は、このリンクをチェックしてください。

ヘッダーピンを10代にハンダ付けしたら、TeensyをSparkFunボード上に置き、10代をこの特定の向きに揃えます。光沢のある金属製の長方形は、通常、数字が書かれています。ここでもっと学びましょう!反対側は3つの垂直方向の列だけに収まるべきです。周辺機器のため、この向きが必要です。静電容量式タッチボード、WIFIボード、およびLuxセンサーはすべてSPI通信ピンを介して通信します。ランプベースのサイズの制約のため、我々は部品リストで指定されたプロトタイプボードのサイズだけを使うことができます。その結果、片側に2列または3列の垂直列を持ち、反対側に列数を持つLEDドライバ回路(ゲートからのPWMピン)のすべての接続に適合できる方向は2つだけです。あなたは反対側から選択しませんでした(すなわち、一方に2、もう一方に3、またはその逆)。

正しい向きになったら、接続を恒久的なものにして、TeensyをSparkFunプロトタイプボードに半田付けすることができます。ワイヤークリッパーを使用して、ヘッダーピンが突き出ているボードの底をクリップすることができます。

あなたがTeensyをハンダ付けした後に、WIFIボードにハンダヘッダーピンを付けます。これらはWIFIボードが入ってきたパッケージに含まれるべきです。あなたがWIFIボードにヘッダーピンをはんだ付けした後、あなたは別のプロトタイプボードにWIFIボードをはんだ付けする必要があります。

時間を節約するために、先に進み、どの回路にどのボードを使用するかを指定してください。ボード1には、あなたの10代だけが乗っているべきです。ボード2は無線LANボードを持っています。ボード3には、LEDドライバ回路、双方向スイッチングレギュレータ、およびDCウォール電源からLED /回路の残りの部分への電力を供給するためのコネクタ部品があります。

WiFiボードをプロトタイプボードに逆さまにはんだ付けする (参考のために接続された3枚のボードの写真を参照)そしてヘッダーをクリップで留める。これは、その向きによって3つのボードがランプのベースにきちんと折りたたまれることが可能になるためです。

ここでの最後のステップは、接続をルーティングするために上記の概略図を使用することです。接続部の長さより少し長い撚り合わせた芯線の長さを切り、剥がします。次に両端の接続部をはんだ付けします。

一般的なヒント: ワイヤを色分けして、回路全体で一貫性を保ちます。あなたの送電線をすべて赤のより線の芯線にし、黒は接地されるべきです。これはあなたのデバッグプロセスにおいてあなたを助け、そして物事をきちんと整然と保つのを助けます。

LEDドライバ回路とレベルシフタ

このセクションには複数の部分があるので、それを小さな部分に分割して、ここですべてを順を追って説明します。電源回路から始めましょう!

電源回路には、DC電源(壁のレンガ)からプラスとマイナスのリード線(赤と黒のワイヤ)を接続できるコネクタ部品があります。この部分を、1行目と2行目の最後の部分で、対角線上にあるボードの上面にハンダ付けします。これは写真の上でも見られます。それが終わったら、焦点をMOSFETドライバ回路に移します。

はじめに、MOSFETの概要がわからない人のために、MOSFETの背景について説明します。 MOSFETの略 Mエタール xide S半導体 FE完璧な Tトランジスタ。この最初の部分は、トランジスタが構成されている材料の種類を表しています(選択された材料の種類とその結果としてのトランジスタの特性に影響があるため、非常に単純化されています)。この文の後半はもう少し複雑です。電界効果とは、チャネル間を移動する電荷を介して誘導電流によってトランジスタのゲートが引き下げられることを意味します(理解していなくても心配しないでくださいが、詳細はこちら)。トランジスタは基本的に単なるスイッチです。ゲートに電圧を印加して回路の特定の部分に電力を供給することで、電力の流れを制御できます。トランジスタはかなり複雑です。つまり、すべてのトランジスタにゲート、ドレイン、ソースがあります。ドレインとソースは回路の入力と出力として扱うことができます。 MOSFETにはさまざまな種類がありますが、製造元として遭遇する主なものについて説明します。 NMOSとPMOSは、正と負のチャンネルMOSFETを表します。この区別は重要です。ソースからドレインへ、またはドレインからソースへと電流を流すためにゲートに印加できる電圧の種類が決まるからです。 NMOSゲートはそのゲートとソースとの間に正電位電圧を必要とする。 PMOSはそのゲートとソースとの間に負電位を必要とする。ここでMOSFETについてすべて学ぶことができます。

電源ジャックをはんだ付けした後、MOSFETを下に置きたいと思います。それらを同じボード上に置き、それぞれがそれらの間に1つの穴のスペースがあるはずです。それらはすべて、各MOSFETが同じ方向を向くように垂直に並ぶ必要があります。上の写真のように、文字が書かれている面が向いている場合は向きは正しいです。写真ではMOSFETが折り畳まれているので、問題があるのではなく、正しい位置に調整できるはずであると考えてください。向きが決まったら、ピンをはんだ付けします。

MOSFETを含む回路図では、ダイオード(水平線のある三角形)がLEDライトストリップを表しています。 LEDストリップには4つの金属パッド(電源、赤、緑、青)があり、はんだごてから熱を加えて、さらに撚り合わせた芯線(もちろん色分け)をパッドに接続できます。しっかり接続したら、ストリップに12ボルトを供給します。これは、DC電源からの電力線をボードにはんだ付けしたコネクタ部分に接続したいということを意味します。これを行うには、電源を表すLedストリップからコネクタピースの電源ピンと同じ列にあるボードの空の穴にワイヤを半田付けします。これでLEDに電力が供給されます。この時点で電源を正しく接続すると、LEDが点灯するはずです。 LEDストリップからの残りのリード線を接続する時が来ました。これらは、赤、緑、および青の制御線です。あなたがする必要があるのは、接続されているMOSFETの真ん中のピンを持つ行に各ワイヤを接続することです。 3本のワイヤをMOSFETの3つの異なるゲートに接続します。その後、Teensyのドレインからデジタルピンに接続するために3本のワイヤ(赤、緑、青)が必要になります。ドレインはMOSFETの一番左のピンで、各線をその列の空いている穴の1つに半田付けするだけです。

LEDストリップを接続した後、双方向スイッチングレギュレータを接続します。私達のLEDは点灯するために12ボルトで動作します。しかし、残りの回路とボードは最大5ボルトのロジックでしか動作しません。つまり、電子機器を破壊したくない場合は、残りの回路への電圧を下げる必要があります。スイッチングレギュレータを介してこれを行います。スイッチングレギュレータは、電圧をある高い方の電圧から低い方の電圧に下げる(この場合は12ボルトから5ボルト)デバイスです。今度は、電圧を下げるために単に抵抗を使用するのではなく、抵抗を使用する分圧回路を使用しないのが良いのでしょうか。これを行うには複数の問題があります。これを行わないでください。どうして?抵抗器はあなたが望むように電圧を下げるでしょう、しかしあなたはたくさんの熱を発生するでしょう!実際、あなたがそれらに精通しているならば、あなたは抵抗または線形調整装置の使用の結果としてあなたの回路を容易に溶かすことができました。しかし、ヒートシンクを使用して回路から熱を逃がすだけではできませんか。はい、できますが、それからエネルギー効率の問題で私たちは起こります!これは非常に非効率的です。高校の物理学を思い出すと、PowerはCurrent times VoltageまたはCurrent squared times resistanceの積です。電力はワットで測定され、あなたは12ボルトから5ボルトを落とすためにかなりの抵抗が必要でしょう。これにより、消費される電力がかなり大きくなります。これはあなたのランプを非常に非効率的にするでしょう。双方向スイッチングレギュレータを使用することで、この問題を回避します。このレギュレータは、容易に達成可能な85%の効率で12ボルトから5ボルトに低下します。これは温度を下げ、ランプの平均寿命を延ばすのに役立ちます。

スイッチングレギュレータを接続するには、このデータシートを参照してください。持っている良いスキルはデータシートを読むことです!すべての評判の良い部品には、デバイスの使い方とその特性および動作範囲を示すデータシートがあります。このレギュレータの場合、8の12ページで、左下隅にピンとそのラベルの表があります。ピン1は一番左のピンで、電源入力です。電源コネクタと同じ列の穴から1番ピンと同じ列の穴にワイヤを半田付けする必要があります。ピン2はアース線です。電源コネクタのグランドピンの列にある空の穴から、2番ピンと同じ行にある空の穴にそこにワイヤをはんだ付けします。ピン3は出力です。これは、回路の他の部分の電力線として機能します。デバッグを容易にするために、ボードごとに専用の電源レールを作成しました。各ボードの電源レールは上の図に示されています。コネクタの出力(グランドのみ)と電源用のスイッチングレギュレータの出力からのグランドと電源用の単一接続。各ボードは列の大きなギャップ(列がボードを横切って直接接続されているわけではない)とプロトタイピングボードの間の小さなジャンプを必要とします、あなたは同様にはんだ付けされた接続を必要とするでしょう。要点をつかむために上の写真を見てください!

容量性タッチブレイクアウトボード

これは、環境光センサーを含めるようにあなたの電子機器を拡張することに興味がない人のための電子機器の最後の部分です。この部分では、ヘッダーピンやSparkfunプロトタイピングボードへのボードの取り付けは不要です。このボードは最終的にボタンのできるだけ近くでランプの内側に接着され、各ボタンのアクティブな静電容量式タッチリードをできるだけ短くします。これは干渉を防ぐためであり、クリーンな静電容量式タッチ測定値を受信することを可能にします。ボード自体にはいくつかのピンがあり、上に含まれているイーグル回路図の「単純」バージョンにリストされています。これは、指示可能なWIFIモジュールのセクションと同じように、どのピンを10代に接続するかを正確に指示します。これらの接続を一緒にはんだ付けすると、ボードと電源の両方にSPI通信リンクが提供されます。

次のステップは、ボタンに接続するリード線です。すでに説明したように、静電容量式タッチボタンをできる限り敏感にするために、これらのワイヤをできるだけ短くする必要があります。これを行うには、上で見たように、ある種の接触パッドをワイヤーで作成します。中実の芯線をいくつか取り、その芯線をダイムサイズの円形の平らなコイルに螺旋状に巻きます。コイルのもう一方の端はワイヤの直線部分で、ピンに半田付けする必要があります。あなたは自然に各ボタンのために3つのボタン接触ワイヤーを必要とするでしょう、そして、これらはピン0、1、2にはんだ付けされます。ピン11では、あなたはパワーLEDのためにあるであろう別のワイヤーをはんだ付けします。これはGPIOピン(汎用入出力ピン)であり、PWM(パルス幅変調)機能も備えています。このボタンを使って、電源ボタンのバックライトとなるLEDのロジックを制御します。プログラミングとコードに関するセクションで、これがどのように行われるかを説明します。

周囲光センサー

このセクションは、周囲からの光を取り込み、室内の明るさやIRおよび可視光の読み取り値に関するユーザーデータを提供するためにオンボードフィルタリングを行うブレイクアウトボードである周囲光センサー専用です。このブレークアウトは非常に単純で、ワシの回路図には含まれていませんが、Adafruitにはここにリンクされた非常に優れたチュートリアルがあります。このリンクは、環境光センサーを10代の若者に配線する方法を段階的に案内します。接続の上の写真があります。私はあなたにTeensyのピン配置を与えるそしてあなたが一緒にワイヤーを接続するのを助けるべきであるリンクを含めました。ボード上の任意の場所に電力を供給するために、ブレークアウトボードの電源を接続する必要があります。この接続を最も便利なパワーレールに取り付けることをお勧めします。上の写真は電源接続の配置です。次に、SDAピンとSCLピンをTeensyに接続する必要があります。十代の若者たちのそれらのピンはワシの図式で分類されます、そして、あなたがする必要があるのは接続を恒久的にすることです。 10代のSDAピンから光センサーのSDAピンにワイヤを半田付けし、同様に、10代のSCLピン(ピン13)から10代のSCLピンにワイヤを接続します。この後、最後に接続する必要があるのはGNDです。ブレイクアウトボードから利用可能な任意のグランドレールにグランドを接続します。繰り返しますが、電子機器のはんだ付けや組み立てが容易になる場所を選んで試してください。上の写真を見てください。すべてのアース線と電源線はそれぞれ黒と赤です。

ステップ3:プログラミングチョップ:MQTTネットワーキング

ソフトウェア:ダムオブジェクトをスマートにする

これで、このプロジェクトのソフトウェアの側面に到達しました。あなたがこれまでに作ったなら、おめでとうございます!このインストラクターにはすべてのコードが含まれており、コードをアップロードしてスマートランプを用意する準備ができているので、基本的にスマートランプがあります。あなたがコードが何をするのかについてもっと学ぶことに興味があるならば、コードセクションのコメントは詳細で、すべてを説明します!

単にコードをアップロードすることに興味がある人のために、これ以上読む必要はありません。インストラクターのこの部分では、コードを10代の若者にアップロードする方法について説明します。背景として、10代はプロセッサをプログラミングモードに切り替える手動/自動ブートローダ(プログラム)を必要とするマイクロコントローラです。以前にArduinoを使用したことがある人は、Arduinoプロジェクトのプログラムをコーディングするときに、スケッチのエラーを確認し、コードがコンパイルされたら、矢印をクリックしてコードをアップロードできます。 ArduinoのIDEは自動的にあなたのArduinoをプログラミングモードに切り替え、あなたのボードに新しいコードを点滅させます。 Teensyでは、この機能はTeensyブートローダーに抽象化されています。すべてのTeensyユーザーはブートローダをダウンロードする必要があります。まだお持ちでない場合は、ここにあるArduino IDEをダウンロードしてください。インストールが完了したら、上記のコードをダウンロードしてください。それはあなたのArduino IDEで開きます。たくさんのライブラリが含まれており、コードをコンパイルするのに必要です。以下は、.zipファイルをダウンロードしてライブラリにインストールするために必要なライブラリへのリンクです。 Arduinoのスケッチにライブラリをインストールする方法がわからない場合は、ここにその方法についての説明があります。

ライブラリ:

  • Adafruit MQTTライブラリ
  • MPR121静電容量式タッチパネル
  • WINC1500無線LANボード
  • Adafruit Luxセンサー
  • Wire.h(プリインストールされているのでライブラリはありません)
  • String.h(プリインストールされているのでライブラリはありません)
  • SPI.h(プリインストールされているのでライブラリはありません)
  • Adafruit_Sensor.h
  • ArduinoJSON

これらのライブラリをすべてインストールすると、コードがコンパイルされます。 arduino IDEのコード確認ボタン(チェックマーク)を押した後、Teensyのブートローダウィンドウを開きます。仮想バージョンのTeensyがある小さなウィンドウが表示されます。自動ボタンをクリックし、それが凹んでいることを確認してください(実際にボタンを押したような場合… 10代のブートローダのリンクを見て、私たちの意味を確認してください)。その後、USBの反対側のボードの端にあるTeensy自体の物理的なボタンを押します。スケッチがあるarduino IDEをチェックしてツールをクリックしてください。ボードがTeensy 3.1 / 3.2、USBタイプがシリアルに設定され、CPU速度が96 MHz最適化オーバークロックに設定され、ポートが「usbの後ろに長い数字と文字列が続く」に設定されていることを確認します。それが終わったら、arduinoのアップロードボタン(横向きの矢印)を押してください。 TeensyのボードにはLEDがあり、コードをアップロードするときは点滅するはずです。アップロードが完了したら、電化製品をランプのベースに入れるだけですべて完了です。

コードの機能に興味がある場合は、以下のコードに含まれるコメントを確認してください。

#include #include #include #include #include #含める #含める #include #include
#含める #含める
#含める #WINC_CS 10を定義します。WINC_IRQを定義します。7#WINC_RST 4を定義します。#AIO_SERVER "mqtt2.seecontrol.com"を定義します。 (s));しながら(1); #define LEDPIN 3 #define LED_RED 23 #define LED_GREEN 5 #define LED_BLUE 6 #define touch_pin0 0 #define touch_pin1 1 #define touch_pin2 2 char ssid = ""; //あなたのネットワークSSID(name)char pass = ""; //ネットワークパスワード(WPAに使用、またはWEPのキーとして使用)int keyIndex = 0; //ネットワークキーインデックス番号(WEPにのみ必要)int status = WL_IDLE_STATUS; // wifi status const char MQTT_SERVER PROGMEM = AIO_SERVER; const char MQTT_CLIENTID PROGMEM = __TIME__ AIO_USERNAME; const char MQTT_USERNAME PROGMEM = AIO_USERNAME; const char MQTT_PASSWORD PROGMEM = AIO_KEY; const char IOTLAMP_FEED PROGMEM = "/ IoTLampDemo"; //チャンネル名をパブリッシュおよびサブスクライブするconst char RETURN_FEED PROGMEM = "/ IoTLampDemo"; uint32_t x = 0。 // uint8_t POWER_STATE = 0; uint8_t pinNum; uint8_t led_brightness = 100; uint8_t redVal = 0。 uint8_t greenVal = 0。 uint8_t blueVal = 0。 uint16_t lux; bool Network_Mode = false; bool cap_touch_activated = false; const int irqpin = 2; //アクティビティインジケータの揮発性ピンのピン番号flagIrq;構造体JSON {const char * targetVal;} const char * codeVal; int lamponVal; int brightnessVal; ; / *すべての宣言* / Adafruit_WINC1500 WiFi(WINC_CS、WINC_IRQ、WINC_RST); Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591); //光センサーAdafruit_WINC1500クライアントクライアント。 // WiFiチップAdafruit_MQTT_Client mqtt(&client、MQTT_SERVER、AIO_SERVERPORT、MQTT_CLIENTID、MQTT_USERNAME、MQTT_PASSWORD); // mqtt宣言Adafruit_MQTT_Publish IOTLAMP = Adafruit_MQTT_Publish(&mqtt、IOTLAMP_FEED); Adafruit_MQTT_Subscribe VIRTUAL_LAMP = Adafruit_MQTT_Subscribe(&mqtt、RETURN_FEED); / * *この機能はセットアップです。セットアップでは、* LED用のすべてのピンとボタンに接続している割り込みを初期化しました。私たちは、wifiボード、静電容量式タッチボード、および正しいトピックパスを購読する機能を設定する関数を呼び出しました。 * * / void setup(){pinMode(irqpin、INPUT); Serial.begin(9600); // setupはSerial.println( "starting program")を中断します。 attachInterrupt(irqpin、isrIrqPin、CHANGE); // IRQピン割り込みを接続&RISING / HIGH / CHANGE / LOW / FALLING MPR121.setInterruptPin(irqpin); pinMode(LED_RED、OUTPUT); pinMode(LED_BLUE、OUTPUT); pinMode(LED_GREEN、OUTPUT); digitalWrite(LED_RED、LOW); digitalWrite(LED_GREEN、LOW); digitalWrite(LED_BLUE、LOW); capacityTouch_Setup(); wifi_module_config(); // wifi mqtt.subscribe(&VIRTUAL_LAMP)を設定します。この関数はループです。 *割り込みが検出されない限り、この関数で起こることは無限に繰り返されます。その場合、他のすべての関数が停止している間に別の関数が実行されます。 *この関数は割り込みが発生したかどうかを確認します。発生した場合はresetButton関数を実行します。 *私たちがネットワーキングモード(無線LAN接続を持っていることを意味する)にあるならば、次に* network機能を実行してください。どちらも当てはまらない場合は、通常のランプのように振舞います。 * * / void loop(){if(flagIrq == true){ResetBUTTONFlag(); // BUTTON割り込みが発生した場合は、フラグをリセットします。 } else {if(Network_Mode){networking();}この関数は、割り込みが発生したときに呼び出されてから、静電容量式ボタン関数が呼び出され、フラグbooleanがtrueに設定されます。* / void isrIrqPin(){capacityTouch_buttons(); flagIrq = true;この関数は状態を処理するだけです。割り込みが発生した場合にのみ呼び出され、フラグbooleanがfalseに設定され、容量性タッチのbooleanがtrueに設定されます。 * / void ResetBUTTONFlag(){//ボタン1のフラグをリセット+ ledアクティビティインジケータを表示flagIrq = false; cap_touch_activated = true; //この機能を拡張されたルクスセンサーの読み取り用にコメント解除し、必要に応じて呼び出します。 // void luxSensor_Readout(void){// sensor_t sensor; // tsl.getSensor(&sensor); // Serial.println( "------------------------------------"); // Serial.print( "Max Value:"); Serial.print(sensor.max_value); Serial.println( "lux"); // Serial.print( "Min Value:"); Serial.print(sensor.min_value); Serial.println( "lux"); // Serial.print( "Resolution:"); Serial.print(sensor.resolution); Serial.println( "lux"); // Serial.println( "------------------------------------"); // Serial.println( ""); // delay(500); //} / * *この関数はボードをセットアップします。それは容量性接触板が正しく設定されているかどうかを知るためにデバッグ記述を提供することから始めます。それから、ボタンと電源ボタンのためにボード上のデジタルピン自体を初期化します。感度を設定し、キャリブレーション*データを取得します。POWER LEDを点灯して起動します。 * * / void capacityTouch_Setup(){if(!MPR121.begin(0x5A)){Serial.println( "MPR121の設定エラー"); switch(MPR121.getError()){case NO_ERROR:Serial.println( "エラーなし");ブレーク; ADDRESS_UNKNOWNの場合:Serial.println( "invalid address");ブレーク; READBACK_FAILの場合:Serial.println( "readback failure");ブレーク; case OVERCURRENT_FLAG:Serial.println( "REXTピンに過電流");ブレーク;ケースOUT_OF_RANGE:Serial.println( "電極が範囲外")。ブレーク; NOT_INITEDの場合:Serial.println( "初期化されていません");ブレーク;デフォルト:Serial.println( "unknown error");ブレーク; while(1); Serial.println( "MPR121が見つかりました!"); MPR121.setTouchThreshold(2); // touch MPR121のデフォルト値は40です。setReleaseThreshold(1); // touchのデフォルト値は20です。常にタッチしきい値MPR121.setNumDigPins(1)より小さくなければなりません。 // LED出力MPR121.pinMode(11、OUTPUT); MPR121.updateTouchData(); //初期データ更新MPR121.digitalWrite(11、HIGH);これは、wifi設定機能です。これは、* WIFIモジュールに電力が供給されているかどうかを確認し、電力が供給されているかどうか*に応じてネットワーキングブール値をtrueまたはfalseに設定します。それならば、接続していることを印刷してください。 * * / void wifi_module_config(){Serial.println(F( "AdCruit MQTT for WINC1500のデモ")); Serial.print(F( " n WiFiモジュールを起動しています…")); //(WiFi.status()== WL_NO_SHIELD){//ブレークアウトの存在を確認するSerial.println( "WINC1500が存在しない"); //続行しない:Network_Mode = false; while(本当) Serial.println( "ATWINC OK!"); Network_Mode = true;この関数は、RGB値のマッピングを作成します。ランプが出力する白色*の最大トーンをスケールします。次に、赤、緑、青の各色のマッピングを作成した後、*ヘルパー関数を呼び出してLEDの色の実際の色調を設定します。* * / void map_white(int new_brightness){redVal = map(new_brightness、0、255、) 0、255)。 //赤の値をマップするgreenVal = map(new_brightness、0、255、0、255); //緑色の値をマッピングするblueVal = map(new_brightness、0、255、0、240); //青い値をマップしますset_leds(redVal、greenVal、blueVal);この関数は実際にはLEDの色の値を設定し、LEDを点灯させます。 * * / void set_leds(uint8_t redVal、uint8_t greenVal、uint8_t blueVal){analogWrite(LED_RED、redVal); //電流値をLEDピンに書き込みますanalogWrite(LED_GREEN、greenVal); analogWrite(LED_BLUE、blueVal);この機能は、光センサーを設定します。最初にセンサーが電源に接続されているかどうか確認します*。それが一度なると、それはゲインを設定します。 *センサー周辺の光が少ない場合は、初期値に応じて取得した値を増幅し、高いゲインに増幅します。その後、測定にかかる時間を積分時間に設定します。その他の機能*では、選択した情報がシリアルモニタに表示されます。 * / void configureSensor(void){Serial.println( "Adafruit TSL2591テストを開始します!"); if(tsl.begin()){Serial.println( "TSL2591センサーが見つかりました"); } else {Serial.println( "センサーが見つかりません。配線を確認しますか?");しながら(1); //tsl.setGain(TSL2591_GAIN_LOW); //あなたはより明るい/より暗い光の状況に適応するために、その場でゲインを変更することができます。 // 1倍のゲイン(明るい光)tsl.setGain(TSL2591_GAIN_MED); // 25倍のゲイン// tsl.setGain(TSL2591_GAIN_HIGH); // 428倍のゲイン//積分時間を変更すると、光を感知する時間が長くなります。//タイムラインが長くなると遅くなりますが、微弱な光の状況には適しています。 //tsl.setTiming(TSL2591_INTEGRATIONTIME_100MS); //最短積分時間(明るい光)// tsl.setTiming(TSL2591_INTEGRATIONTIME_200MS); tsl.setTiming(TSL2591_INTEGRATIONTIME_300MS); // tsl.setTiming(TSL2591_INTEGRATIONTIME_400MS); // tsl.setTiming(TSL2591_INTEGRATIONTIME_500MS); // tsl.setTiming(TSL2591_INTEGRATIONTIME_600MS); //最長積分時間(薄暗い)

/ *参考のためにゲインと積分時間を表示します* / Serial.println( "-------------------------------- ---- "); Serial.print( "Gain:"); tsl2591Gain_t gain = tsl.getGain();スイッチ(ゲイン)(ケースTSL2591_GAIN_LOW:Serial.println( "1x(Low)")。ブレーク; TSL2591_GAIN_MEDの場合:Serial.println( "25x(Medium)");ブレーク; case TSL2591_GAIN_HIGH:Serial.println( "428x(High)");ブレーク; case TSL2591_GAIN_MAX:Serial.println( "9876x(Max)");ブレーク; Serial.print( "Timing:"); Serial.print((tsl.getTiming()+ 1)* 100、DEC); Serial.println( "ms"); Serial.println( "------------------------------------"); Serial.println( "");この機能は、ボタンがタッチされると起動します。その後、容量性ボードに保存されているデータ*を更新します。それから利用可能なピンを通過します(ボタンには3本のピンしか付いていないため、0-2 *からのみ移動します)。それからそれは*触れられたピン番号を返します。 * * / uint8_t capacityTouch_pinTouched(){MPR121.updateTouchData(); for(pinNum = 0; pinNum <= 2; pinNum ++){if(MPR121.isNewTouch(pinNum)){return pinNum; pinNum = 4;戻りpinNum。 * / * *容量性タッチボタンは、実際にはボタンがタッチされたかどうかを扱うすべてのロジックを保持しています。ここまでで、ボタンが触れられたと仮定されて、そして今、それは触れられた特定のボタンで何をすべきか理解するでしょう。これは、明るさ制御だけでなく、電源状態と電源LEDのすべてのロジックを制御します。 * * / void capacityTouch_buttons(){uint8_t touchedPin = capacityTouch_pinTouched(); switch(touchedPin){ケース0:{if(POWER_STATE == 1){if(led_brightness> 230){led_brightness = 255; map_white(led_brightness); } else {led_brightness = led_brightness + 25;}; map_white(led_brightness); else {MPR121.digitalWrite(11、LOW);} map_white(led_brightness); POWER_STATE = 1;壊れます。ケース1:{if(POWER_STATE == 1){MPR121.digitalWrite(11、HIGH)。 POWER_STATE = 0。 map_white(0); } else {MPR121.digitalWrite(11、LOW); POWER_STATE = 1; map_white(led_brightness);破る;ケース2:{if(POWER_STATE == 1){if(led_brightness <= 30){led_brightness = 25; map_white(led_brightness); } else {led_brightness = led_brightness - 25;} map_white(led_brightness); else {MPR121.digitalWrite(11、LOW);} map_white(led_brightness); POWER_STATE = 1;壊れます。デフォルト:{} break。この機能は、光センサーの高度な読み取り機能です。光センサーは、赤外線と可視光の両方のスペクトルを表す32ビットを提供します。可視スペクトルの16ビット*を取得して、可視スペクトルの計算されたルクス値を返します。 * * / uint16_t advancedRead(void){uint32_t lum = tsl.getFullLuminosity(); //上位16ビットIR、下位16ビットフルスペクトルで32ビットを読み取ります。uint16_t ir、full; ir = lum >> 16; full = lum&0xFFFF; lux = tsl.calculateLux(full、ir);ルクスを返します。この関数はJSONでフォーマットされたデータパケットの送信を扱います。それは*あなたのチャンネル名が正しいかどうかをチェックし、正しいなら、それはそのチャンネルにパケットを公開するでしょう* / void mqtt_transmit(char buf ){//今、私たちはものを公開することができます! Serial.print(F( " n Sending JSON")); Serial.print( "…"); if(!IOTLAMP.publish(buf)){Serial.println(F( "Failed")); } else {Serial.println(F( "OK!")); Serial.println(buf); / * *この関数はMQTTをセットアップしてセットアップします。タイムアウトおよび* WiFi接続が確立された後にプログラムがMQTTへの接続を試みることを処理するステートメントがあります。 *接続すると緑色に点滅し、接続が切れたことを知らせるために消灯します。あなたが*接続されていないならば、それはwifiプロセスのための検索の間赤のままになります。 * * / void MQTT_connect(){int8_t ret;} uint8_tタイムアウト= 10。 //接続を10秒間待つ:bool timedOut = false; while(WiFi.status()!= WL_CONNECTED && timedOut == false){// Wifiネットワークへの接続試行:digitalWrite(LED_RED、HIGH); Serial.print( "SSIDに接続しようとしています:"); Serial.println(ssid); status = WiFi.begin(ssid、pass); // WPA / WPA2ネットワークに接続します。オープンネットワークまたはWEPネットワークを使用している場合は、この行を変更してください。遅延(10)。 if(timeout == 0){timedOut = true; digitalWrite(LED_RED、LOW); Network_Mode = false; while(timedOut){Network_Mode = false;} Serial.println( "入力レガシーモード"); } if(mqtt.connected()){//すでに接続されている場合は停止します。 Network_Mode = true;戻るSerial.print( "MQTTに接続しています…"); while((ret = mqtt.connect())!= 0){// connectは、接続されたSerial.println(mqtt.connectErrorString(ret))に対して0を返します。 Serial.println( "5秒でMQTT接続を再試行しています…"); mqtt.disconnect(); Network_Mode = false。遅延(500)。 Network_Mode = true; // 5秒待ちます。 Serial.println( "MQTT Connected!"); digitalWrite(LED_RED、LOW); digitalWrite(LED_GREEN、HIGH);遅延(1000)。 digitalWrite(LED_GREEN、LOW);これはJSONをフォーマットする関数です。現時点ではある程度ハードコーディングされていますが、柔軟性がありませんが、渡されるパラメータに基づいてこれを変更することは簡単にできます。* * / String json_Packet(){String pubString = "{" target ": "ランプ"、 "コード": "ランプ"、 ";文字列値= ""値 ":{";文字列onOff = "" lampon ":"; // intは、JSONフォーマットのために引用符で囲むのではなく、intのままでした。String lampState = onOff + POWER_STATE + "、"; String brightnessState = "" lampintensity ":";文字列lamp_brightness = brightnessState + led_brightness + "、"; String lamp_luminosity = "" luminosity ":";文字列initial_string = pubString + values + lampState + lamp_brightness + lamp_luminosity; initial_stringを返します。 / * *この関数は、購読チャンネルから入ってくるデータのロジックです。 *購読チャンネルから送信された値に応じて* LEDパワーバックライトのオン/オフが変わります。そのデータに応じて実際のLEDの明るさも変わります。* * / void subscribe_StateChange(JSON&json){POWER_STATE = json.lamponVal;} led_brightness = json.brightnessVal; if(POWER_STATE == 1){MPR121.digitalWrite(11、LOW); map_white(led_brightness); } else {MPR121.digitalWrite(11、HIGH); map_white(0); / * *この機能は、すべてのネットワーキングを扱う上位レベルの機能です。 MQTT接続をセットアップする*関数を呼び出します。それが確立されたら、サブスクリプションのインスタンス*を初期化します。そこからデータを取得します。次に、サブスクリプションパケットから解析したフィールドを格納する、先ほど作成したstructのインスタンスを作成します。そのサブスクリプションデータをすべて格納する*バッファーを作成します。それからボタンがタッチされているかどうかをチェックします*これは私たちがライトデータを読み込み、データをパッケージ化してからパケットを送信することにつながります。 *ランプの状態を変更していない(ボタンに触れていない)場合は、読み取るパケットがあるかどうかを確認してください。もしそうであれば、それを解析して、先ほど作成したJSON構造体のフィールドに入力します。 * * / void networking(){MQTT_connect();} Adafruit_MQTT_Subscribe *購読。 JSON json; String basic_string = json_Packet(); StaticJsonBuffer <5000> jsonBuffer; while(cap_touch_activated){lux = advancedRead(); // lux値を取得し、それをluxに等しく設定しますString finalString = basic_string + lux + "}}"; char buf finalString.length()+ 1; finalString.toCharArray(buf、finalString.length()+ 1); mqtt_transmit(buf); cap_touch_activated = false; while((subscription = mqtt.readSubscription(5000))){if(subscription ==&VIRTUAL_LAMP){JsonObject&root = jsonBuffer.parseObject((char *)VIRTUAL_LAMP.lastread); if(!root.success()){Serial.println( "parseObject()failed");戻るjson.targetVal = root "target"; json.codeVal = root "code"; json.lamponVal = root "values" "lampon"; json.brightnessVal = root "values" "lampintensity"; subscribe_StateChange(json); }}}

ネットワーク:WIFI、MQTTおよびMQTT.fx

これは、MQTTとは何か、そして一般的なネットワーキングについて説明するためのセクションです。始めましょう!

MQTTに取り掛かる前に、この個別のデバイス用にWIFIネットワーク資格情報を設定する必要があります。セキュリティ上の理由から、このランプはWPA2エンタープライズネットワークに接続できません。ライブラリは、ユーザー名フィールドを処理するようには設計されていません。現時点では提供されていないエンタープライズネットワークのサポートを可能にするネットワークSSIDとパスワードだけです。現時点では、WPA、WPA2パーソナル、およびWEPネットワークがサポートされています。使用するネットワーク資格情報のSSIDとパスワードを変更する必要があります。以下の行を見てください。

char ssid = ""; //あなたのネットワークSSID(名前)
char pass = ""; //ネットワークパスワード(WPAに使用、またはWEPのキーとして使用)int keyIndex = 0; //ネットワークキーのインデックス番号(WEPにのみ必要)

WEPネットワークを使用していない限り、KeyIndex値を変更する必要はありません。

だからMQTT … MQTTはマシン間の接続プロトコルです。これらすべての意味は何ですか?初心者にとってはMQTTは、多くの電力を使用しなくてもデバイスが互いに通信できる方法です。データパケットが非常に小さいため、転送速度も速くなります。 MQTTは、以前はMQ Telemetry Transportとして知られていました。いずれにせよ、MQTTはデータの送受信にパブリッシュとサブスクリプションのモデルに依存しています。

MQTTはパブリッシュとサブスクライブを使用して、デバイス間でデータをやり取りします。そのためにはデータブローカーが必要です。つまり、データのパブリッシュとサブスクライブ専用の「トピック」またはチャネルを設定するデータを送信するための仲介場所が必要です。このブローカーはデータを送受信するロジックを処理します。もちろん、このブローカーのどこでデータを引き出したり送信したりするかを指定する関数を作成する必要がありますが、このブローカーから送受信されるデータをモニターすることはできます。公開は送信と同じです。データを希望の形式にパッケージ化してから、公開先のチャンネル名を指定します。それが完了したら、adafruitからダウンロードしたライブラリを使用して実際にデータをこのチャネルに送信し、ブローカを設定した後に受信したデータを確認できます。

購読することは、実際にあなたのデバイスにデータを受信することに関して、公開するよりも少し難しいです。出版では、あなたは単に送信する必要があります。ユースケースに応じて、データが受信または解析されることを必ずしも気にする必要はありません。ただし、購読では、購読チャネルのトピックからデータが正しく読み取られ、パケットが失われず、データが解析され、そのデータに応じて反応するようにすることがクライアント側(デバイスメーカー)です。サブスクリプションでは、デバイスの状態はパケットを受信した直後に変化するため、データを取得して他のすべてのものが発生するのを防ぐために、常に待機している必要があります。サブスクリプションは、パブリッシュの仕組みと同じように機能します。チャネルを確立し、Adafruit MQTTライブラリからの関数呼び出し(subscription *。readSubscription(int timeout))を通じてチャネルからデータを読み取ります。あなたは常にパケットをループしてあなたがそれらを手に入れたときにパースし、結果として即座にあなたの物理的なランプの状態についての事を変えることができます。すべてのパケットがどのような品質で受信されたかを明確に知る必要がある何かをしている場合は、送信された各パケットのサービス品質に関する追加のフィールドがあります。これはあなたの送信の質が何であったかをあなたに知らせるために使われます。すべてのパケットを受信した場合は、2が返されます。これは、パケットを正常に送信し、pingパケットを受信したことを意味します。あなたが1を得たならば、パケットは送られました、しかし、あなたは彼らがすべて戻ってきたのを確信することができません。 0のQoSはあなたがそれを送ったことをあなたに伝えます、そしてそれが受け取られたかどうかまたはあなたがすべてのパケットを受け取ったかどうかに関する追加情報はありません。

私たちが使用したブローカーはMQTT.fxで、ここからダウンロードする必要があります。 MQTT.fxは、すべてのデータ管理を処理するクライアントブローカーです。それを使うためには、それを設定する必要があります。あなたがMQTT.fxに接続しようとする前にあなたがする必要がある最初のことは設定のための装備をクリックすることです。クリックしたら、データを送信するサーバーのURL(ブローカーアドレス)とポート番号を入力する必要があります。わかりやすいプロファイル名を自分で指定し、そのプロファイル名を使用して、発行チャネル名と購読名をプロファイル名の前に「/」を付けて作成しました。すべての情報を入力したら、ランダムキーを生成してそのキーを記録します。コード内のAIO_KEYの値を、生成した新しいキーで置き換えます。一般タブに移動してユーザー名とパスワードを入力することもできますが、特に必要はありませんでした。その後、適用ボタンとOKボタンを押してから接続ボタンを押すだけで準備完了です。その後、ドロップダウンタブでパブリッシュチャンネルとサブスクライブチャンネルの名前を入力すると、チャンネル名の前にバックスラッシュを含める限り、そこにデータが表示されます。これは重要;指定されたチャンネル名の前にバックスラッシュがないと、データはMQTTでハードコーディングされた形式で表示されません。これで、準備完了です。