попробуйте проснифить в момент когда другую группу выбираете, будет ли проскакивать блок из 49 байт? Если да, то там какие-то настройки. И напишите название и значение каждого из 4 параметров группы 1 в момент снифа.
И всё-таки показания по группам это не два KWorda, а чистое десятичное число, которое подставляется в формулу, а лажа в параметрах из за того, что в формулу подставляются данные вне диапазона из за отсутствия показаний с датчиков.На примере 3-й группы -4 показание вывел формулу напряжения. Менял напряжение на ЛБП -снифил, дальше математика. Дело за малым- найти эти формулы для DEC показаний, ведь VAG COM как-то расчитывает эти сырые данные.
MaksVV, есть пару вопросов по коду касающегося расчетов расхода топлива.
//при получении сообщения БЕЗ ошибок с данными от панели приборов, запишем в переменные остаток топлива и пробег
if (CRC==crc) {Serial.println (" OK!!!");
Fuel2 = MessageRxGauge[16]/2.0; //мгновенное топливо в баке, для вывода на экран
//стартовая запись литров в баке для подсчета затраченных литро.
if (!flagFuelIGN) { Fuel = MessageRxGauge[16]/2.00; kmREFUELING=((float)Fuel*100.00)/(float)L100SR_TFT;}
//else Fuel = MessageRxGauge[17]/2.0;
//для усреднения болтания топлива в баке, высчитывает среднее. без усреднения - закоментировать 6 строчек ниже и раскоментировать строчку выше
else { FuelZamer[ZamerNumber] = MessageRxGauge[17]/2.00;
if (ZamerNumber==9) {
Fuel = 0 ;
for (int i = 0; i < 10; i++) Fuel = Fuel + FuelZamer[i];
Fuel = (float)Fuel/10.0;}
ZamerNumber++; if (ZamerNumber>9) ZamerNumber = 0;}
kmAge = (MessageRxGauge[23]+(MessageRxGauge[24]*256))/10.0; //суточный пробег с панели приборов
//бак у меня на 59 литров, а датчик показывает максимально 53 литра. для этого эта формула
//если у вас тоже датчик имеет лимит то подправте 53 на свой лимит.
//если ваш датчик показывает одинаково с полным баком то закоментировать три нижние строки.
if (Fuel<53){
if (!flagkmAgeIGN) { kmAgeIGN = kmAge; flagkmAgeIGN =1;}
if (!flagFuelIGN) { FuelIGN = Fuel; Fuel_last = Fuel; flagFuelIGN = 1; }}}
else Serial.println (" ERROR!!!");
dataMessageEND = 0; MessageParse = 1; //mySerial_gauge.flush();
for (int i = 0; i < 34; i++) MessageRxGauge[i]=0; }} // очистка байтов массива
Включили зажигание. Если пошел обмен данными получаем (" OK!!!").
Fuel2 = записываем колличество топлива в баке.
// flagFuelIGN изначально =0; единственное место где меняется флаг на эту переменную:
//if (!flagFuelIGN) { FuelIGN = Fuel; Fuel_last = Fuel; flagFuelIGN = 1; }// но что бы поменять её на =1, надо что бы она уже была =1; что-то совсем не понятно
//аналогично с flagkmAgeIGN
Если flagFuelIGN =1(true)то Fuel = записываем колличество топлива в баке;
kmREFUELING=((float)Fuel*100.00)/(float)L100SR_TFT; расчитываем пробег до заправки (запас хода);
Если flagFuelIGN =0(false)
делаем 10 замеров топлива в баке, что бы исключить колебания датчика;
kmAge = записываем пробег с приборки; в зафире есть гдето еще в приборке подсчет суточного ???
тут не совсем понятно с 53 литрами.
Если топлива не полный бак(<53)...
kmAgeIGN=запоминаем пробег в момен включения зажигания. flagkmAgeIGN=1, меняем флаг до следующего включения.
FuelIGN=запоминаем остатоктоплива в момен включения зажигания. flagFuelIGN=1, меняем флаг до следующего включения.
Еще один вопросик в правильности поочеродного обращения к разным блокам(в моем случае движок currPage=2 и приборка currPage=1). Сразу обращаюсь к приборке (CurrPage=1). Через 4 сек CurrPage=2 и устанавливается связь с блоком двигателя на 40 сек. Потом все по кругу.
if (currPage==1 && butt_flag==false)
{
last_time=millis();
butt_flag=true;
}
if (millis()-last_time>4000 && butt_flag2==false)
{
currPage++;
butt_flag2=true;
}
if (millis()-last_time>40000)
{
currPage=1;
butt_flag=false;
butt_flag2=false;
}
4 секунды достаточно, что бы получить данные с приборки и переключиться на блок двигателя.. Есть где то какой-то косяк в проекте Александра. Диагностика идет, но через сек 17-20 дуня повисает(виснет дисплей, перестает мигать диод RX). Пробовал питать дуню от повербанка и от ноута и от машины - результат тотже. но бывают моменты(редко), что не повисает несколько минут.
Бывает повисает и сразу при включении. Попробую закоментировать библиотеку дисплея и всё что с ней связано. Есть вероятность того, как вы мне раньше и писали, что надо МЕГА, а то УНО не справляется.. и тут дело не в питании.
Разобрался вот.. UNO не справляется с именно этой библиотекой дисплея. НЕ хватает ресурсов по ходу, надо МЕГА. Закажу на днях.
Без этой библиотеки, зависаний нет(RX моргает постоянно). Получилось вот еще вывести данные в приложение виндовс(нашел на просторах нета и подправил, че мог).. с притормаживанием правда, но работает.. для некоторых проектов, если вдруг нет дисплея, можно использовать. Ну а если довести код до ума, то точно можно использовать..
// flagFuelIGN изначально =0; единственное место где меняется флаг на эту переменную:
//if (!flagFuelIGN) { FuelIGN = Fuel; Fuel_last = Fuel; flagFuelIGN = 1; }// но что бы поменять её на =1, надо что бы она уже была =1; что-то совсем не понятно
//аналогично с flagkmAgeIGN
смотри внимательно в проверке условия стоит ! . Это означает что если flagFuelIGN == 0. Т.е. изначально флаг в нуле. потом мы записываем количество литров и километраж и ставим флаги в 1 . всё, больше не будет записываться этот километраж и литраж до следующего перевключения питания ардуины. Эти величины нужны, чтобы понять сколько потреблено литров и проехано километров, т.е. считаем относительно этих величин.
эх, моя не внимательность ))) Спасибо за подсказку. Вроде как разобрался, так опять непонятки какие то появились.
Вот, что позаимствовал с вашего кода, для расчета расхода топлитва(менял некоторые переменные и незначительно подправлял):
В setup() докинул вот эти строчки:
//подсчет среднеарифметического усредненного расхода
for (int i = 0; i < 11; i++) L100_Eeprom [i]= EEPROM.read(i);
for (int i = 0; i < 11; i++) L100SR_TFT = L100SR_TFT + L100_Eeprom [i];
L100SR_TFT = (float)L100SR_TFT/110.0;
if (L100SR_TFT<0) L100SR_TFT = 0;
if (L100SR_TFT>99) L100SR_TFT = 99;
Функция receive ():
void receive ()
{
if (!flagFuelIGN) { kmREFUELING=((float)fuelLevel*100.00)/(float)L100SR_TFT;}
//else fuelLevel = fuelLevel;
//для усреднения болтания топлива в баке, высчитывает среднее. без усреднения - закоментировать 6 строчек ниже и раскоментировать строчку выше
else { FuelZamer[ZamerNumber] = fuelLevel;
if (ZamerNumber==9) {
fuelLevel = 0 ;
for (int i = 0; i < 10; i++) fuelLevel = fuelLevel + FuelZamer[i];
fuelLevel = (float)fuelLevel/10.0;}
ZamerNumber++; if (ZamerNumber>9) ZamerNumber = 0;}
if (fuelLevel<70){
if (!flagkmAgeIGN) { kmAgeIGN = odometer; flagkmAgeIGN =true;}
if (!flagFuelIGN) { FuelIGN = fuelLevel; Fuel_last = fuelLevel; flagFuelIGN = true; }}
}
Функция Trip():
void Trip()
{
if (flagkmAgeIGN){
FuelTrip = FuelIGN - fuelLevel;
if (odometer>kmAgeIGN) kmTrip = odometer - kmAgeIGN;
if (odometer<kmAgeIGN) kmTrip = 2000 - (kmAgeIGN - odometer); // 2000 это через сколько км у тебя суточный пробег сбрасывается на ноль, поменяй если другое число
if (odometer==kmAgeIGN) kmTrip = 0;
//подсчет расхода на 100км за поездку
L100M = ((float)FuelTrip*100.00)/(float)kmTrip;
if (L100M<0) L100M = 0;
if (L100M>99) L100M = 99;
// ниже цикл считает среднеарифметический расход из еепром раз в пробег, указанный в переменной kmeeprom
if (kmTrip-kmTFT>kmeeprom) {kmTFT = kmTrip;
// тут считаем среднеарифметический усредненного расход из ячеек еепром
for (int i = 0; i < 11; i++) L100_Eeprom [i]= EEPROM.read(i);
for (int i = 0; i < 11; i++) L100SR_TFT = L100SR_TFT + L100_Eeprom [i];
L100SR_TFT = (float)L100SR_TFT/110.00;
if (L100SR_TFT<0) L100SR_TFT = 0;
if (L100SR_TFT>99) L100SR_TFT = 99;}
// ниже цикл считает расход топлива за пробег, указанный в переменной kmL, здесь же запись в ячейки еепром
if (kmTrip-km>kmL) {km=kmTrip;
L100SR = ((float)(Fuel_last-fuelLevel)*100.00)/(float)kmL; // расход/100км - обновляется раз в 10км, меняется км в int kmL = 10;
Fuel_last = fuelLevel; // сохранение параметров с последнего измерениея
if (L100SR<0) L100SR = 0;
if (L100SR>99) L100SR = 99;
//расчет остатка километров в баке, постоянно подстраеваемый под ваш стиль вождения
if (L100SR>0) kmREFUELING=((float)fuelLevel*100.0)/(float)L100SR; //если средний расход больше нуля, то расчитывать км в баке из него
else kmREFUELING=((float)fuelLevel*100.00)/(float)L100SR_TFT; //если ноль или меньше то расчитывать км в баке с устредненного расхода
//еще вариант расчета киломеров в баке от устредненного расхода L100SR_TFT, если он у вас уже вышел на стабильную цифру
//kmREFUELING=((float)Fuel*100.0)/(float)L100SR_TFT;
//еще вариант если вы знаете примерный средний расход за весь бак.
//kmREFUELING=((float)Fuel*100.0)/(float)6.7; //где 6.7 вош средний расход за бак
// тут записываем L100SR последовательно в одну из 11 ячеек еепром
//EEPROM.write (12,n_eeprom); // ЗДЕСЬ ВНИМАТЕЛЬНО. ЗАГРУЗИТЬ ПРОШИВКУ С ЭТОЙ СТРОКОЙ ОДИН РАЗ, ПОТОМ ЗАКОМЕНТИРОВАТЬ И ЕЩЁ РАЗ ЗАГРУЗИТЬ
n_eeprom = EEPROM.read (12); // в ячейке 12 хранится № текущей ячейки для записи расхода, чтобы где остановился при выкл питания, от туда и продолжил
EEPROM.write(n_eeprom, L100SR*10);
n_eeprom++; if (n_eeprom>10) n_eeprom=0;
EEPROM.write (12,n_eeprom); }}}
Строчку с eeprom не трогал (по тексту написано, что её надо раскомментировать, наверное что бы зачистить,потом сново закомментировать).
Я так понимаю, когда появился обмен дынными между дуней и ЭБУ, сразу же запоминается текущий пробег(одометер) и колличество топлива в баке.. Но почему то переменные получаются нулевыми.
Может перед тем как вызвать эти функции, сделать какую проверку?? ну например проверить переменную пробега(odometer)// если например пробег >5, то тогда наверняка связь присутствует на 100%. или на какой другой переменной. Без срабатывания функции receive (), функция Trip() не заработает. Вероятнее всего, что я сильно урезал receive ()... а именно-нет проверки связи с блоком ЭБУ. Флаги сразу становятся =1, ну и естественно заполняются нулями, так как связь не установлена.
Но ноли не пропали. Когда комментровал код, то вошел в кураж и закоментировал в loop, строчки для вызова функций receive() и Trip(). В этом был косяк.. но после обноружения ошибки, эти две строчки решил оставить с проверкой на нули, мало ли))))) что бы пройти стадию тестирования, к дисплею подключил старую библиотеку(что бы не тягать ноут)... обороты правда с задержкой, но меняются и дуня главное не повисает... и основная цель это расчет расхода на 100км и запаса хода. Да и надо ведь как то проверить Ваш труд изложеный в функции Trip ))))). Но думаю всё будет ГУД )))
Есть еще пару вопросав:
1. Реально ли собрать данные за поездку??, не поездку между включениями зажигания, а настоящую поездку. Например по включению флага, мы начинаем записывать сколько проехали и сколько потратили топлива, (ну можно еще и время в пути, средний расход считать...но это не важно, более важнее пробег и трата топлива). С пробегом понятно, флаг поднял (записал текущий пробег)и считай себе разницу. А вот как быть с потраченым топливом, если во время следования будут дозаправки??
2.Реально ли своими силами перенести проект (подкорректировать библиотеки) на NODMCU. Там 4мб памяти, wi-fi на борту. Стоимость меньше чем дуни с wi-fi. Есть просто товарищ который поможет написать приложение на android.
3. Про MC33290, вроде и сопротивление на ножках разное(признак рабочей, а не пустышки) и когда запросы делаешь на ноге K-line просадка идет(диод сигналит).. но все равно где то все теряется. Может заказать L9637, и повыбрасывать эти MC33290, что бы не смущали??
4. Может в ближайшем будущем, ели конечто у тебя будет время и желание поколдуем над протоколом для Ebera(догревателя)?? Буду готов оказать любую помощь.
1. Реально. Главное после заправки перевключить зажигание, чтоб расход литров правильно считался.
2. Не имел дело с nodemcu и вообще с проектами на ESP. ESP использую только как WI-FI адаптер, взаимодействуя с ним по UART АТ командами. В принципе так и можно сделать, чтобы вайфай к проекту добавить.
3. Если мс33290 не рабатают, нужно взять копеечный LM393 с обвзякой из резюков (я уже неоднократно это описывал) или L9637D.
4. можно поколдовать. Начать нужно со сниффера ( либо программного , либо аппаратного) протокола обмена.
Протестировал БК )) Средний расход пощитался гдето через неделю эксплуатации, это скорее всего свяязано с тем, что у меня в течении этой недели были маленькие заезды. На работу 8 км и обратно. Изначально после чистки памяти показывал 25.50, я сразу подумал гдето есть косяк, но продолжил тестить и как видно не зря. Потом начались заезды побольше, и средний расход начал меняться чаще. Сказывается только недостаточность ресурсов UNO, но как показала практика очень много ресурсов забирает библиотека с вводом данных на экран. Средний расход от включения зажигания(за одну поездку) сразу показывает 99, потом 30 или 20 но потом опять 90 или ноль. Это тоже пожет сказваться от недостаточности ресурсов, но сдесь еще может повлиять мой датчик уровня топлива... бывает барахлит при малом колличестве топлива в баку.. надо сделать ревизию, так сказать освежить контакты)))
Нуждаюсь еще в вашей некоторй помощи:
1. По поводу 1-го вопроса с 219 сообщения. Суть я уже понял, но не знаю как реализовать.. а если быть точным как записать все в еепром.
Для реализации моего запроса нам надо две переменные,
для хранения потраченного топлива, и для пройденного пути.
Их надо занести в еепром, а при необходимости затирать.(по какому то условию)
int LongTrip = 0; //Пройдено км за всю поездку
int LongFuel=0; //Потрачено литров за всю поездку
Если я все правильно понимаю, то в две верхние переменные, можно записывать данные
с двух уже существующих переменных(которые уже есть в БК)
///******
float FuelTrip = 0; // количество литров топлива, израсходованное за один цикл включения зажигания
float kmTrip = 0; //пробег за один цикл включения зажигания
///******
- завести определённую ячейку в еепром (точнее две, т.к. одна это всего 255 км, а две уже 65535км). Это будет, как называют в БК, суточный пробег.
- завести ячейку в еепром для сохранения расхода топлива за суточный пробег, л
- по какому то событию сбрасывать эти два параметра на ноль (например, по нажатию специально сделанной для этой цели кнопки)
- поставить большой конденсатор по питанию ардуино. И контролировать наличие зажигания, чтобы когда оно выключается, МК успевал до разряда конденсатора приплюсовать пробег между включениями зажигания и литры в наши ячейки.
формула для среднего расхода, измеренного в рамках суточного пробега будет такая
Суть я уловил. Но никогда не работал с еепром. Событие для сброса в 0 не прописывал. Тут что-то сошкрябал, надо бы проверить))
int flagIGN = 8;
void setup()
{
pinMode(flagIGN,INPUT);
int L100MSUT; //Расход средний суточный
//Чтобы заново «собрать» большое число, разобранное на байты, есть функция
//word(): int val = word(hi, low), где "hi" и "low" – это значения старшего и младшего байтов числа "val".
int LongTrip = word(EEPROM.read(0),EEPROM.read(1)); //Пройдено км за сутки
int LongFuel=EEPROM.read(2); //Потрачено литров за сутки
}
void Trip()
{
if (flagkmAgeIGN){}
if(digitalRead(flagIGN)==true) //если включено зажигание
{
L100MSUT = (((float)FuelTrip + (float)LongFuel) *100.00)/((float)kmTrip + (float)LongTrip);
}
else
{
LongTrip+=kmTrip;
//чтобы записать, нужно разбить на 2
EEPROM.write(0, highByte(LongTrip)); // записываем в ячейку 0 старший байт
EEPROM.write(1, lowByte(LongTrip)); // записываем в ячейку 1 младший байт
LongFuel+=FuelTrip;
EEPROM.write(2, LongFuel); // запись числа в ячейку
}
}
в принципе правильно. Вот ещё пример как разбить двухбайтовое число на два отдельных байта , а потом обратно собрать в одно число из двух байт:
uint16_t Probeg = 1623; // например был такой пробег в HEX это 0х657
byte ProbegA = 0; // первый байт числа
byte ProbegB = 0; // второй байт числа
void setup() {
Serial.begin (9600);
//разбиваем на два байта
ProbegA = Probeg & 0xFF;
ProbegB = Probeg >> 8;
// распечатаем
Serial.println (ProbegA, HEX);
Serial.println (ProbegB, HEX);
//собираем число из двух байт
uint16_t Probeg2 = ( ( uint16_t ) ProbegB << 8 ) | ProbegA;
//распечатаем
Serial.print (Probeg2);
}
void loop() {}
Нужно только ввести флаг, что в еепром уже записали, чтобы не испрортить ячейки еепрома и писать туда только один раз. Ну ещё запись литров в ячейку поменял , так более правильно.
bool flagwrite = false;
else if (!flagwrite)
{
LongTrip+=kmTrip;
//чтобы записать, нужно разбить на 2
EEPROM.write(0, highByte(LongTrip)); // записываем в ячейку 0 старший байт
EEPROM.write(1, lowByte(LongTrip)); // записываем в ячейку 1 младший байт
EEPROM.write(2, (EEPROM.read(2) + FuelTrip)); // запись литров в ячейку
flagwrite = true;
}
1. Если в пути, т.е на включеном зажигании я захочу посмотреть суточный расход,пробег, потраченое топливо..
расход в L100MSUT лежит, это понятно...
пробег((float)kmTrip + (float)LongTrip) и потраченое топливо((float)FuelTrip + (float)LongFuel) выводить(на дисплей) сразу как сумму, либо дозоводить переменные только для вывода??
Про конденсаторы, ты так имелл ввиду(когда пропадет питание, у на с еще есть пару сек для записии в еепром) ??? В одной из тем, на прошлой неделе, ты выложил плату для обвязки lm393, надеюсь она правильная ???)))
Подскажи, где еще косяки есть. тут потребности чуть поменялись))) Хочу по событию включать свет(тип проводи меня домой будет))) на минуту где-то. Кнопок на плате нет сейчас, но будет приемник.. на пульте 4-ре кнопки. все работает, я раньше испытывал.. у каждой кнопки свой код... можно колдавать)) ну так вот.... Vbat питание, которое подается при снятии с охраны машины, и присутствует после постановки на её обратно, еще пару минут. Правильно ли я сигналю на DRL+ ??)) Брал один в один с другой схемы
т.е. ты на постоянку ардуино запитать хочешь? Тогда кондёры ёмкие становятся не актуальны. (схема с кондёрами предлагалась для питания ардуино от зажигания). И уж тем более диод там не нужен. При постояннном питании ардуино просто контролировать зажигание да и всё. и когда оно выключается записывать в еепром. Но имей ввиду, вся эта схема будет мА 30-40 потреблять. А это совсем не гуд для автомобиля. Про полевики по схеме не подскажу, сам не очень в этом разбираюсь.
я вот такой dc-dc ставил. Он вообще ничего не ест почти. Ну и правильно, что промини взял, она гораздо меньше ест чем нано. Ещё можно штатный led и стабилизатор у неё откусить - ещё меньше есть будет.
ну как на постояну... только когда машина снята с охраны. При постановке на охрану этот плюс пропадает, блок бортовой сети засыпает..примерно через 1-2 минуты. или может по определенному событию(именно когда включено зажигание) подавать этот дополнительный плюс(тоже через полевик какой)...тогда получится что ардуинка будет сама себя отрубать когда надо(т.е до следующего включения зажигания).
Примерно так:
int IGN = 8; //вход зажигания
int DRLIN=5; //кнопки включения DRL
int DRLOUT=6; //выход для включения DRL
int Vbat=7; // выход для подключения дополнительно источника питания
int DRLSTART; // для запоминания когда пропало зажигание
int DRLTIME=60000; // 1 минута для подсветки
bool flagDRL=false;
bool flagIGNSTOP=false;
void setup()
{
pinMode(IGN,INPUT);
pinMode(DRLIN,INPUT);
pinMode(DRLOUT,OUTPUT);
pinMode(Vbat,OUTPUT);
}
void Loop()
{
if(digitalRead(DRLIN)==true && digitalRead(IGN)==true ) // Если нажали на кнопку и было включено зажигание
{
flagDRL=!flagDRL; //Меняем флаг DRL... будет уже ВКЛ
digitalWrite(Vbat, true); //Подключаем дополнительный источник питания для ардуины
flagIGNSTOP==false;
};
if(digitalRead(IGN)==false && flagDRL==true && flagIGNSTOP==false) //Выключилось зажигание, подготавливаемся для включения света
{
flagIGNSTOP==true;
DRLSTART=millis(); //Фиксируем момент, когда пропало зажигание
};
if(DRLSTART+DRLTIME<millis() && digitalRead(IGN)==false)
{
digitalWrite(DRLOUT,true); //включаем свет на 1 мин
}
else {digitalWrite(DRLOUT,false); digitalWrite(Vbat,false);}
}
Схема чуть не правильная, поливики надо к Vbat подрубать.
может по моему вопросу подскажете, как после L9637D полученные данные ретранслировать в Serial ардуино нано, то бы подключив к пк через уарт работал вагком? так в принципе можно или из-за разницы постоянно меняющихся скоростей обмена вагком ничего не увидит от обд?
идея такая, что бы как снифер, даже не снифер, а когда надо - использовать данны с k-line во внутренней программе ардуино и напрямую использовать пк для диагностики через вагком, тоесть получается как бы ардуина как прокладка, тоесть напрммер нажав кнопку, ардуина просто ретранслятор данных, нажал еще раз, уже идет штатаная работа.
через usb-uart все работает, все чипы ( ftdi, pl2103 и другие pl, ch340g) у меня пного разных вариаций и все попробовал
собственно это так, хотелка, основное реализованно, упраения вебастой через смс, автозапуск(пока тестировал частями, состоит из самого пуска и получение данных по оборотам с обд, как раз один из видов штатной работы ардуинки), контроль напряжения аккумуляторов, у меня их 2, температуры разные, умные поворотники, умные стопы и т.д.
идея такая, что бы как снифер, даже не снифер, а когда надо - использовать данны с k-line во внутренней программе ардуино и напрямую использовать пк для диагностики через вагком, тоесть получается как бы ардуина как прокладка, тоесть напрммер нажав кнопку, ардуина просто ретранслятор данных, нажал еще раз, уже идет штатаная работа.
через usb-uart все работает, все чипы ( ftdi, pl2103 и другие pl, ch340g) у меня пного разных вариаций и все попробовал
собственно это так, хотелка, основное реализованно, упраения вебастой через смс, автозапуск(пока тестировал частями, состоит из самого пуска и получение данных по оборотам с обд, как раз один из видов штатной работы ардуинки), контроль напряжения аккумуляторов, у меня их 2, температуры разные, умные поворотники, умные стопы и т.д.
Ты проект пилишь под webasto или Eberspacher ?? В дальнейшем, я так понимаю к какомуто готовому приложению для телефона его будешь подгонять для удобства
Ты проект пилишь под webasto или Eberspacher ?? В дальнейшем, я так понимаю к какомуто готовому приложению для телефона его будешь подгонять для удобства
делаю под вебасто, аналоговое, управляется подачей плюса на пин
так же есть еще вебаста с управлением по k-line, то же работает
а так вот такую штуку слепил, сейчас переделываю, на плате преобразователь напряжения на основе кренки, вольтметры(из резисторов), две развязки k-line, что бы одной читать вебасту, другой эбу мотора, так же смонтированы eeprom и оптоуправление реле(накосячил немного с оптопарой, пришлось как то соплей вешать) в общем вот как то так, сейчас из всего я бы оставил все кроме оптопар, блочков с реле вагон и не дорого
MaksVV тоже такой проект делал, гдето есть тут на форуме. что-то там GSM устройство..... От себя добавлю, что вещь будет полезной, полностью можно будет отказаться от дорогих пультов.
Тебе надо найти тот проект и перечитать там всё))) может придется отказаться от половины плюшек, а то аккум посадишь будь здоров))
его проект и видел на начальном этапе, был очень кстати, с него и начал рыть инфу по запуску вебасты с к-линии, так как изначально только такая и была:):):)
теперь у меня есть куча вебаст разных, буду одной дом отапливать в деревне, подогревать анифриз в батареях, если вырубится электричество :)
а по поводу акума, так поэтому и делаю автозапуск, что бы прогреть вебастой мотор, запустить его, поднять потенциометром обороты до 2500, чуть погонять заряд батарей... это если при простое, а так для работы всего этого будет использован только один аккум, при высадке его, будет переключено на другой если надо ехать, с другого подогреть, запуститьтся и далее все подзарядить
4. Может в ближайшем будущем, если конечто у тебя будет время и желание поколдуем над протоколом для Ebera(догревателя)?? Буду готов оказать любую помощь.
Вот ответ на вопроса заголовка темы :) Так же подправлю 3 сообщение, темы и закреплю туда ответ, для того чтобы люди могли сразу найти ответ не перечитывая сообщения. На руках у меня 4-ре рабочих микросхемы mc33290 и 4-ре рабочих схемы L9637D. Проверил их через модуль FTDI заказанный из Китая. Вместо постоянного сопротивления стояли подстроечные резаки номиналом 10К. Сопротивление выставлял на угад, потом замерял :) на L9637D было 900R, на mc33290 было 2,2K. А вот с ардуинкой и софтсериалом еще не подружил. На картинке сопротивление между ногами !!рабочих микросхем, между остальными глухо.
Я просто решил дожать эту тему до конца :) А так-то на LM393 это 100% рабочий вариант, единственный недостаток-это рапссыпуха обвязочная вокруг его. Наблюдаю за твоим проектом для управления догревателями, вижу до идеала довели)) Я уже даже купил все компоненты, вот только плату надо вытравить будет. НО у меня ведь Eber, если помнишь...закину на днях снифф... поможешь чуть что, если время у тебя конечно будет
Ребята привет!
Подскажите пожалуйста
Хочу сделать чтобы arduino эмулировал данные ECU авто, например выдавал рандомные обороты двигателя.
К этой ардуино хочу подконектится через обычный VAG KKL 409.1 usb кабель.
То есть Схема такая:
Эмулятор работы авто (Arduino) -> OBD2 разьем мама -> VAG KKL -> Ноутбук с софтом VAG COM
То есть по сути мне нужно пины аrduino RX TX подключить на 7 ногу разьема где работает K line.
Через что подключать RX TX к K line?
Через L9637D ?
Можно еще плиз пример простого скетча который бы имитировал обороты двигателя.
Проект делаю чисто в рамках своего обучения и интереса к диагностике авто :)
Да только один раз. Выбрана первая группа.
попробуйте проснифить в момент когда другую группу выбираете, будет ли проскакивать блок из 49 байт? Если да, то там какие-то настройки. И напишите название и значение каждого из 4 параметров группы 1 в момент снифа.
Да, получается после запроса новой группы проскакивает блок из 49 байт. В снифе запрос первых трёх групп по порядку. https://cloud.mail.ru/public/LzVx/HannGt8AV
А почему в параметрах лажа? 52 об/мин. -40 градусов и т.д.
Мозги то на столе лежат
На забугорных форумах пару тройка человек поднимали аналогичную тему с такими же снифами, - проблему решить не удалось(((
И всё-таки показания по группам это не два KWorda, а чистое десятичное число, которое подставляется в формулу, а лажа в параметрах из за того, что в формулу подставляются данные вне диапазона из за отсутствия показаний с датчиков.На примере 3-й группы -4 показание вывел формулу напряжения. Менял напряжение на ЛБП -снифил, дальше математика. Дело за малым- найти эти формулы для DEC показаний, ведь VAG COM как-то расчитывает эти сырые данные.
Формулы получены. Все ответы дала группа 000 и её расшифровка в ELSA
MaksVV, есть пару вопросов по коду касающегося расчетов расхода топлива.
Бывает повисает и сразу при включении. Попробую закоментировать библиотеку дисплея и всё что с ней связано. Есть вероятность того, как вы мне раньше и писали, что надо МЕГА, а то УНО не справляется.. и тут дело не в питании.
нужно пробовать чисто скетч Александра, если зависоны прекратся, добавлять элементы потихоньку.
Разобрался вот.. UNO не справляется с именно этой библиотекой дисплея. НЕ хватает ресурсов по ходу, надо МЕГА. Закажу на днях.
Без этой библиотеки, зависаний нет(RX моргает постоянно). Получилось вот еще вывести данные в приложение виндовс(нашел на просторах нета и подправил, че мог).. с притормаживанием правда, но работает.. для некоторых проектов, если вдруг нет дисплея, можно использовать. Ну а если довести код до ума, то точно можно использовать..
MaksVV, подскажи пожалуйста еще насчет 110 сообщения.
эх, моя не внимательность ))) Спасибо за подсказку. Вроде как разобрался, так опять непонятки какие то появились.
Вот, что позаимствовал с вашего кода, для расчета расхода топлитва(менял некоторые переменные и незначительно подправлял):
В setup() докинул вот эти строчки:
Функция receive ():
Функция Trip():
Строчку с eeprom не трогал (по тексту написано, что её надо раскомментировать, наверное что бы зачистить,потом сново закомментировать).
Я так понимаю, когда появился обмен дынными между дуней и ЭБУ, сразу же запоминается текущий пробег(одометер) и колличество топлива в баке.. Но почему то переменные получаются нулевыми.
Может перед тем как вызвать эти функции, сделать какую проверку?? ну например проверить переменную пробега(odometer)// если например пробег >5, то тогда наверняка связь присутствует на 100%. или на какой другой переменной. Без срабатывания функции receive (), функция Trip() не заработает. Вероятнее всего, что я сильно урезал receive ()... а именно-нет проверки связи с блоком ЭБУ. Флаги сразу становятся =1, ну и естественно заполняются нулями, так как связь не установлена.
ну конечно, сделай проверку что если переменная болье нуля, то записываем FuelIGN
примерно так
конечно это коряво будет если fuelLevel действительно равен нулю (даже когда связь уже установили), но тогда и ехать не сможем, топлива то нет))
а пробег нулевым тоже только у новой машины бывает)
Сделал проверку на пробег и уровень топлива
Но ноли не пропали. Когда комментровал код, то вошел в кураж и закоментировал в loop, строчки для вызова функций receive() и Trip(). В этом был косяк.. но после обноружения ошибки, эти две строчки решил оставить с проверкой на нули, мало ли))))) что бы пройти стадию тестирования, к дисплею подключил старую библиотеку(что бы не тягать ноут)... обороты правда с задержкой, но меняются и дуня главное не повисает... и основная цель это расчет расхода на 100км и запаса хода. Да и надо ведь как то проверить Ваш труд изложеный в функции Trip ))))). Но думаю всё будет ГУД )))
Есть еще пару вопросав:
1. Реально ли собрать данные за поездку??, не поездку между включениями зажигания, а настоящую поездку. Например по включению флага, мы начинаем записывать сколько проехали и сколько потратили топлива, (ну можно еще и время в пути, средний расход считать...но это не важно, более важнее пробег и трата топлива). С пробегом понятно, флаг поднял (записал текущий пробег)и считай себе разницу. А вот как быть с потраченым топливом, если во время следования будут дозаправки??
2.Реально ли своими силами перенести проект (подкорректировать библиотеки) на NODMCU. Там 4мб памяти, wi-fi на борту. Стоимость меньше чем дуни с wi-fi. Есть просто товарищ который поможет написать приложение на android.
3. Про MC33290, вроде и сопротивление на ножках разное(признак рабочей, а не пустышки) и когда запросы делаешь на ноге K-line просадка идет(диод сигналит).. но все равно где то все теряется. Может заказать L9637, и повыбрасывать эти MC33290, что бы не смущали??
4. Может в ближайшем будущем, ели конечто у тебя будет время и желание поколдуем над протоколом для Ebera(догревателя)?? Буду готов оказать любую помощь.
1. Реально. Главное после заправки перевключить зажигание, чтоб расход литров правильно считался.
2. Не имел дело с nodemcu и вообще с проектами на ESP. ESP использую только как WI-FI адаптер, взаимодействуя с ним по UART АТ командами. В принципе так и можно сделать, чтобы вайфай к проекту добавить.
3. Если мс33290 не рабатают, нужно взять копеечный LM393 с обвзякой из резюков (я уже неоднократно это описывал) или L9637D.
4. можно поколдовать. Начать нужно со сниффера ( либо программного , либо аппаратного) протокола обмена.
Протестировал БК )) Средний расход пощитался гдето через неделю эксплуатации, это скорее всего свяязано с тем, что у меня в течении этой недели были маленькие заезды. На работу 8 км и обратно. Изначально после чистки памяти показывал 25.50, я сразу подумал гдето есть косяк, но продолжил тестить и как видно не зря. Потом начались заезды побольше, и средний расход начал меняться чаще. Сказывается только недостаточность ресурсов UNO, но как показала практика очень много ресурсов забирает библиотека с вводом данных на экран. Средний расход от включения зажигания(за одну поездку) сразу показывает 99, потом 30 или 20 но потом опять 90 или ноль. Это тоже пожет сказваться от недостаточности ресурсов, но сдесь еще может повлиять мой датчик уровня топлива... бывает барахлит при малом колличестве топлива в баку.. надо сделать ревизию, так сказать освежить контакты)))
Нуждаюсь еще в вашей некоторй помощи:
1. По поводу 1-го вопроса с 219 сообщения. Суть я уже понял, но не знаю как реализовать.. а если быть точным как записать все в еепром.
наверное правильнее будет сделать так:
- завести определённую ячейку в еепром (точнее две, т.к. одна это всего 255 км, а две уже 65535км). Это будет, как называют в БК, суточный пробег.
- завести ячейку в еепром для сохранения расхода топлива за суточный пробег, л
- по какому то событию сбрасывать эти два параметра на ноль (например, по нажатию специально сделанной для этой цели кнопки)
- поставить большой конденсатор по питанию ардуино. И контролировать наличие зажигания, чтобы когда оно выключается, МК успевал до разряда конденсатора приплюсовать пробег между включениями зажигания и литры в наши ячейки.
формула для среднего расхода, измеренного в рамках суточного пробега будет такая
Суть я уловил. Но никогда не работал с еепром. Событие для сброса в 0 не прописывал. Тут что-то сошкрябал, надо бы проверить))
в принципе правильно. Вот ещё пример как разбить двухбайтовое число на два отдельных байта , а потом обратно собрать в одно число из двух байт:
Нужно только ввести флаг, что в еепром уже записали, чтобы не испрортить ячейки еепрома и писать туда только один раз. Ну ещё запись литров в ячейку поменял , так более правильно.
Еще пару уточнений...
1. Если в пути, т.е на включеном зажигании я захочу посмотреть суточный расход,пробег, потраченое топливо..
расход в L100MSUT лежит, это понятно...
пробег(
(
float
)kmTrip + (
float
)LongTrip
) и потраченое топливо((
float
)FuelTrip + (
float
)LongFuel
) выводить(на дисплей) сразу как сумму, либо дозоводить переменные только для вывода??без разницы, можешь сразу как сумму
Про конденсаторы, ты так имелл ввиду(когда пропадет питание, у на с еще есть пару сек для записии в еепром) ??? В одной из тем, на прошлой неделе, ты выложил плату для обвязки lm393, надеюсь она правильная ???)))
я тоже надеюсь) только контроль зажигания надо так.
Подскажи, где еще косяки есть. тут потребности чуть поменялись))) Хочу по событию включать свет(тип проводи меня домой будет))) на минуту где-то. Кнопок на плате нет сейчас, но будет приемник.. на пульте 4-ре кнопки. все работает, я раньше испытывал.. у каждой кнопки свой код... можно колдавать)) ну так вот.... Vbat питание, которое подается при снятии с охраны машины, и присутствует после постановки на её обратно, еще пару минут. Правильно ли я сигналю на DRL+ ??)) Брал один в один с другой схемы
т.е. ты на постоянку ардуино запитать хочешь? Тогда кондёры ёмкие становятся не актуальны. (схема с кондёрами предлагалась для питания ардуино от зажигания). И уж тем более диод там не нужен. При постояннном питании ардуино просто контролировать зажигание да и всё. и когда оно выключается записывать в еепром. Но имей ввиду, вся эта схема будет мА 30-40 потреблять. А это совсем не гуд для автомобиля. Про полевики по схеме не подскажу, сам не очень в этом разбираюсь.
я вот такой dc-dc ставил. Он вообще ничего не ест почти. Ну и правильно, что промини взял, она гораздо меньше ест чем нано. Ещё можно штатный led и стабилизатор у неё откусить - ещё меньше есть будет.
ну как на постояну... только когда машина снята с охраны. При постановке на охрану этот плюс пропадает, блок бортовой сети засыпает..примерно через 1-2 минуты. или может по определенному событию(именно когда включено зажигание) подавать этот дополнительный плюс(тоже через полевик какой)...тогда получится что ардуинка будет сама себя отрубать когда надо(т.е до следующего включения зажигания).
Примерно так:
Схема чуть не правильная, поливики надо к Vbat подрубать.
ух ты какая грандиозная работа проделана
может по моему вопросу подскажете, как после L9637D полученные данные ретранслировать в Serial ардуино нано, то бы подключив к пк через уарт работал вагком? так в принципе можно или из-за разницы постоянно меняющихся скоростей обмена вагком ничего не увидит от обд?
ардуино тут не нужно. Вам нужен usb-uart переходник типа ftdi, pl2103, ch340g и т.д.
идея такая, что бы как снифер, даже не снифер, а когда надо - использовать данны с k-line во внутренней программе ардуино и напрямую использовать пк для диагностики через вагком, тоесть получается как бы ардуина как прокладка, тоесть напрммер нажав кнопку, ардуина просто ретранслятор данных, нажал еще раз, уже идет штатаная работа.
через usb-uart все работает, все чипы ( ftdi, pl2103 и другие pl, ch340g) у меня пного разных вариаций и все попробовал
собственно это так, хотелка, основное реализованно, упраения вебастой через смс, автозапуск(пока тестировал частями, состоит из самого пуска и получение данных по оборотам с обд, как раз один из видов штатной работы ардуинки), контроль напряжения аккумуляторов, у меня их 2, температуры разные, умные поворотники, умные стопы и т.д.
да проблема как раз в том что при ините скорость меньше. Хотя и это можно запрограммировать, если захотеть.
подключаем L9637D к 10 и 11 пинам ардуино (софт сериал).
пробуем такой скетч. Ардуино в этом случае должна быть ретранслятором данных.
ух, даже подумать не успел, а уже реализовал, завтра попробую, как раз выходной
спасибо
идея такая, что бы как снифер, даже не снифер, а когда надо - использовать данны с k-line во внутренней программе ардуино и напрямую использовать пк для диагностики через вагком, тоесть получается как бы ардуина как прокладка, тоесть напрммер нажав кнопку, ардуина просто ретранслятор данных, нажал еще раз, уже идет штатаная работа.
через usb-uart все работает, все чипы ( ftdi, pl2103 и другие pl, ch340g) у меня пного разных вариаций и все попробовал
собственно это так, хотелка, основное реализованно, упраения вебастой через смс, автозапуск(пока тестировал частями, состоит из самого пуска и получение данных по оборотам с обд, как раз один из видов штатной работы ардуинки), контроль напряжения аккумуляторов, у меня их 2, температуры разные, умные поворотники, умные стопы и т.д.
Ты проект пилишь под webasto или Eberspacher ?? В дальнейшем, я так понимаю к какомуто готовому приложению для телефона его будешь подгонять для удобства
Ты проект пилишь под webasto или Eberspacher ?? В дальнейшем, я так понимаю к какомуто готовому приложению для телефона его будешь подгонять для удобства
делаю под вебасто, аналоговое, управляется подачей плюса на пин
так же есть еще вебаста с управлением по k-line, то же работает
а так вот такую штуку слепил, сейчас переделываю, на плате преобразователь напряжения на основе кренки, вольтметры(из резисторов), две развязки k-line, что бы одной читать вебасту, другой эбу мотора, так же смонтированы eeprom и оптоуправление реле(накосячил немного с оптопарой, пришлось как то соплей вешать) в общем вот как то так, сейчас из всего я бы оставил все кроме оптопар, блочков с реле вагон и не дорого
еще сейчас тоит gps и sd, далее gps будет убран и оставлен только модуль на SIM808 (gps, gsm, bt)
для трекинга с данными по работе двигателя и координатами, так же сейчас пробую навесить круиз контроль адаптивный, но это чуть позже
MaksVV тоже такой проект делал, гдето есть тут на форуме. что-то там GSM устройство..... От себя добавлю, что вещь будет полезной, полностью можно будет отказаться от дорогих пультов.
Тебе надо найти тот проект и перечитать там всё))) может придется отказаться от половины плюшек, а то аккум посадишь будь здоров))
его проект и видел на начальном этапе, был очень кстати, с него и начал рыть инфу по запуску вебасты с к-линии, так как изначально только такая и была:):):)
теперь у меня есть куча вебаст разных, буду одной дом отапливать в деревне, подогревать анифриз в батареях, если вырубится электричество :)
а по поводу акума, так поэтому и делаю автозапуск, что бы прогреть вебастой мотор, запустить его, поднять потенциометром обороты до 2500, чуть погонять заряд батарей... это если при простое, а так для работы всего этого будет использован только один аккум, при высадке его, будет переключено на другой если надо ехать, с другого подогреть, запуститьтся и далее все подзарядить
есть колдовство
Hello,
I am writing from Bulgaria / Привет из Болгарии.
I am using MC33290 and Arduino UNO.
I tried several sketches but everytime the same story happens. You can see the behaviour in the serial console output below...
I get the proper response from ECU. The car is Golf 4 1.6 AKL ->> KW1281.
I tried to put 5ms delay in the obdwrite() but it is still the same as before.
Can someone please help me to resolve this issue?
Вот ответ на вопроса заголовка темы :) Так же подправлю 3 сообщение, темы и закреплю туда ответ, для того чтобы люди могли сразу найти ответ не перечитывая сообщения. На руках у меня 4-ре рабочих микросхемы mc33290 и 4-ре рабочих схемы L9637D. Проверил их через модуль FTDI заказанный из Китая. Вместо постоянного сопротивления стояли подстроечные резаки номиналом 10К. Сопротивление выставлял на угад, потом замерял :) на L9637D было 900R, на mc33290 было 2,2K. А вот с ардуинкой и софтсериалом еще не подружил. На картинке сопротивление между ногами !!рабочих микросхем, между остальными глухо.
И все же, чем копеечный lm393 не устроил?
Я просто решил дожать эту тему до конца :) А так-то на LM393 это 100% рабочий вариант, единственный недостаток-это рапссыпуха обвязочная вокруг его. Наблюдаю за твоим проектом для управления догревателями, вижу до идеала довели)) Я уже даже купил все компоненты, вот только плату надо вытравить будет. НО у меня ведь Eber, если помнишь...закину на днях снифф... поможешь чуть что, если время у тебя конечно будет
Ребята привет!
Подскажите пожалуйста
Хочу сделать чтобы arduino эмулировал данные ECU авто, например выдавал рандомные обороты двигателя.
К этой ардуино хочу подконектится через обычный VAG KKL 409.1 usb кабель.
То есть Схема такая:
Эмулятор работы авто (Arduino) -> OBD2 разьем мама -> VAG KKL -> Ноутбук с софтом VAG COM
То есть по сути мне нужно пины аrduino RX TX подключить на 7 ногу разьема где работает K line.
Через что подключать RX TX к K line?
Через L9637D ?
Можно еще плиз пример простого скетча который бы имитировал обороты двигателя.
Проект делаю чисто в рамках своего обучения и интереса к диагностике авто :)
Заранее Спасибо.
Хорошего Вам дня :)
Покуда теорию не подтянешь, по книгам, а не мультикам с ютуба, ничего у тебя не выйдет.