Πίνακας περιεχομένων:

Ασύρματο αυτοκίνητο ελεγχόμενο με κίνηση: 7 βήματα
Ασύρματο αυτοκίνητο ελεγχόμενο με κίνηση: 7 βήματα

Βίντεο: Ασύρματο αυτοκίνητο ελεγχόμενο με κίνηση: 7 βήματα

Βίντεο: Ασύρματο αυτοκίνητο ελεγχόμενο με κίνηση: 7 βήματα
Βίντεο: Τηλεκατευθυνόμενο Αυτοκίνητο/Τηλεκατευθυνόμενη Μηχανή - AS 2024, Δεκέμβριος
Anonim
Ασύρματο αυτοκίνητο ελεγχόμενο με κίνηση
Ασύρματο αυτοκίνητο ελεγχόμενο με κίνηση

Σε αυτό το σεμινάριο θα μάθουμε πώς να φτιάχνουμε ένα αυτοκίνητο με χειρονομία ή οποιοδήποτε ρομπότ. Αυτό το έργο έχει δύο μέρη, το ένα μέρος είναι μονάδα πομπού και το άλλο μέρος είναι μονάδα δέκτη. Η μονάδα πομπού είναι πραγματικά τοποθετημένη σε γάντια χειρός και η μονάδα δέκτη τοποθετείται μέσα σε ένα αυτοκίνητο ή οποιοδήποτε ρομπότ. Itsρθε η ώρα να φτιάξουμε ένα ωραίο αυτοκίνητο. Πάμε!

Βήμα 1: Εξοπλισμός

Μονάδα πομπού

1. Arduino Nano.

2. Μονάδα αισθητήρα MPU6050.

3. Πομπός RF 433 MHz.

4. Οποιοσδήποτε τύπος μπαταρίας 3 κυττάρων, μπαταρίας 11,1 volt (εδώ έχω χρησιμοποιήσει κελί νομίσματος).

5. Vero-Board.

6. Γάντια χεριών.

Μονάδα δέκτη

1. Arduino Nano ή Arduino Uno.

2. Μονάδα οδήγησης μοτέρ L298N.

3. Πλαίσιο ρομπότ 4 τροχών με κινητήρες.

4. Δέκτης RF 433 RF.

5. Μπαταρία Li-po 3 κυψελών, 11,1 volt.

6. Vero-board.

Οι υπολοιποι

1. Κόλλα ραβδιά και πιστόλι.

2. Καλώδια βραχυκυκλωτήρων.

3. Βιδωτά προγράμματα οδήγησης

4. Σετ συγκόλλησης.

και τα λοιπά.

Βήμα 2: Αρχείο εικόνας διαγράμματος κυκλώματος

Αρχείο εικόνας διαγράμματος κυκλώματος
Αρχείο εικόνας διαγράμματος κυκλώματος

Βήμα 3: Fritzing File of Circuit Diagram

Βήμα 4: Κωδικός πομπού

#περιλαμβάνω

#περιλαμβάνω

#περιλαμβάνω

MPU6050 mpu6050 (Σύρμα);

χρονοδιακόπτης = 0;

ελεγκτής char *

void setup ()

{Serial.begin (9600); Wire.begin (); mpu6050.begin (); mpu6050.calcGyroOffsets (αληθινό); vw_set_ptt_inverted (true); // vw_set_tx_pin (10); vw_setup (4000); // ταχύτητα μεταφοράς δεδομένων Kbps

}

κενός βρόχος ()

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

mpu6050.update ();

εάν (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 ("ΔΕΞΙΑ"); } 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 (true); // Απαιτείται για DR3100 vw_set_rx_pin (12). vw_setup (4000); // Bits ανά δευτερόλεπτο 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 ("ΔΕΞΙΑ"); σωστά(); καθυστέρηση (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:

Wire Library:

Συνιστάται: