-
Re: Бортовой компьютер мотоцикла
Oleg_33, если захочется кому то потом показать, то лучше этого не делать
Цитата:
RELAY_CURENT, flag_FAN_CYRENT, FUELPOMP_RELAY__DIGITAL_PIN, LOW_COLING_FAN, GEAR_NEITRAL__DIGITAL_PIN
Блин, неужто так сложно словарик открыть и посмотреть как пишется правильно? Тем более, что сейчас словари онлайн.
Зачем писать вот так
Цитата:
#define LED_ERROR__DIGITAL_PIN 13
#define FUEL_LEVEL__ANALOG_PIN 0
Когда можно писать более кратко так
Цитата:
#define LED_ERROR_PIN 13
#define FUEL_LEVEL_APIN 0
?
Если по файлам разносить не будешь, то скоро запутаешься. Arduino IDE хуже блокнота.
P.S. Я не профессиональный программист, но от такого кода шерсть шевелится.
-
Re: Бортовой компьютер мотоцикла
Да действительно о чем я думал, контролер ошибки проверяет в длииинных названиях временных!! "переменных", тратит процессорное время на перевод ... а у меня не оригинальный ардуино, он понимает даже с акцентом!
Запутаться в собственном коде это нонсенс, ну если кроме ошибок в четырёх словах сказать нечего ... !
-
Re: Бортовой компьютер мотоцикла
Кто подскажет как считывать температуру с двух датчиков DS18B20 ?
На температуру двигателя хотел подключить резистивный датчик от автозапуска, да характеристика подкачала не линейная она и на разных датчиках отличается (не говоря уж о муках преобразования АЦП в температуру), чем грозит замена неисправного датчика думаю понятно :eek:
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Внешнее прерывание эмуляция.
Для входа прерываний использую Pin 0 (RX). Pin 7 у меня почему-то не работает на прерывание, на Pin 2 и 3 вешать нельзя на них шина I2C и она мне нужна.
Для заливки скетча отключаем Pin 0 от схемы.
Эмулятором сигнала прерывания является Pin 13.
В режиме FALLING подключаем вот так.
Вложение 18430
Видео:http://youtu.be/QZFZSx0Q_XU
Замучился снимать этот дисплей, пришлось без подсветки, он засвечивает камеру ...
PHP код:
#include <TimerOne.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
volatile int state = !LOW;
volatile int in = 0;
volatile long time, time1;
LiquidCrystal_I2C lcd(0x27,16,2);
//Плата int.0 int.1 int.2 int.3 int.4
//UNO, Ethernet-Pin 2 3
//Leonardo-Pin 3 2 [0] [1] 7
void setup()
{
pinMode(13, OUTPUT);
Timer1.initialize(100000); // Эмитируем внешний сигнал.
Timer1.attachInterrupt(blinkLED);
attachInterrupt(2, Interrupt_Func, FALLING); // Прерывание 0 пин
}
void loop(){
lcd.init();
lcd.backlight();
lcd.print(in);
}
void Interrupt_Func(){
in+=1;
}
void blinkLED(){
state = !state;
digitalWrite(13, state);
}
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Добил схему, так выглядит по интереснее. Провода без прямых линий и углов (нарисованных про принципу кривых Безье) это внешние провода, они покидают блок с МК... а может и не покидают :),в общем схема наглядная для общего понимания происходящего.
Печатную плату делать не буду, тк напрочь отсутствует возможность добавить, что-либо, поэтому исходник Fritzing`a пока не выкладываю.
Вложение 18443
-
Re: Бортовой компьютер мотоцикла
Прирывания не работают на других пинах потому что ты используешь библиотеку TimerOne которая заточена на использование системного 16разрядного таймера (Timer1) который завязан аппаратно на пины 2 и 3 Для использования других пинов пользуй стандартные команды (почитай здесь) библиотека полезна в случае если нужно за действовать мощный 16 разрядный таймер, например ШИМ с высокой тактовой частотой до 1023 итд... А в твоем случае можно обойтись стандартными опираторами оброботки прирываний.
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
да, спасибо.
Не работает только пин 7 на прерывание, я уже исключил эту библиотеку.
Дело идёт потихоньку, застрял на таймере выключении микроконтроллера и защите аналогового входа (по нему измеряется напряжение)
Вот изобрел :) схему, ребята помогли с форума Паяльника, схему не пробовал ещё.
Вложение 18469
-
Re: Бортовой компьютер мотоцикла
А что этот вход который ты защищаешь будет делать? Замер бортового питания? А какая проблема с таймером? Выложи последний код.
-
Re: Бортовой компьютер мотоцикла
Да верно с аналогового входа будет мерится напряжение, желательно защитить его от высоковольтных всплесков и прочих гадостей мотоциклетной ботр.сети.
С таймером всё хорошо, не могу дойти до магазина и купить детальки ... напомню он нужен, что бы записать в EPPROM данные при отключении питания.
Кодом уже месяц не занимался, он такой же как на 8 странице форума.
Единственное адаптировал пример для записи больших чисел в EPRROM.
Код:
#include <EEPROM.h>
#define UBOUND_EEPROM_ARRAY 9
int EEPROM_DATA[UBOUND_EEPROM_ARRAY] = {88,110,120,25,12000,6000,1000,20,20};
/*
0 - вентилятор отключение,
1 - вентилятор включение
2 - перегрев
3 - по температуре окр. воздуха
4 - TO2
5 - TO1
6 - Chain
7 - коррекция ТОВ
8 - коррекция ТД
*/
int Expon[UBOUND_EEPROM_ARRAY] = {2,4,6,8,10,12,14,16,18};
void setup(){
Serial.begin(9600);
for (int i = 0; i <= (UBOUND_EEPROM_ARRAY - 1); i++)eeprom_write(EEPROM_DATA[i], Expon[i]);
}
void loop(){
for (int i = 0; i <= UBOUND_EEPROM_ARRAY - 1; i++) Serial.println(eeprom_read(Expon[i]));
delay(1000);
}
unsigned int eeprom_read(int cell)//чтение из еепром
{
unsigned int res=0;
res=(EEPROM.read(cell)<<8)|EEPROM.read(cell-1);
return res;
}
void eeprom_write(unsigned int val, int cell)//запись в еепром
{
EEPROM.write(cell - 1, (val & 0xFF)); //пишем младший байт
EEPROM.write(cell, ((val & 0xFF00) >> 8));//пишем старший байт
}
[
-
Re: Бортовой компьютер мотоцикла
как-то непонятно. по схеме получается, что при включении зажигания идет питание на dc. что мешает запитать напрямую от 15 клеммы без оптопары и транзистора? для защиты АЦП входа неплохо бы минимум стабилитрон параллельно конденсатору C2. и еще защитный диод по входу до делителя. учти, что напряжение на vd1 повлияет на показания, это надо учесть программно. по питанию тоже не помешает диод и конденсторы.
-
Re: Бортовой компьютер мотоцикла
Смотрел 5 раз, в каком месте идёт питание на прямую в DC ?
Мешает запитать на прямую, то что при отключении замка зажигания, в EEPROM данные не успеют записаться. Плата не должна быть всегда под напряжением - в мотоцикле АКБ всего 15 А/ч
-
Re: Бортовой компьютер мотоцикла
никто и не говорил, что напрямую идет питание. транзистором VT1 то зажигание управляет. идея в том, чтобы одной ногой (А) и напряжение измерять и управлять транзистором, который подает питание что ли?
-
Re: Бортовой компьютер мотоцикла
Подаём питание на "+15" клемму загорается светодиод в оптопаре - открывается транзистор, включается DC преобразователь, включается Arduino
Отключаем питание от "+15" клеммы светодиод в оптопаре продолжает гореть за это отвечает конденсатор С1, Arduino остаётся включенным энцать секунд, питание на аналоговом входе падает до нуля - инициируем запись в EEPROM в это время, светодиод гаснет Arduino отключается.
-
Re: Бортовой компьютер мотоцикла
Всем привет, я вернулся =) как обычно начался сезон ...дела, руки только сейчас зачесались... вспоминаю всё заново :confused:
В общем я пересмотрел концепцию БК, решил пока не усложнять себе жизнь, буду вживлять дополнительные функции по мере возможности, для начала сделаю минимум. Надеюсь мой код который я раньше выкладывал кому нибудь пригодится.
Сейчас всё подготавливаю для вживления поплавка в бак, стрелочный индикатор (серво) тоже есть.
Нужно управлять этим прибором через дуину, полный бак соответствует +12В на сигнальном проводе, пустой бак +10В (+12 выдаёт сам прибор как опорное напряжение).
Как мне безопасно управлять напряжением для стрелочного прибора с ардуино от 10 до 12В ??
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
Oleg_33
Как мне безопасно управлять напряжением для стрелочного прибора с ардуино от 10 до 12В ??
Тебе им не управлять нужно а считать аналоговым портом ардуины.
Заведи сигнал через резистивный делитель, делитель расчитай так чтоб при подачи на него +12 на выходе делителя было максимум +5 следовательно когда сигнал будет +12 дуина будит читать 255, при +10 примерно 212 этот диапазон и будет твой бак от полного до нуля с этими цифрами уже можно работать.
П поводу безопасности: если боишься что на делителе один из резисторов вылетит, тогда сделай схему защиты на Z диоде, по выходу с делителя, но это значительно усложнит схему.
-
Re: Бортовой компьютер мотоцикла
Вчера смотрел, думал ... можно же использовать драйвер для двигателя ? 12 вольтами он легко управляет с аналогового выхода.
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
Oleg_33
Вчера смотрел, думал ... можно же использовать драйвер для двигателя ? 12 вольтами он легко управляет с аналогового выхода.
Нужна спецификация на стрелочный индикатор
-
Re: Бортовой компьютер мотоцикла
Прибор вот такой, как видно ? из фото он управляется резистивным датчиком 3 - 160 Ом, раньше показывал давление масла, теперь будет уровень топлива.
Вложение 18658
На прибор приходят провода
1. +14 Бортовой сети
2. Масса
3. Сигнальный провод (на датчик)
4. Массовый провод (на датчик)
Сегодня купил драйвер двигателя, вот такой, питание драйвера от Ардуино пришлось подключить через диод, тк при отключении питании от ардуино она питалась в обратку по пятивольтовой линии драйвера :)
Вложение 18659
Получилось вот так, завтра подключу к мотоциклу посмотрю результат.
http://www.youtube.com/watch?v=UCG8yw-NrvA&feature=youtu.be
-
Re: Бортовой компьютер мотоцикла
Ох, что то я совсем не в тему насоветовал.
Извиняюсь, не так понял вопрос, думал сигнал с датчика бака нужно завести в дуину...
-
Вложений: 1
Re: Бортовой компьютер мотоцикла
Да сигнал с датчика уровня нужно завести в дуину =) но скорее всего опорное напряжение будет 5в (сопротивление резистора в датчике 300 Ом)
Примерка на мотоцикл не удалась , прибор отрицательно отреагировал на шим сигнал (стрелка дёргалась без остановки), отчасти удалось решить проблему конденсатором, не смотря на все усилия прибор начал показывать как надо Но до нуля стрелка не опускалась. На счёт прибора обманул, сигнальный провод масса!
Вложение 18661
Как ещё можно эмулировать потенциометр ?
-
Вложений: 3
Re: Бортовой компьютер мотоцикла
Дело сдвинулось с мёртвой точки, сегодня подключил к блоку ардуино, разобрался с библиотекой Dallas temperature, подключил два датчика, дисплей, кнопку сброса...
Вложение 18665
С дисплеем все было не так гладко, по испытаниям не один дисплей не читается на солнечном свете... Светодиодные в их числе, про цветные и говорить нечего. Поэтому закажу дисплей фирмы Sharp 1602, днем ему подсветка вообще не нужна.
Вложение 18666
Как видно из видео один датчик будет показывать температуру за бортом а другой двигателя (исходя из их данных и алгоритма будет включаться вентилятор охлаждения через реле, что бы держать двигатель в оптимальном диапазоне те не доводить до 105 градусов)
https://youtu.be/ZcSB60kGFRY
Ниже бегающие цифры это АЦП аналогового входа, по нему будет измеряется напряжение, подключён через делитель с защитой, как видно по цифрам запас у него большой схема подключена к 19 вольтам.
Больше ничего не успел, но поскольку дело сдвинулось будет проще.
Без записок сумасшедшего не обошлось :rolleyes:
Вложение 18667
-
Re: Бортовой компьютер мотоцикла
Сообщение подчистил - проблема с тормозами в меню решилась, убрал из Setup{ } строчку ds.begin(); не знаю откуда она взялась, наверно из примера взял так и осталась
-
Re: Бортовой компьютер мотоцикла
Вот что получилось https://yadi.sk/i/Ty3lyKITiuZfe - в темноте неудобно снимать ничего не видно :) еле попал в переменный резистор на плате ...
-
Re: Бортовой компьютер мотоцикла
Подскажите как передать в ардуину в последовательный порт строку (в мониторе порта через компьютер) - например "time" ?
Ну или тыкните носом где почитать, нашёл только двух сторонний обмен данными с маркерами, а меня интересует тупой односторонний.
Подозреваю нужно из символов собрать строку, только символы имеют цифровое представление ...
-
Re: Бортовой компьютер мотоцикла
В arduinoIDE открываешь окно "сериал монитра" и в верхней строке пишешь все что тебе нужно отправитть
-
Re: Бортовой компьютер мотоцикла
это я знаю. не так сформулировал вопрос. Мне нужно отправить строку и сравнить ее с той которая записана в переменную.
Пробовал так:
PHP код:
if (Serial.available()) {
while (Serial.available() > 0) {
if (Serial.read() == 49) RTC.adjust(DateTime(__DATE__, __TIME__));
}
Что бы сработало нужно отправить в порт 1111 =) , как сделать что бы сработало по строке "time" ?
-
Re: Бортовой компьютер мотоцикла
if (Serial.read() == 49)
В данном случаи идет сравнение принятого в буфер одного быйта
Соответственно для того что бы условие выполнилось, нужно отправить из сериал монитора цифру 1
-
Re: Бортовой компьютер мотоцикла
Если отправить 1,2,3 ... в моём варианте получим -1 в порте, всё же я не получил ответ на мой вопрос
-
Re: Бортовой компьютер мотоцикла
здесь рабочие примеры приема строки
-
Re: Бортовой компьютер мотоцикла
В результате вот что получилось
https://youtu.be/eouo2xgPcqA
-
Re: Бортовой компьютер мотоцикла
А в процентах что отображается?
-
Re: Бортовой компьютер мотоцикла
Уровень топлива в баке в процентах (и в литрах) с ним не всё просто было ... тк поплавок в баке не предусмотрен конструкцией :p
первое видео с мультиметром, видно куда врезан поплавок https://yadi.sk/i/oug2Gu-yk75yz
-
Re: Бортовой компьютер мотоцикла
Опасную ты операцию проделал, когда врезал поплавок. Бак мог взорваться
-
Re: Бортовой компьютер мотоцикла
С водой ничего не может взорваться :rolleyes:
-
Re: Бортовой компьютер мотоцикла
Подскажите как передать данные от одной ардуино в другую односторонне. Uart у меня занят прерываниями, погуглил вроде можно по i2c, не понял с адресами, у меня на этой шине дисплей и датчики. Передать нужно цифры от 1 до 10 для индикатора включенной передачи.
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
Oleg_33
С водой ничего не может взорваться :rolleyes:
А если в баке вода, то как же сваркой пользоваться? Место нагрева будет сразу же остывать
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
Oleg_33
Подскажите как передать данные от одной ардуино в другую односторонне. Uart у меня занят прерываниями, погуглил вроде можно по i2c, не понял с адресами, у меня на этой шине дисплей и датчики. Передать нужно цифры от 1 до 10 для индикатора включенной передачи.
Пример подключения двух Arduino по I2C
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
Chip
А если в баке вода, то как же сваркой пользоваться? Место нагрева будет сразу же остывать
С начало бак промывается моющим средством, затем на 3/4 заполняется водой, вода не достаёт до места сварки! (она происходит в среде аргона с присадкой нержавейки, стакан в котором закреплён датчик тоже из нержавейки).
Объём не заполненный водой не создаёт критическую массу для взрыва.
-
Re: Бортовой компьютер мотоцикла
-
Re: Бортовой компьютер мотоцикла
Цитата:
Сообщение от
Chip
Такие функции уже не используются, правильный вариант такой будет.
PHP код:
// Передатчик
#include <Wire.h> //подключаем библиотеку
#define ADDR 128 //адрес нужного нам Slave
void setup()
{
Wire.begin(); //включить i2c
}
void loop()// Главный цикл
{
Wire.beginTransmission(ADDR); //начало передачи, с адресом нужного нам Slave
Wire.write(random(0, 9)); //отправляем данные для выбраного Slave
Wire.endTransmission(); //конец передачи
delay(3000); //пауза
}
PHP код:
//Приёмник
#include <Wire.h>
#define ADDR 128 //адрес устройства
void setup()
{}
void loop() {}
void receive_handler(int numbytes)
{
for (int i = 0; i < numbytes; i++) //читаем весь пакет
{
Serial.print(Wire.read()); // принимаем значение и передаем компьютеру
}
Serial.println(' '); //перенос строки
}