Ультразвуковой человекомашинный интерфейс :)
- Войдите на сайт для отправки комментариев
Проект называется HALO (Haptic Assisted Locating of Obstacles) и состоит в создании обруча с ультразвуковыми дальномерами (в количестве 5 штук), которые подключаются к контроллеру Arduino Mega, который в зависимости от расстояния управляет пятью вибромоторчиками, закреплёнными на том же обруче.
Интенсивность и частота вращения моторчиков напрямую зависит от расстояния до объекта.
Тем самым, человек с данным обручен на голове может ориентироваться в пространстве с закрытыми глазами :) ссылка на видео http://www.youtube.com/watch?feature=player_embedded&v=hfXs5rhwCfE
Страничка проекта http://www.instructables.com/id/Haptic-Feedback-device-for-the-Visually-Impaired/
Интересно ваше мнение, хочется создать аналог и так сказать чтобы направили в правильное русло.... ТАк как опыта пока мало прошу высказывать свои мысли по точнее

Для начала попробовать один УЗ дальномер и один вибромотор (можно приобрести в любой мастерской сотовых телефонов). Дальше вроде все просто. Получаем сигнал с УЗ дальномера и в зависимости от его величины включаем мотор с соответствующей скоростью. Пять дальномеров и пять моторов, наверное подойдет даже и ардуино Уно + подобрать мотор шилд. Могу ошибаться так как сам новичек.
Евгений74... Можно по подробней што именно за плата Ардуино.... уз дальнометр, вибромотор, я в этом деле чайник(((((((
robocraft.ru/blog/projects/396.html вот эта статья на робокрафте, там же инструкция по созданию на английском, там же все об УЗ датчиках. Вибромоторы есть в сотовых телефонах, производят вибрацию при звонке. Можно взять в любой мастерской по 100 руб.
>>Евгений74... Можно по подробней што именно за плата Ардуино.... уз дальнометр, вибромотор, я в этом деле чайник<<
Не рано ли "Чайнику" такие темы поднимать ?
У вас это праздный интерес ?
Мне кажется, что достаточно одного ну максимум два дальномера, что бы ориентироваться т.к. голову можно поворачивать в нужную сторону.
Принцип действия, исполнение и код давольно просты.
maksim расскажите в подробностях о том что необходимо для сборки даного устройства...... вот почтовый ящик batnikk9@gmail.com
Для проекта с одним дальномером нужно:
дуина
дальномер HC-SR04
вибратор
или такой вибратор
или вовсе самому сделать.
Подключать так
Код
#define Trig_pin 10 #define Echo_pin 12 #define Vibro_pin 13 int dist_cm, vibro_delay = 0; unsigned long micros_new, micros_old, millis_old = 0; void setup(){ pinMode(Vibro_pin, OUTPUT); pinMode(Trig_pin, OUTPUT); } void loop(){ digitalWrite(Trig_pin, HIGH); delayMicroseconds(10); digitalWrite(Trig_pin, LOW); micros_new = micros() + 500; while(!digitalRead(Echo_pin) && micros() < micros_new){ } micros_old = micros(); micros_new = micros() + 30000; while(digitalRead(Echo_pin) && micros() < micros_new){ } dist_cm = (micros() - micros_old)/29.0/2; // Вычисляем дистанцию до припятствия vibro_delay = map(dist_cm, 100, 400, 3000, 50);// Чем ближе припятствие, тем меньше задержка. vibro_delay = constrain(vibro_delay, 50, 3000); delay(50); if(millis()-millis_old > vibro_delay){ digitalWrite(Vibro_pin, HIGH); delay(200); digitalWrite(Vibro_pin, LOW); millis_old = millis(); } }Импульсы на вибромотор длительностью 200 млс. Задержка между импульсами от 1/20 секунды до 3 секунд зависит от дистанции от 1 м до 4 м соответственно. Можно управлять и скоростью вибромотора (это еще проще), но как мне кажется в этом случае слишком мал диапазон вибраций, который сможет различать человек.
maksim А вроде ведь можно менять скорость моторов, и вибрация будет соответсвенно больше или меньше. Вот как то так: digitalWrite(Vibro_pin, dist_cm*0,084); исходя из того, что максимальная скорость задается как 254 при дистанции 3000 см.. Или я ошибаюсь
Да можно, я уже выше сообщение подредакрировал. Тогда нужно подключиться к любому свободному ШИМ выводу например к 11 и тогда код примерно будет таким:
#define Trig_pin 10 #define Echo_pin 12 #define Vibro_pin 11 int dist_cm, vibro_delay = 0; unsigned long micros_new, micros_old, millis_old = 0; void setup(){ pinMode(Vibro_pin, OUTPUT); pinMode(Trig_pin, OUTPUT); } void loop(){ digitalWrite(Trig_pin, HIGH); delayMicroseconds(10); digitalWrite(Trig_pin, LOW); micros_new = micros() + 500; while(!digitalRead(Echo_pin) && micros() < micros_new){ } micros_old = micros(); micros_new = micros() + 30000; while(digitalRead(Echo_pin) && micros() < micros_new){ } dist_cm = (micros() - micros_old)/29.0/2; // Вычисляем дистанцию до припятствия vibro_delay = map(dist_cm, 100, 400, 255, 50);// Чем ближе припятствие, тем меньше задержка. vibro_delay = constrain(vibro_delay, 50, 255); delay(50); analogWrite(Vibro_pin, vibro_delay); }И еще, хоть вибромотор и мало кушает, но его желательно поднключать через транзистор, а тем более во втором случае при использовании ШИМа.
А как теперь привезать пять дальнометров к одной ардуинки.... ??????
Просто, функциями... а вот когда у вас эти 5 дальномеров и 5 вибраторов будут....?
#define Trig_pin_1 2 #define Echo_pin_1 4 #define Vibro_pin_1 3 #define Trig_pin_2 7 #define Echo_pin_2 8 #define Vibro_pin_2 5 #define Trig_pin_3 11 #define Echo_pin_3 12 #define Vibro_pin_3 6 #define Trig_pin_4 A0 #define Echo_pin_4 A1 #define Vibro_pin_4 9 #define Trig_pin_5 A2 #define Echo_pin_5 A3 #define Vibro_pin_5 10 void setup(){ pinMode(Trig_pin_1, OUTPUT); pinMode(Trig_pin_2, OUTPUT); pinMode(Trig_pin_3, OUTPUT); pinMode(Trig_pin_4, OUTPUT); pinMode(Trig_pin_5, OUTPUT); pinMode(Vibro_pin_1, OUTPUT); pinMode(Vibro_pin_2, OUTPUT); pinMode(Vibro_pin_3, OUTPUT); pinMode(Vibro_pin_4, OUTPUT); pinMode(Vibro_pin_5, OUTPUT); } void loop(){ Vibro(Trig_pin_1, Echo_pin_1, Vibro_pin_1); Vibro(Trig_pin_2, Echo_pin_2, Vibro_pin_2); Vibro(Trig_pin_3, Echo_pin_3, Vibro_pin_3); Vibro(Trig_pin_4, Echo_pin_4, Vibro_pin_4); Vibro(Trig_pin_5, Echo_pin_5, Vibro_pin_5); } void Vibro(int Trig_pin, int Echo_pin, int Vibro_pin){ int dist_cm, vibro_delay = 0; unsigned long micros_new, micros_old, millis_old = 0; digitalWrite(Trig_pin, HIGH); delayMicroseconds(10); digitalWrite(Trig_pin, LOW); micros_new = micros() + 500; while(!digitalRead(Echo_pin) && micros() < micros_new){ } micros_old = micros(); micros_new = micros() + 30000; while(digitalRead(Echo_pin) && micros() < micros_new){ } dist_cm = (micros() - micros_old)/29.0/2; // Вычисляем дистанцию до припятствия vibro_delay = map(dist_cm, 100, 400, 255, 50);// Чем ближе припятствие, тем меньше задержка. vibro_delay = constrain(vibro_delay, 50, 255); analogWrite(Vibro_pin, vibro_delay); delay(20); }А вместо транзисторов можно будет использовать например ULN2003
А я вообще не очень понимаю в чем вопрос-то? В стартовом посте дана ссылка где проект расписан настолько подробно, насколько возможно. И все запчасти, и пошаговая инструкция, и фото, и видео, и скетчи.
По поводу чего нужно высказать мысли точнее?
Где искать слепых людей которым можно сделать подобный подарок? Ну наверное в обществе слепых.
Кстати я думаю можно сделать более упрощенную версию, и более близкую к применения в боевых условиях реальными слепыми. Не на голову скафанд лепить, а модифицировать привычную слепым тросточку. На конец поставить сенсор, а вибратор - в ручку или на запястье (что-бы не увеличивать вес трости). Тогда, по сравнению с обычной тростью у нее как-бы увеличится "область обзора". Появится возможность видеть не прикасаясь к предметам, на расстоянии нескольких десятков сантиметров.
Где еще можно применить подобную вещь? Насколько я знаю подобные подход пробовали применить для пилотов истребителей. Когда происходит перегруз от количества визуальной информации и нужно искать другие интуитивные каналы. Два подобных вибро (или вообще тупо слегка током били) - ставили на поясницу, и выводили на них крен самолета или скольжение. В домашних условиях нечто подобное можно попытатся сделать для какого-нибудь хардкорного автосимулятора. Передавать "попой чую что счас колеса в срыв пойдут" ;)
О с тростью классная идея))))) Огромное спасибо)))
Да, только сейчас посмотрел ссылку, там же все подробно расписано...
Да, с тростью идея хорошая. Тогда нужен 1 дальномер и 1 вибромотор и можно все это дело в трость встроить или отдельным устройством собрать. И тогда для этого можно использовать не атмегу, а аттини.
Но для тестов нужен слепой человек, что бы правильно настроить сей девайс для комфортного использования именно слепыми людьми, т.к. наверняка есть какие-то ньюансы о которых мы зрячие люди даже и не догадываемся.
pinik.org.ua/post212246750/