Корректор электронного (стрелочного) спидометра на ARDUINO

все по электропроводке и оборудованию
Аватара пользователя
Артур
Друг клуба
Сообщения: 1594
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Нет, залил - поехал. Внимание: код я не проверял на работоспособность. Напиши пожалуйста, если старый код у тебя работает, а новый не будет, исправлю.
8(928)376-99-75
lismus
Сообщения: 4
Зарегистрирован: 23 апр 2023, 06:27
Бус: t4

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение lismus »

К сожелению не заработал. но это видимо из за того что датчик абс у меня двухпроводной. На столе от генератора импульсов жизнь была. Есть ли возможность изменить код под двухпроводной датчик? Датчик бош на 128 ом сопротивлением. Одной ногой на минусе...
lismus
Сообщения: 4
Зарегистрирован: 23 апр 2023, 06:27
Бус: t4

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение lismus »

//ТАХОМЕТР
volatile unsigned long micros_th1 = 0;
volatile boolean sttaho = false; //триггер тахометра
volatile byte sztaho = 0; //счетчик обнуления
volatile unsigned int sptaho = 0; //кол-во оборотов

//КОРРЕКЦ�Я ТАХОМЕТРА
volatile unsigned int InputTaho = 0;
volatile unsigned int OutputTaho = 0;
double popravkaTaho = 1.5; //ДЛЯ двигателя 4ц приборка от 6ц - коэффициент 1.5


//СП�ДОМЕТР
volatile unsigned long micros_sp = 0;
volatile byte sz = 0; //счетчик обнуления
volatile unsigned int sp = 0; //скорость
volatile boolean st = false; //триггер

//КОРРЕКЦ�Я СП�ДОМЕТРА
volatile unsigned int InputSpeed = 0;
volatile unsigned int OutputSpeed = 0;
double popravka = 0;

//ВРЕМЯ РАБОТЫ ОСНОВНОЙ ПРОГРАММЫ (каждые 50 миллисекунд - указано в loop)
unsigned long timing;

//ГЕНЕРАТОР �МПУЛЬСОВ СП�ДОМЕТРА
unsigned long timing2;
unsigned long Period;
unsigned long Skvajnost;
bool Status=0;

//ГЕНЕРАТОР �МПУЛЬСОВ ТАХОМЕТРА
unsigned long timing3;
unsigned long PeriodTaho;
unsigned long SkvajnostTaho;
bool StatusTaho=0;


//П�НЫ
int OUTSPEEDPIN=4; //П�Н ВЫХОДА - НА СП�ДОМЕТР
int OUTTAHOPIN=7; //П�Н ВЫХОДА - НА ТАХОМЕТР
#define PIN_POT A0 //П�Н С�ГНАЛА ОТ ПОТЕНЦ�ОМЕТРА ПОПРАВК�



//********************************************************************
void setup(){
Serial.begin(115200); //инициализация ком порта
attachInterrupt(1, speedometr, RISING); //прерывание спидометра по фронту импульса
attachInterrupt(0, tahometr, RISING); //прерывание тахометр по фронту импульса
pinMode(PIN_POT, INPUT);
pinMode(OUTSPEEDPIN, OUTPUT);
pinMode(OUTTAHOPIN, OUTPUT);


}
//********************************************************************
void loop()
{

if (millis() - timing > 50)
{
timing = millis();

//Считаем спидометр:
if (sz != 0)
{
sz--;
}
else
{
sp = 0;
}
InputSpeed=sp;
popravka=map(analogRead(PIN_POT),0,1023,0,200)*0.01; //Коэффициент умножения входящего сигнала от 0.00 до 2.00.
OutputSpeed=InputSpeed*popravka; //Вычисление правильной скорости
Period=600000/OutputSpeed; //Вычисление периода импульса


//Считаем тахометр
if (sztaho != 0)
{
sztaho--;
}
else
{
sptaho = 0;
}
InputTaho=sptaho;
OutputTaho=InputTaho*popravkaTaho; //Вычисление правильной скорости
PeriodTaho=600000/OutputTaho; //Вычисление периода импульса

}


//Генерируем импульсы для СП�ДОМЕТРА
Skvajnost= Period/2 ; //такая скважность называется меандр
if (Status==0) {
if ( (micros()-timing2)>= Skvajnost) {
timing2 = micros();
digitalWrite(OUTSPEEDPIN, HIGH);
Status=1;
}
}

if (Status==1) {
if ( (micros()-timing2)>= (Period-Skvajnost) ){
timing2 = micros();
digitalWrite(OUTSPEEDPIN, LOW);
Status=0;
}
}




//Генерируем импульсы для ТАХОМЕТРА
SkvajnostTaho=PeriodTaho/2 ;
if (StatusTaho==0) {
if ( (micros()-timing3)>= SkvajnostTaho) {
timing3 = micros();
digitalWrite(OUTTAHOPIN, HIGH);
StatusTaho=1;
}
}

if (StatusTaho==1) {
if ( (micros()-timing3)>= (PeriodTaho-SkvajnostTaho) ){
timing3 = micros();
digitalWrite(OUTTAHOPIN, LOW);
StatusTaho=0;
}
}




}
//********************************************************************
void speedometr(){ //измеряем частоту на входе спидометра по прерыванию
if(!st){micros_sp = micros();}
else {sp = (600000/(micros() - micros_sp));}
st = !st;
sz = 30;
}


void tahometr(){ //измеряем частоту на входе тахометра по прерыванию
if(!sttaho){micros_th1 = micros();}
else {sptaho = (600000/(micros() - micros_th1));}
sttaho = !sttaho;
sztaho = 30;
}
Вот этот работает. правда стрелка порой скачет . но это на столе. в машине не пошел...
Аватара пользователя
Артур
Друг клуба
Сообщения: 1594
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

В коде нечего менять.
Датчик надо правильно подключать.
Видимо нет резистором подтяжки на 5 вольт
8(928)376-99-75
lismus
Сообщения: 4
Зарегистрирован: 23 апр 2023, 06:27
Бус: t4

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение lismus »

Видимо все же дело в датчике, он у меня аналоговый. Переводить из аналога в цифру то ещё занятие...
AlexR
Сообщения: 3
Зарегистрирован: 26 фев 2022, 20:03
Бус: Seaz

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение AlexR »

Как настроить последний код? У меня спидометр и тахометр, и тот и другой врут, Тахо занижает а спидо наоборот завышает
AlexR
Сообщения: 3
Зарегистрирован: 26 фев 2022, 20:03
Бус: Seaz

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение AlexR »

Как откатать для точного показометра?
Аватара пользователя
Артур
Друг клуба
Сообщения: 1594
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

последний код я не доделал, он не имеет калибровок спидометра по шагам, только один общий коэффициент на весь диапазон от нуля до бесконечности.
Арифметически, разгоняешся до 100км/ч по GPS, смотришь что показывает твой стрелочный спидометр, к примеру он у тебя показывает 86км/ч.
Сто делишь на восемьдесят шесть, будет равно 1,16. Вот твой коэффициент. Если показывает больше ста, пусть 140, всё тоже самое
100 : 140=0,714.
Вносишь 0,714 в код программы, заливаешь в ардуино. PROFIT.


Для тахометра либо методом на глаз, либо если ты знаешь, сколько твой датчик тахометра выдаёт импульсов на оборот, прямо в арудинке можешь выводить в монитор порта количество импульсов с датчика тахометра (или с ЭБУ), далее смотришь на экране компьютера , сколько импульсов даёт, сопоставляешь со своим стрелочным. Арифметически находишь коэффициент, записываешь в скетч, прошиваешь. PROFIT.
8(928)376-99-75
AlexR
Сообщения: 3
Зарегистрирован: 26 фев 2022, 20:03
Бус: Seaz

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение AlexR »

Грустно, у меня спедо нелинейная шкала, до 60км терпимо, разбег около 4кмч, а вот выше разбег почти в 20км на 140кмч
ИванИванович
Сообщения: 1
Зарегистрирован: 19 ноя 2023, 17:28
Бус: Т2

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение ИванИванович »

Подниму тему.Всем здравствуйте! Кто небудь собирал адаптер датчика топлива.Собрал,прошил ардуинку не работает,стрелка прыгает и все!( Пните пж в нужную сторону.
Аватара пользователя
Виктор Викторович
Друг клуба
Сообщения: 7518
Зарегистрирован: 03 дек 2010, 23:57
Бус: Т-3 1,8 ABS, ADZ
Откуда: Ростов-на-Дону

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Виктор Викторович »

:punk:
Mono-Motronic 1.2.3
Люблю Су - 27, баню и футбол.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1594
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

ИванИванович, в этой теме нет готового рабочего решения, не знаю что за прошивку и куда вы залили. Я пытался, у меня не получилось, так как нет подходящего по номиналам электронного потенциометра, эмулировать штатный датчик нечем.
8(928)376-99-75
Ответить