Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Посоветуйте акселерометр


Посоветуйте акселерометр

Сообщений 1 страница 30 из 32

1

Кто нибудь использовал акселерометры? Хочу сделать датчик начала движения, что бы ловил исключительно начало движения и не срабатывал бы от вибраций двигателя или маленьких наклонов. По "фаршу" видится интересным  "MPU-6050 Three-axis accelerometer sensor Module gyroscope 6 DOF GY-521", но реальных примеров с ним навскидку не нашел. Или взять аналоговый, только акселерометр?

0

2

испльзовал ADXL335

Код:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40


Dim Temp As Byte , Temp_w As Word

Dim Xx As Word , Yy As Word , Zz As Word


'конфигурация подключения дисплея к портам МК
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = Portd.7
Cursor Off Noblink            ' Выключим мигающий курсор на экране


Led Alias Portb.0
Config Led = Output

Config Portd = Output
Config Portc = Input

' Настройка АЦП
 Config Adc = Single , Prescaler = Auto , Reference = Avcc : Start Adc


Cls
Lcd "    Testing"
Lowerline
Lcd " ADXL335 sensor"

Waitms 3000




Do

 Xx = Getadc(2)               ' Измеряем напряжение в канале X
 Shift Xx , Right , 1         ' Превращаем 10 бит в 9 бит

 Yy = Getadc(1)               ' Измеряем напряжение в канале Y
 Shift Yy , Right , 1         ' Превращаем 10 бит в 9 бит

 Zz = Getadc(0)               ' Измеряем напряжение в канале Z
 Shift Zz , Right , 1         ' Превращаем 10 бит в 9 бит

 Cls
 Lcd "X" ; Xx

 Locate 1 , 9
 Lcd "Y" ; Yy

 Lowerline
 Lcd "Z" ; Zz

 Waitms 100                   ' Пауза

Loop

0

3

И как показания? Можно отличить движения от покоя без математики типа Калмана?

0

4

почитайте как они работают: замеры магнитного поля

0

5

Александр Д. написал(а):

почитайте как они работают: замеры магнитного поля

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

0

6

Учитывая, что у тебя там не только аксель , но и гироскоп- никакой сложной математики не нужно.
Ищи статьи про инерциальную навигацию, ядреные ракеты с двухкилобайтным процом летали на этой системе, а тебе Калмана подавай ))

0

7

Дошли наконец то руки до акселерометров.
Начал с простейшего, аналогового MMA7361. http://www.buyincoins.com/item/10248.html
Набросал несложный код чтения трех АЦП и вывода их Print_ом выводит какие то циферки, немного пляшут, добавил выделение отклонения от предыдущего, получилось вот что:

Код:
$regfile = "m328pdef.dat"                                   ' used micro
'$regfile = "m168def.dat"
$crystal = 16000000                                         ' used xtal
$baud = 38400                                               ' baud rate we want
Config Clockdiv = 1                                         ' either use this or change the divider fuse byte
'-------------------------------------------------------------------------------

' Test MMA-7361

$hwstack = 64
$swstack = 64
$framesize = 64

Const Percz = 50                                            ' На сколько процентов можно отклониться

Declare Function Perc(var1 As Word , Var2 As Word ) As Byte

Dim Xa As Word , Ya As Word , Za As Word
Dim Xm As Word , Ym As Word , Zm As Word
Dim Xd As Byte , Yd As Byte , Zd As Byte

Config Portc = Input
Config Portb.5 = Output

Config Adc = Single , Prescaler = Auto , Reference = Avcc : Start Adc



Do
Lab_start:
 Xa = Getadc(portc1)
 Xd = Perc(xa , Xm)

 Ya = Getadc(portc2)
 Yd = Perc(ya , Ym)

 Za = Getadc(portc3)
 Zd = Perc(za , Zm)

If Zd < Percz And Xd < Percz And Yd < Percz Then Goto Lab_start


Print "Xa= " ; Xa ; " Ya= " ; Ya ; " Za= " ; Za
Print "X%= " ; Xd ; " Y%= " ; Yd ; " Z%= " ; Zd
Print "--------------------------------------"
Xm = Xa : Ym = Ya : Zm = Za

Set Portb.5
Waitms 100
Reset Portb.5

Loop


Function Perc(var1 As Word , Var2 As Word ) As Byte         ' Вычисление процента отличия
 Local Delta As Word
 If Var1 = 0 Then Var1 = 1
 If Var2 = 0 Then Var2 = 1

 If Var1 < Var2 Then
  Delta = Var1 * 100
  Delta = Delta \ Var2
 Else
  Delta = Var2 * 100
  Delta = Delta \ Var1
 End If
 Perc = 100 - Delta
End Function

Получился ... датчик удара. Практически не реагирует на плавные изменения, но отлично реагирует на постукивание пальцем по столу (любой резкий удар). Замечательно, но я хочу определять как раз перемещение, и не реагировать на резкие удары.
Что посоветуете? Задержки добавлял, коряво, надо что то типа программного Low-pass фильтра ?

0

8

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

0

9

Он показывает ускорения по трем осям. В статике показывает положение в пространстве X,Y,Z у неподвижного они слегка дрожат около каких то цифр. Если поменять положение, то другие цифры. При постукивании резко меняются показания, и возвращаются на место.

0

10

Я предположу, что при небольшом ускорении чувствительный элемент не становится обратно на свое место, отсюда и другие цифры.

0

11

Вот видео, где этот датчик используется именно как датчик положения в пространстве. http://www.youtube.com/watch?feature=pl … BGLHGoHl_U

0

12

0

13

Александр Д. написал(а):

Превращаем 10 бит в 9 бит

Александр Д., это Вы делаете фильтр?

0

14

IgorL
а под перемещением вы подразумеваете изменение угла наклона или движение по плоскости?

0

15

Civil написал(а):

IgorL
а под перемещением вы подразумеваете изменение угла наклона или движение по плоскости?

Нужен датчик движения автомобиля. При движении он естественно наклоняется, когда стоит, наклон практически отсутствует, возможны колебания от ветра. Пока научился уверенно фиксировать удары и проезд колдобин. :)  С движением пока не очень,  видимо нужен более серьезный анализ по всем трем осям одновременно.
Пробую еще запустить ADXL345. У него собственная математика есть, но категорически не хватает времени разобраться.

0

16

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

0

17

IgorL написал(а):

Нужен датчик движения автомобиля.

Да в чём собственно проблема? Вычисляете ускорение по осям Х и У.  вектор по Пифагору- квадрат гипотенузы = сумме квадратов катетов. Измеряете, ловите Gmin и Gmax. Если разница больше определённого значения, то авто имеет ускорение, значит движется. Во время движения ускорение будет всегда- газ, тормоз, кочка, холмик и т.д.

0

18

kip написал(а):

Да в чём собственно проблема? Вычисляете ускорение по осям Х и У.  вектор по Пифагору- квадрат гипотенузы = сумме квадратов катетов. Измеряете, ловите Gmin и Gmax. Если разница больше определённого значения, то авто имеет ускорение, значит движется. Во время движения ускорение будет всегда- газ, тормоз, кочка, холмик и т.д.

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

0

19

IgorL написал(а):

Не уверен, что хватит ресурсов AVR. 

Что Вы имеете ввиду? Я делал датчик силы удара,(основа - на видео ссылка выше) на Мега 168, заняла программа 14%, При этом измерял X, Y 50 раз, ловил максимум и минимум, вычислял вектор, и потом само ускорение, после чего отправлял на nRF24l01 10 байт данных. Там уже приёмник отправлял данные на комп, для построения графика.
Как вариант ещё, вот что в голову пришло. Там есть ножка 0G, которая фиксирует датчик в положении невесомости. Однозначно, машина во время движения будет находиться в невесомости очень часто. Попробуйте фиксировать сигнал на 0G, и сбрасывать таймер до переполнения. Если сработал таймер по прерыванию - машина стоит.
З.Ы. Ось Z  Вам не нужна. Ну если только не фиксировать кульбит на машине o.O

Отредактировано kip (2014-04-12 20:40:34)

+1

20

kip написал(а):

Что Вы имеете ввиду? Я делал датчик силы удара,(основа - на видео ссылка выше) на Мега 168, заняла программа 14%, При этом измерял X, Y 50 раз, ловил максимум и минимум, вычислял вектор, и потом само ускорение, после чего отправлял на nRF24l01 10 байт данных. Там уже приёмник отправлял данные на комп, для построения графика.
Как вариант ещё, вот что в голову пришло. Там есть ножка 0G, которая фиксирует датчик в положении невесомости. Однозначно, машина во время движения будет находиться в невесомости очень часто. Попробуйте фиксировать сигнал на 0G, и сбрасывать таймер до переполнения. Если сработал таймер по прерыванию - машина стоит.
З.Ы. Ось Z  Вам не нужна. Ну если только не фиксировать кульбит на машине

Отредактировано kip (Вчера 21:40:34)

Удар несложно фиксировать.  Достаточно выделять максимум. При движении как раз ось Z оказалось наиболее информативна, по ней четче всего фиксируются изменения характерные для движения. Самая большая проблема отличить движение от ритмических наклонов.
Насчет 0G это шутка? У меня не бывает невесомости в авто, я не представляю ситуаций кроме падения в пропасть когда автомобиль в состоянии невесомости.

