Заголовок сообщения: Вопрос по 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;
Заголовок сообщения: 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 }
В моем понимании компас устройство двумерное и не может определять верх и низ. Либо он должен быть оснащен дополнительным устройством, например, гироскопом или гравитометром. В простейшем случае - ртутный переключатель...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
При помощи магнитометра, определить верх/низ можно только условно. Надо знать начальное положение датчика относительно сторон света, при перевороте – показания меняются на 180 градусов. Кроме того датчик надо калибровать для местности, на которой он будет использоваться. ТСу, для выполнения условия, нужен акселерометр, ИМХО, хотя для компаса он тоже нужен.
PS: Извиняюсь, не уточнил - при перевороте датчиков, на 180 градусов меняется не значение оси Z, а значение рассчитанного азимута
Мои потуги с компасом на LSM303, во второй половине ролика есть калибровка:
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения