Телеметрия для Авто
Сергей подскажите как у вас реализован датчик скорости?
будет на датчике холла, и два магнита на внутренней стороне обода. считаем сколько пришло импульсов за 500 мс дальше вычитаем из расчета длины колеса.
Датчик холла тот который выдает “0” при наличии магнитного поля.
Прошу помощи.
при расчете “выкаченных mA*h” Ir=Ir+(I/8)/3.6;
где Ir- “выкаченные mA*h”, I - 10 бит данных поступившие с борта.
например I-80 (10A, так как 20mV на 1 ампер)
80/8=10/3,6=2.7777777777777777777777777777778
так вот он считает только то что до запятой даже не округляет.
как можно представить функцию без использования “float” ?
используйте фиксированную точку. например, переменную 4-х байтную, типа long. ваше значение умножайте на 1000 и так храните. перед выводом на экран поделите на 1000.
Уперся в написание протокола передачи данных. мне нужно сначала послать знак признака переменной (< - ADC0, > - ADC1, @ - ADC2 и т.д. ) потом надо передать саму переменную но так как переменная больше 8 бит ее надо разделить и отправить.
В как приемнике организовать условие что бы данные из буфера RX записались в нужную переменную???
if (getchar() == ‘<’)
ub=getchar();
С одним таким условием записывается переменная, а если поставить больше условий
if (getchar() == ‘<’)
sb=getchar();
if (getchar() == ‘>’)
ub=getchar();
то нечего не пишется. 😦
может надо после определения признака переменной сдвинуть буфер ???
Не влезал глубоко в твою тему, но а если:
char temp=getchar();
switch(temp)
{
case ‘<’:
sb=getchar(); break;
case ‘>’:
ub=getchar(); break;
default:
…
}
Можно еще попробовать функцию, которая не считывает символ из буфера и удаляет прочтенное значение (getchar()), а только считывает значение. Сейчас уже не помню (спрыгнул с сишки), вроде peek зовется.
Получилось закодировать, передать и раскодировать 6 переменных по 8 бит. скорость 2400 бит/с (скорость обновления данных получилась большая) приемник передатчик этот (не для рекламы), просто хотел посмотреть на что он годиться. вышел на стадион передатчик положил на землю, стабильное расстояние 50м. , отошел на 100 метров тоже берет без ошибок. так это при том что нет контрольной суммы для проверки подлинности результатов.
Всем доброго дня, вчера вытравил плату передатчика.
Сегодня делали вылазку на стадион. Немного погоняли, жаль забыли взять нормальную камеру, что бы заснять работу телеметрии. Так что снимали телефоном
Связь держит практически до 100 метров иногда проскакивают ошибки но работает.
характеристики: измерение 2х банок акка; замер температуры двигателя, регулятора (ESC) и LiPo; замер тока, расчет выкаченных mAh, время с момента включения; Температура воздуха (датчик установленный на приемнике); скорость; напряжение акка приемника.
Теперь по меню…(кнопка вверх) установка максимальных значений температур, минимальных значений акков. включение выключение звука.
дальше (кнопка вправо) установка длины круга колеса (для расчета скорости), установка контрастности дисплея, установка яркости подсветки дисплея, чувствительность включение подсветки по фоторезистору.
еще (кнопка влево) средня скорость, максимальная скорость. (кнопка вниз) сброс времени и выкаченных mAh.
Ну прикольно! Молодец!
Только мне применить ни где…
Я авиамоделист. И у меня уже БПЛА летает, с автопилотом, ну телеметрия само собой.
как реалезована снятие информации о напряжении банок??? я имею ввиду железо. я когда делал для скорости использовал стандартгый traxxas комплект датчик хола и магнит.
а если можно схематично делитель как что подрублено. ну или на словах. на сколько понял к балансировочнм разьемам запитано?
я пульт делал у меня проблема была что мог принять тока 1 значение с передатчика. потом как то стал читать поочередно порт и смог читать по несколько значений.
Верно, балансировочный разъем подключается.
а какие кондеры на кристале и стабилизаторе? делал на атмеге но что то грелся у меня стабилизатор.
а как определить выкаченый ток?
на стабилизаторе 1000х25в плюс 100n. на входа ADC не ставил, поставил на AREF 100n и на AVCC поставил индуктивность и 100n.
а как определить выкаченый ток?
Ir=Ir+((I*10)/2.88); // по прерыванию раз в секунду.
где Ir - выкаченные, I - ADC полученное с передатчика. тип Ir, I - unsigned long int
а в железе как это выглядит?какой датчик считывает?
www.ebay.com/itm/261086921764
у меня такойже тока на 433 но так толком и не разобрался как им передавать могу тока от 1 до 9 передать и все. может подскажите код?
какой датчик считывает?
этот
не реклама, правда он еще не пришел, так что пока сам не могу проверить, вероятно надо будет код переделать.
он на провода рега которые от акума идут вешается??? и насчет передатчка я у вас спрашивал. У меня непонятная библиотека не него поэтому так мало могу передовать
Жалко что блютуз мало берет можноб былоб к компу подрубать или к смарту на андройде. и не пришлосьбы паять приемник.
Что то я вообще подвис а если эти приемник и передатчик просто повесить на ком порт ардуины и на 1 ардуине передавать а на второй читать с ком порта она покажит данные?
Что то я вообще подвис а если эти приемник и передатчик просто повесить на ком порт ардуины и на 1 ардуине передавать а на второй читать с ком порта она покажит данные?
да, но и мусора будет тоже много, передатчик желательно питать более чем 5 вольт.
он на провода рега которые от акума идут вешается???
разрывается + провод от акка до регуля.
насчет передатчка
я передаю по USARTу
1 байт признак переменной
2 байт переменная
3 байт 2 часть переменной (если она больше чем 255)
4 байт контрольная сумма
в током же порядке принимаю на приемнике, потом обрабатываю…
скорость передачи 2400 передача идет без пауз, иначе приемник с передатчиком теряют связь.
Исходники, не судите строго, первая моя программа.