Очки с функцией костной проводимости — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
Строка 85: Строка 85:
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
  
#include "Arduino.h"
+
#include <Volume.h>
#include "Cl_do_btn.h"
+
int inPin = 2; //пин, отвечающий за кнопку
Cl_do_btn::Cl_do_btn(byte _pin, bool high, void (* _Do_Btn)()) {
+
int spkr = 5; //пин, отвечающий за колонки
   pin = _pin;
+
int reading; //актуальное значение кнопки
   low = !high;
+
int previous = LOW; //старое значение кнопки
   Do_Btn = _Do_Btn;
+
long time = 0; //время работы
 +
long debounce = 200; //антидребезговое время
 +
bool play = false; // флаг, включено ли проигрывание
 +
Volume vol; //
 +
float mv = 0; //
 +
void setup(){
 +
   pinMode(inPin, INPUT);
 +
   pinMode(spkr, OUTPUT);
 +
   vol.begin();
 
}
 
}
void Cl_do_btn::setup() {
+
void loop(){  
   //pinMode(pin, INPUT);// подключить кнопку
+
   //проверяем, лежит ли значение, которое передаёт аналоговый потенциометр, в интервале от 0 до 100 и присваиваем его mv
   pinMode(pin, INPUT_PULLUP);// подключить кнопку 1 с подтяжкой
+
   mv = constrain(analogRead(A0) / 10, 0, 100) / 100.00;
   btn = read(); // прочитать реальное значение на выводе
+
  //задержка
}
+
   delay(20);
void Cl_do_btn::loop() {
+
   if (play){
   if (! bounce && btn != read()) { // если прошел фронт изм на выводн
+
     vol.tone(1000, 255 * mv); //устанавливаем громкость
     bounce = 1;                   // выставить флаг
+
  }
     past = millis();               // сделать временую засветку
+
  else{
 +
     vol.noTone(); //выключаем звук
 
   }
 
   }
   else if ( bounce && millis() - past >= 5 ) { // если прошло антидребезговое время
+
   reading = digitalRead(inPin);
     bounce = 0;     // то снять флаг
+
  if (reading == HIGH && previous == LOW && millis() - time > debounce) {
     btn_old = btn ;
+
     if (!play) {
    btn = read(); // прочитать реальное значение на выводе
+
      play = true;
     if (! btn_old && btn)  Do_Btn();
+
     }
 +
    else {
 +
      play = false;
 +
      time = millis();
 +
     }
 
   }
 
   }
 +
  previous = reading;
 
}
 
}
  
  
void loop() {
 
  v = !digitalRead(2);
 
  battle = !digitalRead(3);
 
  if (battle==1 && flag==0 && (millis()-timestep)>300){  // Отрабатываем нажатие кнопки..
 
    flag = 1;
 
    i++;
 
    Serial.println(i);
 
    timestep = millis();
 
  }
 
  if (battle==0 && flag==1){  // ..и отжатие
 
    flag = 0;
 
  }
 
  if ((millis()-timestep)>2500 && i>1){ // Через 2.5 секунды после последнего нажатия кнопки запускается дальнейший скрипт
 
    j = i;
 
  }
 
  //if (j>0 && (millis()-timestep)>5000 && (millis()-timestep)<6000){    Прошивка для двигателя (не использовалась)
 
  //  digitalWrite(9,HIGH);
 
  //} else {
 
  //  digitalWrite(9,LOW);
 
  //}
 
  if (j>0 && v==HIGH && flag1==0 && c<180 && (millis()-timestep1)>1000){ // Снятие показания с датчика препятствий и
 
    flag1 = 1;
 
    timestep1 = millis();
 
    c += 180/j;
 
    servo1.write(c);                                                    // подача сигнала на сервопривод
 
  }
 
  if (j>0 && v==LOW && flag1==1 && (millis()-timestep1)>300){
 
    flag1 = 0;
 
    timestep1 = millis();
 
  }
 
 
}
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</div>
 
</div>

Версия 23:39, 30 мая 2018

Boneconduction gif1.gif

Суть проекта

