Arduino101 / tinyTILE BLE:相亲太阳镜
组件和用品
| × | 2 | ||||
![]() |
| × | 2 | |||
| × | 2 | ||||
![]() |
| × | 2 | |||
| × | 4 | ||||
| × | 2 | ||||
![]() |
| × | 2 | |||
![]() |
| × | 3 | |||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
必要的工具和机器
![]() |
| |||
![]() |
|
应用和在线服务
![]() |
| |||
![]() |
|
关于这个项目
如果您不使用应用程序,而是可以在社交环境中,甚至远距离发送信号,与您有兴趣与之交谈的人进行眼神交流,那会怎样?我不是在提议另一种开始约会的方式。我正在探索蓝牙在人机交互领域的新用途。
当我发现 Intel Curie 模块可以用作中央和外围 BLE 设备时,我立即想制作这些眼镜。 (从这里了解有关 CurieBLE 的更多信息。)感谢 Adafruit 的教程,3D 打印 LCD 玻璃的参考框架很容易获得。我在Adafruit教程中添加了两块眼镜同时的BLE控制(而不是开关控制),一主一从,重新设计了3D打印框架。
该项目首先在 Arduino 101 上开发,并在 tinyTILE 上进行原型设计,两者都带有 Intel Curie 模块。即使您将来可能无法获得 Intel Curie 模块,我希望这里的方法仍然有用。我可以想象许多不同的方式来应用蓝牙中心和外围功能,我期待着关于这个话题的讨论。
第 1 步 - 开发
两个 Arduino101 和两个 LED 用于开发电路和测试代码。由于最终电路的复杂性,在将所有东西焊接在一起之前,最好先从面包板开始。

对于外设,您可以使用 CurieBLE 示例 -> 外设 -> LED 中的代码并交换 HIGH 和 LOW(在最后一步找到原因)。项目最后提供了central的代码。它几乎与 CurieBLE -> Central -> LEDcontrol 相同,但为 LCD 添加了几行。


TinyTILE 几乎完全是 Arduino101 的缩影。主要的中央矩形是 Intel Curie 模块。它们可以用相同的代码闪烁。 Arduino101 上的引脚总是更容易使用,但 tinyTILE 的尺寸对可穿戴设备更具吸引力。我喜欢先在 Arduino 101 上开发,然后将所有内容转移到 tinyTILE。在这里查看另一个使用 tinyTILE 的项目。如果您的项目不存在外形尺寸问题,请随意使用 Arduino101(请参见此处的示例)。

当我将 Arduino101 更改为 tinyTILE 并将 LED 更改为 LCD 时,我会逐步测试每个组件。
第 2 步 - 3D 打印
我在 Adafruit 提供的框架之上使用 SolidWorks 重新设计了框架。您可以在此处下载他们的基本设计,并使用您喜欢的任何 3D 打印软件进行修改。如果您完全喜欢我设计的外观,您可以在下面的附件中找到它们。为什么我要设计一个心形和一个宇宙?观看视频进行解释并发挥您的想象力。
可以修改设计以更好地贴合您的脸。我发现握住我的小鼻子有点困难。现在有一些公司可以对您的脸部进行 3D 扫描并为您定制眼镜,这很棒。

我觉得用的 Adafruit Ruiz Brothers 的 3D 打印机一定比我的好。因为我在很难取出的地方打印了太多的支持材料。作为一名 UX 设计师,对于我的 3D 打印机的不便,我有很多话要说。我想要水溶性支撑材料或不需要支撑材料的打印机或基于液体/光固化的 3D 打印机。
第 3 步 - 组装
Adafruit 的教程中关于接线、焊接和安装的建议非常好。你应该检查一下。我只需要添加额外的 tinyTILEs 和按钮。小心地将电线剪成合适的长度。

第 4 步 - 完成并玩得开心!
当电源打开时,液晶显示器上会施加电压,使它们保持深色太阳镜。当主机上的按钮被按下时,主机上的电压被关闭,同时通过蓝牙发出信号关闭从机上的电压,使两个眼镜透明。



