Cov txheej txheem:

Proyecto Laboratorio De Mecatrónica (Two Wheel Balance Robot): 6 Kauj Ruam
Proyecto Laboratorio De Mecatrónica (Two Wheel Balance Robot): 6 Kauj Ruam

Video: Proyecto Laboratorio De Mecatrónica (Two Wheel Balance Robot): 6 Kauj Ruam

Video: Proyecto Laboratorio De Mecatrónica (Two Wheel Balance Robot): 6 Kauj Ruam
Video: Amazing arduino project 2024, Hlis ntuj nqeg
Anonim
Image
Image

En este proyecto se mostrara, el funcionamiento y el como hacer para elaborar un "Ob lub log sib npaug neeg hlau" paso a paso y con explicación y concejos. Este es un sistema que consiste en que el robot no se debe caer, se debe de mantener en el punto 0 de su punto de gravedad del giroscopio, y así poder moverlo y que este regrese por si mismo a su posición thawj.

Kauj Ruam 1: Kauj Ruam 1: Cov Khoom Xav Tau

o Mecánicos:

a 1 metro tsib varilla roscada (3/8)

b. 14 Tornillos M3 x.07 x 6

c. 24 tuercas M8 hex

d. 3 tornillos M4 x.07 x 6

e. Filamento PLA (500grs aprox)

o Electrónicos:

a 1 interruptor hloov

b. Arduino ib qho nano

c. 2 lub cev muaj zog 17

d. 2 tsav tsheb A4988

e. 3 tiv 1k

f. HC-05

g. NPE-6050

h. 2 capacitores de 100uf lossis 47uf

kuv. Batería lippo 11.1 V

o Cov khoom lag luam:

a 3 daim ntawv ntawm MDF (120 x 170 x 6 mm)

b. Placa PCB (8 x 14 cm kwv yees)

c. Soporte cov ntaub ntawv

d. 2 soporte rau lub cav

e. 2 loj

o Ntxiv:

Softwares recomendados para la realización del proyecto.

a Arduino IDE software

b. SolidWorks xyoo 2018

c. Kidcad software

Kauj Ruam 2: Kauj Ruam 2: Cov Txheej Txheem Mecánico-estructura

Kauj Ruam 2: Cov txheej txheem Mecánico-estructura
Kauj Ruam 2: Cov txheej txheem Mecánico-estructura
Kauj Ruam 2: Cov txheej txheem Mecánico-estructura
Kauj Ruam 2: Cov txheej txheem Mecánico-estructura

El modelado de las piezas y estructura general se realizo en SolidWorks, primero se crearon las placas de MDF para checar el espacio disponible para posteriores usos. Estas placas son diferentes entre ellas, la placa tsis zoo dua li tendrá los orificios para los soportes de motores y batería, la central para nuestra PCB y la superior solo tendrá los orificios para darle su estructura.

Kauj Ruam 3: Kauj Ruam 3: Fabricación De Piezas 3D

Para el 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.

Kauj Ruam 4: Kauj Ruam 4: Qhov System Eléctrico/electrónico

Kauj Ruam 4: Qhov System Eléctrico/electrónico
Kauj Ruam 4: Qhov System Eléctrico/electrónico

En este paso utilizamos una PCB, para elaborar las conexiones correspondientes, haciendo el enlace entre el arduino, el modulo de Bluetooth HC-05, un giroscopio 6050 y los tsav tsheb los los motores. Las conexiones tus tub 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 no funcione correctamente y no lo obedezca.

Kauj Ruam 5: Kauj Ruam 5: Software

Kauj ruam 5: Software
Kauj ruam 5: Software

Para el programa utilizamos un arduino, a continuación anexamos una parte de la programación con su explicación correspondiente, al igual anexo link, con el codigo completo:

Pos tuav Configuracion

// default POSHOLD tswj kev nce

#define POSHOLD_P 2.00

#define POSHOLD_I 0.0

#define POSHOLD_IMAX 20 // degrees

#define POSHOLD_RATE_P 2.0

#define POSHOLD_RATE_I 0.08 // Kev tswj cua

#define POSHOLD_RATE_D 0.045 // sim 2 lossis 3 rau POSHOLD_RATE 1

#define POSHOLD_RATE_IMAX 20 // degrees

// default Navigation PID tau txais

#define NAV_P 1.4

#define NAV_I 0.20 // Kev tswj cua

#define NAV_D 0.08 //

#define NAV_IMAX 20 // degrees

#txhais MINCHECK 1100

#txhais MAXCHECK 1900

Aqui se modifica los gains para el poss hold del sistema.

Configuración lub gyro:

