Proyecto Laboratorio De Mecatrónica (robot cu două roți): 6 pași
Proyecto Laboratorio De Mecatrónica (robot cu două roți): 6 pași
Anonim
Image
Image

În acest proiect se afișează, funcționarea și cum se poate face pentru a elabora un "Two wheel balance robot" pas la pas și cu explicație și concepții. 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.

Pasul 1: Pasul 1: Material Requerido

o Mecanici:

A. 1 metrou de varilla roscada (3/8)

b. 14 tornillo M3 x.07 x 6

c. 24 tuercas M8 hex

d. 3 tornillos M4 x.07 x 6

e. Filamento PLA (500grs aprox)

o Electronici:

A. 1 întrerupător întrerupător

b. Arduino uno o nano

c. 2 motores nema 17

d. 2 drivere A4988

e. 3 rezistențe 1k

f. HC-05

g. MPU-6050

h. 2 capacitores de 100uf o 47uf

eu. Batería lippo 11.1 V

o Piezas fabricadas:

A. 3 plăci de MDF (120 x 170 x 6 mm)

b. Placa PCB (8 x 14 cm aprox)

c. Soporte batería

d. 2 suport pentru motor

e. 2 llante

o Extra:

Software-uri recomandate pentru realizarea proiectului.

A. Software Arduino IDE

b. SolidWorks 2018

c. Software-ul Kidcad

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

Pasul 2: Sistem Mecanic-structură
Pasul 2: Sistem Mecanic-structură
Pasul 2: Sistema Mecánico-estructura
Pasul 2: Sistema Mecánico-estructura

El modelat de piețe și structură generală se realizează în SolidWorks, în primul rând se creează plăcile de MDF pentru checar spațiul disponibil pentru utilizări posterioare. Sunt placas son different entre ellas, la placa inferior tendrá los orificios para los soportes de motores y batería, la central para nuestra PCB și la superior solo tendrá los orificios para darle su estructura.

Pasul 3: Pasul 3: Fabricarea De Piezas 3D

Pentru modelarea suporturilor și a lămpilor folosite în mod solid SolidWorks, acestea vor putea fi modificate și așa se vor desena, pentru un funcționare mai bună, suporturile au orificii de.35 cm de diametru, pentru o mai bună sugestie.

Pasul 4: Pasul 4: Sistema Eléctrico / electronic

Pasul 4: Sistema Eléctrico / electronic
Pasul 4: Sistema Eléctrico / electronic

În acest pas utilizăm o PCB, pentru a elabora conexiunile corespunzătoare, făcând legătura între arduino, modulul Bluetooth HC-05, un giroscopio 6050 și driverele motoarelor. Las conexiones son las que se muestran en la imagen. Asegúrese de a face conexiunile corect, ya that de no ser así poate ocazi că sistemul nu funcționează corect și nu lo obedezca.

Pasul 5: Pasul 5: Software

Pasul 5: Software
Pasul 5: Software

Pentru programul utilizăm un arduino, a continuat anexamos o parte a programării cu su explicarea corespondentă, la același anex link, cu codigo complet:

Pos holdconfiguracion

// câștiguri implicite ale controlului POSHOLD

#define POSHOLD_P 2.00

#define POSHOLD_I 0.0

#define POSHOLD_IMAX 20 // grade

#define POSHOLD_RATE_P 2.0

#define POSHOLD_RATE_I 0,08 // Controlul vântului

#define POSHOLD_RATE_D 0,045 // încercați 2 sau 3 pentru POSHOLD_RATE 1

#define POSHOLD_RATE_IMAX 20 // grade

// câștiguri implicite de navigare PID

#define NAV_P 1.4

#define NAV_I 0.20 // Controlul vântului

#define NAV_D 0.08 //

#define NAV_IMAX 20 // grade

#define MINCHECK 1100

#define MAXCHECK 1900

Aqui se modifică câștigurile pentru posesia sistemului.

Configurare giroscop:

