Სარჩევი:

ჟესტით კონტროლირებადი უკაბელო მანქანა: 7 ნაბიჯი
ჟესტით კონტროლირებადი უკაბელო მანქანა: 7 ნაბიჯი

ვიდეო: ჟესტით კონტროლირებადი უკაბელო მანქანა: 7 ნაბიჯი

ვიდეო: ჟესტით კონტროლირებადი უკაბელო მანქანა: 7 ნაბიჯი
ვიდეო: აძვში დაკავებული ქართველი ჟურნალისტები გაათავისუფლეს - დეპუტატების პირველი შეფასებები 2024, ნოემბერი
Anonim
ჟესტით კონტროლირებადი უკაბელო მანქანა
ჟესტით კონტროლირებადი უკაბელო მანქანა

ამ გაკვეთილში ჩვენ ვაპირებთ ვისწავლოთ, როგორ გავაკეთოთ ჟესტით კონტროლირებადი მანქანა ან ნებისმიერი რობოტი. ამ პროექტს აქვს ორი ნაწილი, ერთი ნაწილი არის გადამცემი ერთეული და მეორე ნაწილი არის მიმღები. გადამცემი მოწყობილობა ფაქტიურად დამონტაჟებულია ხელთათმანებზე და მიმღები არის მოთავსებული მანქანის ან რობოტის შიგნით. ახლა დროა გავაკეთოთ ლამაზი მანქანა. Წავედით!

ნაბიჯი 1: აღჭურვილობა

გადამცემი განყოფილება

1. არდუინო ნანო.

2. MPU6050 სენსორის მოდული.

3. RF 433 MHz გადამცემი.

4. ნებისმიერი ტიპის 3 უჯრედიანი, 11.1 ვოლტიანი ბატარეა (აქ მე მონეტის უჯრედი გამოვიყენე).

5. ვერო-დაფა.

6. ხელთათმანები.

მიმღების აპარატი

1. არდუინო ნანო ან არდუინო უნო.

2. L298N საავტომობილო დრაივერის მოდული.

3. 4 ბორბლიანი რობოტის ჩარჩო ძრავების ჩათვლით.

4. RF 433 RF მიმღები.

5. 3 უჯრედიანი, 11.1 ვოლტიანი Li-po ბატარეა.

6. ვერო-დაფა.

სხვა

1. წებო ჩხირები და იარაღი.

2. ჯუმბერის მავთულები.

3. ხრახნიანი დრაივერები

4. შედუღების ნაკრები.

და ა.შ.

ნაბიჯი 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 "); ტაიმერი = მილი (); }

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

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 ("მარცხნივ"); } else if (mpu6050.getAccAngleY () <-40) {controller = "Y2"; vw_send ((uint8_t *) კონტროლერი, strlen (კონტროლერი)); vw_wait_tx (); // დაელოდეთ სანამ მთელი შეტყობინება გაქრება Serial.println ("RIGHT"); } 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 ("RIGHT"); უფლება (); დაგვიანება (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:

მავთულის ბიბლიოთეკა:

გირჩევთ: