Сделать подсчет оборота рулевого колеса.

Protez1999
Offline
Зарегистрирован: 08.07.2012

Идея в том что нужно считать в каком положении находится рулвое колесо автомобиля.  Проблема что колесо делает 1.75 оборота. каким образом можно реализовать подсчет??

[URL=http://imageshack.us/photo/my-images/685/30363216.jpg/][IMG]http://img685.imageshack.us/img685/9863/30363216.jpg[/IMG][/URL]
 

Protez1999
Offline
Зарегистрирован: 08.07.2012

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

не могу догнать как реализовать.

Нужно:

1 нетраль ниче не происходит.

Крутим руль - срабатывает 3 датчик  загорается диод номер 1

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

Крутим руль срабатывает 1 датчик (сделали 1 оборот руля) ничего не должно произойти диод горит дальше

Второй круг опять 3 датчик все без изминений

Второй круг 2 датчик все без изминений.

Когда руль прокрутится в обратною сторону в нетраль диод должен погаснуть.

Может кто нибудь подскажет как это програмно реализовать???

leshak
Offline
Зарегистрирован: 29.09.2011

 На кажду сработку датчика:

  1.  запоминаем номер сработавшего датчика.
  2.  Берем разницу между "прошлым сработавшим и текущим". Получится или 1 или -1 (смотря куда крутим). 
  3.  Эта разницу прибавляем к какой-то "пременной счетчику". За каждый оборот она будет либо увеличиватся на 3, либо уменшаться на -3 (смотря куда крутим).
  4. Когда "счетчик" не равен нулю - диод светится. Когда равен - гасим.

 

leshak
Offline
Зарегистрирован: 29.09.2011

 

#define LED 13

byte[] buttons_pins={5,6,7} ; // пины на которых датчик
byte prev=0;
int counter=0;

void setup(){
  for(byte i=0;i<3;i++)digitalWrite(buttons_pins[i],HIGH);// включили подтяжку на датчики

  pinMode(LED,OUTPUT);
}

// нужно вызывать эту функцию на сработку каждого датчика, параметром 
// передавать номер сработавшего датчика
void weel_handler(byte current){
  counter+=current-prev;
  prev=current;
  digitalWrite(LED,counter!=0);
}

void loop(){
  // опрашиваем датчики
  for(byte i=0;i<3;i++){
    if(!digitalRead(buttons_pins[i]))weel_handler(i); // если нужно вызываем обработчик
  }
}

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

 спасибо буду пробовать

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

 спасибо буду пробовать

Лучше начните с "понять" :) Тогда если будут какие-то "шероховатости", то вы сможете их подпилить напильником, а не "ой, ничего не работает".

leshak
Offline
Зарегистрирован: 29.09.2011

 И пробовать можно начиная не с руля и холла, а просто подключив на столе три кнопки и нажимать их по очереди.

Что-бы было видно - можно натыкать Serial.print, выводить какой датчик сработал, какое значение каунтера и т.п.

Вообщем "изучить логику".

Protez1999
Offline
Зарегистрирован: 08.07.2012

 я так и собираюсь

leshak
Offline
Зарегистрирован: 29.09.2011

 

Protez1999 пишет:

я так и собираюсь

OK. Надеюсь - заработает :) . Скетч предполагает что кнопки подключены на пины 5,6,7 (можно поменять в первой строчке). Подключены: pin->кнопка->земля.

Protez1999
Offline
Зарегистрирован: 08.07.2012

 не проходит компелятор 

'buttons_pins "не был объявлен в этой сфере

Protez1999
Offline
Зарегистрирован: 08.07.2012

 for(byte i=0;i<3;i++)digitalWrite(buttons_pins[i],HIGH);

(byte i=0;i<3;i++) если можно расшифруй а то я не доконца разобрался с этой строкой

leshak
Offline
Зарегистрирован: 29.09.2011

 

Protez1999 пишет:

не проходит компелятор

'buttons_pins "не был объявлен в этой сфере

Опечатался (набирал прямо на сайте). Квадратные скобки в третьей строке влепил не туда. Вот так правильно.

byte buttons_pins[]={5,6,7} ; // пины на которых датчик

 

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

 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"

то есть все эта строка в итоге сделает то же самое что и

digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);

Только в одну строчку.

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

 не проходит компелятор 

'buttons_pins "не был объявлен в этой сфере

И еще совет дам - прекращайте использовать рускоязычную IDE. Локализация хороша для секретарей и word-а, но крайне плохо для програмерских инструментов. Всяких слов в ошибках - не так уж и много встречается. Можно и словариком перевести (словариком, а не переводчиком). Через пару дней (или даже часов) будете уже без словаря пользоватся. Зато убережете себя от кучи проблем в будущем.

Protez1999
Offline
Зарегистрирован: 08.07.2012

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

Protez1999
Offline
Зарегистрирован: 08.07.2012

 диод горит постоянно при нажатии на 5 контакт немного ярче при нажатии на 6 немного тускнее. 7 вообще бездействует

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

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

Тогда откладывайте все и возвращайтесь к чтению документации. Без 100% понимания, циклов, if-вов, типов переменных, работы digitalRead и digitalWrite - с ардуиной делать нечего :(

Ну или брать чужие примеры. И плакать почему они никогда не работают :)  (есть тут такой персонаж).

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

 диод горит постоянно при нажатии на 5 контакт немного ярче при нажатии на 6 немного тускнее. 7 вообще бездействует

Хм... дребезг? Но по идее он должен тут "самоподавлятся". Кнопки по очереди нажимаете, не одновременно? Контакты проверили? Сам скетч копировали или руками перенабирали?

Protez1999
Offline
Зарегистрирован: 08.07.2012

 копировал кнопки отсоеденил и отдельно каждую проверил. нажимаю по 1

Protez1999
Offline
Зарегистрирован: 08.07.2012

leshak пишет:

Protez1999 пишет:

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

Тогда откладывайте все и возвращайтесь к чтению документации. Без 100% понимания, циклов, if-вов, типов переменных, работы digitalRead и digitalWrite - с ардуиной делать нечего :(

Ну или брать чужие примеры. И плакать почему они никогда не работают :)  (есть тут такой персонаж).

с if понятно. и чтением-записью цифровых портов тоже. просто проблема в том что иногда может например сработать датчик 1-3-2 иногда 1-3 иногда 1-3-2-1-3-2. но это еще пол беды. а вот если например 1-3-2-2-3-1 вот это загвоздка которую пока не могу понять

Protez1999
Offline
Зарегистрирован: 08.07.2012

 пока руль кручу в 1 сторону (влево вправо не важно все ясно) а вот когда возвращаю в исходное положение уже загвоздка

leshak
Offline
Зарегистрирован: 29.09.2011