只要两个眼镜在 BLE 范围内,就可以控制它们相距很远。我在家里测试过。心脏至少可以在 15 步之外引起宇宙的注意。
想象一下,不使用按钮而是使用手势、点头或匹配的心跳!
Heart(master=central):“我喜欢你复杂的头脑<3”Universe(slave=peripheral):“我看到你了,我们谈谈。”
代码
- 中央按钮控制
中央Arduino的按钮控制
这与 CurieBLE 示例中的几乎相同。/* * 版权所有 (c) 2016 英特尔公司。版权所有。 * 有关许可条款,请参阅此文件的底部。 *//* * 草图:LedControl.ino * * 描述:* 这是一个中央草图,用于从外围设备中寻找具有 * 特定特征的特定服务。成功发现后, * 它读取按钮的状态并将该值写入 * Peripheral Characteristic。 * * 注释:* * - 预期的外设服务:19b10000-e8f2-537e-4f6c-d104768a1214 * - 预期的外设特性:19b10001-e8f2-537e-4f6c-d104174/includealh * 预期的外围设备 *Cuphered *Cuphered>// buttonconst 的变量 int buttonPin =3;int oldButtonState =LOW;const int ledPin =5; // 引脚用于 LEDvoid setup() { Serial.begin(9600); // 将按钮引脚配置为输入 pinMode(buttonPin, INPUT); pinMode(ledPin,输出); // 初始化 BLE 硬件 BLE.begin(); Serial.println("BLE Central - LED 控制"); // 开始扫描外围设备 BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");}void loop() { // 检查是否发现了外围设备 BLEDeviceperipheral =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();控制(外设); // 外设断开,重新开始扫描 BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214"); }}void controlLed(BLEDeviceperipheral) { // 连接到外设 Serial.println("Connecting ..."); if (peripheral.connect()) { Serial.println("Connected"); } else { Serial.println("连接失败!");返回; } // 发现外围属性 Serial.println("Discovering attributes ..."); if (peripheral.discoverAttributes()) { Serial.println("属性发现"); } else { Serial.println("属性发现失败!");外设断开连接();返回; } // 检索 LED 特性 BLECharacteristic ledCharacteristic =peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214"); if (!ledCharacteristic) { Serial.println("外设没有 LED 特性!");外设断开连接();返回; } else if (!ledCharacteristic.canWrite()) { Serial.println("外设没有可写的LED特性!");外设断开连接();返回; } while (peripheral.connected()) { // 当外设连接时 // 读取按钮引脚 int buttonState =digitalRead(buttonPin); if (oldButtonState !=buttonState) { // 按钮改变了 oldButtonState =buttonState; if (buttonState) { Serial.println("按钮按下"); // 按钮被按下,写入 0x01 使 LED 亮起 ledCharacteristic.writeByte(0x01);数字写入(ledPin,低); } else { Serial.println("按钮释放"); // 按钮松开,写入0x00 点亮ledCharacteristic.writeByte(0x00);数字写入(ledPin,高); } } } Serial.println("Peripheral disconnected");}/* Arduino BLE 中央 LED 控制示例 版权所有 (c) 2016 Arduino LLC。保留所有权利。这个库是免费软件;您可以根据自由软件基金会发布的 GNU 宽松通用公共许可证的条款重新分发和/或修改它;许可证的 2.1 版,或(由您选择)任何更高版本。这个库是分发的,希望它有用,但没有任何保证;甚至没有对适销性或针对特定目的的适用性的暗示保证。有关更多详细信息,请参阅 GNU 宽松通用公共许可证。您应该已经收到一份 GNU 宽松通用公共许可证以及这个库;如果没有,请写信给 Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA*/
定制零件和外壳
示意图
Central 使用引脚 3 作为按钮,使用引脚 5 作为 LCD。外设将引脚 6 用于 LCD。
制造工艺