[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Ультразвуковой сонар из HC-SR04
RobustaДата: Среда, 25.04.2012, 13:43 | Сообщение # 1
Группа: Проверенные
Сообщений: 12

Статус: Offline
Здравствуйте! Раз появился форум буду спрашивать здесь biggrin
Идея какая: использовать дальномер HC-SR04 в качестве сонара для определения глубины в озере. Мы с отцом заядлые рыбаки и летом частенько выплываем на лодке порыбачить. Так вот порой полезно знать сколько метров до дна и поэтому загорелся желанием смастерить из дальномера сонар. Электронику планирую замуровать в эпоксидку а наружу оставить торчать только передатчик и приемник. Но неуверен что мембраны в них долго протянут под воздействием воды. Может есть какието способы защитить их?

Добавлено (25.04.2012, 13:43)
---------------------------------------------
а как редактировать пост, а то запятых не хватает?)))

 
exersizzeДата: Среда, 25.04.2012, 14:58 | Сообщение # 2
Группа: Администраторы
Сообщений: 723

Статус: Offline
интересная идея, а ультразвук не отпугнет рыбу? от контакта с водой можно попробовать обмазать силиконовым герметиком, главное чтобы между водой и мембраной небыло воздушной прослойки pocus

с возможностью редактирования попробую вопрос решить.


 
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 smile


 
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 раз в секунду его опросить наверно уже не получиться, см на временную диаграмму, плюс добавь к этому время за которое звук доберется до препятствия и вернется обратно.
Прикрепления: 1869595.png (3.8 Kb)


 
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
во схема подключения, индикатор все-таки будет строенный

Прикрепления: 5887150.png (14.9 Kb)




Сообщение отредактировал 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

с отдельным включением разрядов чегото я ступил признаю wacko сейчас стало гораздо лучше но все равно на индикаторе мракобесие какоето.
пробовал выводить данные в терминал, показания идут правильные а на индикаторе нет crazy


 
exersizzeДата: Пятница, 27.04.2012, 18:10 | Сообщение # 12
Группа: Администраторы
Сообщений: 723

Статус: Offline
Попробуй вывести на индикатор известное число и глянь что получиться.

 
exersizzeДата: Пятница, 27.04.2012, 23:23 | Сообщение # 13
Группа: Администраторы
Сообщений: 723

Статус: Offline
Нашел багу в коде - неправильно сложены данные в массив, ноль должен идти первым. Вывел на индикатор число 123

все нормально :)
Прикрепления: 2554306.png (57.3 Kb)


 
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, спасибо огромное! Работает как нужно!! Теперь попробую промазать все силиконкой и провести испытания в воде pocus

 
pchela5Дата: Вторник, 01.05.2012, 18:48 | Сообщение # 16
Группа: Свой человек
Сообщений: 85

Статус: Offline
Ну что я могу сказать - безумству храбрых поем мы песню. Камрад, мой тебе совет - купи простейший эхолот на ебае или байиконс. Мощности не хватит в данном передатчике - это раз, да и герметизировать устанешь - это два, по комплектующим много не сэкономишь - это три.

 
RobustaДата: Пятница, 04.05.2012, 09:03 | Сообщение # 17
Группа: Проверенные
Сообщений: 12

Статус: Offline
ради спортивного интереса провел испытания в бочке, излучатель ничем не изолировал, то что измерил похоже на правду, но!! вдруг подумалось, что дно озера далеко не гладкое и не твердое (ил, водоросли и пр.), поэтому сомнения по поводу того что от него отразится звук. надо пробовать)
пока с китайскими магазинами не приходилось работать, но все больше убеждаюсь что пора начать biggrin


 
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 см ещё дополнительно второй .


 
  • Страница 1 из 1
  • 1
Поиск: