Proyecto Laboratorio De Mecatrónica (Zweirad-Auswuchtroboter) - Gunook
Proyecto Laboratorio De Mecatrónica (Zweirad-Auswuchtroboter) - Gunook
Anonim
Image
Image

En este proyecto se mostrara, el funcionamiento el como hacer para elaborar a "Two wheel balance robot" paso a paso y con explicación y concejos. Este ist ein System, das besteht und 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.

Schritt 1: Schritt 1: Materialanforderung

o Mecanicos:

A. 1 Metro de Varilla Roscada (3/8)

B. 14 Tornillos M3 x 0,07 x 6

C. 24 Tuercas M8 Sechskant

D. 3 Tornillos M4 x 0,07 x 6

e. Filamento PLA (500grs ca.)

o Elektronik:

A. 1 Unterbrecherschalter

B. Arduino uno oder nano

C. 2 Motoren Nema 17

D. 2 Fahrer A4988

e. 3 Widerstände 1k

F. HC-05

g. MPU-6050

h. 2 Kondensatoren von 100uf oder 47uf

ich. Batería lippo 11,1 V

o Piezas Fabricadas:

A. 3 MDF-Platten (120 x 170 x 6 mm)

B. Placa-Platine (8 x 14 cm ca.)

C. Soporte batería

D. 2 soporte para motor

e. 2 llantas

o Extras:

Software-Empfehlungen für die Realización del Proyecto.

A. Arduino IDE-Software

B. SolidWorks 2018

C. Kidcad-Software

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

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

El modelado las piezas and estructura general se Realizo en SolidWorks, Primere las crearon las placas de MDF für Checar el espacio disponible para posteriores usos. Estas placas son diferentes entre ellas, la placa inferior tendrá los orificios para los soportes de motores and batería, the central para nuestra PCB y la superior solo tendrá los orificios para darle su estructura.

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

Para el modelado de los soportes and llantas igualmente utilizamos SolidWorks, estos soportes pueden ser modificados si así lo desean, para unmejor funcionamiento, Lose soportes tienen orificios de.35 cm de diametro, para una mejor sujeciento

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

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

Es ist eine PCB-Nutzung, für die entsprechenden Korrespondenzen, die Schnittstelle zwischen dem Arduino, das Bluetooth-Modul HC-05, das Netzteil 6050 und die Treiber für die Motoren. 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 no funcione correctamente y no lo obedezca.

Schritt 5: Schritt 5: Software

Schritt 5: Software
Schritt 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 Holdkonfiguration

// standardmäßige POSHOLD-Steuerungsverstärkungen

#define POSHOLD_P 2.00

#define POSHOLD_I 0.0

#define POSHOLD_IMAX 20 // Grad

#define POSHOLD_RATE_P 2.0

#define POSHOLD_RATE_I 0.08 // Windkontrolle

#define POSHOLD_RATE_D 0.045 // Versuche 2 oder 3 für POSHOLD_RATE 1

#define POSHOLD_RATE_IMAX 20 // Grad

// Standard-Navigations-PID-Gewinne

#define NAV_P 1.4

#define NAV_I 0.20 // Windkontrolle

#define NAV_D 0.08 //

#define NAV_IMAX 20 // Grad

#define MINCHECK 1100

#define MAXCHECK 1900

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

Konfigurationskreisel:

void Gyro_init() {

TWBR = ((F_CPU / 400000L) - 16) / 2; // ändere die I2C-Taktrate auf 400kHz

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

Verzögerung(5);

i2c_writeReg(MPU6050_ADDRESS, 0x6B, 0x03); //PWR_MGMT_1 -- SCHLAF 0; ZYKLUS 0; TEMP_DIS 0; CLKSEL 3 (PLL mit Z-Gyro-Referenz)

i2c_writeReg(MPU6050_ADDRESS, 0x1A, MPU6050_DLPF_CFG); //CONFIG - EXT_SYNC_SET 0 (Eingangspin für Datensynchronisation deaktivieren); Standard DLPF_CFG = 0 => ACC-Bandbreite = 260 Hz GYRO-Bandbreite = 256 Hz)

i2c_writeReg(MPU6050_ADDRESS, 0x1B, 0x18); //GYRO_CONFIG -- FS_SEL = 3: Skalenendwert auf 2000 Grad/s eingestellt

// I2C-Bypass für AUX I2C aktivieren

#wenn definiert (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

#endif

}

void Gyro_getADC () {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x43);

GYRO_ORIENTATION(((rawADC[0]2, // Bereich: +/- 8192; +/- 2000 Grad/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 //beachte, dass etwas in der Spezifikation nicht stimmt.

//Anmerkung: hier scheint etwas in der Spezifikation nicht zu stimmen. Mit AFS=2 1G = 4096 aber nach meiner Messung: 1G=2048 (und 2048/8 = 256)

//hier bestätigt:

#wenn definiert(MPU6050_I2C_AUX_MASTER)

// zu diesem Zeitpunkt wird der MAG über die ursprüngliche MAG-Init-Funktion im I2C-Bypass-Modus konfiguriert

// jetzt konfigurieren wir MPU als I2C-Master-Gerät, um das MAG über den I2C-AUX-Port zu handhaben (hier für HMC5883 gemacht)

i2c_writeReg(MPU6050_ADDRESS, 0x6A, 0b00100000); //USER_CTRL -- DMP_EN=0; FIFO_EN=0; I2C_MST_EN=1 (I2C-Mastermodus); 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-Slave-Geschwindigkeitsbus = 400kHz)

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

i2c_writeReg(MPU6050_ADDRESS, 0x26, MAG_DATA_REGISTER); //I2C_SLV0_REG -- 6 Datenbytes von MAG werden in 6 Registern gespeichert. Die erste Registeradresse ist 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 Byte)

#endif

}

void ACC_getADC () {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x3B);

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

ACC_Common();

}

//Die MAG-Erfassungsfunktion muss ersetzt werden, da wir jetzt mit dem MPU-Gerät sprechen

#wenn definiert(MPU6050_I2C_AUX_MASTER)

void Device_Mag_getADC() {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x49); //0x49 ist der erste Speicherplatz für EXT_SENS_DATA

#wenn definiert(HMC5843)

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

#endif

#wenn definiert (HMC5883)

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

#endif

#wenn definiert (MAG3110)

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

#endif

}

#endif

#endif

Schritt 6: Schritt 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 volvy to do a hacerlo 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 primeo las conexiones en una protoboard, para comprobar que cuando la pongan und el PCB toy sea funcionamien 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 como cambiar las instrucciones para que funcione correctamente.