Introduction |
Published date: 26/7/2017
|
Αν είσαι αρχάριος και γνωρίστηκες πρόσφατα με το Arduino τότε αυτός είναι ο πιο εύκολος οδηγός για να φτιάξεις το δικό σου ρομπότ που θα ακολουθεί μια μαύρη γραμμή!
Για να το κάνουμε πιο εύκολο κατασκευαστικά θα χρησιμοποιήσουμε ενα έτοιμο ρομποτικό σασί με τέσσερα DC μοτεράκια. Για άλλη μια φορά θα χρησιμοποιήσουμε την δημοφιλή πλακέτα Arduino UNO! |
Το μικρό μας ρομποτάκι θα ξεκινάει την πορεία του όταν πατήσουμε μια φορά το κουμπί στο μπροστινό του μέρος. Αν το πατήσουμε ξανά (ή βρει σε εμπόδιο) σταματάει αμέσως την λειτουργία του. Η πλακέτα για τον εντοπισμό της μαύρης γραμμής διαθέτει πέντε αισθητήρες υπερύθρων. Εμείς θα χρησιμοποιήσουμε μόνο τους τρεις απ' αυτούς, τον μεσαίο για την μαύρη γραμμή και αυτούς που βρίσκονται αριστερά/δεξιά για την διόρθωση της πορείας του. Το ρομπότ μας θα σταματήσει μόλις και οι τρεις αισθητήρες (ταυτόχρονα) εντοπίσουν μαύρο. Δείτε το παρακάτω βίντεο για να καταλάβετε πως λειτουργεί στην πράξη.
Τα υλικά που θα χρειαστούμε
Για το project αυτό θα χρειαστούμε τα παρακάτω:
Επίσης θα χρειαστούμε μερικά καλώδια και αποστάτες. Εργαλεία: Κατσαβίδι |
|
Συναρμολόγηση του ρομποτ!
Δείτε τις παρακάτω εικόνες. (Μια εικόνα, χίλιες λέξεις!)
Το κύκλωμα
Οι συνδέσεις είναι αρκετά απλές, ακολουθείστε τα χρώματα στο παραπάνω σχηματικό.
Σχετικά με την πλακέτα "Line Follower Detector 5-Channels"
Μπαταρίες
Συνδέστε το την βάση των μπαταριών με ενα dc jack και κουμπώστε το πάνω στο Arduino uno. Ή εναλλακτικά συνδέστε το κόκκινο καλώδιο στο Vin και το μαύρο στο GND. Μπορείτε αν θέλετε να προσθέσετε και εναν διακόπτη On/Off στο κόκκινο καλώδιο των μπαταριών.
Σχετικά με την πλακέτα "Line Follower Detector 5-Channels"
- Συνδέστε τα 5V pin στο Arduino 5V pin, το GND στο Arduino GND
- Αισθητήριο "2" στο Arduino A1 pin
- Αισθητήριο "3" στο Arduino A2 pin
- Αισθητήριο "4" στο Arduino A3 pin
- Κουμπί SW στο Arduino A5 pin
Μπαταρίες
Συνδέστε το την βάση των μπαταριών με ενα dc jack και κουμπώστε το πάνω στο Arduino uno. Ή εναλλακτικά συνδέστε το κόκκινο καλώδιο στο Vin και το μαύρο στο GND. Μπορείτε αν θέλετε να προσθέσετε και εναν διακόπτη On/Off στο κόκκινο καλώδιο των μπαταριών.
Ο κώδικας
Δώστε ζωή στο μικρό ρομποτάκι σας προγραμματίζοντας το με τον παρακάτω κώδικα.
Για τον έλεγχο της ταχύτητας αλλάξτε τις μεταβλητές speedLeft και speedRight στις γραμμές 26 και 27. Αν το ρομπότ δεν κινείτε ευθεία ξεκινήστε να μειώνετε την τιμή σε μια απ' τις δυο μεταβλητές μέχρις ότου επιτευχθεί το ζητούμενο αποτέλεσμα.
Για τον έλεγχο της ταχύτητας αλλάξτε τις μεταβλητές speedLeft και speedRight στις γραμμές 26 και 27. Αν το ρομπότ δεν κινείτε ευθεία ξεκινήστε να μειώνετε την τιμή σε μια απ' τις δυο μεταβλητές μέχρις ότου επιτευχθεί το ζητούμενο αποτέλεσμα.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | /* * Arduino Line Following Robot * Dev: Michalis Vasilakis // Date: 16/7/2017 * More info can be found at http://www.ardumotive.com */ //Constants - Connections const int buzzer = 4; const int motorA1 = 5; //Left Motor const int motorA2 = 6; const int motorB1 = 10; //Right Motor const int motorB2 = 9; const int sensor2 = A1; //Left infrared sensor const int sensor3 = A2; //Middle infrared sensor const int sensor4 = A3; //Right infrared sensor const int button = A5; //On first click: Start / On second click: Stop //Variables int leftSensor; int rightSensor; int middleSensor; int buttonState; boolean start = false; //For motor speed - pwm int speedLeft = 235; int speedRight = 255; void setup(){ //Define I/O pins pinMode(buzzer, OUTPUT); pinMode(motorA1, OUTPUT); pinMode(motorA2, OUTPUT); pinMode(motorB1, OUTPUT); pinMode(motorB2, OUTPUT); Serial.begin(9600); } void loop(){ middleSensor = digitalRead(sensor3); Serial.print(middleSensor); buttonState = digitalRead(button); //Read button state if (buttonState==HIGH){ while(buttonState==HIGH){ //Wait until button is unpressed! buttonState = digitalRead(button); delay(10); } Serial.println("Button"); //Init condition: robot is stopped, on first press: robot is moving, on second press: robot is stopped. if (!start){ start = true; } else{ start = false; } delay(250); } if (!start){ stop(); // Stop the robot! } else{ leftSensor = digitalRead(sensor2); middleSensor = digitalRead(sensor3); rightSensor = digitalRead(sensor4); //Follow black line: Black 1 / White 0 if (leftSensor==HIGH && rightSensor==HIGH && middleSensor==LOW){ // Black line is in the middle - Sensors are looking "white", so move forward forward(); noTone(buzzer); } else if (leftSensor==LOW && rightSensor==HIGH && (middleSensor==LOW || middleSensor==HIGH)){ //Left sensor detect black line, turn right to correct robot route right(); tone(buzzer,500); } else if (leftSensor==HIGH && rightSensor==LOW && (middleSensor==LOW || middleSensor==HIGH)){ //Right sensor detect black line, turn left to correct robot route left(); tone(buzzer,500); } else if (leftSensor==LOW && rightSensor==LOW && middleSensor==LOW){ //Finish line detected! Stop the robot stop(); tone(buzzer,800,1000); start = false; } /* else if (leftSensor==HIGH && rightSensor==HIGH && middleSensor==HIGH){ // No line detected? Well, do something or stop it. stop(); tone(buzzer,200,1000); start = false; }*/ } } //Moving functions void forward(){ analogWrite(motorA1, speedLeft); analogWrite(motorA2, 0); analogWrite(motorB1, speedRight); analogWrite(motorB2, 0); } void backward(){ analogWrite(motorA1, 0); analogWrite(motorA2, speedLeft); analogWrite(motorB1, 0); analogWrite(motorB2, speedRight); } void left(){ analogWrite(motorA1, speedLeft); analogWrite(motorA2, 0); analogWrite(motorB1, 0); analogWrite(motorB2, speedRight); } void right(){ analogWrite(motorA1, 0); analogWrite(motorA2, speedLeft); analogWrite(motorB1, speedRight); analogWrite(motorB2, 0); } void stop(){ analogWrite(motorA1, 0); analogWrite(motorA2, 0); analogWrite(motorB1, 0); analogWrite(motorB2, 0); } |
Κατεβάστε τον κώδικα απο εδώ,
|
|
Συγχαρητήρια!
Αυτό ήταν!!!
Φτιάξτε την δική σας πίστα με μονωτική ταινία (πάχος γραμμής 3cm), η εκτυπώστε την πίστα του βίντεο κατεβάζοντας την απο εδω (Corel Draw) Εύκολο ή δύσκολο? Πείτε μου παρακάτω! Επίσης θα ήθελα να δω φωτογραφίες απ' τα δικά σας ρομποτάκια! |
|