Спидометр и тахометр на ARDUINO для автомобиля

Foks131
Offline
Зарегистрирован: 23.02.2021

Прошу небольшой помощи в маленьком Скетче.

Взято из журнала «Радиоконструктор» №12 за 2016 год.

Мною было изменено подключение библиотеки дисплея на I2C для LCD1602

На Дисплее есть только km/h и ob/min , а вот самих данных нет.

Что не так?

С генератора импульсов NE555 На 8 ногу

 подаю П-образный тест-сигнал амплитудой 4.7 вольт, скважность 50% с частотой 1000 Гц

 

/*Спидометр и тахометр с сигналом превышения скорости */
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Подключение библиотеки

LiquidCrystal_I2C lcd(0x27,16,2);

int Htime1;                         //длительность положительного полупериода датчика скорости
int Ltime1;                        //длительность отрицательного полупериода датчика скорости
int Htime;                        //длительность положительного полупериода датчика зажигания
int Ltime;                       //длительность отрицательного полупериода датчика зажигания
float Ttime1;                   //период датчика скорости
float Ttime;                   //период датчика зажигания
float frequency1;             //Скорость движения
float frequency;             //частота вращения "коленвала"
void setup()
{
   lcd.init();                      // Инициализация дисплея  
  lcd.backlight();                 // Подключение подсветки
  lcd.setCursor(0,0);              // Установка курсора в начало первой строки
  lcd.print("Hello");      
  pinMode (8, INPUT);
  pinMode (10, INPUT);  
  pinMode (11, OUTPUT);
  pinMode (12, OUTPUT);

}
void loop() {
Htime1=pulseIn(8,HIGH);
Ltime1=pulseIn(8,LOW);
Htime=pulseIn(10,HIGH);
Ltime=pulseIn(10,LOW);

Ttime1=Htime1+Ltime1;
frequency1=1440000/Ttime1;//Скорость движения,Если датчик дает 6000 импульсов на километр:
                                              //3600000000/6000=600000
Ttime=Htime+Ltime;
frequency=30000000/Ttime;
if(frequency1>100)digitalWrite(11, HIGH);
if(frequency1<100)digitalWrite(11, LOW);
if(frequency1>50)digitalWrite(12, HIGH);
if(frequency1<50)digitalWrite(12, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("km/h");
lcd.setCursor(1,1);
lcd.print("ob/min");
delay(500);
}

b707
Offline
Зарегистрирован: 26.05.2017

Foks131 пишет:

На Дисплее есть только km/h и ob/min , а вот самих данных нет.

Что не так?

Покажите мне строчку в коде, где вы выводите на дисплей что-то еще, кроме km/h и ob/min. Ничего не выводите - ничего и нет.

Foks131
Offline
Зарегистрирован: 23.02.2021

СПАСИБО , исправил.

lcd.clear();
lcd.setCursor(0,0);
lcd.print(frequency1,0);
lcd.print("km/h");
lcd.setCursor(0,1);
lcd.print (frequency,0);
lcd.print("ob/min");

Foks131
Offline
Зарегистрирован: 23.02.2021

У меня еще один вопрос.

В интернете много примеров Генераторов П образного сигнала, но они имеют много дополнительных вариантов режимов работы.

В справочниках есть команды но нет простых примеров работы.

Я не понимаю как сделать правильно?

Подскажите пример простого П-генератора с регулировкой частоты от 50 до 2000 герц.

Это нужно для подачи постоянного П- сигнала на ЭБУ мотоцикла, При достижении скорости 179 км/ч.

 

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020
b707
Offline
Зарегистрирован: 26.05.2017

Foks131 пишет:

При достижении скорости 179 км/ч.

такое бывает? :)

Если Вам нужна подача сигнала при определенной скорости - то и сигнал явно нужен с определенной частотой, а не "от 50 до 2000 гц"

Foks131
Offline
Зарегистрирован: 23.02.2021

Частота будет настраиваться 1 раз по конкретный датчик скорости мотоцикла ,желательно самим хозяином, для этого нужна простота понимания скетча.

4 или 6 импульсов на оборот колеса.

Это проблема мотоциклов из Японии, много байков имеют ограничение скорости в 180 км/ч.

Пацаны режут провода на ЭБУ ,перемыкают провода (курочат проводку)  чтобы снять ограничение.

Так что проблема общая а решения пока нет.

В реальности диапазон регулировки должен быть  100 до 300 герц. (Всё до 1000 герц)

 

 

b707
Offline
Зарегистрирован: 26.05.2017

Foks131 пишет:

Это проблема мотоциклов из Японии, много байков имеют ограничение скорости в 180 км/ч.

Пацаны режут провода на ЭБУ ,перемыкают провода (курочат проводку)  чтобы снять ограничение.

и что вы собираетесь сделать? Подать в ЭБУ сигнал постоянной частоты, чтобы "мозги" думали, что у вас мот постоянно едет со скоростью 40 кмч? - так они у вас все время и бензин будут лить как будто вы едете 40 кмч  - вы не разогнаться как следует не сможете, ни тронуться

MaksVV
Offline
Зарегистрирован: 06.08.2015

b707 пишет:
и что вы собираетесь сделать? Подать в ЭБУ сигнал постоянной частоты, чтобы "мозги" думали, что у вас мот постоянно едет со скоростью 40 кмч?

->

Foks131 пишет:
Это нужно для подачи постоянного П- сигнала на ЭБУ мотоцикла, При достижении скорости 179 км/ч.

а по мне это не проблема японских мотоциклов, а их достоинство, хоть кому то жизнь сберечь

Foks131
Offline
Зарегистрирован: 23.02.2021

ДА правильно. На спидометр сигнал идет как есть ,а вот на  ЭБУ идет обманка 178 км/ч.

Такая приставка в продаже :

https://www.croooober.com/en/item/bparts/00000001/Electronics-Accessorie...

Она именно так и работает,но в продаже в России нет и ценник высокий.(от 6000 до 8000)

Либо Dynojet Motorcycle Power Comander ,это ставится уже на спорт.

 

 

 

 

b707
Offline
Зарегистрирован: 26.05.2017

Foks131 пишет:

ДА правильно. На спидометр сигнал идет как есть ,а вот на  ЭБУ идет обманка 178 км/ч.

Она именно так и работает,но в продаже в России нет и ценник высокий.(от 6000 до 8000)

Тогда правильнее до 178 кмч пропускать сигнал на ЭБУ не меняя, а после 178 кмч пускать на ЭБУ обманку. Если сигнал обычный меандр, сконструировать такой девайс не должно быть сложно.

Хотя идею японцев ограничить двухколесных 180 кмч всецело поддерживаю. Еще лучше 120 кмч...

А что, идея... Мож сконструировать такой лимитатор? До 120 кмч на Эбу идет сигнал со спидометра, а после 120кмч посылаем меандр, соответвующий 190 кмч :) Думаю, многие мужья своим женам-байкершам такое бы с удовольствием поставили :)

Foks131
Offline
Зарегистрирован: 23.02.2021

На испытаниях появилась небольшая проблема. Решить ее при помощи функции delay не получится.

При движении на скорости близкой к 180 (на стенде), обороты и скорость немного плавают, в связи с чем бывают судорожные переключения реле.

Как правильно сделать задержку команды на одну секунду при снижении скорости  173 ?

Это условие даст более плавную работу устройства.

Очень важный параметр , боюсь неправильно сделаю. Подскажите?

/*Speed Limiter Cut CB1300SF */
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Подключение библиотеки

LiquidCrystal_I2C lcd(0x27,16,2);

int Htime1;           //длительность положительного полупериода датчика скорости
int Ltime1;          //длительность отрицательного полупериода датчика скорости
int Htime;          //длительность положительного полупериода датчика зажигания
int Ltime;         //длительность отрицательного полупериода датчика зажигания
float Ttime1;               //период датчика скорости
float Ttime;                 //период датчика зажигания
float frequency1;            //Скорость движения
float frequency;             //частота вращения "коленвала"
void setup()
{
   lcd.init();             // Инициализация дисплея  
  lcd.backlight();        // Подключение подсветки
  lcd.setCursor(0,0);    // Установка курсора в начало первой строки
  lcd.print("Hello");      
 
  pinMode (8, INPUT);
  pinMode (10, INPUT);  
  pinMode (11, OUTPUT);
  pinMode (12, OUTPUT);
 
  pinMode(9, OUTPUT); // объявляем пин 3 как выход
}
void loop() {

tone(9,300);           // включаем сигнал с частотой 300 Гц 50%.Симулятор датчика скорости.

Htime1=pulseIn(8,HIGH);
Ltime1=pulseIn(8,LOW);
Htime=pulseIn(10,HIGH);
Ltime=pulseIn(10,LOW);

Ttime1=Htime1+Ltime1;
frequency1=1440000/Ttime1;  //Shift-lamp
Ttime=Htime+Ltime;
frequency=1440000/Ttime;   //Если датчик на 2500 импульсов на км (японский)
if(frequency1>178)digitalWrite(11, HIGH);//Скорость
if(frequency1<173)digitalWrite(11, LOW); //Скорость

if(frequency1>175)digitalWrite(12, HIGH); //Shift-lamp
if(frequency1<175)digitalWrite(12, LOW); //Shift-lamp

lcd.clear();
lcd.setCursor(0,0);
lcd.print(frequency1,0);
lcd.print("km/h");
lcd.setCursor(0,1);
lcd.print (frequency,0);
lcd.print("ob/min");

delay(500);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Вы это через реле делаете?
"Е-мое, как же вы отстали..."

Откройте для себя гистерезис

sadman41
Offline
Зарегистрирован: 19.10.2016

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

да пофиг , че там на 180ти релюху замахнуть, пояс с релюшками главное взять. 

Foks131
Offline
Зарегистрирован: 23.02.2021

Реле ставим для простоты ремонта в ЛЕСУ и под дождем. Возможно ночью.

Все делается как на армейских сборках. Вынул блок , вставил новый, не помогло, выкинул все и поехал в штатном режиме.

Тут схемотехнику Вам как выложить?

На 180 народ ездит не так часто, так что должно все выдерживать.

По городу не больше 140  катаем.

За городом  140 до 160 . Остальное все в рывке на обгоне или кольцевая. Fokus ДПС идет 260 )) Надо как-то отрываться.

Foks131
Offline
Зарегистрирован: 23.02.2021

Про гистерезис в курсе. Часто применяется на реле времени (стоят у меня на станциях прогрева бетона).

Зря вы так на реле.  У меня они годами служат в кошмарных условиях.

 В современных мотоциклах стоит минимум 4 релюшки и служат они Десятилетиями ))

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Foks131 пишет:

По городу не больше 140  катаем.

А вы из какого города?

b707
Offline
Зарегистрирован: 26.05.2017

Foks131 пишет:

Тут схемотехнику Вам как выложить?

а зачем выкладывать? лично я помогать вам разгонять байк быстрее 180-ти не собираюсь

infyniti
Offline
Зарегистрирован: 15.07.2017

Foks131 пишет:

Реле ставим для простоты ремонта в ЛЕСУ и под дождем. Возможно ночью.

Все делается как на армейских сборках. Вынул блок , вставил новый, не помогло, выкинул все и поехал в штатном режиме.

Тут схемотехнику Вам как выложить?

На 180 народ ездит не так часто, так что должно все выдерживать.

По городу не больше 140  катаем.

За городом  140 до 160 . Остальное все в рывке на обгоне или кольцевая. Fokus ДПС идет 260 )) Надо как-то отрываться.

У реле есть такой минус как дребезг.

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

infyniti
Offline
Зарегистрирован: 15.07.2017

Foks131 пишет:

Про гистерезис в курсе. Часто применяется на реле времени (стоят у меня на станциях прогрева бетона).

Зря вы так на реле.  У меня они годами служат в кошмарных условиях.

 В современных мотоциклах стоит минимум 4 релюшки и служат они Десятилетиями ))

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

Остольное все работает через МК с ключами.

Ни фига сибе ЭБУ с битономешалкой сравнил)))))  

infyniti
Offline
Зарегистрирован: 15.07.2017

Rumata пишет:

Foks131 пишет:

По городу не больше 140  катаем.

А вы из какого города?

А хрустики в любом городе так ездят.

Скутер только не может нарушить скоростной режим))))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Foks131 пишет:

 В современных мотоциклах стоит минимум 4 релюшки и служат они Десятилетиями ))

Сам понял, что написал?

Если не понял, поясню: машину времени еще не изобрели, поэтому

1. Ни один из современных мотоциклов еще не прожил несколько десятилетий.

2. Ни один из мотоциклов, выпущенных несколько десятков лет назад, не является современным.

sadman41
Offline
Зарегистрирован: 19.10.2016

Мотоциклисты - они как астронавты. Время для них течет иначе.

infyniti
Offline
Зарегистрирован: 15.07.2017

Foks131 пишет:

На испытаниях появилась небольшая проблема. Решить ее при помощи функции delay не получится.

При движении на скорости близкой к 180 (на стенде), обороты и скорость немного плавают, в связи с чем бывают судорожные переключения реле.

Как правильно сделать задержку команды на одну секунду при снижении скорости  173 ?

Это условие даст более плавную работу устройства.

Очень важный параметр , боюсь неправильно сделаю. Подскажите?

/*Speed Limiter Cut CB1300SF */
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Подключение библиотеки

LiquidCrystal_I2C lcd(0x27,16,2);

int Htime1;           //длительность положительного полупериода датчика скорости
int Ltime1;          //длительность отрицательного полупериода датчика скорости
int Htime;          //длительность положительного полупериода датчика зажигания
int Ltime;         //длительность отрицательного полупериода датчика зажигания
float Ttime1;               //период датчика скорости
float Ttime;                 //период датчика зажигания
float frequency1;            //Скорость движения
float frequency;             //частота вращения "коленвала"
void setup()
{
   lcd.init();             // Инициализация дисплея  
  lcd.backlight();        // Подключение подсветки
  lcd.setCursor(0,0);    // Установка курсора в начало первой строки
  lcd.print("Hello");      
 
  pinMode (8, INPUT);
  pinMode (10, INPUT);  
  pinMode (11, OUTPUT);
  pinMode (12, OUTPUT);
 
  pinMode(9, OUTPUT); // объявляем пин 3 как выход
}
void loop() {

tone(9,300);           // включаем сигнал с частотой 300 Гц 50%.Симулятор датчика скорости.

Htime1=pulseIn(8,HIGH);
Ltime1=pulseIn(8,LOW);
Htime=pulseIn(10,HIGH);
Ltime=pulseIn(10,LOW);

Ttime1=Htime1+Ltime1;
frequency1=1440000/Ttime1;  //Shift-lamp
Ttime=Htime+Ltime;
frequency=1440000/Ttime;   //Если датчик на 2500 импульсов на км (японский)
if(frequency1>178)digitalWrite(11, HIGH);//Скорость
if(frequency1<173)digitalWrite(11, LOW); //Скорость

if(frequency1>175)digitalWrite(12, HIGH); //Shift-lamp
if(frequency1<175)digitalWrite(12, LOW); //Shift-lamp

lcd.clear();
lcd.setCursor(0,0);
lcd.print(frequency1,0);
lcd.print("km/h");
lcd.setCursor(0,1);
lcd.print (frequency,0);
lcd.print("ob/min");

delay(500);
}

 

Я не в зуб ногой что у тебя здесь понаписано но подскажу.

то какой сигнал с какой частатой принимает ардуино ей как и другому МК фиолетово. Есть сигнал, будет считать

Думаю и мозгу мотика тоже фиолетово.

Но на всякий случай нужно проверить какой сигнал приходит и выходит с ардуино.Выходить должен такой же какой приходит.

Если мозги не знают на какой передаче мотик то все просто принимаешь сигнал делишь на 5 и 5 сигнал отпровляешь на мозг мотика.Это будет соответствовать 300 км.ч.

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

Делей и код ардуино должен выполнятся соответствовать времени максимальной скорости между импульсами на скорости 300 км.ч

ВАЖНО !!! НА МАКСИМАЛЬНОЙ СКОРОСТИ МОЖЕТ СРАБОТАТЬ ОТСЕЧКА. 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

infyniti пишет:

А хрустики в любом городе так ездят.

Не соглашусь. У нас большинство долбоебов уже попереубивали себя. Естественный отбор, что уж там. Даже фильтрация стала нечастым явлением и, как правило, по взаимному согласию других участников дд. Вот и интересуюсь, где еще такие утырки остались, которые по городу 140 херачат на своих кончитах.