Сделать подсчет оборота рулевого колеса.
- Войдите на сайт для отправки комментариев
Пт, 31/08/2012 - 11:40
Идея в том что нужно считать в каком положении находится рулвое колесо автомобиля. Проблема что колесо делает 1.75 оборота. каким образом можно реализовать подсчет??
не могу догнать как реализовать.
Нужно:
1 нетраль ниче не происходит.
Крутим руль - срабатывает 3 датчик загорается диод номер 1
Крутим руль - срабатывает 2 датчик все должно остаться без изминений
Крутим руль срабатывает 1 датчик (сделали 1 оборот руля) ничего не должно произойти диод горит дальше
Второй круг опять 3 датчик все без изминений
Второй круг 2 датчик все без изминений.
Когда руль прокрутится в обратною сторону в нетраль диод должен погаснуть.
Может кто нибудь подскажет как это програмно реализовать???
На кажду сработку датчика:
спасибо буду пробовать
спасибо буду пробовать
Лучше начните с "понять" :) Тогда если будут какие-то "шероховатости", то вы сможете их подпилить напильником, а не "ой, ничего не работает".
И пробовать можно начиная не с руля и холла, а просто подключив на столе три кнопки и нажимать их по очереди.
Что-бы было видно - можно натыкать Serial.print, выводить какой датчик сработал, какое значение каунтера и т.п.
Вообщем "изучить логику".
я так и собираюсь
я так и собираюсь
OK. Надеюсь - заработает :) . Скетч предполагает что кнопки подключены на пины 5,6,7 (можно поменять в первой строчке). Подключены: pin->кнопка->земля.
не проходит компелятор
'buttons_pins "не был объявлен в этой сфере
for(byte i=0;i<3;i++)digitalWrite(buttons_pins[i],HIGH);
(byte i=0;i<3;i++) если можно расшифруй а то я не доконца разобрался с этой строкой
не проходит компелятор
'buttons_pins "не был объявлен в этой сфере
Опечатался (набирал прямо на сайте). Квадратные скобки в третьей строке влепил не туда. Вот так правильно.
for(byte i=0;i<3;i++)digitalWrite(buttons_pins[i],HIGH);
(byte i=0;i<3;i++) если можно расшифруй а то я не доконца разобрался с этой строкой
Читаем документацию на for
Из этого понимаем, что это у нас цикл. Где i пробегает по значениям 0,1,2
На каждом шаге, для соотвествующего i, вынимается из массива buttons_pins номер пина (5,6,7) кнопки и делает этому пину включение подтяжки.
В массиве индексация в C/C++ начинается с нуля. Поэтому, на самом деле, везде в коде датчики имеет не "человечечкую" нумерацию, а "программерскую". То есть не "датчик1,датчик2,датчик3", а "датчик0,датчик1,датчик2"
то есть все эта строка в итоге сделает то же самое что и
Только в одну строчку.
не проходит компелятор
'buttons_pins "не был объявлен в этой сфере
И еще совет дам - прекращайте использовать рускоязычную IDE. Локализация хороша для секретарей и word-а, но крайне плохо для програмерских инструментов. Всяких слов в ошибках - не так уж и много встречается. Можно и словариком перевести (словариком, а не переводчиком). Через пару дней (или даже часов) будете уже без словаря пользоватся. Зато убережете себя от кучи проблем в будущем.
более менее догоняю. хотя циклы для меня темный лес см небольшим просветом. давно даж кнопки не подрубал елевспомник как включается. спасиб за помощь.
диод горит постоянно при нажатии на 5 контакт немного ярче при нажатии на 6 немного тускнее. 7 вообще бездействует
более менее догоняю. хотя циклы для меня темный лес см небольшим просветом. давно даж кнопки не подрубал елевспомник как включается. спасиб за помощь.
Тогда откладывайте все и возвращайтесь к чтению документации. Без 100% понимания, циклов, if-вов, типов переменных, работы digitalRead и digitalWrite - с ардуиной делать нечего :(
Ну или брать чужие примеры. И плакать почему они никогда не работают :) (есть тут такой персонаж).
диод горит постоянно при нажатии на 5 контакт немного ярче при нажатии на 6 немного тускнее. 7 вообще бездействует
Хм... дребезг? Но по идее он должен тут "самоподавлятся". Кнопки по очереди нажимаете, не одновременно? Контакты проверили? Сам скетч копировали или руками перенабирали?
копировал кнопки отсоеденил и отдельно каждую проверил. нажимаю по 1
более менее догоняю. хотя циклы для меня темный лес см небольшим просветом. давно даж кнопки не подрубал елевспомник как включается. спасиб за помощь.
Тогда откладывайте все и возвращайтесь к чтению документации. Без 100% понимания, циклов, if-вов, типов переменных, работы digitalRead и digitalWrite - с ардуиной делать нечего :(
Ну или брать чужие примеры. И плакать почему они никогда не работают :) (есть тут такой персонаж).
с if понятно. и чтением-записью цифровых портов тоже. просто проблема в том что иногда может например сработать датчик 1-3-2 иногда 1-3 иногда 1-3-2-1-3-2. но это еще пол беды. а вот если например 1-3-2-2-3-1 вот это загвоздка которую пока не могу понять
пока руль кручу в 1 сторону (влево вправо не важно все ясно) а вот когда возвращаю в исходное положение уже загвоздка
Да, похоже мой "кавалерийский наскок" обломался :( В логике явно есть проблемы.
Как минимум, при переходе от 7->5 должен уменьшать каунтер на 1, а не увеличивать на 2 :( (и в обратную сторону нужно такую же поправку на ветер делать).
Вторая проблема состоит в том, что при первой сработке датчика - мы не знаем куда крутится руль (соотвественно не знаем увеличивать или уменшать) :(
Если сделать "сразу зажигать", не дожидаясь пока станет ясным направление, то возникнет вопрос на такой серии 5-6-7-6-5 (?1) - 5 (?2) - 6 как должен вести себя диод в этот момент?
Если ?1 и ?2 должны дать разный результат, то нужно будет что-то мудрить с антидребезгом (множественные сработки одного сенсора могут означать "дребезг контакта" в момент включения/выключения).
Вообщем похоже задача не так проста, как мне показалось на первый вгляд. Но решаема. Разве что "чуток попозже" (если сами к тому времени не домучаете).
немножко переделал логику попозже скину фотку того какие показание получаются сделал схему для всех положений. Но воткнулся в проблему первого оборота. Пока не прошел полный цикл в любую сторону все нормально но как только прошел ровно 1 оборот то получается все данные опять равны 0 и ниче не горит возвращаемся туда откуда начали.. Это не допустимо.
"ровно один оборот" - так я же и говорил что нужно фиксать переход 7->5 и 5->7
Вот примерно так:
Получем такую серию (_) - 5(_) - 6(*) - 7 (*) -(пошли на второй круг) 5 (*) - 6(*) - 7(*) -(и назад первый)- 6(*) -5(*) (второй)- 7(*) - 6(*) - 5(_) - (продолажем) 7(*) - 6(*) -(возвращаемя) 7(*) - 5 (_)
(зведочка - горит, подчер - не горит
попробовал диод просто горит. Немного переделал схему .оставил 3 магнита и 2 датчика . Один датчик данные в проге +1 второй -1. Оборот нормально отрабатывается а вот на втором затупа в 0 точке так как данные получаются 0. Квадраты это датчики кружки магниты. Что делать на втором круге ума не приложу. может написать в проге "если значение больше 2 то второй датчик +" но тогда боюсь со второй стороной возникнут проблемы. Завтра напишу код посмотрю что из этого выйдет.
ððõõñððõõõñõõõõðððõúðñõðððêððñððõñððúððñðõððððððõððõõñðõõðððððððððõõõðððð
порт показывает вот это с вашим кодом.
ððõõñððõõõñõõõõðððõúðñõðððêððñððõñððúððñðõððððððõððõõñðõõðððððððððõõõðððð
порт показывает вот это с вашим кодом.
Это значит что у вас с Serial Port выставлена неправильная скорость. Либо там поменяйте на 57600 (нижний правый угол), либо в скетче строка 8 поставте ту сокрость что у вас выставлена.
а точно когда смотрел видел что большая стоит и что то забыл. поменял. счас в порт бомбит 1 при нажатии любой кнопки появляется + -1 при отпускании 1 диод горит все время
а почему бы не связать ползунковый потенциометр с рулевой рейкой (маятником) ?
всё отъюстировать и иметь 1024 значения положения рулевого колеса......
.
поставить пару магнит-геркон для нулевого положения рулколеса и энкодер (как в схеме определения положения коленвала) ?
.
Вы же не будете за рулём, в движении, - отслеживать угол поворота до срабатывания датчиков !!!!!!
Доробстановка - может не позволить !
Ну вообщем он и должен "это бомбить". Показывает куда крутитите. В одну сторону или другую.
Когда количество "1" совпадет с количество "-1" - диод погаснет (каунтер обнулится).
Вот вам вариант, в котором он сам имитирует нажатие кнопок, говорит какую нажал, чему стал равен счетчик и какое состояние диода
Вот его вывод:
Всяко так легче логику тестить :) Воспроизводить разнличные "тестовые последовательности" (менять массив testSerial[])
нужно сьемное устройство. потенциномер самое простое в исполнении програмно но очень проблематично в железе
как же система поймёт - где положение рулколеса=0 ?
заводиться, выставлять руль=0, жать кнопку ПОДТВЕРЖДЕНИЯ нуля, ехать ?
даааааа, всё в салоне нуно устанавливать......
под капотом - через неделю перестанет работать :(
чё за машинка ?
если сьемное то и руль в 0 и сбросить поблемы не будет всеравно ее ставить надо. на 1 действие больше. Руль в 0 и обнуление. потом мож поменяется . например 2 датчика одновременно сработали значит руль в 0
если сьемное то и руль в 0 и сбросить поблемы не будет всеравно ее ставить надо.
Ну вообщем-то сейчас самая первая сработка любого датчика и приводит как "считать этот положение нулем". Строка 3 "вывода теста".
Не согласен ! При включении бортовогоПитания (зажигания) - как система узнает, что мы парковались задком с рулём в крайнем левом положении ? Тут нужны датчики : направления вращения, промежуточные - для дискретизации положения руля.....
Если нуно отследить положение "0" - то необходимо 3....5.магнитиков и 3....5 герконов, чтобы перекрыть положение сруля 0+/-5 гр....
Хоть один сработал - положение "север" !!!!! - аналог полоски красной изоленты на сруле......
Герконы дешевле Холла....
Системой из трёх Холлов при диапазоне поворота сруля 1,75 - не решить...
Нет ? Не так ? :)
берем за основу что каждый раз мы будем выставлять руль в центральное положение перед тем как начать движение. Это для учебной машины делается а то часто курсанты начинают движение с вывернутыми колесами а для новичка это опасно.
Пока все уткнулось в то что проблематично снимать данные после 1 оборота и возвращать в 0
от нуля до крайнего левого ( правого ) положения - скока оборотов ?
я понял, что +/- 1,75 оборота....
курсанту не нуно же знать ПОЛОЖЕНИЕ РУЛЯ В УПРАВЛЯЕМОМ ЗАНОСЕ ? ...статус не тот !
так ?
Вы сказали - нуно знать положение руля в любой момент..... Зачем это курсанту ?
Пока все уткнулось в то что проблематично снимать данные после 1 оборота и возвращать в 0
Так в чем утык-то? Сообщение #30. Два оборота прокрутили в право, два в лево - "возвращать в 0" - получили.
Влево на полтора, вправо на полтора - "возвращать в 0" - получили.
от нуля до крайнего левого ( правого ) положения - скока оборотов ?
я понял, что +/- 1,75 оборота....
курсанту не нуно же знать ПОЛОЖЕНИЕ РУЛЯ В УПРАВЛЯЕМОМ ЗАНОСЕ ? ...статус не тот !
так ?
Вы сказали - нуно знать положение руля в любой момент..... Зачем это курсанту ?
А почему нет? Есть школы которые и экстремальному вождению учат. Курсанты они разные бывают. С разными статусами:) Да и обычного научить навыкам правильно руления - не мешает. А значит может потребоватся засекать "время руления".
А "совсем зеленый" может еще не уметь "выставлять колеса прямо стоя на месте". Вот тут, по всей видимости, диод-лампочка и нужен.
от нуля до крайнего левого ( правого ) положения - скока оборотов ?
я понял, что +/- 1,75 оборота....
курсанту не нуно же знать ПОЛОЖЕНИЕ РУЛЯ В УПРАВЛЯЕМОМ ЗАНОСЕ ? ...статус не тот !
так ?
Вы сказали - нуно знать положение руля в любой момент..... Зачем это курсанту ?
А почему нет? Есть школы которые и экстремальному вождению учат. Курсанты они разные бывают. С разными статусами:) Да и обычного научить навыкам правильно руления - не мешает. А значит может потребоватся засекать "время руления".
А "совсем зеленый" может еще не уметь "выставлять колеса прямо стоя на месте". Вот тут, по всей видимости, диод-лампочка и нужен.
не в любой момент а знать куда выкручены колеса вправо или влево и все. Возможно вы меня неправильно поняли. два диода должно гореть 1 когда руль влево 2 когда руль вправо
пока не догоняю то что вы мне подсказали как организовано на програмном уровне??
сделали например 3 влево - обратно 3 вправо стало в 0 ??? а как определяется что пошло в обратную сторону7
я и хочу вытянуть техническое задание :)
до какой степени нужна точность ?
leshak - Вы согласны со схемой для чайников ? зона - почти 0, зона - ЛЕВЕЕ, зона - ПРАВЕЕ.....
ТУТ - ардуина не нужна... Так ?
не в любой момент а знать куда выкручены колеса вправо или влево и все. Возможно вы меня неправильно поняли. два диода должно гореть 1 когда руль влево 2 когда руль вправо
Вы скетч из сообщения #30 пробовали?
Да даже пробовать не нужно. Даже по выводу который я привел в посте все видно. Разве там не видно куда колеса повернуты? Строки вывода с 04 по 22. Counter - положительный. колеса повернуты в одну сторону (ну право или лево - уже как датчики подключите). Строки с 27 по 39 - coutner отрицательный. Значит колеса вывернуты в другую сторону.
Если мы хотим не один диод типа "колеса повернуты", а два диода "повернуты вправо" и "повернуты влево", на значит тупо заменяем (или добавляем если хотим три диода).
на
Ну, естественно, эти два диода нужно подключить, объявить и открыть на выход (аналогично тому как сейчас сделать для LED).
а професси - не будет смотреть на светодиоды, слушать пищалку, смотреть на стрелку положения руля......
у него прямое считывание от вестибулярки в мозг с управлением на руки! :)
....нууууу, изоленту мотнёт на руле - обозначив СЕВЕР :)
Protez1999 - устроит индикация - почти ноль, 30 гр левее, 30 гр правее ?
для юстировки системы необходимо крутить руль для перехода через север.....
...что на стоячей машинке вредит гидроусилителю и чуть-чуть шинам :(
а раз покрутили - и выставили север визуально - зачем вся система нужна ?
на скорости более 20 км/ч - положение руля уже фиксирует мозг, зачем здесь-то уже анализировать ?!!!!!
я - за пропорциональное отображение положения руля !
...это сгодится уже для ВСЕХ !!!!! ....ОСОБЕННО - на льду
leshak всё правильно программно решил - апплодирую !!!!!!!! всё красиво....
...но - зачем ? :(
а професси - не будет смотреть на светодиоды, слушать пищалку, смотреть на стрелку положения руля......
у него прямое считывание от вестибулярки в мозг с управлением на руки! :)
....нууууу, изоленту мотнёт на руле - обозначив СЕВЕР :)
Protez1999 - устроит индикация - почти ноль, 30 гр левее, 30 гр правее ?
устроит. диоды только при троганьи
не в любой момент а знать куда выкручены колеса вправо или влево и все. Возможно вы меня неправильно поняли. два диода должно гореть 1 когда руль влево 2 когда руль вправо
Вы скетч из сообщения #30 пробовали?
Да даже пробовать не нужно. Даже по выводу который я привел в посте все видно. Разве там не видно куда колеса повернуты? Строки вывода с 04 по 22. Counter - положительный. колеса повернуты в одну сторону (ну право или лево - уже как датчики подключите). Строки с 27 по 39 - coutner отрицательный. Значит колеса вывернуты в другую сторону.
Если мы хотим не один диод типа "колеса повернуты", а два диода "повернуты вправо" и "повернуты влево", на значит тупо заменяем (или добавляем если хотим три диода).
на
Ну, естественно, эти два диода нужно подключить, объявить и открыть на выход (аналогично тому как сейчас сделать для LED).
каким образом я могу его попробовать простите за глупый вопрос
нуууууу, если устроит, мона сделать так.....
- гирлянда Холлов (параллельно) в секторе +/- 5 гр ( С ПЕРЕКРЫТИЕМ СРАБЫТЫВАНИЯ )
- .................................................................................. в секторе -6.....-30 гр
- .................................................................................. в секторе +6.....+30 гр
- один магнит
- транзисторы, резисторы
- один трёхцветный светодиод
без Ардуины - рублей в 800 - мона уложиться на каждую машинку