Да, похоже мой "кавалерийский наскок" обломался :( В логике явно есть проблемы.

 

 Как минимум, при переходе от 7->5 должен уменьшать каунтер на 1, а не увеличивать на 2 :(  (и в обратную сторону нужно такую же поправку на ветер делать).

Вторая проблема состоит в том, что при первой сработке датчика - мы не знаем куда крутится руль (соотвественно не знаем увеличивать или уменшать) :(

Если сделать "сразу зажигать", не дожидаясь пока станет ясным направление, то возникнет вопрос на такой серии 5-6-7-6-5 (?1) - 5 (?2) - 6 как должен вести себя диод в этот момент?

Если ?1 и ?2 должны дать разный результат, то нужно будет что-то мудрить с антидребезгом (множественные сработки одного сенсора могут означать "дребезг контакта" в момент включения/выключения).

 

Вообщем похоже задача не так проста, как мне показалось на первый вгляд. Но решаема.  Разве что "чуток попозже" (если сами к тому времени не домучаете). 

Protez1999
Offline
Зарегистрирован: 08.07.2012

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

leshak
Offline
Зарегистрирован: 29.09.2011

 "ровно один оборот" - так я же и говорил что нужно фиксать переход 7->5 и 5->7

Вот примерно так:

#define LED 13

byte buttons_pins[]={5,6,7} ; // пины на которых датчик
byte prev=0;
int counter=0;

void setup(){
  Serial.begin(57600);
  for(byte i=0;i<3;i++)digitalWrite(buttons_pins[i],HIGH);// включили подтяжку на датчики

  pinMode(LED,OUTPUT);
}

// нужно вызывать эту функцию на сработку каждого датчика, параметром 
// передавать номер сработавшего датчика
void weel_handler(byte current){
  int delta=current-prev;
  
  // фиксам переходы "через круг".
  if(abs(delta)>1)delta=-abs(delta)/delta;

  if(delta){ // что-то делаем только при изменении
    counter+=delta; 
    Serial.println(delta); // выводим что-бы видеть что происходит
    prev=current;
    digitalWrite(LED,counter!=0);
  }
}

void loop(){
  // опрашиваем датчики
  for(byte i=0;i<3;i++){
    if(!digitalRead(buttons_pins[i]))weel_handler(i); // если нужно вызываем обработчик
  }
}

Получем такую серию (_) - 5(_) - 6(*) - 7 (*) -(пошли на второй круг) 5 (*) - 6(*) - 7(*) -(и назад первый)- 6(*) -5(*)  (второй)- 7(*) - 6(*) - 5(_) - (продолажем)  7(*) - 6(*) -(возвращаемя)  7(*) - 5 (_)

(зведочка - горит, подчер - не горит

Protez1999
Offline
Зарегистрирован: 08.07.2012

 попробовал диод просто горит. Немного переделал схему .оставил 3 магнита и 2 датчика . Один датчик  данные в проге +1 второй -1. Оборот нормально отрабатывается а вот на втором затупа в 0 точке так как данные получаются 0. Квадраты это датчики кружки магниты. Что делать на втором круге ума не приложу. может написать в проге "если  значение больше 2 то второй датчик +" но тогда боюсь со второй стороной возникнут проблемы. Завтра напишу код посмотрю что из этого выйдет.

Protez1999
Offline
Зарегистрирован: 08.07.2012

 ððõõñððõõõñõõõõðððõúðñõðððêððñððõñððúððñðõððððððõððõõñðõõðððððððððõõõðððð
порт показывает вот это с вашим кодом.

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

 ððõõñððõõõñõõõõðððõúðñõðððêððñððõñððúððñðõððððððõððõõñðõõðððððððððõõõðððð
порт показывает вот это с вашим кодом.

Это значит что у вас с Serial Port выставлена неправильная скорость. Либо там поменяйте на 57600 (нижний правый угол), либо в скетче строка 8 поставте ту сокрость что у вас выставлена.

Protez1999
Offline
Зарегистрирован: 08.07.2012

 а точно когда смотрел видел что большая стоит и что то забыл. поменял. счас в порт бомбит 1 при нажатии любой кнопки появляется + -1 при отпускании 1 диод горит все время

#define LED 13

byte buttons_pins[]={5,6,7} ; // пины на которых датчик
byte prev=0;
int counter=0;

void setup(){
  Serial.begin(9600);
  for(byte i=0;i<3;i++)digitalWrite(buttons_pins[i],HIGH);// включили подтяжку на датчики

  pinMode(LED,OUTPUT);
}

// нужно вызывать эту функцию на сработку каждого датчика, параметром 
// передавать номер сработавшего датчика
void weel_handler(byte current){
  int delta=current-prev;
  
  // фиксам переходы "через круг".
  if(abs(delta)>1)delta=-abs(delta)/delta;

  if(delta){ // что-то делаем только при изменении
    counter+=delta; 
    Serial.println(delta); // выводим что-бы видеть что происходит
    prev=current;
    digitalWrite(LED,counter!=0);
  }
}

void loop(){
  // опрашиваем датчики
  for(byte i=0;i<3;i++){
    if(!digitalRead(buttons_pins[i]))weel_handler(i); // если нужно вызываем обработчик
  }
}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а почему бы не связать ползунковый потенциометр с рулевой рейкой (маятником) ?
всё отъюстировать и иметь 1024 значения положения рулевого колеса......
.
поставить пару магнит-геркон для нулевого положения рулколеса и энкодер (как в схеме определения положения коленвала) ?
.
Вы же не будете за рулём, в движении, - отслеживать угол поворота до срабатывания датчиков !!!!!!
Доробстановка - может не позволить !

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну вообщем он и должен "это бомбить". Показывает куда крутитите. В одну сторону или другую.

Когда количество "1" совпадет с количество "-1" - диод погаснет (каунтер обнулится).

Вот вам вариант, в котором он сам имитирует нажатие кнопок, говорит какую нажал, чему стал равен счетчик и какое состояние диода

#define LED 13

#define RUN_TEST  // закоментируйте эту строку что-бы отключить тесты

byte buttons_pins[]={5,6,7} ; // пины на которых датчик
byte prev=0;
int counter=0;

void setup(){
  Serial.begin(57600);
  for(byte i=0;i<3;i++)digitalWrite(buttons_pins[i],HIGH);// включили подтяжку на датчики

  pinMode(LED,OUTPUT);

#ifdef RUN_TEST
 startTest();// имитируем нажатие кнопок
#endif
}

// нужно вызывать эту функцию на сработку каждого датчика, параметром 
// передавать номер сработавшего датчика
void weel_handler(byte current){
  int delta=current-prev;
  
  // фиксам переходы "через круг".
  if(abs(delta)>1)delta=-abs(delta)/delta;

  if(delta){ // что-то делаем только при изменении
    counter+=delta; 
    
#ifndef RUN_TEST    
    Serial.println(delta); // выводим что-бы видеть что происходит
#endif

    prev=current;
    digitalWrite(LED,counter!=0);
  }
}

void loop(){
  // опрашиваем датчики
  for(byte i=0;i<3;i++){
    if(!digitalRead(buttons_pins[i]))weel_handler(i); // если нужно вызываем обработчик
  }
}

/*********************** Тестирование, имитация нажатия кнопок**********************************/
#ifdef RUN_TEST
#define LINE 111
byte testSerial[]={  // массив задающий в коком порядке имитировать нажатие кнопок 0 - PIN5, 1 - PIN6, 2 - PIN7,  111 - вывести разлелитель (для облегчения чтения лога)

                 // три оборота в "прямую сторону"
                 0,1,2,
                 0,1,2,
                 0,1,2,                 
                 
                 LINE+1, // разделитель, для облегчения чтения лога
                 
                 // три обора "в обратную"
                 2,1,0,
                 2,1,0,
                 2,1,0,
                 
                 LINE+2, // разделитель, для облегчения чтения лога
                 
                 // "полтора" в обратую
                 2,1,0,
                 2,1,
                 
                 LINE+3, // разделитель, для облегчения чтения лога
                 
                 // и в прямую
                 1,2, // пол оборота
                 0,1,2,
                 
                 LINE+4, // разделитель, для облегчения чтения лога
                 
                 0  // все. вернулись в изначальное
                };
#define TEST_TOTAL sizeof(testSerial) // вычисляем сколько у на всего "тестовых имитаций

// имитирует нажатия кнопок в соотсвествии с массивом testSerial и показывает текущие состояние
void startTest(){
   Serial.println("Start testing");
   Serial.print("Led is "); Serial.println(digitalRead(LED)?"ON":"OFF"); // вывели состояние диода
   
   for(int i=0;i<TEST_TOTAL;i++){
     byte pinIndex=testSerial[i]; // индекс пина
     // выводим разделитель
     if(pinIndex>=LINE){
        Serial.println();
        Serial.print("-----------------  ");
        Serial.print(pinIndex-LINE); // номер разделителя
        Serial.println(" -----------------");
        Serial.println();
        
        continue;
     };
     
     weel_handler(pinIndex);// имитировали нажатие
     Serial.print("Press D");Serial.print(buttons_pins[pinIndex]); // вывели нажатие какой кнопки имитировали
     
     Serial.print(",  counter=");Serial.print(counter); // вывели состояние счетчика
     Serial.print(",  Led is "); Serial.println(digitalRead(LED)?"ON":"OFF"); // вывели состояние диода
     
     delay(500); // пауза между нажатиями 2 сек.
   }
   
   Serial.println("Test Finish");
   
}

                
#endif                 

Вот его вывод:

Start testing
Led is OFF
Press D5,  counter=0,  Led is OFF
Press D6,  counter=1,  Led is ON
Press D7,  counter=2,  Led is ON
Press D5,  counter=3,  Led is ON
Press D6,  counter=4,  Led is ON
Press D7,  counter=5,  Led is ON
Press D5,  counter=6,  Led is ON
Press D6,  counter=7,  Led is ON
Press D7,  counter=8,  Led is ON

-----------------  1 -----------------

Press D7,  counter=8,  Led is ON
Press D6,  counter=7,  Led is ON
Press D5,  counter=6,  Led is ON
Press D7,  counter=5,  Led is ON
Press D6,  counter=4,  Led is ON
Press D5,  counter=3,  Led is ON
Press D7,  counter=2,  Led is ON
Press D6,  counter=1,  Led is ON
Press D5,  counter=0,  Led is OFF

-----------------  2 -----------------

Press D7,  counter=-1,  Led is ON
Press D6,  counter=-2,  Led is ON
Press D5,  counter=-3,  Led is ON
Press D7,  counter=-4,  Led is ON
Press D6,  counter=-5,  Led is ON

-----------------  3 -----------------

Press D6,  counter=-5,  Led is ON
Press D7,  counter=-4,  Led is ON
Press D5,  counter=-3,  Led is ON
Press D6,  counter=-2,  Led is ON
Press D7,  counter=-1,  Led is ON

-----------------  4 -----------------

Press D5,  counter=0,  Led is OFF
Test Finish

 

 Всяко так легче логику тестить :) Воспроизводить разнличные "тестовые последовательности" (менять массив testSerial[])

 

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

 нужно сьемное устройство. потенциномер самое простое в исполнении програмно но очень проблематично в железе

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

как же система поймёт - где положение рулколеса=0 ?

заводиться, выставлять руль=0, жать кнопку ПОДТВЕРЖДЕНИЯ нуля, ехать ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

даааааа, всё в салоне нуно устанавливать......

под капотом - через неделю перестанет работать :(

чё за машинка ?

Protez1999
Offline
Зарегистрирован: 08.07.2012

 если сьемное то и руль в 0 и сбросить поблемы не будет всеравно ее ставить надо. на 1 действие больше. Руль в 0 и обнуление. потом мож поменяется . например 2 датчика одновременно сработали значит руль в 0

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

 если сьемное то и руль в 0 и сбросить поблемы не будет всеравно ее ставить надо.

Ну вообщем-то сейчас самая первая сработка любого датчика и приводит как "считать этот положение нулем". Строка 3 "вывода теста".

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Не согласен ! При включении бортовогоПитания (зажигания) - как система узнает, что мы парковались задком с рулём в крайнем левом положении ? Тут нужны датчики : направления вращения, промежуточные - для дискретизации положения руля.....

Если нуно отследить положение "0" - то необходимо 3....5.магнитиков и 3....5 герконов, чтобы перекрыть положение сруля 0+/-5 гр....

Хоть один сработал - положение "север" !!!!! - аналог полоски красной изоленты на сруле......

Герконы дешевле Холла....

Системой из трёх Холлов при диапазоне поворота сруля 1,75 - не решить...

Нет ? Не так ? :)

Protez1999
Offline
Зарегистрирован: 08.07.2012

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

Пока все уткнулось в то что проблематично снимать данные после 1 оборота и возвращать в 0

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

от нуля до крайнего левого ( правого ) положения - скока оборотов ?

я понял, что +/- 1,75 оборота....

курсанту не нуно же знать ПОЛОЖЕНИЕ РУЛЯ В УПРАВЛЯЕМОМ ЗАНОСЕ ? ...статус не тот !

так ?

Вы сказали - нуно знать положение руля в любой момент..... Зачем это курсанту ?

leshak
Offline
Зарегистрирован: 29.09.2011

 

Protez1999 пишет:

Пока все уткнулось в то что проблематично снимать данные после 1 оборота и возвращать в 0

Так в чем утык-то? Сообщение #30. Два оборота  прокрутили в право, два в лево - "возвращать в 0" - получили.

Влево на полтора, вправо на полтора - "возвращать в 0" - получили.

leshak
Offline
Зарегистрирован: 29.09.2011

SU-27-16 пишет:

от нуля до крайнего левого ( правого ) положения - скока оборотов ?

я понял, что +/- 1,75 оборота....

курсанту не нуно же знать ПОЛОЖЕНИЕ РУЛЯ В УПРАВЛЯЕМОМ ЗАНОСЕ ? ...статус не тот !

так ?

Вы сказали - нуно знать положение руля в любой момент..... Зачем это курсанту ?

А почему нет? Есть школы которые и экстремальному вождению учат. Курсанты они разные бывают. С разными статусами:) Да и обычного научить навыкам правильно руления - не мешает. А значит может потребоватся засекать "время руления".

А "совсем зеленый" может еще не уметь "выставлять колеса прямо стоя на месте". Вот тут, по всей видимости, диод-лампочка и нужен.

Protez1999
Offline
Зарегистрирован: 08.07.2012

leshak пишет:

SU-27-16 пишет:

от нуля до крайнего левого ( правого ) положения - скока оборотов ?

я понял, что +/- 1,75 оборота....

курсанту не нуно же знать ПОЛОЖЕНИЕ РУЛЯ В УПРАВЛЯЕМОМ ЗАНОСЕ ? ...статус не тот !

так ?

Вы сказали - нуно знать положение руля в любой момент..... Зачем это курсанту ?

А почему нет? Есть школы которые и экстремальному вождению учат. Курсанты они разные бывают. С разными статусами:) Да и обычного научить навыкам правильно руления - не мешает. А значит может потребоватся засекать "время руления".

А "совсем зеленый" может еще не уметь "выставлять колеса прямо стоя на месте". Вот тут, по всей видимости, диод-лампочка и нужен.

не в любой момент а знать куда выкручены колеса вправо или влево и все. Возможно вы меня неправильно поняли. два диода должно гореть 1 когда руль влево 2  когда руль вправо

Protez1999
Offline
Зарегистрирован: 08.07.2012

 пока не догоняю то что вы мне подсказали как организовано на програмном уровне??

сделали например 3 влево - обратно 3 вправо стало в 0 ??? а как определяется что пошло в обратную сторону7

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

я и хочу вытянуть техническое задание :)