Отредактировано IgorL (2014-04-13 18:59:47)

0

21

Насчет 0G это не шутка. У Вас подвеска в одну сторону отрабатывает? ну там кинетическая энергия переходит в динамическую и обратно? Не буду спорить, я дал лишь совет, дело Ваше, можете ради интереса взять в руки и покачать датчик.

IgorL написал(а):

Удар несложно фиксировать

Вы не внимательно читаете. Повторю, датчик силы удара, а не датчик удара. Я измеряю силу удара, а не фиксирую наличие удара.

IgorL написал(а):

Самая большая проблема отличить движение от ритмических наклонов.

В каких условиях стоячая машина получает ритмичные наклоны :D ? Ай я яй!
Вообще задача сложная. Много вариантов. Почему именно акселерометр. Можно подключиться к спидометру.

0

22

kip написал(а):

Насчет 0G это не шутка. У Вас подвеска в одну сторону отрабатывает? ну там кинетическая энергия переходит в динамическую и обратно? Не буду спорить, я дал лишь совет, дело Ваше, можете ради интереса взять в руки и покачать датчик.

Я для начала прочитал в даташите, что на 0G появляется при отсутствии ускорения по всем трем осям. Качать датчик в руках совсем не то же самое, что установить его прижатым к корпусу авто.

kip написал(а):

Вы не внимательно читаете. Повторю, датчик силы удара, а не датчик удара. Я измеряю силу удара, а не фиксирую наличие удара.

Боюсь, что вы измеряете нечто, как то связанное с ускорением. Сила это ускорение умноженное на массу. Там нет времени, поэтому максимальное ускорение и есть сила. Мне же нужно перемещение, причем горизонтальное.

kip написал(а):

В каких условиях стоячая машина получает ритмичные наклоны  ? Ай я яй!
Вообще задача сложная. Много вариантов. Почему именно акселерометр. Можно подключиться к спидометру.

Ветер или проезжающие машины дают наклоны, а подвеска их отрабатывает. К спидометру подключаться нужно проводами. В моем случае это не подходит.

0

23

Проверил идею с 0G выходом, в городе при движении закрепленного акселерометра ни одного срабатывания (на прерывании INT0) не зафиксировал. Падение фиксирует четко и быстро. Примерно с 8 сантиметров четко срабатывает.

0

24

Ну нет, так нет. Это была лишь идея.
Насчёт силы удара,- именно так и вычисляется. Но всё усложняется именно тем, что груша не висит ровно, а качается, а ещё и вращается иногда на тросу. В этом и сложность. Но Вышу задачу так с лёту не решить, видимо. Нужно искать единомышленников. Удачи!

0

25

kip написал(а):

Ну нет, так нет. Это была лишь идея.
Насчёт силы удара,- именно так и вычисляется. Но всё усложняется именно тем, что груша не висит ровно, а качается, а ещё и вращается иногда на тросу. В этом и сложность. Но Вышу задачу так с лёту не решить, видимо. Нужно искать единомышленников. Удачи!

Нашел в сети единомышленников, но они не пишут на Bascom_е . :(
Алгоритм, как я понял следующий: убирается фон от земного притяжения и дальше через БПФ раскладывают по частотам. Все высокочастотное в мусорку, низкочастотные, ниже двух герц это то, что надо.

0

26

поднимем тему. есть датчик удара PKGS-90LD и есть по нему вопрос - его просто на АЦП подключать или все же через усилитель? и где брать его резонансную частоту? задача собственно проста - нужно по датчику удара делать прерывание. если просто подключиться к нему вольтметром - то единицы милливольт при хорошем таком ударе по датчику. даташит - http://www.farnell.com/datasheets/58860.pdf

0

27

Нам даташит выложили, а сами его не читали? Там есть и частота и схема включения.

0

28

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

0

29

ладно, вопрос снят. подключу через ОУ и сразу на INT1. так будет правильнее

0

30

IDok написал(а):

задача собственно проста - нужно по датчику удара делать прерывание.

Как-то в (уже) "далекой молодости" делал датчик удара из телефонного капсюля ТОН-1.
В мембране делалось маленькое отверстие, к которому на проволочке подвешивался грузик.
Вес подбирался экспериментально, где-то около 4г.
Элементарного каскада на одном транзисторе хватало для срабатывания ТТЛ логики.
Если воздействовать на мембрану напрямую силами перекидной пружины - работает даже без усилителя...

Кстати, подобным образом работают датчики охраны "Гранит".
Задача - отреагировать на проламывание стены.
Охранная зона - до 3м в радиусе от установки датчика.

Немножко "колхоз", зато дешевле. ;)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Посоветуйте акселерометр