Например TDA7294

Форум РадиоКот • Просмотр темы - Вопрос по GY-271 (Цифровой компас QMC5883)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 09:35:20

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Вопрос по GY-271 (Цифровой компас QMC5883)
СообщениеДобавлено: Пт сен 25, 2020 13:31:44 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 542
Откуда: Николаев / Украина
Рейтинг сообщения: 0
Всем привет! имеется модуль Цифрового компаса QMC5883L. Программу пишу в Ардуино ИДЕ. Установил несколько библиотек: Mecha_QMC5883L и DFRobot_QMC5883, покрутил в руках, вроде работает, циферки в мониторе порта бегут и меняются в зависимости от поворота/наклона датчика.
Мне нужно сделать определение "верха" и "низа". То есть мне нужно его встроить в устройство, чтобы при перевороте устройства понимать где верх. Высокая точность не нужна, так как корпус будет прямоугольным, и на ребро его никто ставить не будет.
Подскажите, как это реализовать? Что-то сообразить не могу. Проблема в том что при перевороте меняются значения у всех трех осей, так как положение в пространстве может поменяться как угодно... и это вводит меня в какой-то ступор.

вот пример из библиотеки от DFRobot_QMC5883:
Спойлер
Код:
/*!
 * @file QMC5883_readRaw.cpp
 * @brief show raw data
 * @n 3-Axis Digital Compass IC
 *
 * @copyright   [DFRobot](<a href="http://www.dfrobot.com" title="http://www.dfrobot.com" rel="nofollow">http://www.dfrobot.com</a>), 2017
 * @copyright   GNU Lesser General Public License
 *
 * @author [dexian.huang](<a href="mailto:952838602@qq.com">952838602@qq.com</a>)
 * @version  V1.0
 * @date  2017-7-3
 */

#include <Wire.h>
#include <DFRobot_QMC5883.h>

DFRobot_QMC5883 compass;

int minX = 0;
int maxX = 0;
int minY = 0;
int maxY = 0;
int offX = 0;
int offY = 0;

void setup()
{
  Serial.begin(115200);

  // Initialize Initialize QMC5883
  while (!compass.begin()){
    Serial.println("Could not find a valid QMC5883 sensor, check wiring!");
    delay(500);
  }
  if(compass.isHMC() ){
    Serial.println("Initialize HMC5883");
    compass.setRange(HMC5883L_RANGE_1_3GA);
    compass.setMeasurementMode(HMC5883L_CONTINOUS);
    compass.setDataRate(HMC5883L_DATARATE_15HZ);
    compass.setSamples(HMC5883L_SAMPLES_8);
  }else if(compass.isQMC()){
    Serial.println("Initialize QMC5883");
    compass.setRange(QMC5883_RANGE_2GA);
    compass.setMeasurementMode(QMC5883_CONTINOUS);
    compass.setDataRate(QMC5883_DATARATE_50HZ);
    compass.setSamples(QMC5883_SAMPLES_8);
  }
}

void loop()
{
  Vector mag = compass.readRaw();
  Serial.print(mag.XAxis);
  Serial.print(":");
  Serial.print(mag.YAxis);
  Serial.print(":");
  Serial.println(mag.ZAxis);
}

На выходе вот это:
Спойлер-2550.00:11790.00:-10248.00
-2550.00:11790.00:-10244.00
-2550.00:11790.00:-10244.00
-1805.00:10420.00:-10240.00
-920.00:9092.00:-10240.00
-860.00:9110.00:-10244.00
-2680.00:7700.00:-7684.00
-3022.00:8416.00:-7680.00
-5314.00:11740.00:-7680.00
-6700.00:12430.00:-7684.00
-6378.00:11317.00:-5888.00
-6240.00:10840.00:-5124.00
-6391.00:10785.00:-4868.00
-7750.00:10290.00:-2564.00
-7750.00:10290.00:-2564.00
-7750.00:10290.00:-2564.00
-11131.00:12299.00:-768.00
-10465.00:13871.00:0.00
-12700.00:13950.00:-4.00
-12700.00:13950.00:-4.00
-12700.00:13950.00:-4.00
-12700.00:13950.00:-4.00
-12700.00:13950.00:-4.00
-12700.00:13950.00:-4.00
-11680.00:12890.00:5116.00
-11680.00:12890.00:5116.00
-11680.00:12890.00:5116.00
-11680.00:12890.00:5116.00
-11680.00:12890.00:5116.00
-11680.00:12890.00:5116.00
-12300.00:15080.00:7676.00
-11748.00:14003.00:8448.00
-10460.00:11490.00:10236.00
-10460.00:11490.00:10236.00
-10460.00:11490.00:10236.00
-10460.00:11490.00:10232.00
-10182.00:11436.00:10752.00
-8995.00:11439.00:12800.00
-9040.00:12185.00:12800.00
-9260.00:12420.00:12796.00
-9260.00:12420.00:12796.00
-7770.00:7790.00:15356.00
-7770.00:7790.00:15356.00
-7770.00:7790.00:15356.00
-7770.00:7790.00:15356.00
-6636.00:8574.00:15360.00
-6054.00:8742.00:15360.00
-6298.00:8661.00:15360.00
-6280.00:8490.00:15356.00
-6420.00:8810.00:15360.00
-6630.00:9290.00:15356.00
-6630.00:9290.00:15356.00
-6630.00:9290.00:15356.00
-4340.00:9040.00:17916.00
-4340.00:9040.00:17916.00
-4340.00:9040.00:17916.00
-4604.00:8878.00:17920.00
-4780.00:8770.00:17916.00
-2899.00:6754.00:17920.00
-5030.00:8970.00:17916.00
-5021.00:8949.00:17920.00
-5000.00:8900.00:17916.00
-5000.00:8900.00:17916.00
-5000.00:8900.00:17916.00
-5000.00:8900.00:17912.00
-5000.00:8900.00:17916.00
-5000.00:8900.00:17916.00
-5000.00:8900.00:17916.00
-5000.00:8900.00:17916.00
-6440.00:8828.00:15872.00
-6800.00:8810.00:15352.00
-6800.00:8810.00:15356.00
-6800.00:8810.00:15356.00
-6800.00:8810.00:15356.00
-6800.00:8810.00:15356.00
-6800.00:8810.00:15356.00
-6800.00:8810.00:15352.00
-6800.00:8810.00:15356.00
-8040.00:9114.00:14336.00
-9900.00:9570.00:12796.00
-9900.00:9570.00:12796.00
-9900.00:9570.00:12796.00
-9842.00:9664.00:13056.00
-7790.00:5200.00:15356.00
-7790.00:5200.00:15356.00
-7790.00:5200.00:15356.00
-7790.00:5200.00:15356.00
-9734.00:8764.00:13056.00

Вот пример из Mecha_QMC5883L:
Спойлер
Код:
#include <Wire.h>
#include <MechaQMC5883.h>

MechaQMC5883 qmc;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  qmc.init();
  //qmc.setMode(Mode_Continuous,ODR_200Hz,RNG_2G,OSR_256);
}

void loop() {
  int x, y, z;
  int azimuth;
  //float azimuth; //is supporting float too
  qmc.read(&x, &y, &z,&azimuth);
  //azimuth = qmc.azimuth(&y,&x);//you can get custom azimuth
  Serial.print("x: ");
  Serial.print(x);
  Serial.print(" y: ");
  Serial.print(y);
  Serial.print(" z: ");
  Serial.print(z);
  Serial.print(" a: ");
  Serial.print(azimuth);
  Serial.println();
  delay(100);
}

Вот что на выходе при попытке "аккуратно" перевернуть датчик "вверх ногами":
Спойлерx: -1458 y: -1715 z: 435 a: 229
x: -1461 y: -1682 z: 450 a: 229
x: -1450 y: -1680 z: 480 a: 229
x: -1442 y: -1705 z: 461 a: 229
x: -1422 y: -1690 z: 515 a: 229
x: -1491 y: -1670 z: 466 a: 228
x: -1545 y: -1710 z: 308 a: 227
x: -1637 y: -1760 z: 66 a: 227
x: -1712 y: -1737 z: -265 a: 225
x: -1707 y: -1755 z: -630 a: 225
x: -1632 y: -1778 z: -888 a: 227
x: -1686 y: -1652 z: -840 a: 224
x: -1700 y: -1442 z: -1031 a: 220
x: -1668 y: -1295 z: -1132 a: 217
x: -1458 y: -1168 z: -1408 a: 218
x: -1230 y: -1112 z: -1592 a: 222
x: -933 y: -1075 z: -1710 a: 229
x: -466 y: -1115 z: -1815 a: 247
x: 22 y: -1183 z: -1737 a: 271
x: 361 y: -1246 z: -1605 a: 286
x: 485 y: -1283 z: -1541 a: 290
x: 600 y: -1238 z: -1436 a: 295
x: 713 y: -1290 z: -1382 a: 298
x: 772 y: -1380 z: -1305 a: 299
x: 838 y: -1432 z: -1223 a: 300
x: 787 y: -1445 z: -1261 a: 298
x: 667 y: -1468 z: -1385 a: 294
x: -17 y: -1191 z: -1712 a: 269
x: -872 y: -1117 z: -1677 a: 232
x: -1493 y: -1360 z: -1323 a: 222
x: -1720 y: -1440 z: -1036 a: 219
x: -1851 y: -1501 z: -662 a: 219
x: -1848 y: -1491 z: -87 a: 218
x: -1646 y: -1476 z: 383 a: 221
x: -1368 y: -1466 z: 692 a: 226
x: -1165 y: -1427 z: 853 a: 230
x: -1028 y: -1387 z: 933 a: 233
x: -940 y: -1367 z: 1001 a: 235
x: -896 y: -1372 z: 996 a: 236
x: -911 y: -1375 z: 977 a: 236
x: -921 y: -1395 z: 973 a: 236
x: -940 y: -1380 z: 985 a: 235
x: -950 y: -1382 z: 968 a: 235
x: -926 y: -1385 z: 982 a: 236
x: -926 y: -1377 z: 998 a: 236
x: -940 y: -1370 z: 982 a: 235
x: -940 y: -1377 z: 966 a: 235
x: -950 y: -1355 z: 973 a: 234
x: -975 y: -1357 z: 955 a: 234
x: -1227 y: -1382 z: 826 a: 228
x: -1597 y: -1427 z: 453 a: 221
x: -1776 y: -1468 z: 93 a: 219
x: -1861 y: -1390 z: -136 a: 216
x: -1900 y: -1365 z: -563 a: 215
x: -1597 y: -1360 z: -1288 a: 220
x: -1093 y: -1337 z: -1635 a: 230
x: -531 y: -1320 z: -1806 a: 248
x: 227 y: -1292 z: -1691 a: 279
x: 572 y: -1273 z: -1527 a: 294
x: 833 y: -1258 z: -1305 a: 303
x: 940 y: -1253 z: -1143 a: 306
x: 1008 y: -1238 z: -1060 a: 309
x: 975 y: -1198 z: -1125 a: 309
x: 757 y: -938 z: -1433 a: 308
x: 585 y: -787 z: -1546 a: 306
x: 502 y: -680 z: -1586 a: 306
x: 507 y: -611 z: -1576 a: 309
x: 510 y: -650 z: -1581 a: 308
x: 515 y: -631 z: -1576 a: 309
x: 526 y: -603 z: -1567 a: 311

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по GY-271 (Цифровой компас QMC5883)
СообщениеДобавлено: Пт сен 25, 2020 14:58:07 
Опытный кот
Аватар пользователя

