Некорректная работа программы после пайки

Здравствуйте, столкнулся с такой проблемой, что после пайки схемы программа перестала адекватно работать.
Изначально я все соединял с помощью стандартных ардуиновских штекеров и бредборда, все работало нормально, как я только спаял схему(все перепроверял, все спаяно правильно!) начался бред. У меня есть арудино 1(получает данные с датчика MPU6050 и отправляет их по HC-05), арудино 2(просто получает данные по HC-05 и выводит данные). Может быть дело как-то в самом коде? Я просто уже не знаю что подумать, все варианты перепробовал.

Наверное сейчас главный вопрос после моего бессмысленного текста выше:
Т.к. HC-05 и arduino nano подключены по RX/TX, то соответственно перед прошивкой arduino nano я должен выдергивать два этих провода, НО я пробовал загрузить код с ПК на ардуино только с одним отключенным проводом(RX на arduino nano) и программа нормально загружалась, просто слышал, что надо отключать 2 провода перед прошивкой, может ли что то перегореть/сломаться в таком случае?

Раньше, когда я открывал com-port для отображения данных шел непрерывный поток данных(числа), сейчас я открываю ком-порт получаю данные в течение 1-5сек, и данные больше не приходят, хотя светодиод на арудино2 мерцает, что говорит о приходе данных, причем когда я во время работы открываю каждый раз по новой ком-порт приходят новые данные и так же останавливаются, и когда я открываю ком-порт, на ардуино1 мерцает светодиод RX до тех пор, пока приходят данные на ардуино2

Связь:
MPU–>NANO (VCC → 3V3 ; GND → GND; SCL → A5; SDA → A4)
HC-05–>NANO (+5V → +5V; GND → GND; RX->TX1; TX->Ключ->RX0)

Общий код арудино 1:

#include "I2Cdev.h"
#include "MPU6050.h"

#include <EasyTransfer.h>

  #define TO_DEG 57.2957f
  #define TIME_GYRO 2000 // период опроса mpu6050 в микросекундах
MPU6050 accgyro;


// ------------------------ BLUETOOTH ----------------------------
struct SEND_DATA_STRUCTURE {
  float AngleX;
  float AngleY;
  float MoveGX;
  float MoveGY;
};

SEND_DATA_STRUCTURE data;
EasyTransfer ETin, ETout; // 2 объекта ИзиТрансфера 1 для отправки и 1 получения информации

// ----------------------------------------------------


int16_t ax_raw, ay_raw, az_raw, gx_raw, gy_raw, gz_raw; // сырые данные в кодах АЦП (3 ускорения и 3 скорости)
long int time_timer; // переменная таймера для опроса


// ------------------------ АКСЕЛЕРОМЕТР ----------------------------
float ax, ay, az; // значения ускорения в единицах гравитации g
float angle_ax, angle_ax1, angle_ay, angle_az; // углы, рассчитанные по акселерометру


// ------------------------ ГИРОСКОП ----------------------------
float gx, gy, gz; // значения угловой скорости в градусах в секунду
float angle_gx, angle_gy, angle_gz; // углы, рассчитанные по гироскопу
float gyro_x_zero, gyro_y_zero, gyro_z_zero; // калибровочные углы смещения нуля гироскопа

// ------------------------ ФИЛЬТР ----------------------------
float angle_fx, angle_fy, angle_fz; //угол после обработки комплементарным фильтром

void setup() {
  Serial.begin(115000); 
  ETout.begin(details(data), &Serial);
  accgyro.initialize();
  calibrateMPU();
}

void loop() {
  if( time_timer < micros() ){
    time_timer = micros() + TIME_GYRO;
    
    accgyro.getMotion6(&ax_raw, &ay_raw, &az_raw, &gx_raw, &gy_raw, &gz_raw);
    
    getAngleAcsel(); // функция получения углов angle_ax, angle_ay, angle_az по акселерометру
    getAngleGyro(); // функция получения углов angle_gx, angle_gy, angle_gz по гироскопу
    getAngleFiltr(); // функция получения углов angle_fx, angle_fy, angle_fz с применением фильтра (по сути суммирует углы акселерометра и гироскопа)
    
////////////////////////////////////////
    
    data.AngleX=angle_gx;
    data.AngleY=angle_gy;
    data.MoveGX=gx;
    data.MoveGY=gy;
    ETout.sendData();
}
}

Код арудино 2:

#include <EasyTransfer.h>
struct RECEIVE_DATA_STRUCTURE {
  float AngleX;
  float AngleY;
  float MoveGX;
  float MoveGY;
};


RECEIVE_DATA_STRUCTURE data;
EasyTransfer ETin,ETout;
void setup() {
  Serial.begin(115000);
  ETin.begin(details(data), &Serial);
  Serial.flush();
  Serial.println("angleGX, angleGY, MGX, MGY");

}

    //Serial.println(sqrt(newGX+newGY));
void loop() {
  
  if(ETin.receiveData()) {
    float newGX = data.AngleX;
    float newGY = data.AngleY;
    float newMGX = data.MoveGX;
    float newMGY = data.MoveGY;

    Serial.print(newGX);
    Serial.print(' ');
    Serial.print(newGY);
    Serial.print(' ');
    Serial.print(newMGX);
    Serial.print(' ');
    Serial.println(newMGY);
    
  }
 }

Нано, которое с 6050 - на каком напряжении работает - 3в3 или 5в ?
Если 5в - есть ли у вас конвертер уровня между 6050 и наной?

Ардуино нано работает от 5В, а MPU6050 работает от 3.3В от порта арудино напрямую. Не очень понял зачем конвертор, если mpu6050 питается от 3.3V

У ардуино нано нет полноценного пина 3,3В, он у нее скорее косметический, сколько нибудь серьезную нагрузку не выдерживает

Высокий уровень у пинов ардуино - 5В, а у пинов mpu - 3.3В. Вас и спросили, Вы уровни согласовываете или нет.

А вообще, чтобы не было таких (и ещё десятка) вопросов, нарисовали бы Вы нормальную принципиальную схему.

Ардуино я питал как от usb порт от ноутбука, так и через порты +5V/GND от повербанка

Ну, вот, Вы с пинов А4 и А5 пихаете напрямую 5В на пины SCL/SDA вашего mpu. Вас именно об этом и спрашивали.

т.е. мне нужно преобразовать напряжения с 5В на 3.3В по этим 2 каналам?

Я не знаю, я лишь пояснил Вам смысл вопроса @b707 в ответ на Ваше

Теперь поняли?

А обязательно ли это надо или “и так сойдёт” я не в курсе.

1 лайк

просто раньше и без этого все работало, а сейчас такая проблема появилась, мне кажется вообще дело в блютуз модуле

у вас под MPU6050 чт понимается, голая микросхема или модуль типа такого?
ar121_lrg-500x400

вот такой модуль, что на картинке

так и питайте его от 5 вольт.
преобразователь уровней и питание 3.3 вольта там есть.

т.е. мне по VCC MPU просто передавать 5V и все?

да и все.

спасибо, попробую сделать

Вообще-то в режиме I2C там открытый коллектор. А резисторы по идее должны быть на плате модуля. Так что не 5 В подается на модуль, а 3.3 В - на Ардуино.

Ну, да, так и есть.