GY-271 не могу запустить
- Войдите на сайт для отправки комментариев
Сб, 11/02/2017 - 20:27
День добрый. Я недавно начал разбиратся с ардуино. Купил на aliexpress два GY-271 модуля. Не получается получить с них данные.
Пробовал запустить вот такой скетч:
#include "Wire.h" #include "HMC5883L.h" HMC5883L compass; //Copy the folder "HMC5883L" in the folder "C:\Program Files\Arduino\libraries" and restart the arduino IDE. float xv, yv, zv; void setup() { Serial.begin(9600); Wire.begin(); compass = HMC5883L(); setupHMC5883L(); } void loop() { getHeading(); Serial.flush(); Serial.print(xv); Serial.print(","); Serial.print(yv); Serial.print(","); Serial.print(zv); Serial.println(); delay(100); } void setupHMC5883L() { compass.SetScale(0.88); compass.SetMeasurementMode(Measurement_Continuous); } void getHeading() { MagnetometerRaw raw = compass.ReadRawAxis(); xv = (float)raw.XAxis; yv = (float)raw.YAxis; zv = (float)raw.ZAxis; }
но в вывод порта приходят только вот такие строки: 1636.00,1634.00,1635.00
Пробовал сканировать i2c шину, модуль отозвался на 0x0D адрес. Пробовал менять адресс 0x1E (в библотеке) на полученный 0x0D результат такой же.
Сам модуль выглядит так:
Сильно смущает надпись с обратной стороны платы: GY-271 HW-246
На корпусе микросхемы написано: 5883
Второй модуль ведет себя аналогично.
В стандартном примере Adafruit, вывод останавливается на строке: mag.getEvent(&event);
Подскажите в чем может быть причина моей беды?
похоже я нашел причину. там чип стоит 5883 а не 5883l , старых библиотек ни у кого не имеется?
Всем привет!
У меня такая же беда. Перекопал кучу библиотек, ниодна не работает с адресом 0x0D.
Всем привет!
У меня такая же беда. Перекопал кучу библиотек, ниодна не работает с адресом 0x0D.
У вас тоже на обратной стороне платы есть надпись hw-246 ?
Ищите примеры с использованием "магмастер".
Было видио от ArduiniLab, если не ошибаюсь.
Там, по указаниям программы "магмастер" ориентируете магнитометр последовательно в шести плоскостях, снимаются значения и рассчитываются поправки.
Затем остается их занести в матрицу в скетче.
Показания получаются достаточно точные.
И соответственно все делать вдали от электроприборов для исключения их влиян
Невнимательно прочитал, думал, что у вас неточные показания.
--
Нет, надписи hw-246 у меня не, но модуль внешне один в один как Вашь. На чипе написанно DA 5883 6011. У меня 2 таких модуля, в обоих случаях одинаковое поведение. Отзываються по адресу 0х0D.
Нет, надписи hw-246 у меня не, но модуль внешне один в один как Вашь. На чипе написанно DA 5883 6011. У меня 2 таких модуля, в обоих случаях одинаковое поведение. Отзываються по адресу 0х0D.
Просто я подумал что HW это hardwire i2c версии 2, 4 или 6 , что кстати уже проверил, не помогло. Пробовал разговаривать как с чипом htc5883 (без L) тоже не помогло. Кстати на hmc5883L маркировка должна быть L883 как я понял. Гугол по этому вопросу вывел на немецкий форум где немцы пытались разабратся в этой проблеме и они пришли к выводу что это подделка на этом все и остановилось. Я больше чем уверен что модули рабочие все абсалютно, только на них нужна настоящая китайская спецификация, задал продавцу этот вопрос он не отвечает. Так что советую вам если вы делали заказ в китае попросить даташит у своего продовца, может адекватный попадется. На моем модуле такая же маркировка как у вас, только вот на нижней строке написано 6012, скорей всего это или год выпуска или серия (или и то и другое). Если это год выпуска то по видимому китайские производители избавляются от остатков старья. И пожалуста если найдете решение этой проблемы не забутьте о товарищах )
Да, на немецкий форум я тоже зашел, читал их мысли. Заказывал в Китае, вот только мой продавец ничего не ответил, каждый раз один и тот же текст, как автоответчик.
Да, на немецкий форум я тоже зашел, читал их мысли. Заказывал в Китае, вот только мой продавец ничего не ответил, каждый раз один и тот же текст, как автоответчик.
это вам бот отвечает.
вот похоже то что нужно http://wapa-gov.com/file/YbCDRad9 там два архива, те же буковки что надо (hw-246) и без них. Скачать не могу ибо китайский не знаю.
Если перевести имя архива то там написано на китайском - ускоренная передача. А это скорей всего то что я думаю (hardwire i2c protocol).
Если у кого то получится скачать обязательно поделитесь.
Методом брутфорса я вычислил, что модуль начинает работать, когда в 9 регистр вписываешь 1.
Так же обратил внимание, что после активыции меняються значения в первых 8 регистрах.
Вот работающий у меня скеч:
Показания, правда, очень прыгают при неподвижном модуле. Теперь надо понять, восможно ли это и как преобразовать в градусы или радианы.
Так же интересно, что именно отображает в моем скече параметр Т. В большинстве случаев он ростет при неподвижном модуле, как будто это время, иногда скачет в перед/назад. Хотя несколько раз замечал, что значение начинало убывать.
Методом брутфорса я вычислил, что модуль начинает работать, когда в 9 регистр вписываешь 1.
Так же обратил внимание, что после активыции меняються значения в первых 8 регистрах.
Вот работающий у меня скеч:
Показания, правда, очень прыгают при неподвижном модуле. Теперь надо понять, восможно ли это и как преобразовать в градусы или радианы.
Так же интересно, что именно отображает в моем скече параметр Т. В большинстве случаев он ростет при неподвижном модуле, как будто это время, иногда скачет в перед/назад. Хотя несколько раз замечал, что значение начинало убывать.
немножко вывода можно увидеть? на поворот реагирует или в покое рандом выдает?
В покое рандом выдает. Результаты выложу немного позже
Вот что модуль выдает в статичном положении. Данные очень сильно скачут. Видимо как-то не так считываю. Модуль при считывании в полуметре от компьютера лежал. пробовал его на обе стороны переварачивать, результат такой-же.
Вот еще немного хаоса. На графике видно, что через какое-то время успокоился, а потом снова начало скокать в крайности.
Понял в чем дело. начинать считывать надо было с 1го регистра а не с 0го. Сейчас при статичном положении помех почти нет а при движении модуля есть четкое изменение данных. Как пойму, как это дело преобразовать в геометрические еденици измерения, выложу свой код.
Понял в чем дело. начинать считывать надо было с 1го регистра а не с 0го. Сейчас при статичном положении помех почти нет а при движении модуля есть четкое изменение данных. Как пойму, как это дело преобразовать в геометрические еденици измерения, выложу свой код.
Ну да там всего их три (А, Б, Ц) ) но рабочий код очень хочется посмотреть, выложите последний вариант, если он работает то со скалингом я попробую вам помочь
Вот работающий код. Проверил, при вращении модуля вокруг X оси меняются значения Y и Z, вокруг Z - X и Y, а вокруг Y - X и Z.
Диапазон значений по осям, который получилось снять с модуля:
x:[-5324, 8419]
y:[-1798, 11769]
z:[0, 15360]
Диапазон значений по осям, который получилось снять с модуля:
x:[-5324, 8419]
y:[-1798, 11769]
z:[0, 15360]
Вот что у меня получилось. Для правильных показаний надо покрутить его по всем осям
Осталось только найти тангенс углов.
Математика не совсем правильная. Диапазон по Х оси это не 360, а 180, так как пол оборота значение ростет, а другую половину падает.
И на севере у Х самое большое значение, значит для вычисления в градусах необходимо инвертировать значение.
А по значению Y уже определять, в какой половине круга мы находимся, меньше 180 или больще.
Математика не совсем правильная. Диапазон по Х оси это не 360, а 180, так как пол оборота значение ростет, а другую половину падает.
И на севере у Х самое большое значение, значит для вычисления в градусах необходимо инвертировать значение.
А по значению Y уже определять, в какой половине круга мы находимся, меньше 180 или больще.
да верно 180. думаю теперь несложно подставить формулу из тех же примеров для нормального модуля (тангенс между x и y) и получить этот минус (ну или > 180 градусов).
теперь надо придумать как откалибровать его чуствительность, ибо у меня по оси Z где то 100 единиц всего.
теперь надо придумать как откалибровать его чуствительность, ибо у меня по оси Z где то 100 единиц всего.
Да, странно. У меня диапазоны по всем осям очень похожи.
Вот как я преобразую данные с модуля в градусы
Результат в диапазоне [-180 - 0 - 180]
Не совсем верно показывает, где север. но это проблема колибрации. Меня другое огорчило.
В статичном положении показания с X и Y осей очень сильно прыгают, при этом ось Z давольно спокойно себя ведет. В результате показани в градусах прыгают в диапазоне 5 градусов.
Вот как я преобразую данные с модуля в градусы
Результат в диапазоне [-180 - 0 - 180]
Не совсем верно показывает, где север. но это проблема колибрации. Меня другое огорчило.
В статичном положении показания с X и Y осей очень сильно прыгают, при этом ось Z давольно спокойно себя ведет. В результате показани в градусах прыгают в диапазоне 5 градусов.
я пока не дома. нужно делить не на 360 а на 180, а потом делить на два это будет середина (90 градусов)
вот это поменяй:
потом
atan2 это для радианов
градусах прыгают в диапазоне 5 градусов.
я накосячил в коде. вот новый вариант:
С помощью :
вы можете указывать диапозон вывода от нуля и до этого значения.
В моем модуле рывки еще больше чем у вас.....
я себе заказал другой :) GY-273
я себе заказал другой :) GY-273
ну не один ты такой умный ))))
Пришел еще один модуль GY-271. На этот раз оригинальный. От подделки отличается наличием iic адреса 0x1E и маркировкой чипа L883. В остальном внешний вид (и все надписи) совпадают с подделкой (или наоборот ))) ).
Работает очень стабильно без танцов с бубном.
Жалко потраченого времени и денег подареных бессовестному китайскому продавцу. Повелся на халявные 20 рублей...
У меня не так успешно. Заказывал GY-273 - прислали такую же хрень. Переписывался на ebay с разными продавцами, спрашивал, есть ли на их чипе маркировка L883 или они продают модули с местным аналогом. Один ответил, что вроде оригинальный - купил, сейчас жду сам модуль.
А у кого Вы заказывали?
Может кто-нибудь подсказать, почему мы считывать начинаем с 0x01, а не с 0x03 ?
Подскажут :) Qmh5883
QMC5883
QMC5883
f.cpu@yandex.ru пишите вышлю даташит
У меня не так успешно. Заказывал GY-273 - прислали такую же хрень. Переписывался на ebay с разными продавцами, спрашивал, есть ли на их чипе маркировка L883 или они продают модули с местным аналогом. Один ответил, что вроде оригинальный - купил, сейчас жду сам модуль.
А у кого Вы заказывали?
https://ru.aliexpress.com/store/product/GY-271-HMC5883L-Module-Compass-Three-axis-Magnetic-Field-Sensor/1544094_32676016078.html?spm=a2g0v.12010615.0.0.2a21ac87yw1i7h
с первого раза завелся (оригинальный с буквой L). вот в этом магазине всегда адекватно отвечают на вопросы. если есть проблемы помогают. было такое что я заказ раньше времени закрыл, а там на 150 рублей товар не доложили, так когда я им сказал об этом то они не полинились мне его дослать. покупал у них arduino конструктор на коробке их логотип и название магазина. Я так понимаю это не одиночный мелкий торговец а что то покрупнее.
Пришёл мне мой GY-271 с надписью HW-246 сзади. Больше ничего известно не было, перепробовал кучу скетчей с разных сайтов, всегда либо не работало, либо выдавало слишком неточные показания даже в статичном положении. По всем признакам китайская подделка, уже расстроился и стал подумывать, где бы заказать оригинал, но вдруг наткнулся на аналогичную стандартной библиотеку на Гитхабе:
Mecha_QMC5883L https://github.com/keepworking/Mecha_QMC5883L
Заливаю себе её и запускаю приложенный к библиотеке пример и ЧУДО, ОНО ЗАРАБОТАЛО. Показания выровнялись!
Было (последний скетч в этой теме товарища perfect, библиотеку брал отсюда http://amperkot.ru/static/3236/uploads/libraries/HMC5883L.zip ):
Стало (скетч ниже, библиотека с гитхаба):
Так что рекомендую попробовать этот вариант, если другие скетчи не помогли.
Вы не правы.
<<Показания меняются от -1500 до 1500 по всем осям, т.е если загрубить до -180 +180, то погрешность вообще будет минимальной.>>
значения двух байтное 65535 т.е. с учетом минуса, показания меняются-32767 до +32767
замерял шумы составят 46 от значения 32767
2) Значение 32767 делим на 3000 (при выбраном значении 8 Gauss) у меня мериет почти до 11 Gauss. Полные два бита АЦП
К стате значения температуры снимаемые с датчика QMC5883 (платы GY-271)дают шумы от (+-) 0,04 С до (+-) 0,1 градуса цельсия
Попробовал эту библиотеку, была аналогичная ситуация. Показания действительно выровнялись и плавают в приемлемом допуске 5 град. Да вот незадача: шкала азимута нелинейная, весь круг 360 град, но поворот на ровно 90 показывает 60, на 180 показывает 235. Максимальный размах не как у вас 1500, а 900. Смещение на 10 см в сторону всё меняет. Иногда Азимут по кругу не составляет 360. Бред какой-то, хоть и стабильный, и идёт прямо с регистров GY-271. Показания по X и Y стабильные +/- , но странно имеют две точки нуля, причём не в 180 поворота разницы, а где-то градусов 140. Помехи-наводки... близко особо ничего нет, хоть и первый этаж, в то же время компас в смартфоне параллельно показывает примерно верно и стабильно, там тоже чип.
Я хотел спросить, как у вас спустя месяц впечатление? Нормально работает?
У меня чип DA 5883 6015.
Нормально настроить так и не получилось. Если при чистой связке Ардуино+гироскоп он ещё более менее работал стабильно, то при подключении в общую систему (был проект по заказу от военных с поворотной антенной на ардуино, хотел добавить новую функцию по возврату в установленное положение при механическом повороте антенны) от этой идеи пришлось отказаться, так как модуль окончательно заглючил, ничего не выдавал или выдавал всякий мусор. В будущем закажу ещё несколько модулей от разных продавцов и отпишусь здесь, что выйдет.
Здравствуйте. Являюсь обладатем QMC5883l на DA5883. Есть ли возможность подружить библиотеку Mecha_QMC5883L с прошивкой для квадрокоптера (например Multiwii)?
Нормально настроить так и не получилось. Если при чистой связке Ардуино+гироскоп он ещё более менее работал стабильно, то при подключении в общую систему (был проект по заказу от военных с поворотной антенной на ардуино, хотел добавить новую функцию по возврату в установленное положение при механическом повороте антенны) от этой идеи пришлось отказаться, так как модуль окончательно заглючил, ничего не выдавал или выдавал всякий мусор. В будущем закажу ещё несколько модулей от разных продавцов и отпишусь здесь, что выйдет.
Заказ от военных на ардуино?! Вы серьезно ??? ) ха) ха) ха))))))))))))))))
Тут нашёл ещё одну библиотеку для QMC5883l на DA5883 более универсальную https://github.com/DFRobot/DFRobot_QMC5883
Она сама определяет чип и работает для обоих. Однако ситуация с чипом неважная. Старый оригинал от Honeywell- HMC5883L якобы остановлено производство, а этот DA5883 - китайская бадяга.
Подбирал настройки (а они отличаются от HMC5883L) все из возможных, получилось значительно стабильнее, но точность +/- 30 градусов. Кстати на Али видел ссылку, тут кто-то собирался искать GY-273, так он так же на чипе 5883L, будет ли стабильнее не факт.
Пробую сейчас как раз GY-273, вот что у меня получается (интересует только ось Z как датчик угла поворота фрамуги). Вводные: модуль микрухой вверх при старте, потом кручу его вокруг оси Z. Выхлоп такой:
В выхлопе повернул модуль на 180 градусов, до состояния "жопка вверх". Тестовый скетч валяется тут: https://drive.google.com/file/d/1Lv2KUwHYo2C0qruAvbFIkvg8UPMdwC9-/view?usp=sharing
Вывод: модуль, что у меня в наличии, рабочий, но есть дрейф показаний, который надо фильтровать. Для моих целей - отслеживания положения фрамуги, когда модуль работает в паре с концевиками крайних положений и, по сути, мне нужен только максимальное и минимальное значение диапазона, между которыми будет рассчитываться процент открытия фрамуги - модуль, по осторожным прикидкам, вполне годится.
Может проще смотреть в градусах, по моему так: Degress = atan2(norm.YAxis, norm.XAxis) * 180/PI;
На порядки точнее, надёжнее и проще поставить переменный резистор, привязать к концевикам и смотреть его.
А какой ЧИП в модуле GY-273, что на нём написано?
Может проще смотреть в градусах, по моему так: Degress = atan2(norm.YAxis, norm.XAxis) * 180/PI;
На порядки точнее, надёжнее и проще поставить переменный резистор, привязать к концевикам и смотреть его.
А какой ЧИП в модуле GY-273, что на нём написано?
Зачем усложнять лишними вычислениями, если всегда есть диапазон относительных чисел, например, [-100, 200], и в моей задаче, в зависимости от текущего значения по оси Z - всегда можно простейшей арифметикой вычислить процент открытия фрамуги, от 0 до 100%? И тригонометрические функции будут в сохранности, а то, говорят, от частого использования они стареют и выходят из строя :) Я ж не солнечный трекер строю, где без углов наклона, азимутов и пр. - никуда ;)
Насчёт переменного резистора - обсуждали с пользователями, по итогу - отказались в пользу указанного модуля. Я предлагал вариант с переменником с самого начала - забраковали :)
По поводу чипа: на нём написано DA7883 5804 вроде - сложно разглядеть, слаб зрением стал :)
DA7883 (а скорее DA5883) - это левый чип, у него выход плюс-минус лапоть. Он меряет лучше, если его перед снятий показаний повертеть, мне так заметилось. Я брал выборку из полсотни показаний среднюю, но всё равно +/- градусов 10-20. Если устраивает, то велком. Меня, например, в итоге устроило - для робота определять взаиморасположение комнат. Но надо лучше. Я в Китае назаказал разных моделей компасов на пробу, жду.
Я брал выборку из полсотни показаний среднюю, но всё равно +/- градусов 10-20. Если устраивает, то велком.
Мне не надо много градаций открытия - ну может несколько, типа 0%, 25%, 50%, 75%, 100%, так что точностей космических - не надо.
Потом, ещё раз повторюсь: мне совсем неважно, брешет или нет датчик. Мне важно, чтобы он брехал стабильно на всём протяжении изменения положения по оси Z, что сходу при поверхностном знакомстве - похоже на правду: изменения линейные. А уж что он там кажет и насколько брешет - по барабану, мне главное - иметь более-менее линейный диапазон чиселок, всё. Числовой ряд при этом может быть, как вы понимаете, совершенно любым, и в моём случае - не стоит этот числовой ряд привязывать к градусам, радианам, азимутам и прочему, т.к. эти данные в моём применении - совершенно избыточны.
Вот - взял датчик вертикально, покрутил по часовой и против часовой стрелки (фрамуга с горизонтальным открыванием):
Ось Z работает как надо, т.е., имея граничные значения диапазонов (засекаемые в момент срабатывания концевиков) - я всегда смогу с точностью плюс-минус лапоть отобразить текущее положение фрамуги на требуемую мне небольшую шкалу градаций - простая арифметика.