Карма: 16
Рейтинг сообщений: 170
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 826
Откуда: Уже не город Белых гор
Рейтинг сообщения: 0
Наверное, для определения верха и низа тебе нужен не компас, а акселерометр.
ЗЫ Даташит не читал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по GY-271 (Цифровой компас QMC5883)
СообщениеДобавлено: Пт сен 25, 2020 16:26:00 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 542
Откуда: Николаев / Украина
Рейтинг сообщения: 0
Так есть возможность измерения угла поворота. Вот еще пример кода:
Спойлер#include <Wire.h> //I2C Arduino Library

#define addr 0x0D //I2C Address for The HMC5883

void setup() {

Serial.begin(9600);
Wire.begin();


Wire.beginTransmission(addr); //start talking
Wire.write(0x0B); // Tell the HMC5883 to Continuously Measure
Wire.write(0x01); // Set the Register
Wire.endTransmission();
Wire.beginTransmission(addr); //start talking
Wire.write(0x09); // Tell the HMC5883 to Continuously Measure
Wire.write(0x1D); // Set the Register
Wire.endTransmission();
}

void loop() {

int x, y, z; //triple axis data

//Tell the HMC what regist to begin writing data into


Wire.beginTransmission(addr);
Wire.write(0x00); //start with register 3.
Wire.endTransmission();

//Read the data.. 2 bytes for each axis.. 6 total bytes
Wire.requestFrom(addr, 6);
if (6 <= Wire.available()) {
x = Wire.read(); //MSB x
x |= Wire.read() << 8; //LSB x
z = Wire.read(); //MSB z
z |= Wire.read() << 8; //LSB z
y = Wire.read(); //MSB y
y |= Wire.read() << 8; //LSB y
}

// Show Values
Serial.print("X Value: ");
Serial.println(x);
Serial.print("Y Value: ");
Serial.println(y);
Serial.print("Z Value: ");
Serial.println(z);
Serial.println();

delay(500);
}

Возвращает:
СпойлерX Value: 826
Y Value: 982
Z Value: -483

X Value: 831
Y Value: 977
Z Value: -488

X Value: 831
Y Value: 985
Z Value: -480

X Value: 811
Y Value: 963
Z Value: -480

X Value: 828
Y Value: 990
Z Value: -477

X Value: 828
Y Value: 990
Z Value: -467

X Value: 813
Y Value: 985
Z Value: -477

Значения меняются в зависимости от поворота/наклона модуля

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопрос по GY-271 (Цифровой компас QMC5883)
СообщениеДобавлено: Пт сен 25, 2020 20:47:51 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 56
Зарегистрирован: Ср ноя 08, 2017 19:56:39
Сообщений: 477
Откуда: СПб
Рейтинг сообщения: 0
В моем понимании компас устройство двумерное и не может определять верх и низ. Либо он должен быть оснащен дополнительным устройством, например, гироскопом или гравитометром. В простейшем случае - ртутный переключатель...

_________________
Звание - сила


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопрос по GY-271 (Цифровой компас QMC5883)
СообщениеДобавлено: Сб сен 26, 2020 11:23:59 
Первый раз сказал Мяу!
Аватар пользователя

Карма: 3
Рейтинг сообщений: 19
Зарегистрирован: Чт май 14, 2015 16:58:00
Сообщений: 35
Откуда: Kharkiv
Рейтинг сообщения: 0
При помощи магнитометра, определить верх/низ можно только условно. Надо знать начальное положение датчика относительно сторон света, при перевороте – показания меняются на 180 градусов. Кроме того датчик надо калибровать для местности, на которой он будет использоваться. ТСу, для выполнения условия, нужен акселерометр, ИМХО, хотя для компаса он тоже нужен.


PS: Извиняюсь, не уточнил - при перевороте датчиков, на 180 градусов меняется не значение оси Z, а значение рассчитанного азимута

Мои потуги с компасом на LSM303, во второй половине ролика есть калибровка:


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y