Спидометр и тахометр на ARDUINO для автомобиля
- Войдите на сайт для отправки комментариев
Прошу небольшой помощи в маленьком Скетче.
Взято из журнала «Радиоконструктор» №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);
}
На Дисплее есть только km/h и ob/min , а вот самих данных нет.
Что не так?
Покажите мне строчку в коде, где вы выводите на дисплей что-то еще, кроме km/h и ob/min. Ничего не выводите - ничего и нет.
СПАСИБО , исправил.
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");
У меня еще один вопрос.
В интернете много примеров Генераторов П образного сигнала, но они имеют много дополнительных вариантов режимов работы.
В справочниках есть команды но нет простых примеров работы.
Я не понимаю как сделать правильно?
Подскажите пример простого П-генератора с регулировкой частоты от 50 до 2000 герц.
Это нужно для подачи постоянного П- сигнала на ЭБУ мотоцикла, При достижении скорости 179 км/ч.
http://arduino.ru/Reference/Tone
При достижении скорости 179 км/ч.
такое бывает? :)
Если Вам нужна подача сигнала при определенной скорости - то и сигнал явно нужен с определенной частотой, а не "от 50 до 2000 гц"
Частота будет настраиваться 1 раз по конкретный датчик скорости мотоцикла ,желательно самим хозяином, для этого нужна простота понимания скетча.
4 или 6 импульсов на оборот колеса.
Это проблема мотоциклов из Японии, много байков имеют ограничение скорости в 180 км/ч.
Пацаны режут провода на ЭБУ ,перемыкают провода (курочат проводку) чтобы снять ограничение.
Так что проблема общая а решения пока нет.
В реальности диапазон регулировки должен быть 100 до 300 герц. (Всё до 1000 герц)
Это проблема мотоциклов из Японии, много байков имеют ограничение скорости в 180 км/ч.
Пацаны режут провода на ЭБУ ,перемыкают провода (курочат проводку) чтобы снять ограничение.
и что вы собираетесь сделать? Подать в ЭБУ сигнал постоянной частоты, чтобы "мозги" думали, что у вас мот постоянно едет со скоростью 40 кмч? - так они у вас все время и бензин будут лить как будто вы едете 40 кмч - вы не разогнаться как следует не сможете, ни тронуться
->
а по мне это не проблема японских мотоциклов, а их достоинство, хоть кому то жизнь сберечь
ДА правильно. На спидометр сигнал идет как есть ,а вот на ЭБУ идет обманка 178 км/ч.
Такая приставка в продаже :
https://www.croooober.com/en/item/bparts/00000001/Electronics-Accessorie...
Она именно так и работает,но в продаже в России нет и ценник высокий.(от 6000 до 8000)
Либо Dynojet Motorcycle Power Comander ,это ставится уже на спорт.
ДА правильно. На спидометр сигнал идет как есть ,а вот на ЭБУ идет обманка 178 км/ч.
Она именно так и работает,но в продаже в России нет и ценник высокий.(от 6000 до 8000)
Тогда правильнее до 178 кмч пропускать сигнал на ЭБУ не меняя, а после 178 кмч пускать на ЭБУ обманку. Если сигнал обычный меандр, сконструировать такой девайс не должно быть сложно.
Хотя идею японцев ограничить двухколесных 180 кмч всецело поддерживаю. Еще лучше 120 кмч...
А что, идея... Мож сконструировать такой лимитатор? До 120 кмч на Эбу идет сигнал со спидометра, а после 120кмч посылаем меандр, соответвующий 190 кмч :) Думаю, многие мужья своим женам-байкершам такое бы с удовольствием поставили :)
На испытаниях появилась небольшая проблема. Решить ее при помощи функции 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);
}
Вы это через реле делаете?
"Е-мое, как же вы отстали..."
Откройте для себя гистерезис
С такими скетчами на ходу будет релюшки менять, как рожок в автомате.
да пофиг , че там на 180ти релюху замахнуть, пояс с релюшками главное взять.
Реле ставим для простоты ремонта в ЛЕСУ и под дождем. Возможно ночью.
Все делается как на армейских сборках. Вынул блок , вставил новый, не помогло, выкинул все и поехал в штатном режиме.
Тут схемотехнику Вам как выложить?
На 180 народ ездит не так часто, так что должно все выдерживать.
По городу не больше 140 катаем.
За городом 140 до 160 . Остальное все в рывке на обгоне или кольцевая. Fokus ДПС идет 260 )) Надо как-то отрываться.
Про гистерезис в курсе. Часто применяется на реле времени (стоят у меня на станциях прогрева бетона).
Зря вы так на реле. У меня они годами служат в кошмарных условиях.
В современных мотоциклах стоит минимум 4 релюшки и служат они Десятилетиями ))
По городу не больше 140 катаем.
А вы из какого города?
Тут схемотехнику Вам как выложить?
а зачем выкладывать? лично я помогать вам разгонять байк быстрее 180-ти не собираюсь
Реле ставим для простоты ремонта в ЛЕСУ и под дождем. Возможно ночью.
Все делается как на армейских сборках. Вынул блок , вставил новый, не помогло, выкинул все и поехал в штатном режиме.
Тут схемотехнику Вам как выложить?
На 180 народ ездит не так часто, так что должно все выдерживать.
По городу не больше 140 катаем.
За городом 140 до 160 . Остальное все в рывке на обгоне или кольцевая. Fokus ДПС идет 260 )) Надо как-то отрываться.
У реле есть такой минус как дребезг.
Делей нужно снизить до максимальных оборотов колеса + учесть время на исполнение кода или расчет будет врать.
Про гистерезис в курсе. Часто применяется на реле времени (стоят у меня на станциях прогрева бетона).
Зря вы так на реле. У меня они годами служат в кошмарных условиях.
В современных мотоциклах стоит минимум 4 релюшки и служат они Десятилетиями ))
В современной технике реле стоят только на включение там где требуется высокое потребление энергии.
Остольное все работает через МК с ключами.
Ни фига сибе ЭБУ с битономешалкой сравнил)))))
По городу не больше 140 катаем.
А вы из какого города?
А хрустики в любом городе так ездят.
Скутер только не может нарушить скоростной режим))))
В современных мотоциклах стоит минимум 4 релюшки и служат они Десятилетиями ))
Сам понял, что написал?
Если не понял, поясню: машину времени еще не изобрели, поэтому
1. Ни один из современных мотоциклов еще не прожил несколько десятилетий.
2. Ни один из мотоциклов, выпущенных несколько десятков лет назад, не является современным.
Мотоциклисты - они как астронавты. Время для них течет иначе.
На испытаниях появилась небольшая проблема. Решить ее при помощи функции 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 км.ч
ВАЖНО !!! НА МАКСИМАЛЬНОЙ СКОРОСТИ МОЖЕТ СРАБОТАТЬ ОТСЕЧКА.
А хрустики в любом городе так ездят.
Не соглашусь. У нас большинство долбоебов уже попереубивали себя. Естественный отбор, что уж там. Даже фильтрация стала нечастым явлением и, как правило, по взаимному согласию других участников дд. Вот и интересуюсь, где еще такие утырки остались, которые по городу 140 херачат на своих кончитах.