Последовательный монитор прекращает печать данных
У меня есть датчик IMU (MPU 6050), подключенный к arduino UNO. Распиновка следующая:
MPU6050 --> Arduino
Vcc --> Vcc
Земля --> Земля
СКЛ --> А5
ПДД --> А4
(Без использования подтягивающих резисторов)
Я использую библиотеку MPU6050 Джеффа Роуберга для получения данных с датчика. Для проверки датчика я использую пример скетча raw value из библиотеки. Я получаю показания как для акселерометра, так и для гироскопов.
Проблема в том, что через некоторое время последовательный монитор просто перестает печатать данные. Я пытался разобраться, но не смог решить проблему. Это может быть связано с одной из двух причин:
- MPU6050 перестает выдавать значения датчиков
- Возникла проблема с последовательным монитором
Насколько я понял, датчик выдает значения, потому что при перезапуске последовательного монитора данные снова начинают печататься на последовательном мониторе и прекращают печататься через тот же промежуток времени, что и до перезапуска монитора.
Я пробовал последовательный монитор arduino IDE и гипертерминал. В обоих случаях данные перестают печататься через некоторое время.
Есть идеи, что заставляет последовательный монитор прекращать печатать данные? Это датчик или последовательный монитор?
Помощь была бы очень признательна. Спасибо заранее.
@Ahmad Tariq, 👍1
Обсуждение1 ответ
У меня была точно такая же ситуация.
Сначала я начал проверять переполненность FIFO MPU6050, затем экспериментировал с установкой различной тактовой частоты для связи I2C, пытался настроить подтягивающие резисторы, как рекомендовано.
Наконец, вот решение, которое сработало для меня. По сути, я просто отключил INT-пин от MPU6050.
Теперь схема такая:
(МПУ) -> (Arduino)
AD0 -> GND
SDA -> A4 (Без подтягивания)
SCL -> A5 (Без подтягивания)
ЗЕМЛЯ -> ЗЕМЛЯ
VCC -> 3,3 В
Я использовал этот код в качестве примера:
https://github.com/jarzebski/Arduino-MPU6050/blob/master/MPU6050_gyro_pitch_roll_yaw/MPU6050_gyro_pitch_roll_yaw.ino
из этой библиотеки:
https://github.com/jarzebski/Arduino-MPU6050
- Как получить данные о весе с датчиков стеклянных электронных весов для ванной?
- Как связаться с датчиком через порты RX/TX Arduino?
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Датчик нагрузки и HX711 выводят только нули
- Когда дело доходит до связи UART-RS485, в чем разница между модулем "MAX485" и модулем "HW-0519"?
- Интерфейс RS422 с Arduino
- Печатать на serial monitor, когда он обнаруживает изменение значения
- Arduino показывает "avrdude: ser_open(): can't open device ”\\.\COM3" после последней загрузки
Скорее всего, это блокировка I2C при чтении с MPU6050. Повторное открытие последовательного монитора сбрасывает Arduino. Проверьте провода (I2C не любит длинные провода) и добавьте подтягивающие резисторы 3,3 кОм к проводам I2C (если они не предусмотрены платой MPU6050). Внутренние подтягивающие резисторы Arduino *не* подходят для I2C., @Majenko
Пожалуйста, выложите скетч. Это также может быть проблема со строкой/выделением памяти., @Mikael Patel
@Majenko Сработало. Не могу поверить, но изменение длины провода действительно сработало. Раньше я использовал очень длинные провода, укоротил длину, но это не сработало, поэтому я укоротил длину еще больше. На этот раз последовательный монитор не остановился. Я не могу понять, какое влияние длина провода оказывает на процесс коммуникации. Кажется нелогичным. Еще раз спасибо за помощь., @Ahmad Tariq
Наоборот - это совершенно логично. Длинные провода = большая антенна = улавливает шум. Слабые подтяжки = шум, который легко мешает связи. Объедините эти два фактора, и у вас будет рецепт катастрофы. Исправьте один или оба, и все заработает., @Majenko
Обратите внимание, что даже при хорошей разводке код I2C, в котором отсутствует тайм-аут «отказаться и повторить попытку», является рискованным — если он будет вечно ждать подтверждения от подчиненного устройства, один-единственный неверно истолкованный бит приведет к зависанию системы., @Chris Stratton
@AhmadTariq Какова была первоначальная длина вашего кабеля и какова была конечная?, @bardulia
@ChrisStratton У меня похожая проблема: когда я подключаю два устройства I2C к Arduino Mega, после некоторого длительного времени выполнения (несколько дней) последовательный монитор перестает работать. Есть ли способ записать сообщение об ошибке, чтобы проверить, связана ли проблема с этим тайм-аутом?, @bardulia