Índice:

Proyecto Laboratorio De Mecatrónica (Robô de Equilíbrio de Duas Rodas): 6 Passos
Proyecto Laboratorio De Mecatrónica (Robô de Equilíbrio de Duas Rodas): 6 Passos

Vídeo: Proyecto Laboratorio De Mecatrónica (Robô de Equilíbrio de Duas Rodas): 6 Passos

Vídeo: Proyecto Laboratorio De Mecatrónica (Robô de Equilíbrio de Duas Rodas): 6 Passos
Vídeo: Routing Friends with Ricardo do Amaral 2023 | Episódio 070 2024, Novembro
Anonim
Image
Image

En este proyecto se mostrara, el funcionamiento e el como hacer para elaborar um "Robô de equilíbrio de duas rodas" paso a paso y con explicación y concejos. Este é um sistema que consiste em que o robô no se debe caer, se debe de mantener no ponto 0 de seu ponto de gravedad del giroscopio, y así poder moverlo y que este regrese por si mismo a su posición original.

Etapa 1: Etapa 1: Material Requerido

o Mecánicos:

uma. 1 metro de varilla roscada (3/8)

b. 14 tornillos M3 x 0,07 x 6

c. 24 tuercas M8 hex

d. 3 tornillos M4 x 0,07 x 6

e. Filamento PLA (500grs aprox)

o Electrónicos:

uma. 1 interruptor interruptor

b. Arduino uno o nano

c. 2 motores nema 17

d. 2 motoristas A4988

e. 3 resistências 1k

f. HC-05

g. MPU-6050

h. 2 capacitores de 100uf ou 47uf

eu. Batería lippo 11.1 V

o Piezas fabricadas:

uma. 3 placas de MDF (120 x 170 x 6 mm)

b. Placa PCB (aprox 8 x 14 cm)

c. Soporte batería

d. 2 soporte para motor

e. 2 llantas

o Extras:

Softwares recomendados para a realização do projeto.

uma. Software Arduino IDE

b. SolidWorks 2018

c. Software Kidcad

Etapa 2: Etapa 2: Sistema Mecánico-estructura

Etapa 2: Sistema Mecánico-estructura
Etapa 2: Sistema Mecánico-estructura
Etapa 2: Sistema Mecánico-estructura
Etapa 2: Sistema Mecánico-estructura

O modelado de las piezas e estrutura geral é realizado em SolidWorks, primeiro é criado as placas de MDF para checar o espaço disponível para usos posteriores. Estas placas são diferentes entre ellas, a placa inferior tendrá los orificios para los soportes de motores y batería, la central para nuestra PCB y la superior solo tendrá los orificios for darle su estructura.

Etapa 3: Etapa 3: Fabricación De Piezas 3D

Para o modelado de los soportes y llantas igualmente utilizamos SolidWorks, estos soportes pueden ser modificados si así lo desean, para un mejor funcionamiento, los soportes tienen orificios de.35 cm de diámetro, para una mejor sujeción.

Etapa 4: Etapa 4: Sistema Eléctrico / eletrônico

Etapa 4: Sistema Eléctrico / eletrônico
Etapa 4: Sistema Eléctrico / eletrônico

En este paso utiliza um PCB, para elaborar as conexões correspondentes, fazer o enlace entre o arduino, o módulo de Bluetooth HC-05, um giroscopio 6050 e os drivers de los motores. Las conexiones son las que se muestran en la imagen. Asegúrese de hacer las conexiones correctamente, ya que de no ser así puede ocasionar que el sistema não funcione correctamente y não lo obedezca.

Etapa 5: Etapa 5: Software

Etapa 5: Software
Etapa 5: Software

Para o programa utiliza um arduino, uma continuação anexada a uma parte da programação com sua explicação correspondente, o igual anexo link, com o código completo:

Pos holdconfiguracion

// ganhos de controle POSHOLD padrão

#define POSHOLD_P 2.00

#define POSHOLD_I 0.0

# define POSHOLD_IMAX 20 // graus

#define POSHOLD_RATE_P 2.0

#define POSHOLD_RATE_I 0.08 // Controle de vento

#define POSHOLD_RATE_D 0.045 // tente 2 ou 3 para POSHOLD_RATE 1

#define POSHOLD_RATE_IMAX 20 // graus

// ganhos de PID de navegação padrão

# define NAV_P 1.4

#define NAV_I 0,20 // Controle de vento

#define NAV_D 0.08 //

#define NAV_IMAX 20 // degrees

# define MINCHECK 1100

# define MAXCHECK 1900

Aqui se modifica os ganhos para o poss hold del sistema.

Configuración gyro:

void Gyro_init () {

TWBR = ((F_CPU / 400000L) - 16) / 2; // mude a taxa de clock I2C para 400kHz

i2c_writeReg (MPU6050_ADDRESS, 0x6B, 0x80); // PWR_MGMT_1 - DEVICE_RESET 1

atraso (5);

i2c_writeReg (MPU6050_ADDRESS, 0x6B, 0x03); // PWR_MGMT_1 - SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL com referência Z Gyro)

i2c_writeReg (MPU6050_ADDRESS, 0x1A, MPU6050_DLPF_CFG); // CONFIG - EXT_SYNC_SET 0 (desabilita o pino de entrada para sincronização de dados); padrão DLPF_CFG = 0 => largura de banda ACC = 260Hz GYRO largura de banda = 256Hz)

i2c_writeReg (MPU6050_ADDRESS, 0x1B, 0x18); // GYRO_CONFIG - FS_SEL = 3: Escala completa definida para 2.000 graus / s

// habilita o bypass I2C para AUX I2C

#if definido (MAG)

i2c_writeReg (MPU6050_ADDRESS, 0x37, 0x02); // INT_PIN_CFG - INT_LEVEL = 0; INT_OPEN = 0; LATCH_INT_EN = 0; INT_RD_CLEAR = 0; FSYNC_INT_LEVEL = 0; FSYNC_INT_EN = 0; I2C_BYPASS_EN = 1; CLKOUT_EN = 0

#fim se

}

void Gyro_getADC () {

i2c_getSixRawADC (MPU6050_ADDRESS, 0x43);

GYRO_ORIENTATION (((rawADC [0] 2, // intervalo: +/- 8192; +/- 2.000 graus / s

((rawADC [2] 2, ((rawADC [4] 2);

GYRO_Common ();

}

void ACC_init () {

i2c_writeReg (MPU6050_ADDRESS, 0x1C, 0x10); // ACCEL_CONFIG - AFS_SEL = 2 (Full Scale = +/- 8G); ACCELL_HPF = 0 // observe que algo está errado na especificação.

// nota: algo parece estar errado na especificação aqui. Com AFS = 2 1G = 4096, mas de acordo com minha medição: 1G = 2048 (e 2048/8 = 256)

// confirmado aqui:

#if definido (MPU6050_I2C_AUX_MASTER)

// neste estágio, o MAG é configurado por meio da função MAG init original no modo de desvio I2C

// agora configuramos o MPU como um dispositivo I2C Master para lidar com o MAG por meio da porta I2C AUX (feito aqui para HMC5883)

i2c_writeReg (MPU6050_ADDRESS, 0x6A, 0b00100000); // USER_CTRL - DMP_EN = 0; FIFO_EN = 0; I2C_MST_EN = 1 (modo mestre I2C); I2C_IF_DIS = 0; FIFO_RESET = 0; I2C_MST_RESET = 0; SIG_COND_RESET = 0

i2c_writeReg (MPU6050_ADDRESS, 0x37, 0x00); // INT_PIN_CFG - INT_LEVEL = 0; INT_OPEN = 0; LATCH_INT_EN = 0; INT_RD_CLEAR = 0; FSYNC_INT_LEVEL = 0; FSYNC_INT_EN = 0; I2C_BYPASS_EN = 0; CLKOUT_EN = 0

i2c_writeReg (MPU6050_ADDRESS, 0x24, 0x0D); // I2C_MST_CTRL - MULT_MST_EN = 0; WAIT_FOR_ES = 0; SLV_3_FIFO_EN = 0; I2C_MST_P_NSR = 0; I2C_MST_CLK = 13 (barramento de velocidade escravo I2C = 400kHz)

i2c_writeReg (MPU6050_ADDRESS, 0x25, 0x80 | MAG_ADDRESS); // I2C_SLV0_ADDR - I2C_SLV4_RW = 1 (operação de leitura); I2C_SLV4_ADDR = MAG_ADDRESS

i2c_writeReg (MPU6050_ADDRESS, 0x26, MAG_DATA_REGISTER); // I2C_SLV0_REG - 6 bytes de dados do MAG são armazenados em 6 registros. O primeiro endereço de registro é MAG_DATA_REGISTER

i2c_writeReg (MPU6050_ADDRESS, 0x27, 0x86); // I2C_SLV0_CTRL - I2C_SLV0_EN = 1; I2C_SLV0_BYTE_SW = 0; I2C_SLV0_REG_DIS = 0; I2C_SLV0_GRP = 0; I2C_SLV0_LEN = 3 (3x2 bytes)

#fim se

}

void ACC_getADC () {

i2c_getSixRawADC (MPU6050_ADDRESS, 0x3B);

ACC_ORIENTATION (((rawADC [0] 3, ((rawADC [2] 3, ((rawADC [4] 3);

ACC_Common ();

}

// A função de aquisição MAG deve ser substituída porque agora falamos com o dispositivo MPU

#if definido (MPU6050_I2C_AUX_MASTER)

void Device_Mag_getADC () {

i2c_getSixRawADC (MPU6050_ADDRESS, 0x49); // 0x49 é a primeira sala de memória para EXT_SENS_DATA

#if definido (HMC5843)

MAG_ORIENTATION (((rawADC [0] << 8) | rawADC [1]), ((rawADC [2] << 8) | rawADC [3]), ((rawADC [4] << 8) | rawADC [5]));

#fim se

#if definido (HMC5883)

MAG_ORIENTATION (((rawADC [0] << 8) | rawADC [1]), ((rawADC [4] << 8) | rawADC [5]), ((rawADC [2] << 8) | rawADC [3]));

#fim se

#if definido (MAG3110)

MAG_ORIENTATION (((rawADC [0] << 8) | rawADC [1]), ((rawADC [2] << 8) | rawADC [3]), ((rawADC [4] << 8) | rawADC [5]));

#fim se

}

#fim se

#fim se

Etapa 6: Etapa 6: Consejos

1. Diseño Mecánico: Utilizar e hacer el diseño que mas les convenga, para o uso que se le quiere dar al robot, medir todo bien, para la hora de hacer cortes láser o impresiones en 3D, no tengan que volver a hacerlo y todo quede a la perfección.

2. Desenho eléctrico: Hacer su propia PCB, para que tengan bien ubicadas las conexiones that tienen that hacer, de igual manera hacer primero las conexiones en um protoboard, para comprobar que cuando la pongan en el PCB elamiento sea el correcto y no tengan que agregar mas conexões ao volver e imprimir o PCB.

3. Diseño Software: Guiarse con la programción base expuesta, pero tratar de hacer su propia programación, to llegar a entendre bien el funcionamiento y en caso de que no funcionar la programación saber como cambiar las instrucciones para que funcione correctamente.

Recomendado: