Բովանդակություն:

Gեստերով վերահսկվող անլար մեքենա ՝ 7 քայլ
Gեստերով վերահսկվող անլար մեքենա ՝ 7 քայլ

Video: Gեստերով վերահսկվող անլար մեքենա ՝ 7 քայլ

Video: Gեստերով վերահսկվող անլար մեքենա ՝ 7 քայլ
Video: Угрюм-река (1969) (1 серия) фильм 2024, Դեկտեմբեր
Anonim
Gեստերով վերահսկվող անլար մեքենա
Gեստերով վերահսկվող անլար մեքենա

Այս ձեռնարկում մենք սովորելու ենք, թե ինչպես կատարել ժեստերով կառավարվող մեքենա կամ որևէ ռոբոտ: Այս նախագիծը բաղկացած է երկու մասից, մի մասը հաղորդիչ է, իսկ մյուս մասը `ընդունիչ: Հաղորդիչ միավորը իրականում տեղադրված է ձեռքի ձեռնոցների վրա, իսկ ընդունիչ սարքը տեղադրված է մեքենայի կամ որևէ ռոբոտի ներսում: Հիմա ժամանակն է գեղեցիկ մեքենա պատրաստել: Գնացինք!

Քայլ 1: Սարքավորումներ

Հաղորդիչ միավոր

1. Արդուինո Նանո:

2. MPU6050 սենսորային մոդուլ:

3. ՌԴ 433 ՄՀց հաղորդիչ:

4. cellանկացած տիպի 3 բջիջ, 11.1 վոլտ մարտկոց (այստեղ ես օգտագործել եմ մետաղադրամի բջիջ):

5. Վերո-տախտակ:

6. Ձեռքի ձեռնոցներ:

Ստացողի միավոր

1. Arduino Nano կամ Arduino Uno:

2. L298N Motor Driver մոդուլ:

3. 4 անիվի ռոբոտի շրջանակ, ներառյալ շարժիչները:

4. ՌԴ 433 ՌԴ ընդունիչ:

5. 3 բջջային, 11.1 վոլտ Li-po մարտկոց:

6. Վերո-տախտակ:

Մյուսները

1. Սոսինձ ձողիկներ և ատրճանակ:

2. Թռիչքային լարեր:

3. Պտուտակային վարորդներ

4. oldոդման հավաքածու:

եւ այլն

Քայլ 2: Շղթայի դիագրամի պատկերային ֆայլ

Շղթայի դիագրամի պատկերի ֆայլ
Շղթայի դիագրամի պատկերի ֆայլ

Քայլ 3. Շղթայի սխեմայի փխրուն ֆայլ

Քայլ 4: Հաղորդիչի ծածկագիր

#ներառում

#ներառում

#ներառում

MPU6050 mpu6050 (մետաղալար);

երկար ժամանակաչափ = 0;

char *վերահսկիչ;

դատարկ կարգավորում ()

{Serial.begin (9600); Wire.begin (); mpu6050. սկսել (); mpu6050.calcGyroOffsets (ճշմարիտ); vw_set_ptt_inverted (ճշմարիտ); // vw_set_tx_pin (10); vw_setup (4000); // տվյալների փոխանցման արագությունը Kbps

}

դատարկ շրջան ()

{ ////////////////////////////////////////////////////////////////////////////////////////////////

mpu6050. արդիականացում ();

if (millis () - ժմչփ> 1000)

{Serial.println ("============================================= =========== "); Serial.print ("temp:"); Serial.println (mpu6050.getTemp ()); Serial.print ("accX:"); Serial.print (mpu6050.getAccX ()); Serial.print ("\ taccY:"); Serial.print (mpu6050.getAccY ()); Serial.print ("\ taccZ:"); Serial.println (mpu6050.getAccZ ()); Serial.print ("gyroX:"); Serial.print (mpu6050.getGyroX ()); Serial.print ("\ tgyroY:"); Serial.print (mpu6050.getGyroY ()); Serial.print ("\ tgyroZ:"); Serial.println (mpu6050.getGyroZ ()); Serial.print ("accAngleX:"); Serial.print (mpu6050.getAccAngleX ()); Serial.print ("\ taccAngleY:"); Serial.println (mpu6050.getAccAngleY ()); Serial.print ("gyroAngleX:"); Serial.print (mpu6050.getGyroAngleX ()); Serial.print ("\ tgyroAngleY:"); Serial.print (mpu6050.getGyroAngleY ()); Serial.print ("\ tgyroAngleZ:"); Serial.println (mpu6050.getGyroAngleZ ()); Serial.print ("angleX:"); Serial.print (mpu6050.getAngleX ()); Serial.print ("\ tangleY:"); Serial.print (mpu6050.getAngleY ()); Serial.print ("\ tangleZ:"); Serial.println (mpu6050.getAngleZ ()); Serial.println ("============================================== ========== / n "); ժմչփ = millis (); }

/////////////////////////////////////////////////////////////////////////////////////

if (mpu6050.getAccAngleX () 30) {controller = "X2"; vw_send ((uint8_t *) վերահսկիչ, strlen (վերահսկիչ)); vw_wait_tx (); // Սպասեք, մինչև ամբողջ հաղորդագրությունը չվերանա Serial.println ("FORWARD"); } else if (mpu6050.getAccAngleY ()> 40) {controller = "Y1"; vw_send ((uint8_t *) վերահսկիչ, strlen (վերահսկիչ)); vw_wait_tx (); // Սպասեք, մինչև ամբողջ հաղորդագրությունը չվերանա Serial.println ("LEFT"); } else if (mpu6050.getAccAngleY () <-40) {controller = "Y2"; vw_send ((uint8_t *) վերահսկիչ, strlen (վերահսկիչ)); vw_wait_tx (); // Սպասեք, մինչև ամբողջ հաղորդագրությունը չվերանա Serial.println («IGHԻՇՏ»); } else if (mpu6050.getAccAngleX ()-10 && mpu6050.getAccAngleY ()-10) {controller = "A1"; vw_send ((uint8_t *) վերահսկիչ, strlen (վերահսկիչ)); vw_wait_tx (); // Սպասեք, մինչև ամբողջ հաղորդագրությունը չվերանա Serial.println ("STOP"); }}

Քայլ 5: Ստացողի կոդը

#ներառում

int LA = 3;

int LB = 11; int RA = 5; int RB = 6; void setup () {Serial.begin (9600); vw_set_ptt_inverted (ճշմարիտ); // Պահանջվում է DR3100 vw_set_rx_pin- ի համար (12); vw_setup (4000); // բիթեր/ վրկ pinMode (13, OUTPUT); pinMode (LA, OUTPUT); pinMode (LB, OUTPUT); pinMode (RA, OUTPUT); pinMode (RB, OUTPUT); vw_rx_start (); // Գործարկեք ստացողի PLL- ն ՝ աշխատելով Serial.println («Ամեն ինչ լավ է»);

}

void loop () {uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message (buf, & buflen)) // Չարգելափակում

{if ((buf [0] == 'X') && (buf [1] == '1')) {Serial.println ("BACKWARD"); հետընթաց (); ուշացում (100); // անջատված (); } else if ((buf [0] == 'X') && (buf [1] == '2')) {Serial.println ("FORWARD"); առաջ (); ուշացում (100); // անջատված (); }

այլապես, եթե ((buf [0] == 'Y') && (buf [1] == '1'))

{Serial.println ("ՄՆԱ"); ձախ(); ուշացում (100); // անջատված (); }

այլապես, եթե ((buf [0] == 'Y') && (buf [1] == '2'))

{Serial.println ("IGHԻՇՏ"); ճիշտ(); ուշացում (100); // անջատված (); } else if ((buf [0] == 'A') && (buf [1] == '1')) {Serial.println ("STOP"); անջատված (); ուշացում (100); }} else {Serial.println ("Ազդանշան չի ստացվել"); }}

դատարկ առաջ ()

{analogWrite (LA, 70); analogWrite (LB, 0); analogWrite (RA, 70); analogWrite (RB, 0); }

դատարկ հետընթաց ()

{analogWrite (LA, 0); analogWrite (LB, 70); analogWrite (RA, 0); analogWrite (RB, 70); }

դատարկ ձախ ()

{analogWrite (LA, 0); analogWrite (LB, 70); analogWrite (RA, 70); analogWrite (RB, 0); }

դատարկ իրավունք ()

{analogWrite (LA, 70); analogWrite (LB, 0); analogWrite (RA, 0); analogWrite (RB, 70); }

դատարկ ()

{analogWrite (LA, 0); analogWrite (LB, 0); analogWrite (RA, 0); analogWrite (RB, 0); }

Քայլ 6: INO ֆայլեր

Քայլ 7: Գրադարանների կապը

Վիրտուալ մետաղալարերի գրադարան ՝

MPU6050_tockn Libraby:

Մետաղալար գրադարան ՝

Խորհուրդ ենք տալիս: