это наверное ты "всерьез" для меня:) потому что я из этого ни чего не понял:D
Вид для печати
собрать то собрал пока так
а вот теперь как то скомпилировать )))
Приветствую коллег! Давно хотел сделать что-то подобное. Об Ардуино узнал недавно и в процессе поисков вышел на этот ресурс. Как мне известно существует драйвер Ардуино для Андроида. Андроид прекрасно работает с Адоб Флеш. Адоб Флеш в свою очередь имеет возможность обмена данными с Ардуино. Чувствуете к чему клоню? Имею опыт разработки анимированных интерфейсов на Флеше. В принципе можно сделать любой, на какой хватит фантазии, дизайн виртуальной приборной панели и подружить посредством драйвера непосредственно с Ардуино.
4-х цилиндровый 4-х тактный ДВС (таких большинство) за один оборот коленвала делает 2 импульса зажигания. Угловая скорость вращения 8000 об/мин соответствует частоте импульсов 266,7 Гц. 6-ти импульсный датчик скорости (ВАЗ, ЗАЗ) делает 6 импульсов на один метр пути (при стандартном диаметре диска и родной резине). На скорости 200 км/ч датчик выдаст сигнал на частоте 333,3 Гц.
Теперь достаточно согласовать уровни импульсов датчиков скорости и оборотов КВ со входами Ардуино и измерять частоту на входах. Обороты 0-267 Гц, скорость 0-334 Гц (для разных авто -верхние значения могут различаться).
Для измерения частоты нашел вот такой способ http://interface.khm.de/index.php/la...unter-library/
По сути мне необходимо передавать во флеш только значения с Ардуино по USB на Андроид. Все данные обрабатываются непосредственно во флеше. Настройку интерфейса (цвет, размер, звуки, изображения) можно легко менять во флеше, вплоть до использования пользовательских кастомных скинов. Мне главное сделать получение данных. Остальное все довольно просто для меня.
Прогу для линукса , винды или андроида можно на QT Creator написать, исходник как раз на нем написан
Попробовал собрать на QT Creator, но вылетает ошибка компилятор не видит либы ftdxx.lib, хотя она лежит в указанной папке
Так как флеш кроссплатформенная среда, то можно и для винды и для Андроида, iOS, linux. Чем хорош флеш, так это легкостью реализации красочных векторных дизайнов интефейсов, не привязанных к размеру экрана конкретного устройства.
Ну так давайте на Flash перенесем, только ни разу не сталкивался с программингом на нем
тогда нужны эффекты переключения между экранами приборов как в VOBD но я к сожалению могу рисовать только в фотошопе, если это пригодится в данном случае, если да то рисовать буду как умалишенный:D
Реализовать можно почти любой визуальный эффект. Растровые изображения можно использовать в качестве бекграунда. Все активные элементы должны быть в векторе
попробую сегодня сделать пример
и скины надо тоже делать, может как раз фон со всей красотой, а от флэш только стрелочки и положение, и можно добавить место стрелочек как в кино форсаж наполнение, и красиво было бы настройку по скорости менять цвет подложки спидометра, подложки тахометра по оборотам.
Я наверное много сразу захотел :eek:
Вот сделал небольшой пример программирования интерфейса на Флеш. Если навести курсор на полоску внизу, то можно увидеть как меняются показания спидометра.
Неплохо для начала
Аналогично передается значение переменной частоты вращения коленвала, цифровые значения напряжений на аналоговых датчиках и логические значения контрольных ламп. Причем, например, контрольную лампу остатка топлива можно эмулировать программно, используя только один аналоговый вход датчика топлива (показометр и лампа), тем самым сэкономим лишний цифровой вход. Очень легко во флеш подключаются звуковые файлы (wav, mp3). Каждое событие можно озвучить даже голосом (сигнализатор открытых дверей или перегрев например).
если я правильно понимаю, то флэш у нас должен запускаться в оболочке какой то,
для винды в exe, для андройда и линуха в своем пакете.
получается СУПЕРСКИ
а про смену цвета думал , что то похожее на lexus lfa, только плавно
или вот так
если делать скины с картинками, я нарисую
А какие идеи по поводу скинов?
какие настройки возможны будут?
Вариант с двумя скинами. Лично видел видеоролик, где чувак коннектил Ардуино и Флеш из под Андроида через блютуз. Тогда вообще ЮСБ кабель не нужен.
На данном этапе я себе представляю проект в таком виде (см. вложени).
Существующие проблемы:
1. Насколько я понимаю, то корректное измерение частоты коленвала и датчика скорости пока не реализовано. Прошу поправить если не прав.
2. Так как Флеш не работает напрямую с физическими портами, то используется Serial to Socket Server. Для РС это не проблема. А для Андроида я не нашел готовую реализацию (гуглил целый день, и наши, и англоязычные ресурсы). Однако существуют исходники на С++. Подозреваю что их можно откомпилить под Андроид. Что скажет Сhip?
Я не чего не скажу , потому что с андроидом никогда не сталкивался
Да я тоже не сталкивался. Андроид привлекателен большим выбором недорогих и компактных устройств. Я например себе в машину ноут ставить вместо приборки не хочу. А что по первому пункту?
Первый пункт реализую, только не частоту , а число импульсов в секунду(обороты) и колличество имульсов на 1метр. Остальные вычисления с плавающей запятой лучше на компьютере производить
То есть получать количество импульсов компьютер будет каждую секунду? Не маловатая частота обновления? может лучше измерять длинну импульса и паузы? Потом в компьтере вычислять реальную частоту, и откалибровать по аналоговому тахометру? А количество импульсов на метр для каждого датчика скорости постоянно. Как все же скорость измерять?
Конечно лучше длину импульса для для скорости , а для тахометра длительность за один оборот
Нужно дескриптор посылать перед пакетом данных и тогда таких проблем не будет. Программа работает с виртуальным com портом и пакеты ни как не синхронизируются
как вариант можно использовать преобразователь частота/напряжение и подавать на аналоговый вход Ардуины. Например LM 2907/2917. А вообще датчик скорости работает на эффекте Холла, и скважность импульсов (отношение периода к длинне импульса) - величина постоянная и не зависит от частоты. То есть достаточно измерять все-таки длинну импульса, как для ДС так и для тахометра (с ДХ зажигания для карб. авто)
Для разных датчиков скважность может быть разной и соответственно длинна импульсов будет разной. Это можно скорректировать программно.
У большинства датчиков скважность =2(меандр). То есть для 6-ти импульсного датчика, например, при скорости 200 км/ч длительность импульса будет составлять 1,5 мс. Для 4-х цилиндрового мотора при 8000 об/мин длинна импульса будет 1,33(3) мс. Функция pulseIn() меряет длинну импульсов на цифровом входе в диапазоне от 10 мкс до 3 минут. Насколько я понимаю то в этом случае прерывания не нужны? или я ошибаюсь?
Заказал себе Мега АДК. Прийдет через неделю. Попробую скетч от Chip для Flash. Я вообще о существовании Ардуино узнал только в пятницу, а уже куча идей у меня родилось. Клевая штука.
возможно ли, что бы будущая прога работала со своей библиотекой флэш? на случай если не установлен адоб флэш или как у меня на таблетке флэш ролики тормозят малеха. хотя видео в хд летит на ура
Флеш можно обернуть в *.exe без проблем
попробую
Скетч для спидометра напасал, на выходе выдает частоту.
Можно так же использовать как частотомер, попробовал измерять частоту 62500Гц достаточно точно измеряет
Если перемкнуть вход для спидометра D2 и выход ШИМ D6 то в сериал мониторе будем видеть частоту ШИМ. Частоту ШИМ можно изменить в м указал параметры
PHP код:
#include <util/delay.h>
volatile uint8_t Count,Counter;
volatile uint16_t Time=0;
uint32_t result;
//*************************************************************************
ISR(TIMER1_OVF_vect)
{
asm volatile( "inc %0 \n"
: "=r" (Counter) //output
: "r" (Counter)); //input
}
//*************************************************************************
ISR(INT0_vect)
{
Time=TCNT1;
TCNT1 = 0;
asm volatile(
"mov %1,%0\n"
"clr %0 \n"
: "=r" (Counter), "=r" (Count) //output
: "r" (Counter), "r" (Count)); //input
}
////*************************************************************************
//ISR(INT1_vect)
//{
//}
////*************************************************************************
void setup()
{
pinMode(6, OUTPUT);
TCCR0B = TCCR0B & 0b11111000 | 5;//частота ШИМ 61 Гц
//0x01 62500
//0x02 7812
//0x03 976
//0x04 244
//0x05 61
analogWrite(6, 128);
pinMode(2, INPUT); //вход спидометра
digitalWrite(2, HIGH); // включить подтяжку входа
Serial.begin(115200);
Init_Timer1();
Init_Ext_Int();
_delay_ms(200);
}
//*************************************************************************
void loop()
{
cli();
result=2000000/(Count*65536+Time+1);
Serial.print("freq=");
Serial.println(result,DEC);
TCNT1 = 0;
Counter=0;
sei();
_delay_ms(200);
}
//*************************************************************************
void Init_Ext_Int()
{
EICRA |=(1<<ISC00)|(1<<ISC01);
EIMSK |=(1<<INT0);//((1<<INT0)|(1<<INT1));
sei();
}
//*************************************************************************
void Init_Timer1()
{
TCCR1A = 0;
TCCR1B = (1<<CS11);
TCNT1 = 0;
TIMSK1 = _BV(TOIE1);
sei();
}