tsis muaj dab tsi Gyro_init () {

TWBR = ((F_CPU / 400000L) - 16) / 2; // hloov I2C moos tus nqi rau 400kHz

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

ncua (5);

i2c_writeReg (MPU6050_ADDRESS, 0x6B, 0x03); // PWR_MGMT_1 - QAUV 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL nrog Z Gyro siv)

i2c_writeReg (MPU6050_ADDRESS, 0x1A, MPU6050_DLPF_CFG); // CONFIG - EXT_SYNC_SET 0 (lov tes taw tus pin rau cov ntaub ntawv sync); default DLPF_CFG = 0 => ACC bandwidth = 260Hz GYRO bandwidth = 256Hz)

i2c_writeReg (MPU6050_ADDRESS, 0x1B, 0x18); // GYRO_CONFIG - FS_SEL = 3: teev tag nrho teev rau 2000 deg/sec

// pab kom I2C hla mus rau AUX I2C

#if defined (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

#ib

}

tsis muaj dab tsi Gyro_getADC () {

i2c_getSixRawADC (MPU6050_ADDRESS, 0x43);

GYRO_ORIENTATION (((rawADC [0] 2, // ntau: +/- 8192; +/- 2000 deg/sec

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

GYRO_Common ();

}

tsis muaj dab tsi ACC_init () {

i2c_writeReg (MPU6050_ADDRESS, 0x1C, 0x10); // ACCEL_CONFIG-AFS_SEL = 2 (Nplai puv = +/- 8G); ACCELL_HPF = 0 // nco ntsoov qee yam tsis raug hauv qhov tshwj xeeb.

// nco tseg: qee yam zoo li tsis raug hauv qhov tshwj xeeb ntawm no. Nrog AFS = 2 1G = 4096 tab sis raws li kuv ntsuas: 1G = 2048 (thiab 2048/8 = 256)

// lees paub ntawm no:

#if txhais (MPU6050_I2C_AUX_MASTER)

// ntawm theem no, MAG tau teeb tsa los ntawm thawj MAG pib ua haujlwm hauv I2C hla kev

// tam sim no peb teeb tsa MPU ua I2C Master ntaus ntawv los tswj MAG ntawm I2C AUX chaw nres nkoj (ua tiav ntawm no rau HMC5883)

i2c_writeReg (MPU6050_ADDRESS, 0x6A, 0b00100000); // USER_CTRL - DMP_EN = 0; FIFO_EN = 0; I2C_MST_EN = 1 (I2C hom hom); 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 (I2C qhev tsheb loj = 400kHz)

i2c_writeReg (MPU6050_ADDRESS, 0x25, 0x80 | MAG_ADDRESS); // I2C_SLV0_ADDR - I2C_SLV4_RW = 1 (nyeem ua haujlwm); I2C_SLV4_ADDR = MAG_ADDRESS

i2c_writeReg (MPU6050_ADDRESS, 0x26, MAG_DATA_REGISTER); // I2C_SLV0_REG - 6 cov ntaub ntawv bytes ntawm MAG tau khaws cia hauv 6 qhov sau npe. Thawj qhov chaw nyob yog 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)

#ib

}

void ACC_getADC () {

i2c_getSixRawADC (MPU6050_ADDRESS, 0x3B);

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

ACC_Common ();

}

// Lub MAG nrhiav kev ua haujlwm yuav tsum raug hloov vim peb tam sim no tham nrog MPU lub cuab yeej

#if txhais (MPU6050_I2C_AUX_MASTER)

void Device_Mag_getADC () {

i2c_getSixRawADC (MPU6050_ADDRESS, 0x49); // 0x49 yog thawj chav nco rau EXT_SENS_DATA

#if txhais (HMC5843)

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

#ib

#if txhais (HMC5883)

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

#ib

#if txhais (MAG3110)

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

#ib

}

#ib

#ib

Kauj Ruam 6: Kauj Ruam 6: Consejos

1. Diseño Mecánico: Siv cov cuab yeej siv los kho cov kab mob hauv lub cev, rau cov neeg siv que que le le quiere dar al neeg hlau, medir todo bien, para la hora de hacer cortes láser o impresiones en 3D, tsis muaj tengan que volver a hacerlo y todo quede a la perfección.

2. Kev kho mob: Hacer su propia PCB, rau que tengan bien ubicadas las conexiones que tienen que hacer, de igual manera hacer primero las conexiones en una protoboard, para comprobar que cuando la pongan en el PCB el funcionamiento hiav txwv el correcto y no tengan que agreegar mas conexiones o volver a imprimir el PCB.

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

Pom zoo: