Ультразвуковой сонар из HC-SR04
|
|
Robusta | Дата: Среда, 25.04.2012, 13:43 | Сообщение # 1 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| Здравствуйте! Раз появился форум буду спрашивать здесь Идея какая: использовать дальномер HC-SR04 в качестве сонара для определения глубины в озере. Мы с отцом заядлые рыбаки и летом частенько выплываем на лодке порыбачить. Так вот порой полезно знать сколько метров до дна и поэтому загорелся желанием смастерить из дальномера сонар. Электронику планирую замуровать в эпоксидку а наружу оставить торчать только передатчик и приемник. Но неуверен что мембраны в них долго протянут под воздействием воды. Может есть какието способы защитить их?Добавлено (25.04.2012, 13:43) --------------------------------------------- а как редактировать пост, а то запятых не хватает?)))
|
|
| |
exersizze | Дата: Среда, 25.04.2012, 14:58 | Сообщение # 2 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| интересная идея, а ультразвук не отпугнет рыбу? от контакта с водой можно попробовать обмазать силиконовым герметиком, главное чтобы между водой и мембраной небыло воздушной прослойки
с возможностью редактирования попробую вопрос решить.
|
|
| |
Robusta | Дата: Среда, 25.04.2012, 15:17 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| Спасибо, надо будет попробовать. Отпугнуть не должен, промышленные сонары все на ультразвуке. Такой еще вопрос, как потом перевести длину импульса эха в расстояние до дна?
|
|
| |
exersizze | Дата: Среда, 25.04.2012, 15:31 | Сообщение # 4 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Да по той же формуле что и в документации S=F/58 ; S - дистанция в сантиметрах, F - длина импульса в микросекундах. Только с учетом того, что скорость звука в воде почти в 4 раза больше чем на воздухе. (331 м/с против 1348 м/с). Тогда получается S=F/14,5. Предел измерений тоже возрастет с 5 метров до 20
|
|
| |
Robusta | Дата: Четверг, 26.04.2012, 13:18 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| Привет! Сейчас прикидываю как организовать программу, снова возник вопрос. Какая максимальная частота опроса может быть у датчика? Дело в том что в качестве индикатора у меня будет сдвоенный семисегментник. На него информация выводится в динамическом режиме, по мотивам статьи http://avrproject.ru/publ....2-1-0-9 Как будет лучше организовать опрос датчика и вывод информации чтобы показания не моргали?
|
|
| |
exersizze | Дата: Четверг, 26.04.2012, 13:40 | Сообщение # 6 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Больше 5 раз в секунду его опросить наверно уже не получиться, см на временную диаграмму, плюс добавь к этому время за которое звук доберется до препятствия и вернется обратно.
|
|
| |
exersizze | Дата: Четверг, 26.04.2012, 13:45 | Сообщение # 7 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Опрос думаю лучше привязать на прерывание по переполнению таймера. В основном цикле вывод показаний, по переполнению таймера опрашиваем датчик, преобразуем данные и возвращаемся снова на индикацию. Чтото типа того, что я делал с датчиком 18b20 http://avrproject.ru/publ....-1-0-29
|
|
| |
Robusta | Дата: Пятница, 27.04.2012, 09:09 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| Спасибо попробую!
Добавлено (27.04.2012, 09:08) --------------------------------------------- Прошу помощи, вчера всю голову сломал. Не могу понять где ошибка. Код опроса дальномера использовал с этого сайта, опрос по таймеру 2 раза в секунду. В главном цикле вывожу показания, только заместо показаний на индикаторе какая-то фигня(
Code $regfile = "m8def.dat" $crystal = 1000000
Dim N2 As Integer Dim N3 As Integer Dim N4 As Integer
Dim M2 As Integer Dim M3 As Integer Dim M4 As Integer
Dim A As Word Dim S As Single
Config Timer1 = Timer , Prescale = 64 On Timer1 Sonar:
Enable Interrupts Enable Timer1
Do
Portd = Lookup(m2 , Dat1) Waitms 5
Portd = Lookup(m3 , Dat1) Waitms 5
Portd = Lookup(m4 , Dat1) Waitms 5
Loop
Sonar:
Portc.0 = 1 Waitus 15 Portc.0 = 0
Waitus 10 Pulsein A , Pinc , 1 , 1
S = A * 0.1725 'для воды заменить на 0.69
M2 = S M3 = S M4 = S M2 = M2 / 100 'сотки N2 = Abs(m2) M3 = M3 Mod 100 'десятки M3 = M3 / 10 N3 = Abs(m3) M4 = M4 Mod 10 'единицы N4 = Abs(m4)
Return
End
Dat1:
Data &B11111001 '1 Data &B10100100 '2 Data &B10110000 '3 Data &B10011001 '4 Data &B10010010 '5 Data &B10000010 '6 Data &B11111000 '7 Data &B10000000 '8 Data &B10010000 '9 Data &B11000000 '0
Добавлено (27.04.2012, 09:09) --------------------------------------------- сейчас набросаю схему подключения для наглядности
Сообщение отредактировал Robusta - Пятница, 27.04.2012, 09:10 |
|
| |
Robusta | Дата: Пятница, 27.04.2012, 09:24 | Сообщение # 9 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| во схема подключения, индикатор все-таки будет строенный
Сообщение отредактировал Robusta - Пятница, 27.04.2012, 09:24 |
|
| |
exersizze | Дата: Пятница, 27.04.2012, 09:45 | Сообщение # 10 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Не увидел в коде конфигурацию портов При выводе разряды не переключаются, поэтому все смешивается в кашу. Надо так Code Do
Portb = &B00000100 Portd = Lookup(m2 , Dat1) Waitms 5
Portb = &B00000010 Portd = Lookup(m3 , Dat1) Waitms 5
Portb = &B00000001 Portd = Lookup(m4 , Dat1) Waitms 5
Loop
|
|
| |
Robusta | Дата: Пятница, 27.04.2012, 13:43 | Сообщение # 11 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| конфигурация осталась в отдельном файле, вроде и без этого все ясно Code Config Portc.0 = Output Config Portc.1 = Input Config Portb = Output Config Portd = Output с отдельным включением разрядов чегото я ступил признаю сейчас стало гораздо лучше но все равно на индикаторе мракобесие какоето. пробовал выводить данные в терминал, показания идут правильные а на индикаторе нет
|
|
| |
exersizze | Дата: Пятница, 27.04.2012, 18:10 | Сообщение # 12 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Попробуй вывести на индикатор известное число и глянь что получиться.
|
|
| |
exersizze | Дата: Пятница, 27.04.2012, 23:23 | Сообщение # 13 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Нашел багу в коде - неправильно сложены данные в массив, ноль должен идти первым. Вывел на индикатор число 123 все нормально :)
|
|
| |
exersizze | Дата: Пятница, 27.04.2012, 23:24 | Сообщение # 14 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| рабочий код: Code $regfile = "m8def.dat" $crystal = 1000000
Config Portc.0 = Output Config Portc.1 = Input Config Portb = Output Config Portd = Output
Dim N2 As Integer Dim N3 As Integer Dim N4 As Integer
Dim M2 As Integer Dim M3 As Integer Dim M4 As Integer
Dim A As Word Dim S As Single
Config Timer1 = Timer , Prescale = 64 On Timer1 Sonar:
Enable Interrupts Enable Timer1
Do
Portb = &B00000100 Portd = Lookup(m2 , Dat1) Waitms 5
Portb = &B00000010 Portd = Lookup(m3 , Dat1) Waitms 5
Portb = &B00000001 Portd = Lookup(m4 , Dat1) Waitms 5 Loop
Sonar:
Portc.0 = 1 Waitus 15 Portc.0 = 0
Waitus 10 Pulsein A , Pinc , 1 , 1
S = A * 0.1725 'для воды заменить на 0.69
M2 = S M3 = S M4 = S M2 = M2 / 100 'сотки N2 = Abs(m2) M3 = M3 Mod 100 'десятки M3 = M3 / 10 N3 = Abs(m3) M4 = M4 Mod 10 'единицы N4 = Abs(m4)
Return
End
Dat1:
Data &B11000000 '0 Data &B11111001 '1 Data &B10100100 '2 Data &B10110000 '3 Data &B10011001 '4 Data &B10010010 '5 Data &B10000010 '6 Data &B11111000 '7 Data &B10000000 '8 Data &B10010000 '9
|
|
| |
Robusta | Дата: Суббота, 28.04.2012, 20:27 | Сообщение # 15 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| exersizze, спасибо огромное! Работает как нужно!! Теперь попробую промазать все силиконкой и провести испытания в воде
|
|
| |
pchela5 | Дата: Вторник, 01.05.2012, 18:48 | Сообщение # 16 |
Группа: Свой человек
Сообщений: 85
Статус: Offline
| Ну что я могу сказать - безумству храбрых поем мы песню. Камрад, мой тебе совет - купи простейший эхолот на ебае или байиконс. Мощности не хватит в данном передатчике - это раз, да и герметизировать устанешь - это два, по комплектующим много не сэкономишь - это три.
|
|
| |
Robusta | Дата: Пятница, 04.05.2012, 09:03 | Сообщение # 17 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| ради спортивного интереса провел испытания в бочке, излучатель ничем не изолировал, то что измерил похоже на правду, но!! вдруг подумалось, что дно озера далеко не гладкое и не твердое (ил, водоросли и пр.), поэтому сомнения по поводу того что от него отразится звук. надо пробовать) пока с китайскими магазинами не приходилось работать, но все больше убеждаюсь что пора начать
|
|
| |
asd81 | Дата: Воскресенье, 23.02.2014, 17:02 | Сообщение # 18 |
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Robusta, приветствую. поделитесь пожалуйста описанием работы и конструкции своего глубиномера. в какой среде написана программа, конфигурация фьюзов? спасибо.
Сообщение отредактировал asd81 - Воскресенье, 23.02.2014, 20:00 |
|
| |
oleg105103 | Дата: Пятница, 01.08.2014, 20:53 | Сообщение # 19 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Будьте добры подскажите как конвертировать код в HEX? Только учусь программировать Есть CV AVR Studio 5.1|4.0 Понимаю что вопрос аматора но пробовал компилировать с помощью AVR Studio 5.1 при компиляции ошибка и получении asm Error 1 $regfile: Unknown instruction or macro C:\Documents and Settings\admin\╨рсюўшщ ёЄюы\AVRAssembler3\AVRAssembler3\AVRAssembler3.asm 1 0 AVRAssembler3 Error 2 syntax error, unexpected '=' C:\Documents and Settings\admin\╨рсюўшщ ёЄюы\AVRAssembler3\AVRAssembler3\AVRAssembler3.asm 1 0 AVRAssembler3
Что я не так делаю ? Заранее спасибо
|
|
| |
max | Дата: Пятница, 01.08.2014, 22:39 | Сообщение # 20 |
Группа: Друзья
Сообщений: 170
Статус: Offline
| Это форум по программированию на BASCOM-AVR, поэтому выскакивает ошибка.
|
|
| |
oleg105103 | Дата: Пятница, 01.08.2014, 23:43 | Сообщение # 21 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Спасибо за подсказку Правильно ли я понимаю что BASCOM-AVR работает с USBasp ? Хочу совместить код с соседней ветки http://avrproject.ru/publ....-1-0-51 форума с кодом который тут думаю это возможно ?( хочу вместо жки использовать сегментник ) Можно ли в BASCOM-AVR скомпилировать файл и потом его сохранить в hex?
|
|
| |
Петр | Дата: Суббота, 02.08.2014, 11:08 | Сообщение # 22 |
Группа: Проверенные
Сообщений: 47
Статус: Offline
| Цитата oleg105103 ( ) Можно ли в BASCOM-AVR скомпилировать файл и потом его сохранить в hex? Да. Прошивка сохранятся в HEX и BIN форматах.
|
|
| |
oleg105103 | Дата: Суббота, 02.08.2014, 13:37 | Сообщение # 23 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Спасибо с BASCOM-AVR я не работал но вроде получилось Думаю можно ли слепить два кода вместе в части мигания светодиода и звукового сигнала при приближении объекта ближе чем на 40 см? Часть кода тут http://avrproject.ru/publ....-1-0-51
|
|
| |
oleg105103 | Дата: Понедельник, 04.08.2014, 17:43 | Сообщение # 24 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Собрал прошил но есть достаточно большая погрешность в измерении, в чем может быть проблемма ? может сам модуль ? И ещё после того как я добавил мигание светодиодом при приблищении (более чем на 50 см ) со светодиодом на сегментном индикаторе , начинают поочередно моргать сегменты первый второй третий . Светодиод повесил на PotrtC.2 Под конец перестали гореть сегментники вовсе , в чем может быть причина ? Мож порты сгорели ? но от чего не могу понять
|
|
| |
oleg105103 | Дата: Понедельник, 04.08.2014, 23:57 | Сообщение # 25 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Врет с показаниями просьба помочь понять из-за чего ?
|
|
| |
oleg105103 | Дата: Четверг, 07.08.2014, 23:58 | Сообщение # 26 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Подогнал показания с помощью подбора константы. Хотя это не совсем правильно но сам так и не смог понять почему врет с показаниями. Помогите подцепить ещё один светодиод , а то у меня код при компиляции выдает ошибку Хочу сделать чтоб при расстоянии до объекта 40 см срабатывал один светодиод а при расстоянии 20 см ещё дополнительно второй .
|
|
| |