сонар для слабовидящих и слепых

Aldr
Offline
Зарегистрирован: 16.01.2018

Задался целью сделать вот такой сонар для сына: https://habrahabr.ru/post/173585/

На сайте оказался нерабочий скетч. Может кто занимался в этом направлении, нужна помощь.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Какая именно помощь нужна?

Aldr
Offline
Зарегистрирован: 16.01.2018

Нужно или исправить, или написать новый скетч. Готовый нигде не нашел. Есть со световой индикацией(слепому она никчему), а нужно звуковая, как в обычном парктронике. при приближении увеличение частоты звуковых сигналов.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Слепой "видит" ухом. А вы забиваете это постороним шумом. Нужен другой канал для подачи сообщения слепому.

Aldr
Offline
Зарегистрирован: 16.01.2018

К сожалению это пока что лучший вариант. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

Aldr пишет:

Задался целью сделать вот такой сонар для сына: https://habrahabr.ru/post/173585/

На сайте оказался нерабочий скетч. Может кто занимался в этом направлении, нужна помощь.

Скетч рабочий, но похоже под старую версию библиотеки. Немного подправил, компилируется без ошибок. В железе проверить нет возможности. 

#include <Ultrasonic.h>

Ultrasonic ultrasonic(7, 6);
unsigned int dist = 0;
void setup() {
  pinMode(14, OUTPUT);
  pinMode(13, OUTPUT);
}

void beep(int d, int l, int p) {
  int to = l / (d / 1000);
  digitalWrite(13, HIGH);
  for (int i = 0; i < to; i++) {
    analogWrite(14, 0);
    analogWrite(14, 255);
    delayMicroseconds(d);
  }
  digitalWrite(13, LOW);
  delay(p);
}

