Блок пользователя для пьезодатчика

Использование прочих датчиков и энкодеров и пользовательских блоков к ним
Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#1

Сообщение Musada » 20.08.2016{, 22:59}

Уважаемые знатоки здравствуйте! Прошу помогите вот с чем... Требуется в моем проекте на FBD возможность использования встроенного в Atmega 328 аппаратного компаратора для подключения датчика вибрации и работы с ним. К сожалению программный компаратор мне не подходит. Итак, если кому интересно, то вот схема подключения пьезо датчика к аппаратному компаратору (6 и 7 ноги):

Изображение
Переменным резистором настраивается чувствительность срабатывания. В данном варианте при срабатывании датчика пищит динамик подключенный к 9 выводу ардуино (на схеме не указан). Можно заменить на любую другую команду.

Собственно вот пример скетча для работы с ним:



Код: Выделить всё

void setup(){ACSR=(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0);
DIDR1=(1<<AIN1D)|(1<<AIN0D);
}

ISR (ANALOG_COMP_vect) {
tone(9,1000,100);
}

void loop() {  }
АЦП в силу специфики работы трудно захватить пики сигнала, а компаратору легко. Результатом работы является запуск прерывания (6 строка) В нём можно выполнить любую команду. Писк на 9 ногу (7 строка) взят в качестве примера.

А теперь основной вопрос.. Я видел, в новой версии FLprog появилась возможность при добавлении пользовательского блока выбрать "Code". Подразумаваю, что можно добавить туда все необходимое из скетча выше. Но КАК? Я далёк от программирования и ума не приложу, что где указывать... Помогите пожалуйста..
Последний раз редактировалось Musada 20.08.2016{, 23:02}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Блок пользователя для пьезодатчика

#2

Сообщение Слимпер » 21.08.2016{, 04:41}

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

Добавлено (21.08.2016, 04:41)
---------------------------------------------
Вот пару статей про работу с компаратором atmega
AVR. Учебный курс. Использование аналогового компаратора
Учебный курс AVR. Аналоговый компаратор
Так конечно не про Arduino IDE, но зато расписаны подробно регистры, что были настроены в вашем коде.
Последний раз редактировалось Слимпер 21.08.2016{, 04:06}, всего редактировалось 1 раз.

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#3

Сообщение Musada » 21.08.2016{, 10:40}

Слимпер писал(а):хорошо давать ссылку на статью от куда брали код
Пардон. Вот источник - форум Ардуино
Слимпер писал(а):что реально вы хотите от блока, вряд ли пищать динамиком
Я хочу использовать встроенный аналоговый компаратор в проектах FLProg.

Добавлено (21.08.2016, 10:40)
---------------------------------------------
Черт... Ну не могу я это всё осилить..(( FLProg FBD осилил. Нравится. Всего-лишь нужен дополнительный блок аналогового компаратора.. Можете помочь/создать ? Пожалуйста))
Последний раз редактировалось Musada 21.08.2016{, 10:28}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Блок пользователя для пьезодатчика

#4

Сообщение Слимпер » 21.08.2016{, 12:17}

Musada писал(а):Я хочу использовать встроенный аналоговый компаратор в проектах FLProg.
Опешите как вы его хотите использовать.
Почитал маленько про этот компаратор, возможны варианты.
1. Прерывания по имению состояния компаратора:
  • любое изменение на входе.
  • переход с 1 на 0
  • переход с 0 на 1
2. работа с таймером
3. просто считывание значения 
  • Использование напрямую входов AIN0(прямой вход) и AIN1(инверсный вход)
  •  подключение к прямому входу компаратора внутреннего источника опорного напряжения
  • подключение инверсного входа в к АЦП
 
И это я просто посмотрел в паре статей. Наверняка применений куда больше.

Так что если и браться делать, то надо понять что конкретно надо. Опешите подробно для чего вам надо.
Что должно быть на выходе блока?

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#5

Сообщение Musada » 21.08.2016{, 12:22}

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

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Блок пользователя для пьезодатчика

#6

Сообщение Слимпер » 21.08.2016{, 12:45}

