Ardumotive Arduino Greek Playground
  • Home
    • About us
    • Contact
    • License
  • Arduino
    • Tutorials
    • Workshop
  • Raspberry Pi
  • DIY 3D Printer
  • News
    • Events >
      • Unboxing & Review
    • Blog
The 1st Arduino Playground in Greece - Open Source Hardware

MIKE - Το ρομπότ που ακολουθεί μια μαύρη γραμμή με την βοήθεια του Arduino

Available Languages
Picture
Picture

Introduction 

Published date: 26/7/2017
Picture
Αν είσαι αρχάριος και γνωρίστηκες πρόσφατα με το Arduino τότε αυτός είναι ο πιο εύκολος οδηγός για να φτιάξεις το δικό σου ρομπότ που θα  ακολουθεί μια μαύρη γραμμή!

Για να το κάνουμε πιο εύκολο κατασκευαστικά θα χρησιμοποιήσουμε ενα έτοιμο ρομποτικό σασί με τέσσερα DC μοτεράκια. Για άλλη μια φορά θα χρησιμοποιήσουμε την δημοφιλή πλακέτα Arduino UNO!
Το μικρό μας ρομποτάκι θα ξεκινάει την πορεία του όταν πατήσουμε μια φορά το κουμπί στο μπροστινό του μέρος. Αν το πατήσουμε ξανά (ή βρει σε εμπόδιο) σταματάει αμέσως την λειτουργία του. Η πλακέτα για τον εντοπισμό της μαύρης γραμμής διαθέτει πέντε αισθητήρες υπερύθρων. Εμείς θα χρησιμοποιήσουμε μόνο τους τρεις απ' αυτούς, τον μεσαίο για την μαύρη γραμμή και αυτούς που βρίσκονται αριστερά/δεξιά για την διόρθωση της πορείας του. Το ρομπότ μας θα σταματήσει μόλις και οι τρεις αισθητήρες (ταυτόχρονα) εντοπίσουν μαύρο. Δείτε το παρακάτω βίντεο για να καταλάβετε πως λειτουργεί στην πράξη.

Τα υλικά που θα χρειαστούμε

Picture
Για το project αυτό θα χρειαστούμε τα παρακάτω:​​
  • Arduino UNO
  • ​Mini Robot Rover Chassis Kit 
  • Line Follower Detector 5-Channels
  • Arduino UNO shield
  • Mini breadboard with adhesive tape​
  • L293D Motor Driver IC
  • Buzzer
  • Battery holder (rectangle) 4xAA

Επίσης θα χρειαστούμε μερικά καλώδια και αποστάτες.
Εργαλεία: Κατσαβίδι

Συναρμολόγηση του ρομποτ! 

Δείτε τις παρακάτω εικόνες. (Μια εικόνα, χίλιες λέξεις!)

Το κύκλωμα 

Picture
Οι συνδέσεις είναι αρκετά απλές, ακολουθείστε τα χρώματα στο παραπάνω σχηματικό.

Σχετικά με την πλακέτα "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. Αν το ρομπότ δεν κινείτε ευθεία ξεκινήστε να μειώνετε  την τιμή σε μια απ' τις δυο μεταβλητές μέχρις ότου επιτευχθεί το ζητούμενο αποτέλεσμα.
  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);
}
Κατεβάστε τον κώδικα απο εδώ,
line_following_robot.zip
File Size: 1 kb
File Type: zip
Download File

Συγχαρητήρια! 

Picture
Αυτό ήταν!!! 

Φτιάξτε την δική σας πίστα με μονωτική ταινία (πάχος γραμμής 3cm), η εκτυπώστε την πίστα του βίντεο κατεβάζοντας την απο εδω (Corel Draw)

​Εύκολο ή δύσκολο? Πείτε μου παρακάτω!

Επίσης θα ήθελα να δω φωτογραφίες απ' τα δικά σας ρομποτάκια!
line_forwarding_stage.cdr
File Size: 1394 kb
File Type: cdr
Download File

Picture

Search Engine

Picture

Licence 

Picture

Help us to grow up!

Picture


Donate us
About us
License
Cookies policy

Visit the biggest Arduino Shop in Greece!

Picture
find us on dwrean.net
find us on Codebender
find us on Instructables
Developed and designed by Vasilakis Michalis Copyright © 2013 Ardumotive All Rights Reserved
All trademarks referenced herein are properties of their
Powered by Create your own unique website with customizable templates.
Design by DivTag Templates
Ardumotive Arduino Greek Playground