С какой скоростью происходит обновление данных о частоте? Можно ли мерять частоту одновременно с двух входов?
Вид для печати
С какой скоростью происходит обновление данных о частоте? Можно ли мерять частоту одновременно с двух входов?
Почти в тему... Использую arduino для того чтобы замерять напряжение на обоих аккумуляторах, снимать температуру "за бортом " и в салоне, а также снимать некоторые данные с приборки. Правда использую эти данные в RoadRunner. Затык возник с датчиком давления масла. Подключился аналоговым входом к стрелочному индикатору и получил "фигу" - напряжение почти не меняется правда иногда резко падает в два раза и возвращается на прежний уровень. Залил в arduino скетч осциллографа и посмотрел сигнал на этом порту, получил что-то вроде того, что нарисовал на картинке:
http://alterterra.ru/images/oil_pressure.jpg
Как понимаю - датчик импульсный, и от скважности зависят показания стрелочного индикатора на приборке. Как быть? Поставить ключ с RC-цепочкой? Или можно как-то средствами Arduino обойтись, например переключившись на D3 и считая по прерыванию импульсы?
Минимальная скорость 5 км/ч соответствует частоте 8,33 Гц. Если частота обновления данных будет 8-9 Гц, то нормально. Сделал вчера мувик для спидометра и тахометра со скинами, вечером доделаю и сброшу. Может еще и мувики для показометров успею.
Сделал частоту обновления 5гЦ
Замечательно. Это очень важно для плавной анимации стрелки
Для плавности можно использовать интерполяцию
(точкаА+точкаС)/2=точкаВ
Cделал мувик. На спидометре использована программная интерполяция, на тахометре старый вариант когда определенной частоте соответствует фиксированное положение стрелки. Интерполяция работает со скоростью обновления данных о частоте 0,2 с (5 Гц).
То reanon! Попробуй отконвертить ролик в проектор exe, и запустить на своей таблетке.
А как наложить на фон?
Еще один спидометр, на выходе выдает частоту в Гц
Плюс этого спидометра в том что не нужно использовать входы с прерываниями INT0 или INT1, используется вход D8
Минус приходится вводить коррекцию и минимально измеряемая частота 30Гц, можно сделать измеряемую частоту и ниже, но тогда будет большая погрешность
PHP код:
#include <util/delay.h>
volatile unsigned int tachBuf;
unsigned long tachValue;
ISR(TIMER1_CAPT_vect)
{
TCNT1 = 0;
tachBuf = ICR1+15;
}
//********************************************************************
void setup()
{
pinMode(8, INPUT); //Вход для импульсов спидометра
pinMode(6, OUTPUT);//выход ШИМ
TCCR0B = TCCR0B & 0b11111000 | 5;//частота ШИМ 61.03515625
analogWrite(6, 128); //Запустить ШИМ
digitalWrite(8, HIGH); // включить подтяжку входа
Serial.begin(115200);
TIM_Init();//инициализация таймера
_delay_ms(300);
}
//********************************************************************
void loop()
{
cli();
tachValue =2000000/tachBuf;
Serial.print("freq=");
Serial.println(tachValue,DEC);
tachBuf=1;
sei();
_delay_ms(300);
}
//********************************************************************
void TIM_Init(void)
{
TIMSK1=(1<<ICIE1);
TCCR1A=(0<<COM1A1)|(0<<COM1A0)|(0<<WGM11)|(0<<WGM10);
TCCR1B=(1<<ICNC1)|(1<<ICES1)|(0<<WGM13)|(0<<WGM12)|(0<<CS12)|(1<<CS11)|(0<<CS10);
TCNT1 = 0;
}
Какая величина погрешности если мерять от 5 Гц? Допустим реальная 5 Гц - выданная 6 и реальная 337 Гц - выданная 350 Гц? Я ее могу программно скорректировать.
Я еще попытаюсь что нибудь придумать. Погрешность примерно 8мкс на один период. Скорректировать не получится потому что это будет ошибка измерения и она будет колебаться (плюс, минус) . Для низких частот это не так критично , а вот с ростом частоты погрешность результата будет расти
Скетч который может измерять частоту от 4Гц
PHP код:
#include <util/delay.h>
volatile unsigned int tachBuf;
unsigned long tachValue;
ISR(TIMER1_CAPT_vect)
{
TCNT1 = 0;
tachBuf = ICR1+2;
}
//********************************************************************
void setup()
{
pinMode(8, INPUT); //Вход для импульсов спидометра
pinMode(6, OUTPUT);//выход ШИМ
TCCR0B = TCCR0B & 0b11111000 | 5;//частота ШИМ
analogWrite(6, 128); //Запустить ШИМ
digitalWrite(8, HIGH); // включить подтяжку входа
Serial.begin(115200);
TIM_Init();//инициализация таймера
_delay_ms(300);
}
//********************************************************************
void loop()
{
cli();
tachValue =250000/tachBuf;
Serial.print("freq=");
Serial.println(tachValue,DEC);
tachBuf=1;
sei();
_delay_ms(300);
}
//********************************************************************
void TIM_Init(void)
{
TIMSK1=(1<<ICIE1);
TCCR1A=(0<<COM1A1)|(0<<COM1A0)|(0<<WGM11)|(0<<WGM10);
TCCR1B=(1<<ICNC1)|(1<<ICES1)|(0<<WGM13)|(0<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);
TCNT1 = 0;
}
в таблетке на андройде флэш плеер работает только в браузерах, как отдельное приложение не работает.
проектор сделал, на компе запускается и работает а вот на таблетке естественно нет
и стрелка на спидометре работает красиво на тахометре менее красивее, и подсветку цветом на оборотах мне кажется, что надо делать желтым с 4500 оборотов.
И еще. Возможно ли весь тахометр подсвечивать красным цветом в когда стрелка в красном секторе?
И кстати через другие флэшь плееры на таблетке графика ужасная, я так понимаю это особенность китайской таблетки
Для того что бы работал на андроиде без браузера, надо сделать из флеш приложение AIR. Стрелка на спидометре работает по совершенно другому принципу чем на тахометре. Специально так сделал для сравнения. То что графика ужасная в сторонних плеерах - это недостаток самих плееров а не таблетки. В браузере на Андроиде графика нормальная? цвет подсветки можно сделать любой. Предполагается что это можно будет сконфигурировать самим пользователе, но это позже будет реализовано.
Есть конвертор проектора в Андроид http://www.zimbio.com/Mac+OS+X/artic...+Projector+EXE. Попробуй. У меня Андроида нет, так что сам проверить не смогу. Аааааа. Он только видео делает. Сценарии не работают.
в рестораторе в проекторе удалил меню для встраивания в центрифугу
надо теперь и рамку убрать
что то я прихожу ко мнению , что если это делать отдельным устройством, то гораздо удобнее будет использовать какую то мини мать с интегрированным процом+урезанную винду, которая наглухо быстро грузится. Гдето у меня валялся образ windows ХР, сто с лишним метров, делал себе EEE PC в машину давно уже.
Я тоже об этом подумал. Можно даже на Линухе легковесном делать с твердотельной памятью вместо ХДД.
Пока буду все делать под PC. Потом уже можно портировать на разные платформы.
У меня даже есть беспроводная миниклава с тачпадом, бездрайверная, точнее под драйвер HID.
Скачал SWF Player для Андроида. Последний .swf работает корректно.
Таблетка китайская.
Плеер так и называется SWF Player, на маркете их вагон всяких. Тормозов не ощущается. Стрелка скорости на новое значение передвигается быстро и плавно. Правда таблетка хоть и китайская, но проц стоит Самсунг 1 ГГц и 512 памяти.
to zhserg (не смог ответить в личку, не отправляет сообщения, отвечу тут) Интерполяция сделана средствами плавной анимации Флеша. Могу описать только принцип. При поступлении значения частоты 1 раз в 0.2 секунды, вызывается функция плавного поворота стрелки с текущего положение в новое положение за определенный интервал времени. Промежуточные положения рассчитываются специальными библиотеками ActionScript для поворота объекта и плавного замедления .
А из чего проектор можно сделать?
Из Флеш ролика
наверное приборы надо больше делать
Прямо как самолете.
Новый вариант
Я наверное сделаю подгружаемый фон из внешнего файла. Каждый сможет себе сам скин нарисовать. Сделаю несколько видов стрелок, шкал, шрифтов. Можно будет комбинировать разные виды объектов между собой и с разными фонами