до какой степени нужна точность ?

leshak - Вы согласны со схемой для чайников ? зона - почти 0, зона - ЛЕВЕЕ, зона - ПРАВЕЕ.....

ТУТ  - ардуина не нужна... Так ?

leshak
Offline
Зарегистрирован: 29.09.2011

 

Protez1999 пишет:

не в любой момент а знать куда выкручены колеса вправо или влево и все. Возможно вы меня неправильно поняли. два диода должно гореть 1 когда руль влево 2 когда руль вправо

Вы скетч из сообщения #30 пробовали?

Да даже пробовать не нужно. Даже по выводу который я привел в посте все видно. Разве там не видно куда колеса повернуты? Строки вывода с 04 по 22. Counter - положительный. колеса повернуты в одну сторону (ну право или лево - уже как датчики подключите). Строки с 27 по 39 - coutner отрицательный. Значит колеса вывернуты в другую сторону.

Если мы хотим не один диод типа "колеса повернуты", а два диода "повернуты вправо" и "повернуты влево", на значит тупо заменяем (или добавляем если хотим три диода).

digitalWrite(LED,counter!=0);

на

digitalWrite(LED_R,counter>0);
digitalWrite(LED_L,counter<0);

Ну, естественно, эти два диода нужно подключить, объявить и открыть на выход (аналогично тому как сейчас сделать для LED).

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а професси - не будет смотреть на светодиоды, слушать пищалку, смотреть на стрелку положения руля......

