Chip
Я сегодня замерил с помощью старой программы и методом подбора выяснил, что сигнал на комбинации приборов, от которого я пляшу, имеет 24 импульса на 1 оборот колеса - видимо это после преобразования контроллера или датчик такой...или передаточное число в КПП.
В результате получил вполне приемлемые данные, соответствующие показанию спидометра.
Единственно бывает, что скорость отличается на 3-4 км между соседними срабатываниями таймера, например 39 и 36, на самом деле скорость ~40. Выбивание из ряда объясняю тем, что граничные импульсы попали в соседнее срабатывание таймера.
В принципе код вполне устраивает
Также проверил и более старый код:Код:#include <MsTimer2.h> int ledPin = 13; // контакт для светодиода int switchPin = 30; // контакт для кнопки int RelayPin = 14; // Контакт для реле int HallPin = 3; // Контакт для датчика холла int SpeakerPin=8; // Контакт для динамика boolean RelayOn = false; unsigned long speedtime = 0; int count = 0; unsigned long time; float lkolesa; float Speed; float TimerInterval=500; void setup() { Serial.begin(115200); pinMode(SpeakerPin, OUTPUT); // для динамика pinMode(ledPin, OUTPUT); // для светодиода pinMode(switchPin, INPUT); // для кнопки pinMode(RelayPin, OUTPUT); // для реле pinMode(HallPin, INPUT); // датчик холла digitalWrite(HallPin, HIGH); //внутренняя подтяжка входа датчика холла attachInterrupt(1, int_on, RISING); MsTimer2::set(TimerInterval, flash); // таймер будет срабатывать через каждые 500ms MsTimer2::start();//запустить таймер } void loop() { } void int_on() { count++; //увеличить счетчик } void flash() //обработка прерывания таймера { lkolesa=0.686; Speed=lkolesa*count*(2400/TimerInterval); Serial.flush(); Serial.println(count); Serial.println(Speed); count=0; }
он выдает более точные данные, но реже, только после получения 24 импульсов...Код:void int_on() { count++; //увеличить счетчик volatile if (count >=24) { speedtime = micros()-time; //время прихода 6-ти импульсов time = micros(); //обнулить lkolesa=0.686; Speed=((lkolesa*3600000*4)/speedtime); Serial.println(speedtime); Serial.println(Speed); count = 0; }
Над твоим новым кодом думаю... учитывая мои 24 импульса.
Мне кажется по одному импульсу судить нельзя, не точно получитсяКод:void int_on() { delta=3030*(micros()-micross);// тут 1 имульс и время за которое он произошел micross = micros(); //обнулить }
У меня выше тоже самое, но за 24 импульса, возможно стоит за 4 или 6 импульсов судить о скорости




 
			
			 
					
				 Re: Датчик холла 12В использование с ардуино
 Re: Датчик холла 12В использование с ардуино
				 
					
					
					
						 Ответить с цитированием
  Ответить с цитированием