Создание очков, обладающих функционалом гарнитуры на костной проводимости - девайс, который был бы безопасен для здоровья, удобен и действительно изменил бы жизнь к лучшему

Проектная команда

Поставленные цели

  • Осуществление коммуникаций и прослушивание музыки без использования большого количества дорогостоящих устройств
  • Использование безопасных для здоровья и жизни беспроводных девайсов

Альтернативные варианты

  • Дорогостоящие импортные очки с гарнитурой
  • Наушники с гарнитурой
  • Ушная Bluetooth гарнитура

Технология костной проводимости

Данный динамик позволяет передавать звук напрямую во внутреннее ухо через кости черепа, минуя наружное ухо (ушную раковину) и среднее ухо (барабанную перепонку, молоточек, наковальню, стремечко)

Свойства устройства

  • Bluetooth 4.0
  • Динамики костной проводимости
  • Автономное питание (до 10 часов) с зарядкой через micro usb
  • Эксклюзивная оправа, спроектированная во fusion 360

Работа по проекту

Срок Возникающие проблемы Задача Что сделано к сроку
23.02.18 Найти динамик на костной проводимости Костная проводимость - нераспространенная технология Динамик был приобретен с помощью интернет сервиса
30.02.18 Рассмотреть легальность вопроса Во многих странах были запрещены подобные технологии из-за скрытого микрофона На очках будет эмблема микрофона, предупреждающая о его наличии
11.04.18 Проектирование 3D модели Изучение САПР Autodesk Fusion 360 Модель построена
7.05.18 Работа с Arduino Изучение электронного конструктора Arduino Подключение к очкам по Bluetooth, получение звука через динамик
15.05.18 Сборка первого прототипа 3D-принтер не смог осилить тонкости модели Прототип собран и функционирует

Смета

  • Динамики - 500 рублей
  • Bluetooth аудио модуль BK8000L (F-6188 V4.0) - 200р
  • Аккумулятор Li-Pol Орбита 25*23*23 3.7В 110 мАч - 100р
  • Модуль заряда аккумуляторов TP4056 (micro USB) - 25 р

Результаты по проекту

  • Очки спроектированы и распечатаны на 3D-принтере
  • Собраны модули
  • С получившейся моделью можете ознакомиться здесь или на приложенных фотографиях

Arduino прошивка

 1 #include <Volume.h>
 2 int inPin = 2; //пин, отвечающий за кнопку
 3 int spkr = 5; //пин, отвечающий за колонки
 4 int reading; //актуальное значение кнопки
 5 int previous = LOW; //старое значение кнопки
 6 long time = 0; //время работы 
 7 long debounce = 200; //антидребезговое время
 8 bool play = false; // флаг, включено ли проигрывание
 9 Volume vol; //
10 float mv = 0; //
11 void setup(){
12   pinMode(inPin, INPUT);
13   pinMode(spkr, OUTPUT);
14   vol.begin();
15 }
16 void loop(){ 
17   //проверяем, лежит ли значение, которое передаёт аналоговый потенциометр, в интервале от 0 до 100 и присваиваем его mv
18   mv = constrain(analogRead(A0) / 10, 0, 100) / 100.00;
19   //задержка
20   delay(20);
21   if (play){
22     vol.tone(1000, 255 * mv); //устанавливаем громкость
23   }
24   else{
25     vol.noTone(); //выключаем звук
26   }
27   reading = digitalRead(inPin);
28   if (reading == HIGH && previous == LOW && millis() - time > debounce) {
29     if (!play) {
30       play = true;
31     }
32     else {
33       play = false;
34       time = millis();
35     }
36   }
37   previous = reading;
38 }

Перспективы работы

В настоящий момент разрабатывается пользовательское приложения для работы с очками. Оно позволяет настроить функционал под себя:

  • Отвечать в одно касание на звонки
  • Делать фото на встроенную камеру по касанию
  • Переключать касанием музыку
  • Получать аудио уведомления от определённого круга приложений

Так же в процессе создание новой модели внешне практически не отличающейся от обычных очков

Ссылки