void Gyro_init () {

TWBR = ((F_CPU / 400000L) - 16) / 2; // modificați rata de ceas I2C la 400kHz

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

întârziere (5);

i2c_writeReg (MPU6050_ADDRESS, 0x6B, 0x03); // PWR_MGMT_1 - SOMN 0; CICLUL 0; TEMP_DIS 0; CLKSEL 3 (PLL cu referință Z Gyro)

i2c_writeReg (MPU6050_ADDRESS, 0x1A, MPU6050_DLPF_CFG); // CONFIG - EXT_SYNC_SET 0 (dezactivează pinul de intrare pentru sincronizarea datelor); implicit DLPF_CFG = 0 => lățime de bandă ACC = 260Hz lățime de bandă GYRO = 256Hz)

i2c_writeReg (MPU6050_ADDRESS, 0x1B, 0x18); // GYRO_CONFIG - FS_SEL = 3: Scala completă setată la 2000 deg / sec

// activați bypass-ul I2C pentru AUX I2C

#if definit (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, // interval: +/- 8192; +/- 2000 deg / sec

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

GYRO_Common ();

}

void ACC_init () {

i2c_writeReg (MPU6050_ADDRESS, 0x1C, 0x10); // ACCEL_CONFIG - AFS_SEL = 2 (Scală completă = +/- 8G); ACCELL_HPF = 0 // rețineți că ceva nu este în regulă în spec.

// notă: ceva pare să nu fie în regulă în specificația de aici. Cu AFS = 2 1G = 4096, dar conform măsurătorilor mele: 1G = 2048 (și 2048/8 = 256)

// confirmat aici:

#if definit (MPU6050_I2C_AUX_MASTER)

// în acest stadiu, MAG-ul este configurat prin funcția inițială MAG inițială în modul de bypass I2C

// acum configurăm MPU ca dispozitiv I2C Master pentru a gestiona MAG prin portul I2C AUX (făcut aici pentru HMC5883)

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

i2c_writeReg (MPU6050_ADDRESS, 0x25, 0x80 | MAG_ADDRESS); // I2C_SLV0_ADDR - I2C_SLV4_RW = 1 (operație de citire); I2C_SLV4_ADDR = MAG_ADDRESS

i2c_writeReg (MPU6050_ADDRESS, 0x26, MAG_DATA_REGISTER); // I2C_SLV0_REG - 6 octeți de date MAG sunt stocate în 6 registre. Prima adresă de înregistrare este 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 octeți)

#endif

}

void ACC_getADC () {

i2c_getSixRawADC (MPU6050_ADDRESS, 0x3B);

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

ACC_Common ();

}

// Funcția de achiziție MAG trebuie înlocuită, deoarece vorbim acum cu dispozitivul MPU

#if definit (MPU6050_I2C_AUX_MASTER)

void Device_Mag_getADC () {

i2c_getSixRawADC (MPU6050_ADDRESS, 0x49); // 0x49 este prima cameră de memorie pentru EXT_SENS_DATA

#if definit (HMC5843)

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

#endif

#if definit (HMC5883)

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

#endif

#if definit (MAG3110)

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

#endif

}

#endif

#endif

Pasul 6: Pasul 6: Consilii

1. Design Mecánico: Utilizați și faceți proiectarea care le convine, pentru utilizarea căreia le-ați dat robotului, meditând bine, pentru ora de a face corturi láser sau impresii în 3D, nu trebuie să reveniți la toate quede a la perfection.

2. Design electric: Hacer su propria PCB, pentru că trebuie să fie bine amplasate la conexiunile pe care le au, de la aceeași manieră să facă primele conexiuni într-o protoboard, pentru a comprobar când pongan-ul în PCB-ul funcționează sea corect și nu trebuie care agregă mai multe conexiuni sau vor reveni la imprimarea PCB-ului.

3. Design Software: Guiarse with the programation base expuesta, but treat of do your own programation, to get to understand well the functionation and in case of that no functionar the programation saber as change the instructions for that function correctly.

Recomandat: