Ви не увійшли.
Приветствую!
Я в Ардуино(как и в програмировании) бегинер.
Нужен, как элемент другого проекта амперметр(переменный ток). Купил датчик ACS712 на 30 А.
Все бы ничего, но при измерении переменного тока получается великоватая погрешность.
Порылся по интернету, нашел вот такой код, для подобного устройства с преобразованием Фурье(что бы это ни значило):
https://github.com/babinvn/homegrid/blo … megrid.ino
Несколько дней уже неспешно курю его. То в справочник посмотрю, то у гугла спрошу. Но все-равно остались фрагменты, которые справочник не освещает, почему-то, а гугл не понимает чего я от него хочу.
Короче, помогите разобраться с фрагментом кода. Что это, как функционирует, и с чем его едят:
double det3x3(
double m00, double m01, double m02,
double m10, double m11, double m12,
double m20, double m21, double m22
){
return m00*m11*m22 + m01*m12*m20 + m10*m21*m02 - m02*m11*m20 - m01*m10*m22 - m00*m12*m21;
}
Объяснения можно оформить в виде отсылок к конкретной литературе/статьям где есть разъяснение.
Остання редакція bAster.89 (2017-03-25 19:56:01)
Неактивний
Всем спасибо за помощь. Как написал, так сам и разобрался. Это же функция. В окошке справочника на нее выхода нема, поэтому и не сообразил...
Но по проекту 100% еще будут вопросы. Как натолкнусь- сюда опять спрошу.
Неактивний
Спасибо.
Почитал. Понял мало, но хоть общее представление теперь имею.
Скажите, а какого уровня это математика? Школьная старшие(10-11) классы или вузовская, что за раздел?
ЗЫ. Не удивляйтесь, я музыкант по образованию. В программе обучения повыпиливали почти все технические дисциплины, от многих даже ознакомительного курса не оставили.
Неактивний
в коде вероятно поиск максимума спектра
[fix] быстрое преобразование Фурье, как раз та лекция что я проспал (
наверное лучшая книга для ознакомления Юкио Сато Обработка сигналов
тут посмотрите,
http://dsp-book.narod.ru/books.html
narod.ru - жесть рекламная (
или в поиске "цифровая обработка сигналов книги"
Вы если что обращайтесь, вместе попробуем разобраться )
Остання редакція NoName (2017-03-27 09:42:30)
Неактивний
Приветствую!
Столкнулся с неожиданными проблемами в программе, все в коментариях:
for(int i = 0; i < m; i++) //Перебираем указанные выше задействованные пины по очереди, промеряем ток проходящий через них
{ //и для каждого выполняем вычисления Вт и ВтЧ электроэнергии прошедших через датчик.
//________________________Здесь начинаются проблемы____________________________________________________________________________________________________
unsigned long T = millis() - Time[input[i]]; //!!!Вычисляем интервал от последнего замера конкретного порта(или от начала работы микроконтроллера) !!!
unsigned long A=Time[input[i]]; //!!!Переменная А-ничего не делает, просто сохраняет текущее значение переменной Time для последующего ее отображения на мониторе !!!
Time[input[i]]=Time[input[i]]+T; //!!!Пытаемся вычислить значение миллис() в 47 строчке программы(на две строчки выше), но, судя по монитору- получается какая-то фигня вместо этого.!!!
//!!!высчитанные миллис() легко могут в результате оказаться меньше чем Т, чего не должно быть по определению !!!
//!!!_______________________________________________________________________________________________________________________________________________!!!
double T1; //!!!Вторая проблема- При делении Т на 60000(переводим значение в миллисекундах- в минуты) почему-то получается 0,000000, хотя 20000(с гаком)/600000!!!
T1=T/60000; //!!!Никак не может иметь значение меньше 0,000001 !!!
//!!!_____________________Здесь кончаются проблемы__________________________________________________________________________________________________!!!
И так, и сяк вертел, но ничего не получается, помогите пожалуйста!!
Ну и сам скетч, кому надо, для лучшего понимания проблем.
Неактивний
Та что-то с этими привидениями, вернее преобразованиями типов, вообще не разобрался...
Это же уравнение пытался записать ка double(T)=T/60000, ну и разные вариации этого(double(T)=double(T/60000); T1=double(T/60000) ; T1= double(T)/60000...), большинство компиллятор не пропустил или результат получается целым.
Вот сейчас еще записал и обратил внимание, что у вас(и не только , где то в кодах такую же запись встречал) запись "(дабл)" а в справочнике пишут "дабл()". Так и так правильно? Или ошибка в справочнике? или я не правильно прочитал?
Но это все не большая проблема. Меня больше волнует Кусок с миллисами.
Он явно работает как-то не правильно. Для понимания этой конструкции в квадратных скобках- кусочек "головы" скетча:
const byte input [] = {7,2}; //В фигурные скобочки выписываем через запятую все номера аналоговых входов, на которых висят датчики тока
const double ACScoef [] = {0.066 , 0.120}; //------------------"------------------------- соответствующие значения коэффициента датчика тока(Вольт на 1 Ампер тока)
double WhH[8]; //В ячейку массива, соответствующую аналоговому пину, будет записываться значение прошедших через нее ВтЧ.
//Ячейки соответствующие неиспользуемым пинам- остаются с записанным в них нулем(позже в програме).
unsigned long Time[8]; //То же самое но со временем
Пытался приложить конструкцию с миллисами(ту же которая выше) но движок форума вдруг сообразил:
"Следующие ошибки необходимо исправить прежде чем сообщение будет сохранено:
[і] открывается внутри такого же тега, это недопустимо"
Если это автоматизированная подсказка(почему она вчера не вылезла?), то пробовал input[і] заменить:
int C= input[і]
и дальше везде где встречается конструкция "[input[і]]", пишем [C].
Но на мониторе, в результате всех манипуляций,ничего не меняется(Под ником "Time[C]old" или "Time[input[і]]old" отображается переменная "А"):
WhH(7)(0.07)=0.000000 T1=0.00000000 T=0 Time[input[i]]old=0 Time[input[i]]=0
WhH(2)(0.12)=35481.722656 T1=0.00066667 T=50 Time[input[i]]old=0 Time[input[i]]=40
**************************************************************************************
WhH(7)(0.07)=9501268.000000 T1=0.08700000 T=12144 Time[input[i]]old=0 Time[input[i]]=5220
WhH(2)(0.12)=4712320.500000 T1=0.08725000 T=12163 Time[input[i]]old=40 Time[input[i]]=5275
**************************************************************************************
WhH(7)(0.07)=19404908.000000 T1=0.08736667 T=12172 Time[input[i]]old=5220 Time[input[i]]=10462
WhH(2)(0.12)=12790881.000000 T1=0.08745000 T=12177 Time[input[i]]old=5275 Time[input[i]]=10522
**************************************************************************************
WhH(7)(0.07)=29085428.000000 T1=0.08753334 T=12204 Time[input[i]]old=10462 Time[input[i]]=15714
WhH(2)(0.12)=21078378.000000 T1=0.08755001 T=12205 Time[input[i]]old=10522 Time[input[i]]=15775
**************************************************************************************
WhH(7)(0.07)=38467000.000000 T1=0.08756667 T=12206 Time[input[i]]old=15714 Time[input[i]]=20968
WhH(2)(0.12)=28501928.000000 T1=0.08756667 T=12206 Time[input[i]]old=15775 Time[input[i]]=21029
**************************************************************************************
WhH(7)(0.07)=47665244.000000 T1=0.08755001 T=12205 Time[input[i]]old=20968 Time[input[i]]=26221
WhH(2)(0.12)=34527320.000000 T1=0.08756667 T=12206 Time[input[i]]old=21029 Time[input[i]]=26283
**************************************************************************************
WhH(7)(0.07)=55715240.000000 T1=0.08756667 T=12206 Time[input[i]]old=26221 Time[input[i]]=31475
WhH(2)(0.12)=39587316.000000 T1=0.08756667 T=12206 Time[input[i]]old=26283 Time[input[i]]=31537
**************************************************************************************
WhH(7)(0.07)=64370500.000000 T1=0.08756667 T=12206 Time[input[i]]old=31475 Time[input[i]]=36729
WhH(2)(0.12)=44447576.000000 T1=0.08756667 T=12206 Time[input[i]]old=31537 Time[input[i]]=36791
**************************************************************************************
WhH(7)(0.07)=73871320.000000 T1=0.08755001 T=12205 Time[input[i]]old=36729 Time[input[i]]=41982
WhH(2)(0.12)=50538388.000000 T1=0.08755001 T=12205 Time[input[i]]old=36791 Time[input[i]]=42044
**************************************************************************************
_______________________________________________________________________________________________________
WhH(7)(0.07)=0.000000 T1=0.00000000 T=0 Time[C]old=0 Time[C]=0
WhH(2)(0.12)=49927.851562 T1=0.00066667 T=50 Time[C]old=0 Time[C]=40
**************************************************************************************
WhH(7)(0.07)=9561402.000000 T1=0.08700000 T=12144 Time[C]old=0 Time[C]=5220
WhH(2)(0.12)=5157965.500000 T1=0.08725000 T=12163 Time[C]old=40 Time[C]=5275
**************************************************************************************
WhH(7)(0.07)=19223488.000000 T1=0.08736667 T=12172 Time[C]old=5220 Time[C]=10462
WhH(2)(0.12)=13170035.000000 T1=0.08745000 T=12177 Time[C]old=5275 Time[C]=10522
**************************************************************************************
WhH(7)(0.07)=28601492.000000 T1=0.08753334 T=12204 Time[C]old=10462 Time[C]=15714
WhH(2)(0.12)=21224550.000000 T1=0.08755001 T=12205 Time[C]old=10522 Time[C]=15775
**************************************************************************************
WhH(7)(0.07)=38285696.000000 T1=0.08756667 T=12206 Time[C]old=15714 Time[C]=20968
WhH(2)(0.12)=28248626.000000 T1=0.08756667 T=12206 Time[C]old=15775 Time[C]=21029
**************************************************************************************
WhH(7)(0.07)=47181368.000000 T1=0.08755001 T=12205 Time[C]old=20968 Time[C]=26221
WhH(2)(0.12)=34007704.000000 T1=0.08756667 T=12206 Time[C]old=21029 Time[C]=26283
**************************************************************************************
WhH(7)(0.07)=55291892.000000 T1=0.08756667 T=12206 Time[C]old=26221 Time[C]=31475
WhH(2)(0.12)=38701516.000000 T1=0.08756667 T=12206 Time[C]old=26283 Time[C]=31537
**************************************************************************************
WhH(7)(0.07)=64128728.000000 T1=0.08756667 T=12206 Time[C]old=31475 Time[C]=36729
WhH(2)(0.12)=43927960.000000 T1=0.08756667 T=12206 Time[C]old=31537 Time[C]=36791
**************************************************************************************
WhH(7)(0.07)=73750576.000000 T1=0.08755001 T=12205 Time[C]old=36729 Time[C]=41982
WhH(2)(0.12)=51050548.000000 T1=0.08755001 T=12205 Time[C]old=36791 Time[C]=42044
**************************************************************************************
К стати, Т1 на мониторе вверху уже вычисляется:
T1=(double)T/60000
Помогло, спасибо! 60000.0 специально не ставил. Без ".0" вроде все работает тоже.
Остання редакція bAster.89 (2017-04-03 13:54:03)
Неактивний
unsigned long T = millis() - Time[input[i]];
тут суммируем время , а не храним старое
Time[input[i]] += T;
сложно пишете (
unsigned long old_millis = millis();
unsigned long T = old_millis - Time[input[i]];
Time[input[i]] = old_millis;
Неактивний
Кажется обнаружил ошибку:
Serial.print("T1=");
Serial.print(T1,8);
Serial.print("\t");
Serial.print("T=");
Serial.print(T,8);
Как и водится, она оказалась совсем не там, где я ее искал. Раньше Т была double, ну и, естественно, я ее на мониторе хотел видеть с 8-ю знаками после запятой, а потом я ее поменял на unsigned long а восьмерка- осталась ("Serial.print(T,8);") Не знаю что она делала с переменной типа ЛОНГ, но когда я ее убрал- все стало похожим на правильное.
Остання редакція bAster.89 (2017-04-03 14:48:37)
Неактивний
unsigned long T = millis() - Time[input[i]];
тут суммируем время , а не храним старое
Time[input[i]] += T;
Хранение старого времени никому не нужно было, ввел для отладки, чтоб быть уверенным, что за цикл с ним ничего не происходит.
Математическое мышление за годы занятия музыкой- заржавело страшно. Часто не могу сообразить элементарные вещи. Будем надеяться что в ближайшем времени разработается
сложно пишете (
unsigned long old_millis = millis();
unsigned long T = old_millis - Time[input[i]];
Time[input[i]] = old_millis;
Спорный вопрос как сложнее. В вашем варианте получается одна лишняя переменная.
Хотя логику я понимаю:
Вы сначала записываете миллис(), а потом делаете с ними вычисления, а я
сначала делаю вычисления с миллис(), а потом вычисляю какие-же все-таки были только что миллис
Но замечание, в любом случае, принято.
И спасибо за помощь!
Остання редакція bAster.89 (2017-04-03 15:14:24)
Неактивний