Proyecto Laboratorio De Mecatrónica (Robot dwukołowy): 6 kroków
Proyecto Laboratorio De Mecatrónica (Robot dwukołowy): 6 kroków
Anonim
Image
Image

En este proyecto se mostrara, el funcionamiento y el como hacer para elaborar un „Robot dwukołowy” paso a paso y con explicación y concejos. Este es un sistema que sklade 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 original.

Krok 1: Krok 1: Materiał Requerido

o Mecanicos:

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

b. 14 tornillo M3 x.07 x 6

C. 24 tuerki M8 hex

D. 3 tornille M4 x.07 x 6

mi. Filamento PLA (ok. 500gr)

o Elektroniki:

a. 1 wyłącznik przerywacza

b. Arduino uno lub nano

C. 2 silniki nema 17

D. 2 sterowniki A4988

mi. 3 oporności 1k

F. HC-05

g. MPU-6050

h. 2 kondensatory 100uf lub 47uf

i. Batería Lippo 11.1 V

o Piezas fabricadas:

a. 3 płyty MDF (120 x 170 x 6 mm)

b. Placa PCB (8 x 14 cm ok)

C. Soporte batería

D. 2 soporte para silnik

mi. 2 llantas

o Dodatki:

Rekomendowane oprogramowanie do realizacji projektów.

a. Oprogramowanie Arduino IDE

b. SolidWorks 2018

C. Oprogramowanie Kidcad

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

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

El modelado de las piezas y estructura general se realizo pl SolidWorks, primero se crearon las placas de MDF para checar el espacio disponible para posteriores usos. Estas placas son diferentes entre ellas, la 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 para darle su estructura.

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

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

Krok 4: Krok 4: Sistema Eléctrico/electrónico

Krok 4: Sistema Eléctrico/electronico
Krok 4: Sistema Eléctrico/electronico

En este paso utilizamos una PCB, para elaborar las conexiones korespondentes, haciendo el enlace entre el arduino, el modulo de Bluetooth HC-05, un giroscopio 6050 y los driver de los motores. Las conexiones syn las que se muestran pl 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.

Krok 5: Krok 5: Oprogramowanie

Krok 5: Oprogramowanie
Krok 5: Oprogramowanie

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

Poz konfiguracja wstrzymania

// domyślne wzmocnienie kontroli POSHOLD

#define POSHOLD_P 2.00

#define POSHOLD_I 0.0

#define POSHOLD_IMAX 20 // stopni

#define POSHOLD_RATE_P 2.0

#define POSHOLD_RATE_I 0.08 // Kontrola wiatru

#define POSHOLD_RATE_D 0.045 // spróbuj 2 lub 3 dla POSHOLD_RATE 1

#define POSHOLD_RATE_IMAX 20 // stopni

// domyślne wzmocnienia PID nawigacji

#definiuj NAV_P 1.4

#define NAV_I 0.20 // Kontrola wiatru

#define NAV_D 0.08 //

#define NAV_IMAX 20 // stopni

#define MINCHECK 1100

#define MAXCHECK 1900

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

Konfiguracja żyroskopu:

void Gyro_init() {

TWBR = ((F_CPU / 400000L) - 16) / 2; // zmiana częstotliwości zegara I2C na 400kHz

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

opóźnienie(5);

i2c_writeReg(MPU6050_ADDRESS, 0x6B, 0x03); //PWR_MGMT_1 -- Uśpienie 0; CYKL 0; TEMP_DIS 0; CLKSEL 3 (PLL z referencją Z Gyro)

i2c_writeReg(MPU6050_ADDRESS, 0x1A, MPU6050_DLPF_CFG); //CONFIG -- EXT_SYNC_SET 0 (wyłącz pin wejściowy do synchronizacji danych); domyślnie DLPF_CFG = 0 => pasmo ACC = 260Hz pasmo GYRO = 256Hz)

i2c_writeReg(MPU6050_ADDRESS, 0x1B, 0x18); //GYRO_CONFIG -- FS_SEL = 3: Pełna skala ustawiona na 2000 stopni/s

// włącz obejście I2C dla AUX I2C

#jeśli zdefiniowano (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_PL=0

#endif

}

nieważne Gyro_getADC () {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x43);

GYRO_ORIENTATION(((rawADC[0]2, // zakres: +/- 8192; +/- 2000 stopni/sek

((surowyADC[2]2, ((surADC[4]2);

GYRO_Wspólny();

}

nieważne ACC_init () {

i2c_writeReg(MPU6050_ADDRESS, 0x1C, 0x10); //ACCEL_CONFIG -- AFS_SEL=2 (Pełna skala = +/-8G); ACCELL_HPF=0 //uwaga, coś jest nie tak w specyfikacji.

//uwaga: coś wydaje się być nie tak w specyfikacji tutaj. Przy AFS=2 1G=4096 ale według mojego pomiaru: 1G=2048 (i 2048/8=256)

//potwierdzone tutaj:

#jeśli zdefiniowano (MPU6050_I2C_AUX_MASTER)

//na tym etapie MAG jest konfigurowany za pomocą oryginalnej funkcji MAG init w trybie obejścia I2C

//teraz konfigurujemy MPU jako urządzenie I2C Master do obsługi MAG przez port I2C AUX (zrobione tutaj dla HMC5883)

i2c_writeReg(MPU6050_ADDRESS, 0x6A, 0b00100000); //USER_CTRL -- DMP_EN=0; FIFO_PL=0; I2C_MST_EN=1 (tryb mastera 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_PL=0

i2c_writeReg(MPU6050_ADDRESS, 0x24, 0x0D); //I2C_MST_CTRL -- MULT_MST_EN=0; CZEKAJ_NA_ES=0; SLV_3_FIFO_EN=0; I2C_MST_P_NSR=0; I2C_MST_CLK=13 (podrzędna magistrala prędkości I2C = 400kHz)

i2c_writeReg(MPU6050_ADDRESS, 0x25, 0x80|MAG_ADDRESS);//I2C_SLV0_ADDR -- I2C_SLV4_RW=1 (operacja odczytu); I2C_SLV4_ADDR=MAG_ADDRESS

i2c_writeReg(MPU6050_ADDRESS, 0x26, MAG_DATA_REGISTER);//I2C_SLV0_REG -- 6 bajtów danych MAG zapisanych jest w 6 rejestrach. Pierwszy adres rejestru to 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 bajty)

#endif

}

nieważne ACC_getADC () {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x3B);

ACC_ORIENTATION(((surADC[0]3, ((surowyADC[2]3, ((surADC[4]3);

ACC_Wspólne();

}

//Funkcja akwizycji MAG musi zostać wymieniona, ponieważ teraz rozmawiamy z urządzeniem MPU

#jeśli zdefiniowano(MPU6050_I2C_AUX_MASTER)

void Device_Mag_getADC() {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x49); //0x49 to pierwszy pokój pamięci dla EXT_SENS_DATA

#jeśli zdefiniowano(HMC5843)

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

#endif

#jeśli zdefiniowano (HMC5883)

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

#endif

#jeśli zdefiniowano (MAG3110)

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

#endif

}

#endif

#endif

Krok 6: Krok 6: Consejos

1. Diseño Mecánico: Utilizar y hacer el diseño que mas les convenga, para el 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 to Quede a la perfección.

2. Diseño eléctrico: Hacer su propia PCB, para 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 y no sea el correct que agregar 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.

Zalecana: