-
Вложений: 1
Бортовой компьютер мотоцикла
Здравствуйте, зашел к вам просить помощи. Тут намедни озадачился разработкой бортового компьютера для мотоцикла. С Ардуино мало знаком, но с программированием знаком (давно не практиковался вот мое, одно из творений, если интересно http://autoit-script.ru/index.php?topic=1456.0)
В процессе подготовки столкнулся с вопросом о поиске элементов, точнее их комбинации. Хочу проконсультироваться - то ли я хочу заказать, хватит ли мне портов для моей задачи ?
Arduino Uno
LCD Keypad Shield (будет меню с настройками)
Реле шилд для Arduino, 4 реле
Цифровой датчик температуры и влажности
Вложение 18283
Входа
1. Вход 12В, по этой команде из EEPROM считывается пробег. Как преобразовать в 5В ? (стабилизатор 14 - 5 ?)
Возможно ли измерение бортового напряжения ?
2. Вход 12В с датчика скорости. Как преобразовать в 5В ? (оптопара ?)
3. Минус (датчик нейтрали)
4. Цифровой датчик температуры и влажности
5. Резистивный датчик температуры на мотоцикле. Можно будет по нему мерить температуру ?
8. Минус на этом входе при включении вентилятора (перепутал на картинке)
9. Герконы - первая.2.3.4.5. скорость
Выходы
6. LCD Keypad Shield
7. Генератор прямоугольников 12В , пока под вопросом
10. Реле шилд, 4 реле, в задумке использовать два.
11. Светодиод, сигнализатор для привлечения внимания
Большая просьба посмотреть, возможна ли реализация проекта, если есть ошибки, поправьте.:rolleyes:
-
Re: Бортовой компьютер мотоцикла
Здесь найдете ответы на многие Ваши вопросы.
Здесь много уроков и конкретных примеров по ардуино.
Дисплей OLED LCD Display I2C 0.96 IIC Serial 128X64.
Обратите внимание на Arduini Nano или Arduini Mini, они компактнее, а функционал тот же.
Датчик температуры DS18B20.
Если нужно 2 реле, зачем шилд на четыре?
-
Re: Бортовой компьютер мотоцикла
Ок, спасибо.
Видео конечно интересные, но на них интересный мужчина без футболки, ничего интересного по моей теме не сказал.
Дисплей крутой но очень маленький, мне всё же по душе большой 16x2 для начала моей деятельности.
Четыре, реле для возможной модернизации.
Зачем делать вот это - digitalWrite(8, HIGH)
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
1. Сигнал +12 заводим след образом на рис.1.1 и 1.2 два варианта. в обоих случаях нужно подключить внутренний подтягивающий резистор, по простому установить командой digitalWrite (10, HIGH); и на изменение уровня с HIGH на LOW уже назначать действие см пример кода.
Измерить бортовое Напряжение аналоговым портом, допустим А0 см на рис.1.3 данный делитель даст на выходе 4.2в по формуле U out = U in * R1 / (R1+R2) 25v * 1k/(5k+1k) ссылка на вольтметр на Arduino только принятое значение не отсылать компу как в примере по ссылке, а записывать в переменную и с полученными данными уже работать. полное описание всех возможностей и програмирования Arduino
2. любой ISO конвертер или оптопарой как на рис.1.4 читать сигнал либо Uart (Serial.read) , но в это время не будет возможности прочитать сигнал и отправить для просмотра в комп, это возможно только на Arduino Mega так как она имеет несколько Uart портов. библиотеки с програмными портами не советую, они либо работают не коректно, либо занимают таймер который в постедствии использует другая функция и начинаются траблы, в таких случаях нужно точно знать какой библиотекой пользуещься и как она работает. Можно по внешним прирываниям о них подробно написанно по ссылке выше. но я бы использовал единственный Uart без отправки в комп.
3. Думаю все понятно.
4. какой датчик? свой?
5. Все возможно, но нужно мутить делитель и калибровать програмно. подключая к аналоговому порту.
6. я бы взял тачскрин. он использует меньше выходов какую модель дисплея использовать планируешь? нужно конкретно знать что бы посчитать что после ее подключения останется.
7. что за генератор прямоугольников, для чего?
8. с вентилятором то же самое что и с сигналом нейтралки.
9. герконы заводим так же. не понял с герконами, как это работает? герконов 2 а скоростей 5
10. можно использоать 2 аналоговых выхода для управления релюшками. что бы установить аналоговый выход как дигитальный нужно учесть сколько дигитальных выходов на плате. например UNO имеет 14 (0-13). значит что бы установить А0 как дигитальный выхот нужно прописать pinMode(14, OUTPUT); соответственно А1, А2, А3... будут 15, 16, 17...
11. от светодиода советую отказаться, либо повесить его если останется свободный выход.
Сэкономить выхода можно путем завода лог сигналов в аналоговый порт средством резистивного делителя, но здесь уже внешную схемку мутить надо. рис.1.5
предварительный деагноз: если хорошо аганизовать то можно на Uno все повесить, на Leanardo полюбому все встанет.
сейчас немного туго со временем, как освобожусь накидаю примерчик скеча для Arduino.
-
Re: Бортовой компьютер мотоцикла
Не ожидал такой подробный ответ, приятно с вами иметь дело.
С функционалом почти сам разобрался, сегодня пол дня читал мануал и скетчи, всё просто оказывается. За помощь спасибо, я хочу сам попробовать, лучше потом проверишь готовый скетч ;) скоро нарисую в Spaln`e принципиальную схему, выложу на суд общественности.
Ладно уговорил согласен на Mega! там выходов ни меренное количество как оказалось, отпадает нужность в плате расширения для дисплея, с пяти кнопочной клавиатурой, да и геморроя меньше с делителями напряжения, не нужно экономить выхода.
4. Датчик - DHT11
5. От этого датчика работает штатный прибор измерения температуры , делитель помешает ему работать ?!
6. Дисплей - wh1602a-tmi к примеру.
7. В панели приборов стрелки тахометра и спидометра управляются сигналом - прямоугольными импульсами, хочу сделать красиво, что бы при включении зажигания стрелки передергивались в максимум и обратно.
9. В мотоцикле коробка секвентальная (последовательная), те лапка ходит в верх и в низ, соответственно - (первая в низ геркон №1), (датчик нейтрали для синхронизации), (вторая, третья ... в верх геркон №2)
-
Re: Бортовой компьютер мотоцикла
4.С DHT проблем не будет
5. Не стоит к нему лепиться, если от схемы зацепиться то можно, но я не стал бы к нему лезьть, лучше оставить штатную систему управления в покое.
6. Дисплей посмотрел, все поместится и на UNO без лишнего мутилова, выходов хватит. Мега единственно будет лучше если сигнал от штатных мозгов допустим пакетные данные то проще будет завести его через второй uart а если допустим просто сигнал от датчика скорости изменяет лиш длинну сигнала пропорцеонально скорости, то лучше на измерении внешних приреваний делать. Поясни в чем цель? Считать скорость и вывести на дисплей или управлять стрелками тахометра и спидометра?
Насчет герконов понял, они как кнопки, типа в верх в низ.
Рисуй схему там посмотрим что к чему, если что поправим.
-
Re: Бортовой компьютер мотоцикла
Сигнал датчика скорости нужен для расчёта пробега до сервиса - замена масла, смазка цепи и прочего.
А генератор прямоугольных импульсов нужен для этого (внимание на стрелки :p) - http://www.youtube.com/watch?feature...&v=FVa0B-n815U
-
Re: Бортовой компьютер мотоцикла
Это все конечно супер, но нужно будет много экспериментировать и раскодировать протокол и конвертировать сигнал, это ведь не так что дал стрелкам какой то прямоугольный сигнал и они себе от нехрин делать прыгнули туда сюда :) они понимают эти прямоугольники по конкретному протоколу и им нужно точно и ясно на понятном им языке сказать куда прыгнуть и куда вернуться. Я так понимаю там есть какая то шина по которой идет коммуникация, и к этой шине надо цепляться и общаться с датчиком скорости и стрелками. Что за мотоцикл? Скинь подробное название, типа марка и модель.
Пс: хотя все может быть и на много проще чем я думаю, может частота импульса изменяется с повышением скорости, и передвижение стрелок тоже реагирует на частоту импульсов.
-
Re: Бортовой компьютер мотоцикла
Нет там ни какой шины данных :p
Сигнал с датчика скорости (Холла) поступает сразу в панель.
Сигнал с датчика коленвала (индуктивный) поступает сначало в ECM, там преобразуется в прямоугольники АЦП и так же идёт в панель.
... работаю электриком диагностом ;)
-
Re: Бортовой компьютер мотоцикла
Ну тогда все понятно и не страшно, оба сигнала можно завести на внешние прирывания, как раз uno может обрабатывать 2 внешних прирывания.
-
Re: Бортовой компьютер мотоцикла
Может леонардо лучше, хотя он подозрительно дешевле ?
-
Re: Бортовой компьютер мотоцикла
Конечно лучше но есть ли смысл, в твоем случае хватит и UNO. Leonardo обрабатывает больше внешних прирываний (4) и выходов побольше, если еще и дешевле то конечно лучше леонардо. Цена может зависеть от сборки, может ты смотрел клона? Они обычно в разы дешевле.
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
XsanderS
Конечно лучше но есть ли смысл, в твоем случае хватит и UNO. Leonardo обрабатывает больше внешних прирываний (4) и выходов побольше, если еще и дешевле то конечно лучше леонардо. Цена может зависеть от сборки, может ты смотрел клона? Они обычно в разы дешевле.
На клона не похож
На этом сайте есть всё что нужно, НО дисплеев млять нету, где заказать ещё можно, что бы всё и сразу ?
-
Вложений: 4
Re: Бортовой компьютер мотоцикла
Начал моделировать схему, думаю о делителе напряжения для кнопок меню.
Такой делитель напряжения допустим на аналоговый вход ?
Вложение 18293Вложение 18294Вложение 18295Вложение 18296
-
Re: Бортовой компьютер мотоцикла
Допустим , но только сопротивления нужно уменьшить, иначе будет реагировать на помехи
P.S.
Привет, XsanderS!
Давненько тебя здесь не было.
Как твои дала?
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Я бы вот так сделал.
Уже определился с Arduino? Какую версию выбрал?
Пс: Привет Chip, спасибо все хорошо, были небольшие трудности )) но сейчас все ок, опять полон сил и идей)) да и мяса в голове надо было подкопить, а то мои идеи не совпадали с моими возможностями.
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Вложение 18338
вот мой заказ, скоро приедет
-
Re: Бортовой компьютер мотоцикла
А чем будет отличаться код для UNO и LEONARDO для дисплея I2C ?
Для UNO дисплей подключается к A4 -A5
Для LEONARDO подключается соответственно к SDA и SCL ?
Получается если мне нужно повесить на шину I2C ещё и датчик температуры, то выводы SDA и SCL нужно подключить через подтягивающие резисторы ?
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Вот и пришёл мой заказ, но без ложки дёгтя не обошлось - перепутали дисплеи, вместо LED положили от Nokia. Шаманство с графическим меню откладывается до конца новогодних праздников... :mad:
Вложение 18357
-
Re: Бортовой компьютер мотоцикла
Кто нибудь сталкивался, датчик температуры DS18B20 в кипящей воде показывает 70 градусов, запустил скетч из примера к библиотеке OneWire. Менял два датчика на обоих одинаково.
-
Re: Бортовой компьютер мотоцикла
Если 70 градусов, то датчики не читаются. Проверяй подключение и инициализацию пинов.
-
Re: Бортовой компьютер мотоцикла
Комнатную температуру нормально показывает.
-
Re: Бортовой компьютер мотоцикла
Датчик изолирован? Ищи причину по которой датчик не читается.
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Датчик работает, проверял цифровым термометром. Кипящая вода фиг с ней ... этот датчик будет показывать от 0 до 35, большие пределы мне не интересны.
Вложение 18360
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Итак схема.
A0 - Датчик уровня топлива
А1 - Датчик температуры
А4 - Герконы (повышение - понижение скорости)
А5 - К замку зажигания клемма +15
D4 - Минус датчика нейтрали для синхронизации канала (А4)
D5 - Контроль работы вентилятора охлаждения
D6 - Контроль работы топливной помпы
D7,8 - Принудительное включение вентилятора охлаждения и помпы (частота включения 1Гц)
D10 - Датчик температуры наружного воздуха
D11 - Кнопка для меню
D12 - Светодиод не исправности
D13 - Датчик скорости
SCL, SDA - правильно ?
Вложение 18361
-
Re: Бортовой компьютер мотоцикла
Подскажите как сделать таймер например для светодиода (что бы мигал с интервалом 5/5 сенунд) используя millis(), всю голову сломал. :confused:
-
Вложений: 5
Re: Бортовой компьютер мотоцикла
Сегодня по паял не много, конструктивно все будет находится внутри корпуса от сигнализации ШЕРХАН.
Пины от Ардуины не будут жестко связаны с платой, а подсоединены через шлейф.
Вложение 18371
Вложение 18372
Вложение 18373
Вложение 18374
Вложение 18375
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
Oleg_33
Подскажите как сделать таймер например для светодиода (что бы мигал с интервалом 5/5 сенунд) используя millis(), всю голову сломал. :confused:
Вот так:
PHP код:
static unsigned long time;
if ((millis()-time)>5000) //запуск процедуры Temp по таймеру каждые пять секунд
{
time = millis();
Temp(); // замените на нужное Вам действие
}
-
Re: Бортовой компьютер мотоцикла
Да спасибо, так уже пробовал.
У меня датчик температуры считывает показания и при достижении пограничной температуры срабатывания, реле (которым управляет датчик) начинает дребезжать, тк показания не успевают перевалить за пограничную температуру.
Пришлось сделать не симметричный таймер 100мс/5000мс.
У меня так получилось:
PHP код:
int ledPin = 3;
unsigned long currentTime;
unsigned long loopTime;
int TEMP_CURENT;
int Timer = LOW;
void setup()
{
pinMode(ledPin, OUTPUT);
}
int _Timer(int l, int h)
{
currentTime = millis();
if(currentTime >= (loopTime + l) && (Timer != HIGH)){ //
digitalWrite(ledPin, LOW);
loopTime = currentTime;
Timer = HIGH;
}
if(currentTime >= (loopTime + h) && (Timer = HIGH)){ //
digitalWrite(ledPin, HIGH);
loopTime = currentTime;
Timer = LOW;
Serial.println(TEMP_CURENT);
return 1;
}
}
void loop()
{
if (_Timer(100, 5000)) TEMP_CURENT = analogRead(0);
}
-
Re: Бортовой компьютер мотоцикла
Сегодня написал первые строки ... жду дисплей.
Выслушаю любую критику по поводу кода :p кстати он рабочий.
PHP код:
// Аналоговые пины
const int ANALOG_TEMP_PIN = 0;
//
// Цифровые пины
const int DIGITAL_RELAY_PIN = 3;
const int DIGITAL_LED_PIN = 13;
//
// Глобальные переменные
int RELAY_CURENT; // Текущее состояние реле
int TEMP_CURENT_ANALOG; // Показания с АЦП
int TIMER_STOP = false; // ?
//
//_Timer()
int Timer = LOW;
unsigned long currentTime;
unsigned long loopTime;
//
//int TEMP_ARRAY[4] = {88,130,150}; // напряжение ацп [отключение, включение, перегрев]
// Константы для вентилятора охлаждения
const int LOW_COLING_FAN = 2;
const int HIGH_COLING_FAN = 3;
const int ERROR_COLING_FAN = 4;
int _Timer(int l, int h) // Возвращет 5 после времени 'l' и 10 после времени 'h', если 'l' и 'h' = -1 то останавливаем таймер
{
/* if (l == -1 && h == -1)
{
TIMER_STOP = true;
return -1;
}
else if (TIMER_STOP = true) return -1; // не выполняем таймер
*/
currentTime = millis();
if(currentTime >= (loopTime + l) && (Timer != HIGH)){ //
loopTime = currentTime;
Timer = HIGH;
//digitalWrite(DIGITAL_LED_PIN, LOW) ;
return 5;
}
if(currentTime >= (loopTime + h) && (Timer = HIGH)){ //
loopTime = currentTime;
Timer = LOW;
//digitalWrite(DIGITAL_LED_PIN, HIGH);
return 10;
}
}
int _TempMonitoring(int adc) // Считываем ацп указанного вывода
{
if (adc > 150 )
{
_RelayColingFan(ERROR_COLING_FAN); // Перегрев
return ERROR_COLING_FAN;
}
if (adc > 130)
{
_RelayColingFan(HIGH_COLING_FAN); // Включаем
return HIGH_COLING_FAN;
}
if (adc < 80)
{
_RelayColingFan(LOW_COLING_FAN); // Выключаем
return LOW_COLING_FAN;
}
}
void _RelayColingFan(int atr)
{
switch (atr)
{
case LOW_COLING_FAN: // 80C
digitalWrite(DIGITAL_RELAY_PIN, HIGH); // Выключено
RELAY_CURENT = digitalRead(DIGITAL_RELAY_PIN);
break;
case HIGH_COLING_FAN: // 100C
digitalWrite(DIGITAL_RELAY_PIN, LOW); // Включено
RELAY_CURENT = digitalRead(DIGITAL_RELAY_PIN);
break;
case ERROR_COLING_FAN: // Перегрев
break;
default: //
//
break;
}
}
void setup()
{
Serial.begin(9600);
pinMode(DIGITAL_RELAY_PIN, OUTPUT);
}
void loop()
{
if (_Timer(100, 5000) == 10)
{
TEMP_CURENT_ANALOG = analogRead(ANALOG_TEMP_PIN); // Считываем температуру каждые 5 сек
Serial.println(TEMP_CURENT_ANALOG);
}
_TempMonitoring(TEMP_CURENT_ANALOG);
}
-
Re: Бортовой компьютер мотоцикла
С использованием delay будет тормозить выполнение всего кода. Скачай библиотеку TimerOne там в стандартных примерах есть пример как моргать светодиодом.
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
XsanderS
С использованием delay будет тормозить выполнение всего кода. Скачай библиотеку
TimerOne там в стандартных примерах есть пример как моргать светодиодом.
Причем тут delay? Oleg_33 спрашивал про millis(), который безо всяких библиотек великолепно работает.
Цитата:
Сообщение от
Oleg_33
Подскажите как сделать таймер например для светодиода (что бы мигал с интервалом 5/5 сенунд) используя millis(), всю голову сломал. :confused:
-
Re: Бортовой компьютер мотоцикла
Все верно, уставший был, автоматом подумал про delayMicroseconds(),
насчет библиотеки: ему все равно нужно будет обрабатывать внешние прирывания а это удобнее всего сделать с помощью выше указанной библиотеки, и к тому же управление LED будет в пару строк, можно все сделать и без библиотеки но структура кода значительно усложнится.
Олег, я не совсем понял насчет pin13. На схеме на него идет сигнал с датчика скорости, в коде он настроен как индикатор LED
Leonardo имеет 5 таймеров и может обрабатывать 5 внешних прирываний на портах
int-0 pin3
int-1 pin2
int-2 pin0
int-3 pin1
int-4 pin7
Соответственно сигнал с датчика скорости надо заводить на один из этих портов.
Если возникнет идея сделать все легко и использовать функцию PulseIn() то советую отказаться.
Все попытки не давали нужного результата, значения плавают и сильно зависят от длинны коди и особенностей его выполнения.
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Собственно сложность когда меня не пугает, библиотека это хорошо.
Она может запускать независимые таймеры для разных функций ?? Мне как раз этого не хватает ...
По поводу схемы - она приблизительная, что бы иметь представление, в общем (держать всё в голове не возможно) прерывание не на том пине - не успел поправить, жду дисплей!! его мля..ть нету ещё, по выше указным причинам :mad:.
Как приедет дисплей, подключу его, сделаю графическое меню и налажу внешнее прерывание (это фундаментальные "функции" от них буду плясать).
То, что пины не сходятся есть простое объяснение, сейчас пишу код для отдельных "блоков" (пины рандомные, какие удобно, так и подключил) - то бишь: контроль температуры окружающего воздуха, индикатор включенной передачи, контроль температуры двигателя + управление реле (выкладывал предварительный код), чтение и запись настроек EEPROM ... потом объединю всё вместе, так проще выявлять баги в коде...
Насчёт пинов не совсем понимаю, если допустим на 0 пине int 2! так же на этом пине SPI шина ? ...
Реально переназначить пины, подключить одновременно устроства с SPI и I2S ? или я чего то не догоняю ?!
Вложение 18376
-
Re: Бортовой компьютер мотоцикла
int0 int1 int2 int3 int4 это номера прирываний timer0 timer1 timer2 timer3 timer4 здесь глянь и станет все ясно
SPI c pin0 не связанны на пинах 0,1 UART 2,3 связанны с теми что подписанны на плате SCL SDA это и есть квадратная шина, SPI выведен на отдельный разем (SPI процессора)
Например если подключаешь дисплей по SPI там в зависимости как органезованна библиотека для конкретного устройства и там же прописанны пины.
Можещь запускать и останавливать таймеры когда тебе надо, инициалезируешь таймер и при инициализации указываещь номер таймера . нужно посмотреть, как на леонардо, точнее какой таймер за что отвечает. Например timer0 системный таймер, timer1 управляет ШИМ итд... Точно посмотрю и напишу.
Посмотри здесь описание функции attachInterrupt()
Запускаем таймер при появлении сигнала и останавливаем при исчезновении, записывая длинну сигнала.
библиотека просто дает возможность задействовать мощный системный таймер. почитай здесь про библиотеку
вот пример, делал обработку сигнала с RC пульта.
PHP код:
#include <TimerOne.h>
#define BTNPIN 2 // Вход сигнала
#define L 5 // Выход на H-Мост вращение в лево
#define R 6 // Выход на H-Мост вращение в право
volatile uint16_t startImpuls;
volatile uint16_t lengthImpuls;
volatile uint16_t timerCount=0;
void setup()
{
/* LOW — вызов прерывания всякий раз,
когда на порту низкий уровень напряжения;
CHANGE – прерывание вызывается при изменении
значения на входе;
RISING – вызов прерывания при изменении уровня
напряжения с низкого (LOW) на высокое(HIGH)
FALLING – вызов прерывания при изменении уровня
напряжения с высокого (HIGH) на низкое (LOW)*/
startImpuls=0;
lengthImpuls=0;
pinMode (BTNPIN, INPUT);
pinMode (L, OUTPUT);
pinMode (R, OUTPUT);
Serial.begin(115200);
Timer1.initialize(10); // Интервал срабатывания таймера 10мкс
Timer1.attachInterrupt(callback);
attachInterrupt(0, fireUp, RISING); // Запуск таймера при наличии сигнала HIGH
}
void callback() { timerCount++; }
void loop()
{
if (lengthImpuls > 0)
{
uint16_t li = lengthImpuls;
lengthImpuls=0;
if (li > 100 && li < 150) // эамер сигнала для вращения в лево
analogWrite (L, 23 - li);
if (li > 155 && li < 200) // эамер сигнала для вращения в право
analogWrite (R, 23 - li);
}
}
// Функция обработки прерывания на подъем
void fireUp()
{
detachInterrupt(0);
startImpuls = timerCount;
attachInterrupt(0, fireDown, FALLING);
}
// Функция обработки прерывания на падение
void fireDown()
{
detachInterrupt(0);
lengthImpuls = timerCount - startImpuls;
startImpuls=0;
timerCount=0;
attachInterrupt(0, fireUp, RISING);
}
ps: просьба заключать выкладываемые примеры кодов в php teg (доступен в расшыренном режиме написания сообщения)
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Итак ...из этого следует, что внешние прерывания можно подключить к любому из выводов 0-1-2-3-7, мне предпочтительнее к 0(RX) так как врятли он мне понадобится для чего то другово??
I2C интерфейс находится на выводах 2-3 и эти выводы дублируются на контакты SCL и SDA, те выводы 2 и 3 заняты I2S интерфейсом по любому, не зависимо подключился ли я к выводам SCL и SDA ??
Если я захочу подключить LED Bar, на какие выводы нужно подключать ... ?
Вложение 18377
В примере к библиотеке написано https://github.com/Seeed-Studio/LED_Bar_Suli -
PHP код:
SeeedLedBar bar(A4, A5); // CLK, DTA
В описании ничего не сказанно про A4, A5 пины. Может нужно подключить к разъёму ICSP ? но там нет таких выводов :confused:
-
Re: Бортовой компьютер мотоцикла
По первому пункту: Да можно использовать пин0 для прирываний, но я бы посоветовал в процессе проектирования выбрать другой, например 7 потому как тебе наверняка понадобиться UART для связи с компом для отладки и просмотра данных с сенсоров, Если задействуешь пин0 то не сможешь использовать UART для связи с компом.
По второму пункту: Все верно они продублированны.
А зачем этот LED Bar? Все можно вывести на дисплей.
Насчет подключения, A4 A5 потому что библиотека для него так написана, напишешь свое управление и можешь другие пины использовать. Протокол чипа посмотри здесь
Опишу с чем придется столкнуться если ты всетаки решишь прицепить эти лыжи:) во первых слишком много библиотек задействовано, при настройке таймеров нужно будет учитывать то какие таймеры используют все указанные библиотеки, могут быть проблемы по совместимости библиотек.
Итог: Либо надеяться что библиотеки не поругаются с библиотекой timerOne и той что будет для дисплея и пробовать, либо если поругаются то писать свое управление этим баром, в принципе можно подсмотреть в библиотеке как там все устроенно и либо свое управление смострячить, либо подправить то что конфликтует.
-
Re: Бортовой компьютер мотоцикла
Лед бар хочу завести на уровень топлива, давно уже думаю о таком. Посмотрел библиотеку для Led bar, ничего особенного нашел только в функции Grove_LED_Bar::latchData() есть задержка 10 микросекунд... Зашел с планшета на сайт, нашел в гоогле библиотеку на Grove_LED_Bar, предыдущую какую-то другую нашел на LED_Bar_Suli! Правильная Grove_LED_Bar получается.
https://github.com/Seeed-Studio/Grov...evel/Level.ino в ней 9и8 пин (с шим и без шим) можно другие повесить пины?
Еще вопрос, как бороться с отключением питания, на Ардуино. Мне нужно записывать в eeprom данные о пробеге, они успеют записаться при отключении? Либо держать Ардуино включенным всегда, но тогда milis() будет переполняться...или мне эта функция не нужна? Смогу я с timerOne засекать время в стандартном формате HH:MM:SS не мешая прерыванию?
p.s. Спасибо вы мне очень помогли.
-
Re: Бортовой компьютер мотоцикла
С Grove_LED_Bar.h проблем не возникнет, пины можно поменять как угодно, достаточно просто прописать их в скетче, даже аналоговые. Примечание: аналоговые настроятся как дигитальные в самой библиотеке, тоесть переделывать ничего не надо, просто прописать в скетче напримев вот так нужно прописать если используешь а0, а1, а2 потому что как мы уже говорили аналоговые пины работают и как дигитальные при настройке как дигитальные прописываются след образом: a0=14 a2=15 итд...
PHP код:
#include <Grove_LED_Bar.h>
Grove_LED_Bar bar(14, 15, 16); // Clock pin, Data pin, Orientation
void setup()
{
// nothing to initialize
}
void loop()
{
}
Насчет записи в EEPROM: не успеет, откуда ардуина узнает что ей вот вот отрубят свет:) запись нужно организовать по какому то действию, например заглушил мотор и ардуина себе думает, ага мотор погас, мы не едем, пробег не капает, сейчас меня отрубят от сети, бах и записала все что насчитала в EEPROM
Для работы со временем возми лучше модуль DS1307 меньше гемороя на мой взгляд если хочешь реально часы или что то вроде того зделать
-
Re: Бортовой компьютер мотоцикла
Насчёт записи в EEPROM ... запись должна производится по наличия и отсутствию напряжения на А5 (если судить по схеме),успеет или нет ??:rolleyes: через этот же ввод будет замер напряжения в бортовой сети. Через резистор 55кОм и 10кОм получится примерно 700мВ при напряжении 12В.
Объясню почему 55кОм - на мотоцикле бывает сгорает РР и напряжение может скакнуть до 30В! при таком делителе при 30В на входе получится около 4,5В ...