roboforum.ru

Технический форум по робототехнике.


направление источника звука

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

Re: направление источника звука

Сообщение chinga » 12 окт 2011, 13:46

задача только найти направление, а координаты не обязательно. надо просто повернуть камеру с центра датчика туда, откуда будет издаваться звук)

Добавлено спустя 5 минут 14 секунд:
Известно лишь разница по времени прихода звука

пока и это не известно. по теорий работать должно, но это даже не выходит на практике.
вот только что попытался находить с АЦП, то есть включить АЦП и выводить на ЖК данные, но АЦП даже не может найти с лева или справа звук.
вот код:
Код: Выделить всёРазвернуть
/*****************************************************
Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h>
#include <stdio.h>
#include <delay.h>
#include <alcd.h>
#define ADC_VREF_TYPE 0x60

unsigned int adc1 = 0;
unsigned int adc2 = 0;

unsigned char read_adc(unsigned char adc_input){

    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCH;
}

void main(void){

unsigned char ch1[20];
unsigned char ch2[20];
int i;

PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2
// D4 - PORTB Bit 4
// D5 - PORTB Bit 5
// D6 - PORTB Bit 6
// D7 - PORTB Bit 7
// Characters/line: 16
lcd_init(16);

lcd_gotoxy(2,0);
lcd_puts("loading...");
delay_ms(1000);

    for(i = 0; i<16; i++){
        lcd_gotoxy(i,1);
        lcd_putchar(0xff);
        delay_ms(500);
    }               

    lcd_clear();
    lcd_gotoxy(3,0);
    lcd_puts("start test");   
    delay_ms(1000);     
    lcd_clear();

    while (1){
        adc1 = read_adc(0);
        adc2 = read_adc(1);
       
        sprintf( ch1,"adc1=%u", adc1 );
        lcd_gotoxy(9,0);
        lcd_puts(ch1);           
       
        sprintf( ch2,"adc2=%u", adc2 );
        lcd_gotoxy(0,0);
        lcd_puts(ch2);           
       
        if(adc1 > adc2 && adc1 > 5){
            lcd_gotoxy(9,1);
            lcd_puts("------>");
            delay_ms(2000);         
        }                           
        if( adc2 > adc1 && adc2 > 5){
            lcd_gotoxy(0,1);
            lcd_puts("<------");
            delay_ms(2000);
        }
        delay_ms(100); 
        lcd_clear();
    }
}

вопрос такой возник, вот в этом строчке
Код: Выделить всёРазвернуть
adc1 = read_adc(0);
adc2 = read_adc(1);
он сначала берет данные с ножки А0, потом с ножки А1? а в это время когда он будет брать данные с А0, А1 не исчезнет? или он сохранит до следующего вызова? прост звук слишком быстро двигается, и хватит ли мига что бы взять точные данные с обоих ножек?
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: направление источника звука

Сообщение Radist » 12 окт 2011, 13:55

Попробую доказать без математики. Берем два кола, вбиваем их в землю, расстояние между ними обзываем базой. Берем три веревки, две одинаковой длины (звук распространяется во все стороны одинаково), а третья веревка - это дельта (она превращается в длину умножением полученного времени на скорость звука). Одну веревку удлинняем, привязываем каждую к своему колу и смотрим где веревки сойдутся. Там был источник звука. Помечаем это место. Теперь берем другие две одинаковые веревки, привязываем ту же самую третью - и получаем другой источник звука. То есть есть куча точек, в которых может находиться источник звука, при этом разность по времени между ушами будет одинаковая.

Про координаты вроде доказал, теперь про направление.
Кто раньше услышал - с той стороны и звук. Но насколько повернуть башку? Можно это делать итеррационно, если звук будет звучать периодически. С одного раза уставиться на источник звука не получится. Зато известен критерий что источник звука прямо спереди - разность равна нулю. А по программе не подскажу, не знаю почему не получается.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: направление источника звука

Сообщение chinga » 12 окт 2011, 14:04

нужно просто. хлопок, и повернул голову туда, откуда хлопок. кто первый услышал, с его стороны звук. это я уже делал, но тут проблема, время не можем находить точное. глючит странно. то 10, то 1000 может показать. код есть, самый первый код в теме. с АЦП что то не получается, не можем находить даже с какой стороны звук.

Добавлено спустя 3 минуты 25 секунд:
кстати, еще что то, узнал при эксперименте: точнее находит, то есть выводит реальный результаты(это не 0, и не миллион) когда звук издается долго) ну когда просто хлопок быстрый, время покажет 0, а когда ну звук по дольше, типа "аааааааааа", выводит результаты более близкие к точным результатам) но и то глючить начнет после 2-3 раза.
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: направление источника звука

Сообщение Radist » 12 окт 2011, 14:14

Путем графических построений я смог получить направление на источник звука. Поэтому отзываю свои возражения. Действительно, разности достаточно. А если разность нулевая - значит направление прямо спереди.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: направление источника звука

Сообщение chinga » 12 окт 2011, 14:22

Radist писал(а): А если разность нулевая - значит направление прямо спереди.

да.
по теорий, да, должно работать. на улице нужно было проверить, но щас ветер то сё, есть еще виновник, эхо, отраженные звуки)

Добавлено спустя 3 минуты 5 секунд:
Strijar писал(а):А мне вот не понятно зачем там 3 датчика? Разве 2-х не достаточно? Пришел сначало в правый - ждем пока появиться в левом, пришел в левый - ждем правый. А может проще - записывать звук постоянно через АЦП и делать свертку между двумя каналами?

неа. не получается) даже не может определить с какой стороны звук
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: направление источника звука

Сообщение Vovan » 12 окт 2011, 14:22

Звук - штука очень не точная. Даже человек с его суперкомпом в голове определяет источник единичного звука с точностью чуть больше 50%. У животных (с тоже неслабыми возможностями) этот показатель несколько выше, но все равно не превышает 70%. С продолжающимся звуком (или повторными звуками) картина естесно другая (почитать про бинаруальный слух ИМХО иногда полезно)...
кто первый услышал, с его стороны звук. это я уже делал
А теперь просто: нужно не просто повернуться в сторону ПРОТЯЖНОГО звука, а уравнять (поворотом "головы") время прихода звука на оба уха - это и будет искомое направление :)
ИМХО точная ориентировка, или выведение показаний ориентировки при одиночном звуке - обречено на провал...
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: направление источника звука

Сообщение chinga » 12 окт 2011, 14:26

Vovan писал(а):А теперь просто: нужно не просто повернуться в сторону ПРОТЯЖНОГО звука, а уравнять (поворотом "головы") время прихода звука на оба уха - это и будет искомое направление

не понял :D
можете step by step?
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: направление источника звука

Сообщение Роботов » 12 окт 2011, 14:31

Radist писал(а): А если разность нулевая - значит направление прямо спереди.

Или прямо сзади :wink:
Аватара пользователя
Роботов
 
Сообщения: 14
Зарегистрирован: 06 сен 2011, 08:16
Откуда: Московская обл.
ФИО: Сергей

Re: направление источника звука

Сообщение chinga » 12 окт 2011, 14:33

Роботов писал(а):Или прямо сзади :wink:

ну мы пока только спереди смотрим))
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: направление источника звука

Сообщение Vovan » 12 окт 2011, 14:48

можно и <постепенно>:
1.
кто первый услышал, с его стороны звук. это я уже делал

и поворачиваемся* в сторону звука, например на 30град.
2. снова scan
3. "кто первый услышал" в эту сторону поворот на 15град
4. снова scan
5. "кто первый услышал" в эту сторону поворот на 5град
6. снова scan
7. слышим одновременно, поворачиваться не нужно - звук впереди.
*если поворот производить медленно, то следующие пункты происходят во время поворота.
Я описал алгоритм по которому действуют не только люди, но и животные - методом уточнения при определении направления источника звука.
ЗЫ: а ещё, многие из нас, примерно по такому принципу, выводят своих роботов к зарядной станции, только вместо ушей ИК датчики: видим одним датчиком - поворачиваемся до тех пор пока не увидим вторым и тогда прямо :), а если при движении прямо с одного датчика сигнал исчезает - соответствующий доворот. До этого же, просто беспорядочно ездим-вертимся до тех пор пока не увидим хоть что-то...
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: направление источника звука

Сообщение chinga » 12 окт 2011, 15:01

тут каждый раз надо издавать звук пока он не найдет? а если просто один хлопок?
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: направление источника звука

Сообщение Vovan » 12 окт 2011, 15:08

Вот поэтому существует правило которое придумал один очень уважаемый всеми роботостроителями человек.
Сказал он примерно так: поведение робота предсказать несложно, достаточно оснастить себя его (робота) возможностями и датчиками и посмотреть что будет.
Конечно, он имел ввиду наше воображение.
Т.е. нужно представить, в данном случае, что я имею только два микрофона и мне нужно точно повернуться в сторону хлопка. Вот и фсё :roll:
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: направление источника звука

Сообщение chinga » 12 окт 2011, 15:12

ну я тоже использую два микрофона))
и не могу повернуть голову туда откуда издается звук)
или я вас не понимаю)
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: направление источника звука

Сообщение Vovan » 12 окт 2011, 15:30

"))" - надо понимать как "." ?
а ")" - как "?" ? Да?

Ну во-первых у нас (у людей) есть не только два микрофона, но и много других помощников (зрение, опыт, интелект... да и возможности нашего мозга намного превышают возможности несчастного МК...). Если глаза закроем, то остальное отключить то мы не можем, а если всё же попытаться как-то заблокировать свой опыт и интелект, то ведь ничто не мешает попробовать: с закрытыми глазами точно определить откуда раздался хлопок.
Ну, а во-вторых даже если это и удастся 1 раз, то 2-й, 3-й,... n-й разы - уверен будут мимо кассы, а точнее - я писал выше - чуть больше 50% :D

Добавлено спустя 8 минут:
Да, забыл ещё добавить, что для чистоты эксперемента, нам нужно в ухо вставить и АЦП, чтобы мы могли оценивать ТОЛЬКО время прихода звука на наши "микрофоны" и исключить оценку по интенсивности (т.е. по амплитуде), ведь очевидно, что ухо повернутое в сторону звука лучше (громче) его слышит :wink:
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: направление источника звука

Сообщение chinga » 12 окт 2011, 15:35

и "))" и ")" ничего не означает, можно и поставить просто точку)
но теперь какой способ можно применить?
человек, не может повернуть голову точно туда откуда издастся звук. примерно может определить. есть и типа тарелка антенны :D который определяет явно и точно сзади или спереди, и справа или слева. но точно градус не может определить. ну так приблизительно может. а мое устройство может только находить слева или справа. и надо чуть поточнее откуда именно)
и еще, человек может определить звук самого хлопка и его отраженные сигналы, и мк все сигналы.
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Пред.След.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13