Регулировка чувствительности программная точна не получится. Это наверное возможно при реализации внешней схемы и использование ШИМ в качестве задатчика порога.
Но там требуется схема преобразования в аналоговый сигнал хотя бы на основе RC фильтра.
Хотя в аналоговой схемотехники я слаб.
Musada писал(а):мне нужно чтобы на выходе блока был 0 или 1. Тоесть вибрация произошла - тогда 1.
Я так понял, что длительность сигнала мала. Так что после сработки датчика он быстро успокаивается.
Значит на выходе должен быть  одиночный импульс после сработки датчика, а потом снова ноль.

Если все так, то попробую вечеров сделать такой блок. Вроде ни чего сложного не вижу.
Последний раз редактировалось Слимпер 21.08.2016{, 12:46}, всего редактировалось 1 раз.

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#7

Сообщение Musada » 21.08.2016{, 12:57}

Да, датчик буквально 50-100 миллисекундный импульс выдаёт. Выходной импульс самого блока-то не обязательно строить. Достаточно хоть на милисекунду "1" получить.. А как дальше с этой быстрой единицей быть - это уже таймерами я в проекте поизвращаюсь)) Я просто стремлюсь к минимализму и лишний код нежелателен.. Ну конечно, если сразу сделать импульс в пользовательском блоке - это буквально одна коротенькая строчечка, то почему-бы и нет? ))

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Блок пользователя для пьезодатчика

#8

Сообщение Слимпер » 21.08.2016{, 13:24}

Вот набросал блок на базе кода из первого сообщения. Должен выдавать одиночный импульс (т.е. на один программный цикл ).
Проверить смогу только вечером. Но может и так заработает.
Вложения
A_comparator-CO.ubi
(10.93 КБ) 85 скачиваний

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#9

Сообщение Musada » 21.08.2016{, 13:54}

Вот спасибыч!)) Правда я только сам вечером доберусь до Ардуинки.... И нужен импульс не на один программный цикл, а чтобы каждый раз импульсил, как вибрирует))

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Блок пользователя для пьезодатчика

#10

Сообщение Слимпер » 21.08.2016{, 16:45}

Проверил срабатывает.
Musada писал(а):И нужен импульс не на один программный цикл, а чтобы каждый раз импульсил, как вибрирует))
Похоже мы говорим на разных языках.
Сейчас блока при каждом замыкании контакта подает одиночный импульс. И следующий импульс появится только когда контакт разомкнется и замкнется снова.
Это соответствует тому как было в приведенном коде из первого  сообщения, там звук тоже издавался один раз.

И для начало проверь как это будет работать с реальным датчиком.

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#11

Сообщение Musada » 21.08.2016{, 22:21}

Понял. Благодарю ещё раз! Проверю всё - отпишу

