4 сообщения в этой теме

Дано: отладочная плата STM32F303VC, индукционный датчик.

Доброго времени суток, суть моего проекта в  детектировании вибраций(ударов) при помощи аналогового датчика.

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

image.png.6c5dfd3015fe1e7c39610351e9d8a5fb.png

Информация по датчику.

Индукционный датчик удара, шок сенсор, Arduino может использоваться в проектах на микроконтроллерах (в т.ч. Arduino), в которых нужно следить за уровнем вибрации или подобных механических возмущений. Принцип действия датчика основан на электромагнитной индукции. Движущийся стальной, ферритовый или магнитный сердечник относительно катушки создает в катушке ЭДС, подходящую по амплитуде ударного воздействия на систему. Чувствительный элемент датчика установлен в прозрачный пластиковый параллелепипед для защиты от действий внешней среды.
Для использования датчика нужно подключить его к Arduino контроллеру или другому микропроцессорному управляющему устройству, подать питание, создать программу для работы с датчиком или использовать готовое решение. На корпусе датчика есть два отверстия, с помощью которых можно жестко закрепить датчик на плоской поверхности. В состоянии покоя напряжение на выходе из датчика около 5 В, при возмущении напряжение на датчике падает пропорционально силе возмущения.
Индукционный датчик удара, шок сенсор, Arduino имеет один 3-контактный разъем для подключения к контроллеру и питания:

контакт обозначенный «–» – общий контакт;

средний контакт – напряжение питания;

контакт S – аналоговый выходной сигнал датчика.

Датчик может питаться как от Arduino контроллера (другого микропроцессорного управляющего устройства), так и от внешнего источника питания. Напряжение питания 3,3 – 5 вольт постоянного тока.

Характеристики:

принцип действия: индукционный;
выходной сигнал: аналоговый;
напряжение питания: 3,3 – 5 вольт постоянного тока;
размеры: 30 х 18 х 11;
вес: 2 г.

Shock.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    336
37 минут назад, Kirill Lubinets сказал:

то ли я ошибся с алгоритмом его работы

А какой алгоритм используется в программе? Если можно, напишите коротко своими словами. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Инициализирую порт А(там находится АЦП) и порт В(там находятся распаянные светодиоды), конфигурирую светодиоды и АЦП1(ножна PA0).

АЦП 10-битный значит он сможет детектировать 1024 различных  напряжений на амплитуде 0-5 V. 
Из этого выходит что чувствительность(шаг квантования) равен 5мВ.

Когда датчик приводят в возбуждение(трисут, стукают,дергают) в нем возникает ЭДС самоиндукции что гасит напряжение:

1.Датчик в работе значит на выходе будет менее 5V(напряжение питания);

2.Датчик в спокойствие на выходе будет 5V(напряжение питания);
 

 

АЛГОРИТМ(while)

 

1.Считываю значение с АЦП1, делаю паузу, запрещаю дальнейшие преобразование
2.Делаю расчет текущего потенциала на датчике ( значение АЦП * 5(напряжение питания)/1024(разрядность АЦП) )
3.Сравниваю с условием состояния датчика
3.1. Зажигаю один из светодиодов(в зависимости от состояния датчика)

3.2. Делаю паузу

3.3.Тушу светодиод, включаю на АЦП1 преобразования

 

Думаю я ощибся в условии срабатывания датчика среагировавшего на удар.

 

if(u <  1400)

тогда удар был зажечь зеленый светодиод

else

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    336
16 минут назад, Kirill Lubinets сказал:

в нем возникает ЭДС самоиндукции

В Вашем датчике нет никакой самоиндукции. Это просто контакт, который замыкается при тряске. Упругая пружинка в датчике расположена так, что её свободный конец не касается контактов. При резком движении пружинка начинает колотиться по контакту, кратковременно замыкая электрическую цепь.

Тут даже не нужно АЦП использовать, потому что при срабатывании датчик выдаёт серию импульсов 5В-0В -5В-0В-5В ... Надо просто подать этот сигнал на ножку порта и включить прерывания на этой ноге. Тогда при появлении импульсов на ноге сработает прерывание, и в обработчике прерывания уже можно включать светодиод. 

 

cxem_shock_sensor1.png

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: mazzi
      Повторил схему опубликованную на сайте паяльник. http://forum.cxem.net/index.php?/blogs/entry/548-повторил-схему-клона-avr-jtag-ice/&do=getLastComment
      Схема заработала, но так и не смог её заставить работать из под CVAVR, заводится только из под Atmel Studio 4.
      Может быть кому ни будь удалось это сделать? Если да, то подскажите, как этого достичь?
       
    • Автор: LettonDarkCat
      Купил USBASP программатор с aliexpress. На нем стояла старая прошивка, т.к в khazama при прошивке выдавало ошибки но микроконтроллер прошивался и память считывалась (короче просто старая прошивка на нем). Потом решил перепрошить программатор через arduino. Прошивка успешно закачалась, но теперь программатор вообще отказывается работать. Кто сталкивался, помогите.
    • Автор: dommax
      Распродаю остатки радиодеталей.
      Для удобного поиска написал WEB страничку http://detali.syremo.com.ua/
      Количество может не совпадать. Пишите - отвечу. Договоримся...
      Отправляю только по Украине. Перед отправкой смогу сделать фото.
    • Автор: Andrey Gressikov
      Я начинающий программист, пытаюсь программировать микроконтроллеры в среде АВР.
      У меня возник вопрос, вот например у нас есть двоичная система исчисления где 3 мы можем записать так:
      00000011, однако чтобы подать логическую 1 на третий порт микроконтроллера мы должны сделать следующую запись
      PORTC=00000100, т е существует некая разница между названиями портов и системами исчисления, в таком случае как мне используя 16 ричную систему исчисления подать напряжение на какую либо ногу порта.Я знаю что данная запись 0х01 подает логическую 1 на 0 ногу, а данная запись 0х10 на 4 ногу ,ну а как быть дальше?
      Как подать напряжение на 5 ногу порта? Если я в чем то заблуждаюсь - поправьте, если чего то незнаю расскажите.
      Заранее благодарю.