у него прямое считывание от вестибулярки в мозг с управлением на руки! :)

....нууууу, изоленту мотнёт на руле - обозначив СЕВЕР :)

Protez1999 - устроит индикация - почти ноль, 30 гр левее, 30 гр правее ?

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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

...что на стоячей машинке вредит гидроусилителю и чуть-чуть шинам :(

а раз покрутили - и выставили север визуально - зачем вся система нужна ?

на скорости более 20 км/ч - положение руля уже фиксирует мозг, зачем здесь-то уже анализировать ?!!!!!

я - за пропорциональное отображение положения руля !

...это сгодится уже для ВСЕХ !!!!! ....ОСОБЕННО - на льду

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

leshak всё правильно программно решил - апплодирую !!!!!!!! всё красиво....

...но - зачем ? :(

Protez1999
Offline
Зарегистрирован: 08.07.2012

SU-27-16 пишет:

а професси - не будет смотреть на светодиоды, слушать пищалку, смотреть на стрелку положения руля......

у него прямое считывание от вестибулярки в мозг с управлением на руки! :)

....нууууу, изоленту мотнёт на руле - обозначив СЕВЕР :)

Protez1999 - устроит индикация - почти ноль, 30 гр левее, 30 гр правее ?

 

устроит. диоды только при троганьи

Protez1999
Offline
Зарегистрирован: 08.07.2012

leshak пишет:

 

Protez1999 пишет:

не в любой момент а знать куда выкручены колеса вправо или влево и все. Возможно вы меня неправильно поняли. два диода должно гореть 1 когда руль влево 2 когда руль вправо

Вы скетч из сообщения #30 пробовали?

Да даже пробовать не нужно. Даже по выводу который я привел в посте все видно. Разве там не видно куда колеса повернуты? Строки вывода с 04 по 22. Counter - положительный. колеса повернуты в одну сторону (ну право или лево - уже как датчики подключите). Строки с 27 по 39 - coutner отрицательный. Значит колеса вывернуты в другую сторону.

Если мы хотим не один диод типа "колеса повернуты", а два диода "повернуты вправо" и "повернуты влево", на значит тупо заменяем (или добавляем если хотим три диода).

digitalWrite(LED,counter!=0);

на

digitalWrite(LED_R,counter>0);
digitalWrite(LED_L,counter<0);

Ну, естественно, эти два диода нужно подключить, объявить и открыть на выход (аналогично тому как сейчас сделать для LED).

 

каким образом я могу его попробовать простите за глупый вопрос

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

нуууууу, если устроит, мона сделать так.....

- гирлянда Холлов (параллельно) в секторе +/- 5 гр ( С ПЕРЕКРЫТИЕМ СРАБЫТЫВАНИЯ )

- .................................................................................. в секторе -6.....-30 гр

- .................................................................................. в секторе +6.....+30 гр

- один магнит

- транзисторы, резисторы

- один трёхцветный светодиод

без Ардуины - рублей в 800 - мона уложиться на каждую машинку