Добавлено (21.08.2016, 22:21)
---------------------------------------------
Хныыыыы не добавляется((( Несколько раз пробовал((( FLProg 1.15

Изображение

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Блок пользователя для пьезодатчика

#12

Сообщение rw6cm » 21.08.2016{, 23:37}

все работает и с вибро и с пьезодатчиком.
Win10-64, FLProg (portable)

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Блок пользователя для пьезодатчика

#13

Сообщение Слимпер » 22.08.2016{, 05:50}

Musada писал(а):Хныыыыы не добавляется((( Несколько раз пробовал((( FLProg 1.15
Ну вот еще мини проект с этим блоком. Может копированием сможете перенести. 
Хотя специально проверил, нормально добавляется. Похоже у вас глюк. По пробуйте Портаельную версию
Вложения
ttttt.flp
(55.49 КБ) 82 скачивания

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#14

Сообщение Musada » 22.08.2016{, 11:15}

О пардон, на другом компе добавился. Скажите, а как чувствительность менять и пин входа? Просто я думал, что в FLProg можно будет от входа соединение кинуть до блока.. А тут он как-будто самостоятельный))

Добавлено (22.08.2016, 11:15)
---------------------------------------------
Как его сцепить-то с "Датчик вибрации PIN 2" ? )))

Изображение
Последний раз редактировалось Musada 22.08.2016{, 13:15}, всего редактировалось 1 раз.

Аватара пользователя
slavas
Лейтенант
Сообщения: 595
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 1
Откуда: Санкт-Петербург

Блок пользователя для пьезодатчика

#15

Сообщение slavas » 22.08.2016{, 13:28}

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

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#16

Сообщение Musada » 22.08.2016{, 14:39}

Понял, а чувствительность? ))

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Блок пользователя для пьезодатчика

#17

Сообщение Слимпер » 22.08.2016{, 14:54}

Musada писал(а):Скажите, а как чувствительность менять и пин входа?
Нет у компаратора чувствительности.
Он просто сравнивает два напряжения поданных на два разные входа (AIN0 и AIN1). Если на втором входе напряжение больше чем на первом то 1, в противном случаи 0.

Для изменения "чувствительности" надо изменить номинал напряжения поданного на вход  D6 AIN0(прямой вход).

Менять ПИН нельзя. Компаратор на ATMEGA328 один и он привязан в входам AIN0(прямой вход) D6 и AIN1(инверсный вход) D7.
slavas писал(а):Если не ошибаюсь компаратор жестко привязан к пину, а именно к AIN0.
Если судить по статьям то существует возможность оперируя регистрами в подключить AIN0 к внутреннему ИОН, а вход AIN1 также оперируя регистрами можно внутренне подключить к входу АЦП.
Но для меня это пока сложновато. Да и все равно компаратор будет один, просто будет использованы другие входа.
Последний раз редактировалось Слимпер 22.08.2016{, 15:36}, всего редактировалось 1 раз.

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#18

Сообщение Musada » 22.08.2016{, 21:59}

Прошу прощения, наверное дико тупую вещь спрошу... А к каким пинам подключать датчик и резистор? к A6 и A7 или D6 и D7 ? )))

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Блок пользователя для пьезодатчика

#19

Сообщение Слимпер » 23.08.2016{, 04:27}

Musada писал(а):А к каким пинам подключать датчик и резистор? к A6 и A7 или D6 и D7 ? )))
D6 и D7

Musada
Рядовой
Сообщения: 55
Зарегистрирован: 20.08.2016{, 22:42}
Репутация: 0
Откуда: мск

Блок пользователя для пьезодатчика

#20

Сообщение Musada » 27.12.2016{, 17:23}

Мужики, помогите пожалуйста, наконец дошли руки и собрал всё на встроенном компараторе точно так, как мусолили здесь.. Всё получилось, внешним переменным резистором теперь чувствительность настраиваю.. Но вот беда, ситуация не изменилась. Датчик срабатывает сам по себе иногда. Я подключил светодиодик, дублирующий сигналы пьезо (повесил его на D2). Тоесть если пьезо тронуть, то диод загорается на полсекунды и гаснет. Совершенно случайно, похоже обнаружил кое-чего... В момент наблюдения включился холодильник и диод моргнул. Я начал щёлкать автомат питания электропроводки в квартире. Вот оно - при выключении питания иногда мигает диод, а при подаче питания почти всегда мигает. Ардуинка запитана от сигнализации, которая сама питается через импульсник и имеет резервный аккумулятор - в связи с этим ардуинка питается бесперебойно, но каким-то макаром ловит наводки. Я отключил от ардуинки пьезо - ничего не меняется. Тоесть получается наводка идёт не через нежное пьезо. Подношу палец к D6 и D7 не касаясь - в радиусе примерно 3 мм от контактов, диод моргает. Помогите пожалуйста.. Как быть? Чувствительность грубить не вариант..

Добавлено (25.12.2016, 14:43)
---------------------------------------------
И ещё один вопрос, каким блоком можно в FLProg заставить мигать имеющиеся на плате диоды?

Добавлено (27.12.2016, 17:23)
---------------------------------------------
АПну, пожалуй.. Пути назад нет. Нужно доделать систему... Помогите
Последний раз редактировалось Musada 25.12.2016{, 14:35}, всего редактировалось 1 раз.

Ответить

Вернуться в «Прочие датчики и энкодеры»