void loop() {
  dist = ultrasonic.distanceRead(CM); // get distance
  if (dist > 150 or dist == 0) {
    digitalWrite(13, LOW);
  }
  else {
    beep(3000, 100, 20);
    delay(dist * dist / 15);
  }
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
Aldr
Offline
Зарегистрирован: 16.01.2018

У меня выдает ошибку

Arduino: 1.8.5 (Windows 10), Плата:"Arduino Nano, ATmega328P"
 
C:\Program Files\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\Arduino\hardware -tools C:\Program Files\Arduino\tools-builder -tools C:\Program Files\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files\Arduino\libraries -libraries C:\Users\Skipper\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10805 -build-path C:\Users\Skipper\AppData\Local\Temp\arduino_build_262836 -warnings=none -build-cache C:\Users\Skipper\AppData\Local\Temp\arduino_cache_151153 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Program Files\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files\Arduino\hardware\tools\avr -verbose C:\Users\Skipper\Desktop\sketch_jan16a\sketch_jan16a.ino
C:\Program Files\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files\Arduino\hardware -tools C:\Program Files\Arduino\tools-builder -tools C:\Program Files\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files\Arduino\libraries -libraries C:\Users\Skipper\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10805 -build-path C:\Users\Skipper\AppData\Local\Temp\arduino_build_262836 -warnings=none -build-cache C:\Users\Skipper\AppData\Local\Temp\arduino_cache_151153 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Program Files\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files\Arduino\hardware\tools\avr -verbose C:\Users\Skipper\Desktop\sketch_jan16a\sketch_jan16a.ino
Using board 'nano' from platform in folder: C:\Program Files\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Program Files\Arduino\hardware\arduino\avr
Detecting libraries used...
"C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "C:\Users\Skipper\AppData\Local\Temp\arduino_build_262836\sketch\sketch_jan16a.ino.cpp" -o "nul"
"C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "C:\Users\Skipper\AppData\Local\Temp\arduino_build_262836\sketch\sketch_jan16a.ino.cpp" -o "C:\Users\Skipper\AppData\Local\Temp\arduino_build_262836\preproc\ctags_target_for_gcc_minus_e.cpp"
C:\Users\Skipper\Desktop\sketch_jan16a\sketch_jan16a.ino:1:24: fatal error: Ultrasonic.h: No such file or directory
 
 #include <Ultrasonic.h>
 
                        ^
 
compilation terminated.
 
exit status 1
Ошибка компиляции для платы Arduino Nano.
Aldr
Offline
Зарегистрирован: 16.01.2018

Я такое и делаю

inspiritus
Offline
Зарегистрирован: 17.12.2012

Была у меня экспериментальная модель на двух уз дальномерах. Синтезированный стереосигнал с частотой зависящей от расстояния транслировался в наушники.

Металлический столб определялся хорошо с трех метров , дерево хуже и ближе.

Человек вообще не ловился ни голый ни в шубе ( тем более) . Кошки-собаки даже разговора нет. Скамейки столбики тоже ни о чем.

в квартире ориентироваться было невозможно из-за переотражений.

выводы : уз не катит. Уши занимать нельзя. 

Считаю перцептивным машинное зрение в ик диапазоне аналогичное применяемому для автоматических систем вождения. 

В качестве интерфейса с человеком попробовал бы матричный тактильный экран на голову ( панорамно) .

 

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

Так библиотеку ультрасоник установите. Я первую попавшуюся из поиска взял:

https://github.com/ErickSimoes/Ultrasonic/archive/master.zip

Aldr
Offline
Зарегистрирован: 16.01.2018

Загрузил, на мониторе порта пусто...

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

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

В качестве сонаров отлично должен подходить LIDAR https://www.youtube.com/watch?v=xkut3yRL61U

 

 

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

Aldr пишет:

Загрузил, на мониторе порта пусто...

В смысле пусто? Там и не должно ничего быть. Где вы в этом скетче увидели вывод в порт? Там только пищалка и светодиод.

Aldr
Offline
Зарегистрирован: 16.01.2018

Ну а как это сделать? 

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

Aldr пишет:

Ну а как это сделать? 

В сетапе инициализируйте сериал, а в скетче либо в конце, либо после 23 строки допишите Serial.println(dist); 

Так-то это всё в примерах есть, разобраться самому несложно, если есть желание.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну а еще лучше организовать пульсирующий (1 импульс в 1сек)лазерный дальномер с вибрацией. Но это сложно для начинающих. Вывод на вибратор ШИМ. Далеко больше 5метров - короткий импульс вибрации. Меньше 0,1 метра трясет всю секунду. 

Aldr
Offline
Зарегистрирован: 16.01.2018

Не пойму,где пищалка,что бы указать пин...

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

Aldr пишет:

Не пойму,где пищалка,что бы указать пин...

pinMode(14, OUTPUT);

Вместо 14 укажите свой пин, к которому пищалка подключена, и в 14-15 строках 14 замените на номер своего пина.

Aldr
Offline
Зарегистрирован: 16.01.2018

Тогда Trig и Echo куда?... Можете описать поподробнее? У меня схема уже распаяна. Trig-4,Echo-5, динамик -2 (цифровые пины). Короче, я Чайник в програмировании...

Logik
Offline
Зарегистрирован: 05.08.2014

qwone пишет:

Слепой "видит" ухом. А вы забиваете это постороним шумом. Нужен другой канал для подачи сообщения слепому.

Вибра? Больше-менше она должна осилить. Например частотой пульсаций.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Logik пишет:
Вибра? Больше-менше она должна осилить. Например частотой пульсаций.
Вот прикиньте частоту вибропульсаций. Не думаю что вы отличите частоту вибрации 5Гц от 4Гц. А вот длительность пакета пульсации легче выявить. Опять же, что такое вибратор. Моторчик с грузиком. Длительность пакета вибрации легче запрограммировать, чем мучатся с изменением частоты вращения.

Logik
Offline
Зарегистрирован: 05.08.2014

Что то, что то по сложность - монописуарно. По различимости - пробовать надо. Различать надо думаю так 10м до препятствия 0,5ГЦ, 1м -5Гц.  Реально вполне. Я не настаиваю на частоте. Я предлагаю вибру.

ПС. ))) Та я не про частоту моторчика!   Я про частоту пулсируем - не пульсируем!!

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

Aldr пишет:

Тогда Trig и Echo куда?... Можете описать поподробнее? У меня схема уже распаяна. Trig-4,Echo-5, динамик -2 (цифровые пины). Короче, я Чайник в програмировании...

Ну тогда так:

#include <Ultrasonic.h>
#define trig_pin 7
#define echo_pin 6
#define led_pin 13
#define buzz_pin A0

Ultrasonic ultrasonic(trig_pin, echo_pin);
unsigned int dist = 0;
void setup() {
  pinMode(buzz_pin, OUTPUT);
  pinMode(led_pin, OUTPUT);
}

void beep(int d, int l, int p) {
  int to = l / (d / 1000);
  digitalWrite(led_pin, HIGH);
  for (int i = 0; i < to; i++) {
    analogWrite(buzz_pin, 0);
    analogWrite(buzz_pin, 255);
    delayMicroseconds(d);
  }
  digitalWrite(led_pin, LOW);
  delay(p);
}

void loop() {
  dist = ultrasonic.distanceRead(CM); // get distance
  if (dist > 150 or dist == 0) {
    digitalWrite(led_pin, LOW);
  }
  else {
    beep(3000, 100, 20);
    delay(dist * dist / 15);
  }
}

 

Где свои пины указать разберётесь?

Пищалку на аналоговый пин перенесите, на цифровом скорее всего не взлетит.

Aldr
Offline
Зарегистрирован: 16.01.2018

Спасибо большое! У меня вместо пищалки телефонный динамик-запищал на аналоге, и то еле-еле слышно...Подключил наушник, работает нормально. Буду пробовать пьезо и вибромотор.