Датчик препятствий и серво(бесполезная коробка)
- Войдите на сайт для отправки комментариев
Вс, 12/07/2015 - 21:54
Хэлп ми, в смысле мозг кипит и словил цикл %
собираю бесполезную коробку, хочу добавить движение (после того, как включить тумблер):
"Рычаг медленно чуть вылазит о останавливается (крышка приоткрыта так, что бы ИК-датчик видел тумблер), и ждёт. Если есть движение к тумблеру, то рычаг быстро выключает его; если движения нет минуту - то медленно выключает тумблер и медленно прячется".
суть проблемы:
ИК датчик(555 таймер+TSOP1738) включен постоянно, следовательно подаёт сигнал будучи в коробке. Никак не могу его на время пребывания в коробке(и после срабатывания) деактивировать.
как-то так
кто нибудь понял?
а что тут понимать?
вроде всё по-русски, запятые на месте.
суть проста и непонятна - датчик препятствий, практически постоянно выдавая "0", херит такую хорошую(я про задуманное движение в "бесполезной коробке") идею.
или я не понял что ты не понял?=)
...как вариант, запуск 555 таймера(который генерит 38кГц на светолиод) по сигналу с Ардуины.
1 бит надо поменять с 3им, так как разводка не позовола сделать иначе. хардварный spi решил не использовать, скорости отрисовки итак хватает. в целом все хорошо, но либо размер поменять либо расстояние
вопрос: так как динамическая индикация, как точно ловить время между импульсами без прерываний, так как изза длительности кода от delay(2) отказываться не стоит
я знаю о чем я, так как сам писал код и делал устройство. ты нет. сможешь ответить на вопрос?
так ты из ЭТИХ?! о_О...
вопросом на вопрос которые отвечают ))))
причём тут кто код писал?
есть проект - "бесполезная коробка" (надеюсь слышал про таке?). там есть всякие движения рычага, выключающего тумблер.
вот я и хочу разнообразить эти движения, введя реагирование на руку человека.
алгоритм простой:
1. включили тумблер (обычно рычаг его выключает сразу или после каки-то движений или ожидания).
2. рычаг, выключающий тумблер, медленно вылазит на половину (т.е. крышка приоткрывается) и останавливается.
3. на крышке, изнутри, висит датчик препятствия, "смотрящий" на тумблер.
4. как только человек тянет руку к тумблеру (ведь никакой реакции кроме как полуоткрытая крышка не последовало), то рычаг быстро выключает тумблер и прячется в коробку.
5. крышка закрывается.
так вот, проблема в том, что датчик всё время щупает пространство и когда он в коробке то реагирует на всё и даёт команду на серву, которая дергается.
т.е. датчик надо мне как-то включать только при открытой крышке и до выключения тумблера.
а вот оно что. я должен погуглить чтобы узнать о чем ты, чтобы понять о чем ты пишешь
а я то думал что это тебе нужно больше
почитай
http://arduino.ru/forum/obshchii/sozdanie-temy#comment-75012
н-дя...
Puhlyaviy до пары не хватает =)
я даже немного разочарован
забей.
я сильнее разочарован
http://frivolousengineering.com/
Была, была с датчиком : сначала работала быстро, а потом открывала крышку и ждала...
Дёргалась, вроде дразнила, руку подносили- резко хлопала тумблером.
Это не та, но ближе: https://www.youtube.com/watch?v=apVR5Htz0K4
по-тихоньку разобрался сам: надо вводить дополнительные условия
по-тихоньку разобрался сам: надо вводить дополнительные условия
Вы просто замечательно описали алгоритм, скетч просто супер, а схема простенькая, такую каждый знает. Вобщем я вообще не понимаю, что тут может не работать!? Ну разве что спиртом плату протиреть, можено пальцами пощелкать, вдруг скорости не хватает...
А про дополнительные условия Вы погорячились, я вот просматриваю скетч - думаю это лишнее, алгоритму соответствовать не будет. Ну или меняйте алгоритм работы.
ну как-то так, чего не понятно?
Гриша, алгоритм описан нормально. Что не понятно?
Схему я не выкладывал, ибо вопрос не в ней - там всё ОК (но если кому надо выложу).
Скетч кто-то спрашивал? Нет, кстати, вот он:
теперь проблема в другом - при повторном включении тумблера происходит просто выключение оного без всяких фокусов (((
[quote=karl2233]
Скетч кто-то спрашивал?
теперь проблема в другом - при повторном включении тумблера происходит просто выключение оного без всяких фокусов (((
quote]
вы его сами должны были выложить....
повторное выключение включенного тумблера - значит коробочка устала от вашего кода и хочет спать.....
....может быть вы в коде прописали коробочке интеллект ?
н-дя...
Puhlyaviy до пары не хватает =)
jeka_tm к нему зачем присоединили ?
- похвала ????
- фееееее ????
изначально вопрос был скорее теоретический - "как".
теперь перешел в сторону практики.
результат - одинаков :) что с кодом, что без. так что разницы нет, как понимаю, можно было и не спрашивать =)
https://www.youtube.com/watch?v=apVR5Htz0K4
классная версия !!!!!!!!!!!!!!!!!
:)
версия класная, но код....
как для начинающего(я про себя) это нереально
изначально вопрос был скорее теоретический - "как".
результат - одинаков :) что с кодом, что без. так что разницы нет, как понимаю, можно было и не спрашивать =)
вам же ответили нормальные люди - "так" , "сяк" , или "этак"
.....можно и не спрашивать :(
или спросить по другому ?
как для начинающего(я про себя) это нереально
да , наверное.....
и это повод наехать на Жеку и Пухлявого ?
...ждите Дохтура тогда. У его есть пилюли..... в рифму....
Да чтож ты мне спокойно поболеть не даешь!
Вот привязался!
предлагаю начать сначала . сначала описать проблему как здесь описано
http://arduino.ru/forum/obshchii/sozdanie-temy#comment-75012
но не скрывая. если проблема возможно касается схемы нужна схема, конкретная железка - ссылка на него
и по работе конкретно: как работает и что хочется получить подробно!!! в чем конкретно проблема
Да чтож ты мне спокойно поболеть не даешь!
Вот привязался!
яяяяяяяя ??????????????????
дай таблетку-антидот ! а то прописал хер знает что и забыл ( или забил ? ) , а мине клизмы типеричя снятся ардуированные.....
выздоравливай ! конечно же ! :)
тема, за бесполезностью, закрыта.
всем спасибо, все свободны (с)
з.ы. заболевшим - выздоровления!
:)
karl2233, вроде форум читали, а вопросы задаете как новечек... вот поставьте себя на наше место и перечитайте топик - я Вас уверяю в самом начеле (кроме самой идеи) никакой информации по существу вопроса, и только в 13м посте явился код!!! и сразу вопрос - это весь код? он в LOOP?
что со строкой 25 и 27 - previousMillis - там точно все ровно?
какие переменные ключевые? посмотрите их в порте и поставте delay() это поможет понять в какой момент в переменной появляется не нужное значение - дебагте пошагово
это от нервов....
и куда он придёт ? после "дебагте пошагово" ?
:(
это от нервов....
и куда он придёт ? после "дебагте пошагово" ?
:(
не вкурил сарказма :) есть логика работы, есть переменные... мы умеем на компьютере смотреть значение этих переменных в ключевых местах? или сарказм был про каждый шаг? мы ожидаем увидеть систему в каком-то состоянии = значение переменных, вот их и нужно смотреть. Ну особо профи могут и без этого, но для этого нужен опыт.
Гриша, вопрос был "Никак не могу его на время пребывания в коробке(и после срабатывания) деактивировать."
так что суть была в какой-то, неизвестной мне команде (если, конечно, таковая существует в природе).
что касательно кода - решил писать его заново (хе-хе).
теперь проблемы возникают по ходу действа ))))
Теперь проблема выглядит так:
1. когда включаю тумблер (датчику искусственно показываю что препятсвий нет) то рычаг медленно выходит приоткрывая крышку и останавливается.
2. потом я перед датчиком ставлю руку, рычаг быстро выключает тумблер и НЕ возвращается в исходное положение(ИП), т.е. не прячется в коробку.
3. если в п.1. на датчике есть сигнал (а он будет, ибо замкнутое пространствов коробке) то при включении тумблера рычаг быстро выключает тумблер и НЕ возвращается в ИП.
таким образом, вопрос состоит в том, что бы:
1. когда крышка закрыта (датчик в коробке) он не реагировал на препятсвие.
2. как вернуть рычаг обратно (т.е. систему в исходное положение )))))
*мантру "рычаг вернись" и земные поклоны делал, в бубен бил = результата нет*
что со строкой 25 и 27 - previousMillis - там точно все ровно?
вот код установок
вот что подумал:
1. если сенсор подключать к пину именно тогда, когда он нужен( т.е. команду для него "void setup" давать после приподнятия крышки, а потом давать команду на отключение?
...вот и вернулось всё на круги своя )))))
а датчик то какой? ик?
короче 2 варианта: если ик отключать ик диод пока внутри или добавить флаг, что если отдали команду закрыть крышку флаг=1, если крышка открыта=0
а в обработке датчика добавить условие что если флаг=0 и сработал датчик то делать .....
jeka_tm, датчик на компараторе (или на 555), не суть.
главное что в исходном состоянии на выходе лог "1", когда есть препятствие лог "0".
подключить датчик я смог, а вот отключить его или управлять его включением не понимаю как.
не суть? то спрашиваешь что делать, как отключить датчик, но не говоришь что за датчик. ну дело твое
говорил уже: добавить флаг, переменная boolean у которой 2 состояния возможных. ты же знаешь по программе крышка сейчас открыта или нет, хотя бы по положению сервы. двойное условие не проблема сделать, пишется через &&
не совсем понял про условие, вернее куда (в установки? в движение?) его добавить.
аа! в установки. вначале задаю условие что "труе", а что "фальш", потом оперирую ими.
хорошо.
но к чему (рычаг? крышка? ИК-датчик? положение сервы?) привязать эти значения?
к рычагу - никак, нет там датчиков, а вешать ещё один - это не кошерно ))
к сигналу ИК-датчика - так он привязан к порту и на его выходе или "0" или "1", тут скорее надо отвязывать.
остаётся положение сервы (ну когда она рычагом приподняла крышку)?
ну так опять станет вопрос - "как сделать так, что бы ДО приподнятия крышки на датчик никто не реагировал".
...или я не понял
начните с простого, написать прогу которая буде при отсутствии руки (препятствия) открывать крышку, выключать тумблер, закрывать крышку, но если тумблер выключен ничего не происходит... если я правильно понял...потом ее можно будет усовершенствовать... т.е. пока обычные if , else
ИМХО, начинать нужно с простого, а потом наворачивать или я невнимательно прочитал... завтра будет время почитаю...
начните с простого, написать прогу которая буде при отсутствии руки (препятствия) открывать крышку, выключать тумблер, закрывать крышку
уже, даж вопросы появились ))))
...в общем, думаю управлять через питание(МК-инвертор-мосфет-датчик), коряво конечно, но иное не позволяют имеющиеся у меня знания Ардуино.
не совсем понял про условие, вернее куда (в установки? в движение?) его добавить.
аа! в установки. вначале задаю условие что "труе", а что "фальш", потом оперирую ими.
хорошо.
но к чему (рычаг? крышка? ИК-датчик? положение сервы?) привязать эти значения?
к рычагу - никак, нет там датчиков, а вешать ещё один - это не кошерно ))
к сигналу ИК-датчика - так он привязан к порту и на его выходе или "0" или "1", тут скорее надо отвязывать.
остаётся положение сервы (ну когда она рычагом приподняла крышку)?
ну так опять станет вопрос - "как сделать так, что бы ДО приподнятия крышки на датчик никто не реагировал".
...или я не понял
например открытая крышка у тебя 90 градусов. а сейчас она закрыта и например 70 градусов
если ты отдал команду серве повернуть до 90 градусов ты можешь считать что серва свое дело сделает и крышка будет открыта? флаг=0
если отдал команду на 70 градусов считаем что крышка закрыта флаг=1
польза от кукурузы понятна, но не понятно что такое кукуруза(с)
можно пример с флагом? а то я что-то не совсем понял как его применить.
но идея здравая, спасибо.
например датчик сработал на выходе 1, в другом случае 0
добавляем флаг в условие
или более короткая запись
спасибо.
можно пояснить что происходит в программе, когда добавляется этот флаг?
и, если у меня активный "0"(когда есть препятствие), то короткая форма мне не подходит, верно? надо прописывать"sensor == 0", да?
получается что мне надо что-то типа:
возникает вопрос - как можно указать любое положение сервы после реагирования и до наступления нового цикла?
суть вот в чём:
1. в исходном положении датчик в коробке и программа должна его игнорировать.
2. когда серва в указанном положении, датчик флагом включается, программа реагирует.
3. далее датчик надо опять отключить(ведь серва возвращатся будет через то же самое положение!).
4. но после возврата в ИП, система должа какбы обнулится.
если я правильно понимаю логику работы с "flag", то надо его включать после того, как серва приняла указанное положение и выключать при поступлении сигнала с датчика, после отдачи команды на серву для выключения тумблера.
2 и 3 запись это одно и тоже. пиши как нравится или понятнее. я раньше и иногда сейчас чтобы бросалось в глаза пишу flag==1
положение сервы ты не можешь знать, но как только отдал команду серве можно считать с этого момента что например дверь закрылась, в реальности она еще закрывается. но так как в эти моменты работа сенсора будет нестабильна лучше их не использовать
единственное когда отдашь команду на открытие нужен delay(200) например чтобы успела открыться крышка, а потом уже flag=0
flag нужен для того чтобы его запихнуть в условие, он показывает дверца открыта или нет. и если закрыта добавление flag в условие обработки датчика не даст программе реагировать на сенсор
короче flag=1 как только отдашь команду на закрытие а потом delay(200) чтобы подождать пока закроется
flag=0 после того как отдашь команду открыть и подождешь delay(200) чтобы подождать пока откроется
karl2233, не знаю, читали Вы или нет этот топик
код в обсуждении :)
jeka_tm
спасибо за доходчивое пояснение!
karl2233, не знаю, читали Вы или нет этот топик
код в обсуждении :)
ОООООООООО! это то что надо!
огроменное спасибо! и как это я мимо прошел!?
я на основе этого проекта и делаю, по итогу код слегонца упростил, причесал и теперь по-новой переписываю в виду поставленной задачи :)
SU-27-16, нашел свои перлы дебага :)))))))))
....
и куда он придёт ? после "дебагте пошагово" ?
:(
вот шедевр изваращения с кодом (мои первые шаги, хорошая привычка ничего не удалять) один сплошной дебаг, кому интересно скомпилите:
ЗЫ. все самое интересное в loop
открыл для себя хорошую книгу
сварганил простецкий датчик tsop1738+ИК светодиод управляемый МК(генерит 38кГц и смотрит за приёмником).
вопрос:
можно ли после запуска программы ("loop") внутри запустить ещё один "loop"? и как потом этот второй остановить по наступлению события?
например(я всё про коробку, ибо в той теме автор не отвечает, видимо мало кому интересно):
1. идёт основная программа (система в ожидании воздействия на тумблер).
2. включили тумблер.
3. серво приняло среднее (не ИП и не такое, при котором тумблер выкл) положение.
4. запустился второй "loop" внутри которого крутится программа (генерация импульсов частотой 38кГц) управления ИК датчиком и приёмником.
5. пришел сигнал на ИК приёмник. этот сигнал дал команду серве на выключение тумблера. и вот тут нужно остановить второй "loop" что бы датчик не реагировал.
6. когда система вернётся в ИП(п.1), то всё повторяется.
ээээ. а чем не нравится простой if?
датчик, когда в коробке будет реагировать на замкнутое пространство (оно же препятсвие).
поэтому датчик надо включать тогда, когда крышка приоткрыта, а когда сигнал пришел или крышка закрыта, то надо его отключить.
или я не понял? )
if(чегототам) {
делай раз
} else {
делай два
}
И зачем тут еще один луп?
хм... спасибо.
а в принцепе, второй loop внутри первого возможен?