Sommario:

Proyecto Laboratorio De Mecatrónica (Robot per l'equilibrio a due ruote): 6 passaggi
Proyecto Laboratorio De Mecatrónica (Robot per l'equilibrio a due ruote): 6 passaggi

Video: Proyecto Laboratorio De Mecatrónica (Robot per l'equilibrio a due ruote): 6 passaggi

Video: Proyecto Laboratorio De Mecatrónica (Robot per l'equilibrio a due ruote): 6 passaggi
Video: Control de prótesis biónica con sensor Muscular - Robotica 2024, Novembre
Anonim
Image
Image

En este proyecto se mostrara, el funcionamiento y el como hacer para elaborar un "Two wheel balance robot" 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 original.

Passaggio 1: Passaggio 1: Richiesta di materiale

o Meccanici:

un. 1 metro di varilla rossa (3/8)

B. 14 tornilli M3 x.07 x 6

C. 24 tubi M8 esagonali

D. 3 tornilli M4 x.07 x 6

e. Filamento PLA (500grs circa)

o Elettronica:

un. 1 interruttore interruttore

B. Arduino uno o nano

C. 2 motori nema 17

D. 2 driver A4988

e. 3 resistenze 1k

F. HC-05

G. MPU-6050

h. 2 condensatori da 100uf o 47uf

io. Batteria lippo 11.1 V

o Piezas fabbricate:

un. 3 placche in MDF (120 x 170 x 6 mm)

B. PCB Placa (8 x 14 cm circa)

C. Soporte batería

D. 2 porte per motore

e. 2 pneumatici

o Extra:

Software consigliati per la realizzazione del progetto.

un. Software Arduino IDE

B. SolidWorks 2018

C. Software Kidcad

Fase 2: Fase 2: Sistema Meccanico-estructura

Fase 2: Sistema Meccanico-Estructura
Fase 2: Sistema Meccanico-Estructura
Fase 2: Sistema Meccanico-Estructura
Fase 2: Sistema Meccanico-Estructura

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

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

Per il modello dei supporti e degli pneumatici vengono utilizzati di diritto SolidWorks, possono essere modificati anche in caso di necessità, per un migliore funzionamento, i supporti hanno un diametro di 35 cm, per una maggiore necessità.

Passaggio 4: Passaggio 4: Sistema elettrico/elettronico

Fase 4: Sistema elettrico/elettronico
Fase 4: Sistema elettrico/elettronico

In questo modo si utilizza un PCB, per elaborare le connessioni corrispondenti, l'aggancio tra l'arduino, il modulo Bluetooth HC-05, un giroscopio 6050 e i driver dei motori. 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.

Passaggio 5: Passaggio 5: Software

Passaggio 5: software
Passaggio 5: software

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

Pos holdconfiguracion

// guadagno del controllo POSHOLD predefinito

#define POSHOLD_P 2.00

#define POSHOLD_I 0.0

#define POSHOLD_IMAX 20 // gradi

#define POSHOLD_RATE_P 2.0

#define POSHOLD_RATE_I 0.08 // Controllo del vento

#define POSHOLD_RATE_D 0.045 // prova 2 o 3 per POSHOLD_RATE 1

#define POSHOLD_RATE_IMAX 20 // gradi

// guadagno PID di navigazione predefinito

#define NAV_P 1.4

#define NAV_I 0.20 // Controllo del vento

#define NAV_D 0.08 //

#define NAV_IMAX 20 // gradi

#define MINCHECK 1100

#define MAXCHECK 1900

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

Giroscopio di configurazione:

void Gyro_init() {

TWBR = ((F_CPU / 400000L) - 16) / 2; // cambia la frequenza di clock I2C a 400kHz

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

ritardo(5);

i2c_writeReg(MPU6050_ADDRESS, 0x6B, 0x03); //PWR_MGMT_1 -- SONNO 0; CICLO 0; TEMP_DIS 0; CLKSEL 3 (PLL con riferimento giroscopio Z)

i2c_writeReg(MPU6050_ADDRESS, 0x1A, MPU6050_DLPF_CFG); //CONFIG -- EXT_SYNC_SET 0 (disabilita il pin di input per la sincronizzazione dei dati); default DLPF_CFG = 0 => larghezza di banda ACC = 260Hz larghezza di banda GYRO = 256Hz)

i2c_writeReg(MPU6050_ADDRESS, 0x1B, 0x18); //GYRO_CONFIG -- FS_SEL = 3: Fondo scala impostato su 2000 gradi/sec

// abilita il bypass I2C per AUX I2C

#se definito(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

#finisci se

}

void Gyro_getADC () {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x43);

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

((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 //nota che qualcosa non va nelle specifiche.

//nota: c'è qualcosa che non va nelle specifiche qui. Con AFS=2 1G = 4096 ma secondo la mia misura: 1G=2048 (e 2048/8 = 256)

//confermato qui:

#se definito(MPU6050_I2C_AUX_MASTER)

//in questa fase, il MAG è configurato tramite la funzione di init originale del MAG in modalità bypass I2C

//ora configuriamo MPU come dispositivo I2C Master per gestire il MAG tramite la porta I2C AUX (fatto qui per HMC5883)

i2c_writeReg(MPU6050_ADDRESS, 0x6A, 0b0010000); //USER_CTRL -- DMP_EN=0; FIFO_EN=0; I2C_MST_EN=1 (modalità master 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 (bus velocità slave I2C = 400kHz)

i2c_writeReg(MPU6050_ADDRESS, 0x25, 0x80|MAG_ADDRESS);//I2C_SLV0_ADDR -- I2C_SLV4_RW=1 (operazione di lettura); I2C_SLV4_ADDR=INDIRIZZO_MAG

i2c_writeReg(MPU6050_ADDRESS, 0x26, MAG_DATA_REGISTER);//I2C_SLV0_REG -- 6 byte di dati di MAG sono memorizzati in 6 registri. L'indirizzo del primo 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 byte)

#finisci se

}

void ACC_getADC () {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x3B);

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

ACC_Comune();

}

//La funzione di acquisizione MAG deve essere sostituita perché ora parliamo con il dispositivo MPU

#se definito(MPU6050_I2C_AUX_MASTER)

void Device_Mag_getADC() {

i2c_getSixRawADC(MPU6050_ADDRESS, 0x49); //0x49 è la prima stanza di memoria per EXT_SENS_DATA

#se definito(HMC5843)

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

#finisci se

#se definito (HMC5883)

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

#finisci se

#se definito (MAG3110)

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

#finisci se

}

#finisci se

#finisci se

Passaggio 6: Passaggio 6: Suggerimenti

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 todo quede a la perfezione.

2. Disegno elettrico: Hacer su proprio 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 sea el Correcto y no tengan 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 non funcionar la programación saber como changer las instrucciones para que funcione correttamente.

Consigliato: