工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

必要な部品と用品

部品 数量 備考
Intel tinyTILE 2 または他のBLEモジュール
Arduino 101 2 オプション
Adafruit液晶ライトバルブ - LCD制御遮光パネル 2
リチウムイオン電池 100mAh 2
Adafruit JST-PH 2ピンSMT右角コネクタ 4
Adafruit JST-PHバッテリー延長ケーブル 2
スライドスイッチ 2
抵抗 10kΩ 3
SparkFunプッシュボタンスイッチ 12mm 1
LED(汎用) 2 開発段階で使用。最終プロトタイプでは不要
ブレッドボード(汎用) 1 開発段階で使用。最終プロトタイプでは不要
ジャンパーワイヤ(汎用) 1 開発段階で使用。最終プロトタイプでは不要

必要な工具と機械

使用アプリとオンラインサービス

このプロジェクトについて

アプリを使わずに、社交の場で遠くからでも、話しかけたい相手にアイコンタクトの合図を送れるとしたら? 私は新しいデートの仕方を提案しているわけではありません。人間関係の分野におけるBluetoothの新しい活用法を探求しています。

Intel CurieモジュールがCentral(セントラル)とPeripheral(ペリフェラル)のBLEデバイスとして動作できると知った時、すぐにこのサングラスを作りたいと思いました(CurieBLEの詳細はこちら)。Adafruitのチュートリアルのおかげで、3DプリントされたLCDグラスの参照フレームワークがすぐに手に入りました。私がAdafruitのチュートリアルに追加したのは、スイッチ制御の代わりにBLE制御で2つのグラスを同時に操作できること(一方がマスター、もう一方がスレーブ)、そして再設計された3Dプリントフレームです。

このプロジェクトは最初にArduino 101で開発し、tinyTILEでプロトタイピングしました。両方ともIntel Curieモジュールを搭載しています。将来的にIntel Curieモジュールが入手できなくなっても、ここでの方法論が役立つことを願っています。BluetoothのCentral/Peripheral機能には様々な応用が想像でき、このトピックについての議論を楽しみにしています。

ステップ1 - 開発

2つのArduino 101と2つのLEDを使って回路を開発し、コードをテストしました。最終回路が複雑なため、ハンダ付けの前にブレッドボードで始めるのが賢明です。

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

ペリフェラル側には、CurieBLEの例「Peripheral」→「LED」のコードを使用し、HIGHとLOWを入れ替えています(理由は最後のステップで説明)。Central側のコードはプロジェクト末尾にあります。CurieBLEの例「Central」→「LEDcontrol」とほぼ同じですが、LCD用に数行追加しています。

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

TinyTILEはArduino 101のほぼミニチュア版です。中央の長方形がIntel Curieモジュールです。同じコードで書き込み可能です。Arduino 101のピンは使いやすいですが、tinyTILEのサイズはウェアラブルに魅力的です。私はArduino 101で開発し、全てをtinyTILEに移植するのが好きです。フォームファクタが問題でなければArduino 101を使っても構いません(例はこちら)。

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

Arduino 101をtinyTILEに、LEDをLCDに変更する際、各コンポーネントを段階的にテストしました。

ステップ2 - 3Dプリント

Adafruit提供のデザインをベースに、SolidWorksでフレームを再設計しました。基本デザインはこちらからダウンロードでき、お好みのソフトで修正可能です。私のデザインと全く同じ見た目が良ければ、添付ファイルから入手できます。なぜハート型とユニバース型なのかは、動画で説明しています。想像力を働かせてください。

デザインは顔にフィットするよう修正可能です。私の小さな鼻では少し保持が難しいと感じました。最近は顔の3Dスキャンでメガネをカスタマイズしてくれる会社もあり、素晴らしいですね。

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

AdafruitのRuiz兄弟が使った3Dプリンターは私のより良いのかもしれません。私のプリンターは、取り出しが非常に困難な場所に大量のサポート材を出力しました。UXデザイナーとして、私の3Dプリンターの不便さについては語り尽くせません。水溶性サポート材、サポート材不要のプリンター、液体/光硬化式3Dプリンターが欲しいです。

ステップ3 - 組み立て

Adafruitのチュートリアルの配線、ハンダ付け、取り付けに関するアドバイスは非常に参考になります。ぜひチェックしてください。私はtinyTILEとボタンを追加しただけです。ワイヤーを適切な長さにカットするよう注意してください。

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

ステップ4 - 完成、楽しもう!

電源を入れると、LCDに電圧がかかりサングラスとして暗くなります。マスター側のボタンを押すと、マスター側の電圧がオフになり、同時にBluetooth経由でスレーブ側の電圧もオフになり、両方のグラスが透明になります。

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

2つのグラスは、BLE範囲内であればかなり離れていても制御可能です。自宅でテストしました。ハート(マスター)はユニバース(スレーブ)の注意を、少なくとも15歩離れていても引けます。

ボタンではなく、ジェスチャー、うなずき、心拍の同期で制御できたらどうでしょう!


Heart (master=central): "I like your sophisticated mind <3"
Universe (slave=peripheral): "I see you. Let's talk."

コード

Central側のボタン制御 (Arduino)

これはCurieBLEの例とほぼ同じです。

/*
 * Copyright (c) 2016 Intel Corporation. All rights reserved.
 * See the bottom of this file for the license terms.
 */
/*
 * Sketch: LedControl.ino
 *
 * Description:
 * 特定のServiceとCharacteristicを持つPeripheralを探すCentralスケッチ。
 * 発見成功時、ボタンの状態を読み取り、その値をPeripheralのCharacteristicに書き込む。
 *
 * Notes:
 * - 期待されるPeripheral Service: 19b10000-e8f2-537e-4f6c-d104768a1214
 * - 期待されるPeripheral Characteristic: 19b10001-e8f2-537e-4f6c-d104768a1214
 * - 期待されるPeripheralスケッチ:
 */
#include 

// ボタン用変数
const int buttonPin = 3;
int oldButtonState = LOW;
const int ledPin = 5;  // LED用ピン

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  
  // BLEハードウェア初期化
  BLE.begin();
  Serial.println("BLE Central - LED control");
  
  // ペリフェラルのスキャン開始
  BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}

void loop() {
  // ペリフェラルが発見されたかチェック
  BLEDevice peripheral = BLE.available();
  if (peripheral) {
    // 発見されたペリフェラルのアドレス、ローカル名、アドバタイズサービスを表示
    Serial.print("Found ");
    Serial.print(peripheral.address());
    Serial.print(" '");
    Serial.print(peripheral.localName());
    Serial.print("' ");
    Serial.print(peripheral.advertisedServiceUuid());
    Serial.println();
    
    // スキャン停止
    BLE.stopScan();
    controlLed(peripheral);
    
    // ペリフェラル切断後、スキャン再開
    BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
  }
}

void controlLed(BLEDevice peripheral) {
  // ペリフェラルに接続
  Serial.println("Connecting ...");
  if (peripheral.connect()) {
    Serial.println("Connected");
  } else {
    Serial.println("Failed to connect!");
    return;
  }
  
  // ペリフェラルの属性を発見
  Serial.println("Discovering attributes ...");
  if (peripheral.discoverAttributes()) {
    Serial.println("Attributes discovered");
  } else {
    Serial.println("Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }
  
  // LED characteristicを取得
  BLECharacteristic ledCharacteristic = peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214");
  if (!ledCharacteristic) {
    Serial.println("Peripheral does not have LED characteristic!");
    peripheral.disconnect();
    return;
  } else if (!ledCharacteristic.canWrite()) {
    Serial.println("Peripheral does not have a writable LED characteristic!");
    peripheral.disconnect();
    return;
  }
  
  while (peripheral.connected()) {
    // ペリフェラル接続中
    int buttonState = digitalRead(buttonPin);
    if (oldButtonState != buttonState) {
      // ボタン状態変化
      oldButtonState = buttonState;
      if (buttonState) {
        Serial.println("button pressed");
        // ボタン押下時、0x01を書き込んでLEDオン
        ledCharacteristic.writeByte(0x01);
        digitalWrite(ledPin, LOW);
      } else {
        Serial.println("button released");
        // ボタン離した時、0x00を書き込んでLEDオフ
        ledCharacteristic.writeByte(0x00);
        digitalWrite(ledPin, HIGH);
      }
    }
  }
  Serial.println("Peripheral disconnected");
}

/* Arduino BLE Central LED Control example
   Copyright (c) 2016 Arduino LLC. All right reserved.
   This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License...
*/

カスタムパーツとエンクロージャ

3Dプリント用パーツファイルはThingiverse等で公開予定

回路図

Central:ピン3をボタン用、ピン5をLCD用に使用。Peripheral:ピン6をLCD用に使用。

Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る

製造プロセス

  1. サングラス:デザイン、材料、眼保護基準
  2. 電池の歴史:ボルタの電柱から現代リチウム電池まで
  3. UnifiedWater v1 - 完全なArduino水質センサーキット
  4. Arduinoプロジェクトのための最適化電源ソリューション
  5. 3DプリンターとArduinoで作るアイアンマン ヘルメット&アークリアクター完全ガイド
  6. GSM接続対応ポータブル投票システム「Mobile Vote Box」
  7. Arduino 101 BLE + Blynk:スマホで操作するBluetooth戦車ロボット
  8. Arduino Portenta H7で作る高性能エッジAIカメラ:OpenMV + TensorFlow Lite
  9. 自動車バッテリーの役割と仕組み:種類・構造・メンテナンス完全ガイド
  10. オルタネーター診断完全ガイド:電圧計・マルチメーター・ドライバー・バッテリー切離し4つのテスト方法
  11. オルタネーター故障の7つの明確なサイン|見逃せない警告症状