Arduino101 / tinyTILE BLE:подходящие солнцезащитные очки
Компоненты и расходные материалы
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 4 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
Необходимые инструменты и машины
| ||||
|
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
Что, если бы вы могли посылать сигнал для зрительного контакта с кем-то, с кем вам интересно поговорить, в социальной обстановке, даже издалека, вместо использования приложения? Я не предлагаю другого способа начать свидание. Я изучаю новое использование Bluetooth в области взаимодействия с людьми.
Когда я узнал, что модули Intel Curie можно назначить в качестве центральных и периферийных устройств BLE, я сразу захотел сделать эти очки. (Узнайте больше о CurieBLE здесь.) Благодаря учебному пособию по Adafruit, легко доступна эталонная структура 3D-печатного ЖК-стекла. Что я добавил в учебник Adafruit, так это элемент управления BLE (вместо элемента управления переключателем) для двух очков одновременно, один из которых является главным, а другой - подчиненным, а также переработанные рамки, напечатанные на 3D-принтере.
Этот проект сначала был разработан на Arduino 101 и прототипирован на tinyTILE, оба имеют модули Intel Curie. Даже если вы не сможете получить модули Intel Curie в будущем, я надеюсь, что приведенная здесь методология все еще может быть полезной. Я могу представить множество различных способов применения центральных и периферийных возможностей Bluetooth, и я с нетерпением жду обсуждения этой темы.
Шаг 1 - Разработка
Два Arduino101 и два светодиода были использованы для разработки схемы и тестирования кодов. Из-за сложности конечных схем всегда рекомендуется начинать с макета, прежде чем все паять вместе.
Для периферийных устройств вы можете использовать код из примеров CurieBLE -> Peripheral -> LED и поменять местами HIGH и LOW (найдите причину на последнем шаге). Код для центрального предоставляется в конце проекта. Это почти то же самое, что и CurieBLE -> Central -> LEDcontrol с добавлением пары строк для ЖК-дисплеев.
TinyTILE - это почти что миниатюрная модель Arduino101. Главный центральный прямоугольник - это модуль Intel Curie. Их можно прошивать одними и теми же кодами. Контакты на Arduino101 всегда проще в использовании, но размер tinyTILE более привлекателен для носимых устройств. Мне нравится сначала разрабатывать на Arduino 101, а потом все переносить на tinyTILE. Ознакомьтесь с другим проектом, использующим tinyTILE, здесь. Если форм-фактор не является проблемой для вашего проекта, смело используйте Arduino101 (см. Пример здесь).
Я тестирую каждый компонент шаг за шагом, когда сменил Arduino101 на tinyTILE и заменил светодиоды на ЖК-дисплеи.
Шаг 2 - 3D-печать
Я переработал рамы с помощью SolidWorks поверх той, что предоставлена Adafruit. Вы можете скачать их базовый дизайн здесь и изменить с помощью любого программного обеспечения, которое вы предпочитаете для 3D-печати. Если вам нравятся именно те образы, которые я создал, вы можете найти их в приложениях ниже. Почему я создал форму сердца и вселенную? Посмотрите видео для объяснения и используйте свое воображение.
Дизайн может быть изменен, чтобы лучше соответствовать вашему лицу. Мне было немного трудно удерживать свой маленький нос. В настоящее время есть компании, которые делают 3D-сканирование вашего лица и подбирают для вас очки, и это здорово.
Я думаю, что используемый 3D-принтер Ruiz Brothers от Adafruit должен быть лучше моего. Потому что я напечатал так много вспомогательных материалов внутри мест, из которых очень трудно выйти. Как UX-дизайнер, я могу многое сказать о неудобствах моего 3D-принтера. Я хотел бы иметь водорастворимые вспомогательные материалы или принтер, для которого не нужны вспомогательные материалы, или 3D-принтер на жидкой основе / светоотверждаемый.
Шаг 3 - Сборка
Советы в руководстве Adafruit по подключению, пайке и монтажу очень хороши. Вам стоит это увидеть. Мне просто пришлось добавить дополнительные tinyTILE и кнопку. Будьте осторожны, чтобы отрезать провода нужной длины.
Шаг 4 - Готово и получайте удовольствие!
Когда питание включено, на ЖК-дисплеи подается напряжение, что делает их темными солнцезащитными очками. Когда кнопка на главном устройстве нажата, напряжение на главном устройстве отключается, что в то же время сигнализирует об отключении напряжения на подчиненном устройстве через Bluetooth, делая оба стекла прозрачными.
Двумя очками можно управлять довольно далеко друг от друга, если они находятся в пределах диапазона BLE. Тестировал дома. Сердце может привлечь внимание Вселенной на расстоянии не менее 15 шагов.
Представьте себе, что вы используете не кнопку, а жест, кивок или совпадающее сердцебиение!
Сердце (master =central):«Мне нравится твой изощренный ум <3» Вселенная (slave =периферийное):«Я вижу тебя. Давай поговорим».
Код
- Кнопочное управление для центра
Кнопочное управление для центрального Arduino
Это почти то же самое, что и в примере CurieBLE./ * * Copyright (c) Intel Corporation, 2016. Все права защищены. * Условия лицензии см. В нижней части этого файла. * // * * Скетч:LedControl.ino * * Описание:* Это центральный скетч, который ищет конкретный сервис с * определенной характеристикой от периферийного устройства. После успешного обнаружения * он считывает состояние кнопки и записывает это значение в * периферийную характеристику. * * Примечания:* * - Ожидаемые периферийные службы:19b10000-e8f2-537e-4f6c-d104768a1214 * - Ожидаемые периферийные характеристики:19b10001-e8f2-537e-4f6c-d104768a1214 * - Ожидаемые периферийные эскизы:* * / # include// переменные для 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 - управление светодиодами»); // запускаем сканирование периферийных устройств BLE.scanForUuid ("19b10000-e8f2-537e-4f6c-d104768a1214");} void loop () {// проверяем, обнаружено ли периферийное устройство BLEDevice периферийное устройство =BLE.available (); if (периферийное устройство) {// обнаружило периферийное устройство, распечатало адрес, локальное имя и объявленную службу Serial.print ("Найдено"); Серийный.печать (периферийный.адрес ()); Serial.print ("'"); Serial.print (периферийное.localName ()); Serial.print ("'"); Serial.print (периферийное.advertisedServiceUuid ()); Serial.println (); // останавливаем сканирование BLE.stopScan (); controlLed (периферийный); // периферийное устройство отключено, снова начать сканирование BLE.scanForUuid ("19b10000-e8f2-537e-4f6c-d104768a1214"); }} void controlLed (периферийное устройство BLEDevice) {// подключаемся к периферийному устройству Serial.println ("Подключение ..."); если (периферийное.connect ()) {Serial.println ("Подключено"); } else {Serial.println ("Не удалось подключиться!"); возвращение; } // обнаруживаем периферийные атрибуты Serial.println ("Обнаружение атрибутов ..."); если (периферийные.discoverAttributes ()) {Serial.println («Атрибуты обнаружены»); } else {Serial.println ("Ошибка обнаружения атрибута!"); периферийный.disconnect (); возвращение; } // получаем характеристику светодиода BLECharacteristic ledCharacteristic =периферийное.characteristic ("19b10001-e8f2-537e-4f6c-d104768a1214"); if (! ledCharacteristic) {Serial.println («Периферийное устройство не имеет характеристики светодиода!»); периферийный.disconnect (); возвращение; } else if (! ledCharacteristic.canWrite ()) {Serial.println («Периферийное устройство не имеет возможности записи светодиода!»); периферийный.disconnect (); возвращение; } while (периферийное устройство.connected ()) {// пока периферийное устройство подключено // считываем вывод кнопки int buttonState =digitalRead (buttonPin); if (oldButtonState! =buttonState) {// кнопка изменена oldButtonState =buttonState; if (buttonState) {Serial.println ("кнопка нажата"); // нажата кнопка, записываем 0x01 для включения светодиода ledCharacteristic.writeByte (0x01); digitalWrite (ledPin, LOW); } else {Serial.println ("кнопка отпущена"); // кнопка отпущена, запишите 0x00, чтобы загорелся светодиод ledCharacteristic.writeByte (0x00); digitalWrite (ledPin, HIGH); }}} Serial.println («Периферийное устройство отключено»);} / * Пример центрального управления светодиодом Arduino BLE Copyright (c) 2016 Arduino LLC. Все права защищены. Эта библиотека является бесплатным программным обеспечением; вы можете распространять и / или изменять его в соответствии с условиями Стандартной общественной лицензии ограниченного применения GNU, опубликованной Free Software Foundation; либо версии 2.1 Лицензии, либо (по вашему выбору) любой более поздней версии. Эта библиотека распространяется в надежде, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Дополнительные сведения см. В Стандартной общественной лицензии ограниченного применения GNU. Вы должны были получить копию Стандартной общественной лицензии ограниченного применения GNU вместе с этой библиотекой; в противном случае напишите в Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * /
Изготовленные на заказ детали и корпуса
Схема
Центральный использует контакт 3 для кнопки и 5 для ЖК-дисплея. Периферийное устройство использует контакт 6 для ЖК-дисплея.Производственный процесс
- Солнцезащитные очки
- Батарея
- UnifiedWater v1
- Arduino Power
- Мститель в сборе:шлем Железного человека и дуговой реактор
- Мобильный ящик для голосования
- Intel Arduino 101 BLE Blynk Tank
- Понимание аккумуляторов, используемых в автомобилях
- Различные способы проверки генератора
- 7 признаков плохого или неисправного генератора