ΓΕΛ Σχηματαρίου – Έλεγχος ρομπότ με την βοήθεια κινητού τηλεφώνου

ΓΕΛ Σχηματαρίου – Έλεγχος ρομπότ με την βοήθεια κινητού τηλεφώνου

Εισαγωγή

Ονομάζομαι Νίκος Μπαντέκας και είμαι μαθητής της 2ας Λυκείου στο Γενικό Λύκειο Σχηματαρίου

Ασχολούμαι με την Ρομποτική, την κατασκευή ηλεκτρονικών κυκλωμάτων και τον προγραμματισμό από την ηλικία των 12 ετών και στόχο έχω να φτιάχνω κατασκευές που λύνουν πρακτικά προβλήματα.

Με μεγάλη χαρά θα ήθελα να παρουσιάσω και εξηγήσω την κατασκευή μου ζωντανά και σε άλλους μαθητές ή στους οργανωτές του διαγωνισμού!

Σύνδεσμος έργου προς το github repo: https://github.com/robotics-gel-schimatari/robotics-ellak1

1. Πώς επιλέχθηκε αυτό το Project

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

Δεν είχαμε κάποια ιδεοθύελλα, απλά από τις κατασκευές που είχαμε υλοποιήσει στο παρελθόν, επιλέξαμε μια κατασκευή που συνδυάζει διάφορα στοιχεία (εξαρτήματα) και τεχνολογίες, να μπορεί να υλοποιηθεί εύκολα με σχετικά απλό προγραμματισμό από όλους και να έχει μικρό κόστος υλικών.

Τα κινητά τηλέφωνα – smartphone χρησιμοποιούνται σήμερα από όλο και περισσότερους ανθρώπους. Θέλαμε λοιπόν να αναπτύξουμε μια απλή εφαρμογή που θα μπορούσαμε ελέγξουμε πλήρως από απόσταση ένα όχημα (πλατφόρμα) με την κίνηση μόνο του αντίχειρα μέσω με την χρήση ενός κινητού.

Πιστεύουμε ότι η ιδέα μπορεί να χρησιμοποιηθεί για τον έλεγχο και άλλων συσκευών στο σπίτι.

2. Ιδέα

Κατασκευή ενός ρομπότ (όχημα) του οποίου η κίνηση θα ελέγχεται ασύρματα (μέσω bluetooth) με την βοήθεια μιας απλής εφαρμογής που θα τρέχει σε οποιαδήποτε «έξυπνη» συσκευή (smartphone, tablet κλπ).

Η οδήγηση των κινητήρων γίνεται με την χρήση του ολοκληρωμένου (IC) οδηγού μοτέρ L293D.

Η μονάδα bluetooth HC-06, επιτρέπει την αποστολή και λήψη δεδομένων στο Arduino από το smartphone ή tablet. Εναλλακτικά αντί ενός Arduino Uno και της μονάδας bluetoothHC-06 θα μπορούσε να χρησιμοποιηθεί ένα Arduino BT (Bluetooth) https://www.arduino.cc/en/Main/ArduinoBoardBT?from=Main.ArduinoBoardBluetooth ) το οποίο διαθέτει ενσωματωμένη μια μονάδα bluetooth, απλούστερη λύση η οποία όμως δεν επιλέχθηκε λόγω πολύ υψηλότερου κόστους.

Η διεπαφή με τον χρήστη θα είναι μια απλή εφαρμογή που θα τρέχει σε οποιαδήποτε «έξυπνη» συσκευή (smartphone, tablet κλπ) και θα αναπτυχθεί με την χρήση του «MIT App Inventor» ( http://appinventor.mit.edu/explore/ ).

Διάφορα κουμπιά στην οθόνη της συσκευής (smartphone, tablet κλπ) θα καθορίζουν τις κινήσεις του ρομπότ:

  • Το κουμπί με την ονομασία «Εμπρός» κινεί το ρομπότ μπροστά.
  • Το κουμπί με την ονομασία «Πίσω» κινεί το ρομπότ πίσω.
  • Το κουμπί με την ονομασία «Αριστερά» κινεί το ρομπότ αριστερά.
  • Το κουμπί με την ονομασία «Δεξιά» κινεί το ρομπότ δεξιά
  • Το κουμπί με την ονομασία «Αναστροφή» κάνει το ρομπότ να εκτελέσει επιτόπου αναστροφή.

3. Απαιτούμενα υλικά και ενδεικτικό κόστος

Περιγραφή Ενδεικτικό κόστος (σε € με ΦΠΑ)
Arduino Uno Rev3 9,85
HC-06 Bluetooth RF Transceiver Module 7,50
Ολοκληρωμένο L293D 3,00
Breadboard * 1,05
Καλώδια κλπ 2,00
Πλατφόρμα (όχημα) robot 15,00
Θήκη για μπαταρίες 2,00
Μπαταρίες AA 2,00
Διάφορα 1,00
ΣΥΝΟΛΟ 43,40

Το κόστος έχει υπολογιστεί με τιμές σε ελληνικά ηλεκτρονικά καταστήματα που πωλούν ηλεκτρονικά εξαρτήματα. Εάν τα εξαρτήματα αγοραστούν από το εξωτερικό (πχ https://www.aliexpress.com/ ) το κόστος μαζί με τα μεταφορικά θα είναι περίπου το μισό.

*: εναλλακτικά αντί για ένα κανονικό breadboard, χρησιμοποιήσαμε ένα μικρότερο κολλημένο πάνω στο Arduino.

3.1 Οδηγός μοτέρ L293D

Προκειμένου να οδηγήσουμε dc κινητήρες, απαιτείται ένα ειδικό κύκλωμα που ονομάζεται γέφυρα Η.Δυστυχώς τα ολοκληρωμένα κυκλώματα που αποτελούν και τους ηλεκτρονικούς εγκεφάλουν των ρομπότ (μικροελεγκτές), δεν μπορούν να δώσουν πολύ ρεύμα στις εξόδους τους. Ωστόσο επειδή οι dc κινητήρες βασίζονται στη δημιουργία μαγνητικών πεδίων από ηλεκτρομαγνήτες, απαιτούν σημαντικά ποσά ηλεκτρικού ρεύματος για να λειτουργήσουν (μάλιστα όσο μεγαλύτερη ισχύ έχει ένας κινητήρας τόσο περισσότερο ρεύμα απαιτεί).

Σχήμα: Συνδεσμολογία Η-bridge

Αυτό το πρόβλημα έρχονται να λύσουν οι γέφυρες Η (και γενικότερα τα κυκλώματα οδήγησης). Οι γέφυρες Η αυτές που μετατρέπουν τα «ασθενικά» σήματα τάσης, που λαμβάνουν από τον ηλεκτρονικό εγκέφαλο, σε ανάλογα «ισχυρά» σήματα ρεύματος ώστε να λειτουργήσουν οι κινητήρες. Πέρα από αυτό δεν κάνουν τίποτα άλλο. Το arduino αίναι αυτό που ευθύνεται για τον τελικό τρόπο λειτουργίας των κινητήρων (θα περιστρέφονται δεξιόστροφα, αριστερόστροφα, με πλήρης στροφές ή κάποιο ποσοστό στροφών, τη χρονική διάρκεια περιστροφής κτλ). Φυσικά ο τρόπος λειτουργίας των κινητήρων καθορίζεται από το πρόγραμμα που εκτελείται στο arduino.

Σχήμα: Συνδεσμολογία Η-bridge

Σχήμα: To ολοκληρωμένο L2930

Σχήμα: Συνδεσμολογία στο L2930

Όταν συνδέσουμε το breadboard, θα πρέπει να διασφαλιστεί ότι το IC είναι ο σωστά τοποθετημένο. Η εγκοπή πρέπει να είναι προς τα αριστερά του breadboard.

Το datasheet του L293D.

3.2 HC-06 Bluetooth Module

Το HC-06 Bluetooth Module είναι ένα εύχρηστο module SPP (Serial Port Protocol) Bluetooth, σχεδιασμένο για ασύρματη σειριακή σύνδεση με διαφανή τρόπο. Η επικοινωνία πραγματοποιείται μέσω σειριακής επικοινωνίας, η οποία κάνει εύκολο την διασύνδεση με τον ελεγκτή ή τον υπολογιστή.

Pin Περιγραφή Λειτουργία
VCC +5V Σύνδεση σε +5V
GND Ground Σύνδεση σε γη
TXD UART_TXD, Bluetooth serial signal sending PIN Σύνδεση σε RXD PIN
RXD UART_RXD, Bluetooth serial signal receiving PIN Σύνδεση σε TXD PIN
KEY Mode switch input Εάν η είσοδος είναι 1, η μονάδα θα τεθεί σε λειτουργία AT

Το datasheet και οι οδηγίες χρήσης του HC-06 Bluetooth Module.

4. Υλοποίηση του συστήματος

  • Η πλατφόρμα θα φέρει 2 κινητήρες , καθώς και μια κινούμενη ροδέλα για την ισορροπία του
  • Μια προγραμματίσιμη πλακέτα Arduino
  • Τον δέκτη Bluetooth για την ασύρματη επικοινωνία με το κινητό
  • Μία συστοιχία μπαταριών (6*1,5 = 9 Volt)
  • Την ασπίδα (shield) για την κίνηση των δύο κινητήρων
  • Ένα breadboard , καλώδια κλπ

4. 1 Κύκλωμα

4.2 Συναρμολόγηση

Φωτογραφίες από την φάση συναρμολόγησης

5. Κώδικας

Ο κώδικας για το Arduino χρησιμοποιεί την βιβλιοθήκη SoftwareSerial η οποία επιτρέπει την επικοινωνία μέσω bluetooth.

#include <SoftwareSerial.h>

SoftwareSerial BT(10, 11); //TX, RX respetively
String readdata;

void setup() {
  BT.begin(9600);
  Serial.begin(9600);
  pinMode(3, OUTPUT); // Σύνδεση στο pin 1 του L293D
  pinMode(4, OUTPUT); // Σύνδεση στο pin 4 του L293D
  pinMode(5, OUTPUT); // Σύνδεση στο pin 3 του L293D
  pinMode(6, OUTPUT); // Σύνδεση στο pin 2 του L293D
}

//-----------------------------------------------------------------------
void loop() {
  while (BT.available()) { // Έλεγχος εάν υπάρχει κάποιο byte για διάβασμα
    delay(10); // Πρόσθεση delay για σταθερότητα
    char c = BT.read(); // Διεξαγωγή serial read
    readdata += c; // Σύνθεση του string "forward", "reverse", "left" and "right"
  }
  if (readdata.length() > 0) {
    Serial.println(readdata); // Εκτύπωση δεδομένων στo serial monitor
    // Eάν τα δεδομένα που λάβαμε είναι "forward", κίνηση μπροστά
    if (readdata == "forward")
    {
      digitalWrite(3, HIGH);
      digitalWrite (4, HIGH);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      delay(100);
    }
    // Eάν τα δεδομένα που λάβαμε είναι "backward", κίνηση πίσω
    else if (readdata == "backward")
    {
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
      digitalWrite(6, HIGH);
      delay(100);
    }
    // Eάν τα δεδομένα που λάβαμε είναι "left", κίνηση αριστερά
    else if (readdata == "left")
    {
      digitalWrite (3, HIGH);
      digitalWrite (4, LOW);
      digitalWrite (5, LOW);
      digitalWrite (6, LOW);
      delay (100);
    }
    // Eάν τα δεδομένα που λάβαμε είναι "reverse", αναστροφή
    else if (readdata == "reverse")
    {
      digitalWrite (3, HIGH);
      digitalWrite (4, LOW);
      digitalWrite (5, LOW);
      digitalWrite (6, HIGH);
      delay (100);
    }
    // Eάν τα δεδομένα που λάβαμε είναι "right", κίνηση δεξιά
    else if ( readdata == "right")
    {
      digitalWrite (3, LOW);
      digitalWrite (4, HIGH);
      digitalWrite (5, LOW);
      digitalWrite (6, LOW);
      delay (100);
    }
    // Eάν τα δεδομένα που λάβαμε είναι "stop", στοπ
    else if (readdata == "stop")
    {
      digitalWrite (3, LOW);
      digitalWrite (4, LOW);
      digitalWrite (5, LOW);
      digitalWrite (6, LOW);
      delay (100);
    }
    readdata = "";
  }
}

5.1 App Inventor

Το MIT App Inventor είναι ένα ελεύθερο και ανοικτό γραφικό περιβάλλον οπτικού προγραμματισμού που μας δίνει την δυνατότητα να δημιουργούμε εφαρμογές για κινητά τηλέφωνα τα οποία χρησιμοποιούν λειτουργικό android. Η λογική του εργαλείου βασίζεται στο WYSIWYG (συντομογραφία της φράσης «What You See Is What You Get» (Αυτό που βλέπεις είναι αυτό που θα εμφανιστεί)) λύση της Google, που επιτρέπει τη δημιουργία εφαρμογών για το δημοφιλές λειτουργικό της Android, μέσω απλού drag’n’drop.

Οι συγκεκριμένες εφαρμογές τρέχουν και σε emulator. Αναπτύχθηκε στα εργαστήρια της Google από μια ομάδα με επικεφαλής τον καθηγητή του MIT Hal Abelson (Abelson, 2009). To περιβάλλον του App Inventor έχει πολλές ομοιότητες με το περιβάλλον του Scratch και του Alice, με τη διαφορά ότι οι εφαρμογές που δημιουργούνται τρέχουν σε έξυπνα τηλέφωνα (smart phones).

Επιλέξαμε αυτή τη πλατφόρμα για να δημιουργήσουμε την εφαρμογή γιατί είναι ένα πρόγραμμα με σχετικά εύκολες εντολές , αλλά πάνω από όλα είναι δωρεάν και ανοιχτού κώδικα.

Βήματα για την χρήση του App Inventor:

  • Βήμα 1: Κατεβάστε την εφαρμογή App Inventor Ultimate

Κατεβάστε και εγκαταστήστε την εφαρμογή App Inventor Ultimate από:

https://sourceforge.net/projects/ai2u/files/ai2u%204.6/Installer/AI2U%2064bit%20v4.6.exe/download

  • Βήμα 2: Κάντε λήψη και εγκατάσταση της εφαρμογής MIT AI2Companion Ανοίξτε τον σαρωτή QR code της συσκευής σας και σαρώστε τον κώδικα QR παρακάτω για να πραγματοποιήσετε λήψη της εφαρμογής MIT AI2Companion App από το Play Store.

Σκανάρετε αυτό το QR code για να εγκαταστήσετε το MIT AI2 Companion App στο κινητό σας.

Πηγή: https://appinventor.mit.edu/explore/ai2/setup-device-wifi.html

Πολύ χρήσιμες πληροφορίες για την ανάπτυξη εφαρμογών βρήκα στο εγχειρίδιο με τίτλο: «Προγραμματισμός σε App Inventor» που έγραψαν συγγραφείς: Βασίλης Βασιλάκης, Γιώργος Χατζηνικολάκης. ( https://www.openbook.gr/programmatismos-se-app-inventor/ ), καθώς και στην ιστοσελίδα https://www.sepchiou.gr/?s=app+inventor**

5.2 Προγραμματισμός App Inventor

Σχεδίαση:

Το πιο εύκολο κομμάτι της υλοποίησης της εφαρμογής ήταν σχεδίαση της εφαρμογής. Το μόνο που είχαμε να κάνουμε ήταν να ‘σύρουμε’ τα κουμπιά μέσα στο πλαίσιο όπου θα ήταν η εφαρμογή , έπειτα να δώσουμε ονόματα σε καθένα και τέλος να δώσουμε την ιδιότητα στο κουμπί ‘bluetooth’ να ανοίγει την σελίδα με το “Bluetooth”.

Blocks:

Τα Blocks είναι ο προγραμματισμός της εφαρμογής. Θυμίζουν το Scratch 1 και 2 , τα οποία προγραμματίζονταν με τον ίδιο τρόπο .

img

Εικόνα: Στιγμιότυπο από την εφαρμογή

Στα δύο πρώτα Blocks ορίζουμε το κουμπί bluetooth το οποίο θα ανοίγει τη λίστα με τις διαθέσιμες συσκευές ώστε να επιλέξουμε τη συσκευή που εμείς έχουμε ορίσει για το Arduino. Στην επόμενη σειρά ορίζουμε ένα κουτάκι που μας ειδοποιεί αν το Arduino είναι συνδεδεμένο με το κινητό. Αν είναι εμφανίζεται το μήνυμα ‘connected’ ενώ αν δεν είναι εμφανίζεται το μήνυμα ‘not connected’. Τέλος, δίνουμε την ιδιότητα σε κάθε κουμπί από τα 6 για την κίνηση του ρομπότ, ώστε να στέλνει το καθένα δικό του μήνυμα/εντολή στο ρομπότ , το οποίο με τη σειρά του θα το μεταφράσει και θα το μετατρέψει σε κίνηση.

img

Εικόνα: Στιγμιότυπο από την εφαρμογή

img

Εικόνα: Φωτογραφία οθόνης κινητού με τα βασικά «κουμπιά» για τον έλεγχο της πλατφόρμας

6. Φωτογραφίες

7. Βελτιώσεις

Η ομάδα δουλεύει πάνω σε βελτιώσεις για το σύστημα , καθώς με λίγες μετατροπές μπορούμε να χρησιμοποιήσουμε έναν δέκτη Wi-fi , και μια πλατφόρμα τέσσερις τροχούς και ένα πρόγραμμα για το κινητό με περισσότερες δυνατότητες.

8. Ευχαριστίες

Θα ήθελα να ευχαριστήσω τον δάσκαλό μου Πέτρο Κωφάκη για την συνεχή καθοδήγησή του από τα πρώτα βήματα μου στη Ρομποτική, καθώς και τον καθηγητή μου Νίκο Παπαϊωάννου για τις διορθώσεις του στο κείμενο.