Κεφάλαιο 10.1 - Κάνε ότι κάνω!

Μία ομάδα από ρομπότ επικοινωνούν και εργάζονται ομαδικά προκειμένου να πετύχουν έναν κοινό στόχο. Γενικά τα ρομπότ είναι μικρά και δεν διακρίνονται για την εξυπνάδα τους όταν εργάζονται ατομικά, ωστόσο όταν εργάζονται παρέα μπορούν να επιτύχουν πολλά. Το πιο σημαντικό στην ομαδική εργασία των ρομπότ είναι η μεταξύ τους επικοινωνία και χωρίς αυτή δεν μπορεί να επιτευχθεί ομαδική εργασία. Παρακάτω, θα δούμε πώς μπορεί να επιτευχθεί μία τέτοια συνεργασία.

Σε αυτή τη Δραστηριότητα θα χρειαστούμε τουλάχιστον δύο ρομπότ Edison. Το πρώτο θα αναπηδάει μόλις ακουμπήσει τα όρια και θα αποστέλει κατάλληλη πληροφορία στο δεύτερο. Τότε το δεύτερο θα μιμείται τη συμπεριφορά του πρώτου και θα αναπηδάει και αυτό, σαν να ακουμπά σε ένα αόρατο όριο.

Γράφουμε το επόμενο πρόγραμμα για το πρώτο ρομπότ.


Δημιουργούμε μία μεταβλητή των 8 bit που την ονομάζουμε ‘Black_Line’ και ορίζουμε αρχική τιμή το 1.


Πώς δουλεύει το πρόγραμμα
Η πρώτη εντολή ενεργοποιεί τον αισθητήρα ανίχνευσης γραμμής και το πρόγραμμα εισάγεται σε μια επανάληψη χωρίς τέλος. Η συνθήκη της εντολής IF εξετάζει την κατάσταση του αισθητήρα και εάν η επιφάνεια είναι λευκή (το φως ανακλάται) τότε η εντολή κίνησης των δύο κινητήρων μετακινεί το ρομπότ μπροστά με ταχύτητα 4. Εάν η επιφάνεια είναι μαύρη (το φως δεν ανακλάται) τότε το περιεχόμενο της μεταβλητής ‘Black_Line’ (1) εκπέμπεται. Το Edison οπισθοχωρεί και στρίβει δεξιά για 0,25 δευτερόλεπτα και επαναλαμβάνει την ίδια ακολουθία εντολών.


Γράφουμε τον ακόλουθο κώδικα για το δεύτερο Edison (το robot που βρίσκεται έξω από την κλειστή επιφάνεια) και για όλα όσα θα μιμούνται τις κινήσεις του πρώτου.

Δημιουργούμε μία μεταβλητή των 8 bit την οποία ονομάζουμε ‘Black_Line’ και της δίνουμε αρχική τιμή ίση με 0.

Πώς δουλεύει το δεύτερο πρόγραμμα
Το πρόγραμμα εισάγεται σε μία ατελείωτη εποανάληψη, διαβάζει τα δεδομένα που λαμβάνει χρησιμοποιώντας την κατάλληλη εντολή και τα αποθηκεύει στη μεταβλητή ‘Black_Line’. Η εντολή IF έπειτα ελέγχει εάν τα δεδομένα στη μεταβλητή έχουν την τιμή 1. Εάν δεν συμβαίνει αυτό (δηλαδή δεν έλαβε δεδομένα από το άλλο ρομπότ) τότε η επόμενη εντολή μετακινεί το Edison προς τα εμπρός με ταχύτητα 4. Εάν τα δεδομένα έχουν την τιμή 1 (το πρώτο Edison έχει ακουμπήσει στη γραμμή) τότε το ρομπότ οπισθοχωρεί και στρίβει δεξιά για 0.25 sec. Οι εντολές επαναλαμβάνονται συνεχώς.

Τι μπορούμε να κάνουμε
Χρησιμοποιείστε την μαύρη πίστα στο φύλλο δραστηριοτήτων και τοποθετήστε το πρώτο Edison μέσα στην πίστα. Τοποθετήστε το δεύτερο Edison έξω από την πίστα και πατήστε ταυτόχρονα τα πλήκτρα Play και των δύο ρομπότ. Το πρώτο Edison δεν θα βγει εκτός πίστας ενώ το δεύτερο θα μιμείται κάθε κίνηση του πρώτου.

Πείραμα
Αυτό το πρόγραμμα αποτελεί μία εισαγωγή στην επικοινωνία των ρομπότ. Μπορούμε να το βελτιώσουμε και να επιτύχουμε αμφίδρομη επικοινωνία; Τι γίνεται αν το πρώτο Edison δεν στρίβει μέχρι να λάβει μήνυμα επιβεβαίωσης λήψης δεδομένων από το δεύτερο; Αυτό είναι το ξεκίνημα της δημιουργίας ενός πρωτοκόλλου επικοινωνίας!