Ακόλουθος γραμμής/A1 team-5ο ΓΕΛ Νίκαιας

Ακόλουθος γραμμής/A1 team-5ο ΓΕΛ Νίκαιας

Φτιάξε τον δικό σου ακόλουθο γραμμής (line follower) με 40 ευρώ, χρησιμοποιώντας Raspberry Pi Zero W.

Αποθετήριο: https://github.com/5lyknikaias/LineFollower

Η ιδέα μας

Χρησιμοποιούμε για σασί του οχήματος μια διάτρητη πλακέτα, η οποία φιλοξενεί ταυτόχρονα και την καλωδίωση των υπολοίπων υλικών. Η κατασκευή έχει γίνει με το raspberry pi zero w, έναν οδηγό κινητήρων, 3 υπέρυθρους αισθητήρες ανάκλασης, ένα κυλινδρικό Power Bank, καθώς και δύο κινητήρες συνεχούς ρεύματος. Η επιλογή του raspberry pi zero w γίνεται έτσι ώστε να μπορεί να χρησιμοποιηθεί η γλώσσα προγραμματισμού Python και για λόγους μελλοντικής επέκτασης του έργου, όπως:

  • Την υλοποίηση της ανίχνευσης της γραμμής μέσω κάμερας.
  • Ακόμη, η συγκεκριμένη πλατφόρμα διαθέτει συσκευή Bluetooth για την επικοινωνία με κινητό τηλέφωνο, στο οποίο αναπτύσσουμε εφαρμογές σε περιβάλλον Αpp Ιnventor.

Το κύκλωμα

Το κύκλωμα τροφοδοτείται από ένα Power Bank, το οποίο παρέχει σταθεροποιημένη τάση 5V και ρεύμα 1Α. Η ασφάλεια F1 σε συνδυασμό με τον πυκνωτή C1 εξομαλύνει τις αιχμές της τάσης των 5V που δημιουργούνται από τις απότομες μεταβολές του ρεύματος (ταχύτητας) των κινητήρων. Η ασφάλεια επαναφοράς F1 (resettable fuse), προστατεύει, επίσης, την κατασκευή από τυχόν βραχυκύκλωμα. Σε περίπτωση βραχυκυκλώματος, η εσωτερική της αντίσταση αυξάνεται, περιορίζοντας το ρεύμα μέχρι να αποκατασταθεί το βραχυκύκλωμα.

Το raspberry τροφοδοτείται με τα 5V μέσω των ακροδεκτών του 2, 4 και 6. Επειδή διαθέτει εσωτερικό σταθεροποιητή τάσης στα 3,3V, το επίπεδο HIGH σε κάποιο GPIO που λειτουργεί σαν έξοδος αντιστοιχεί στα 3,3V. Οι έξοδοι του raspberry για τον έλεγχο των κινητήρων (GPIO26, GPIO19, GPIO13, GPIO12) λειτουργούν με την τεχνική PWM και μας δίνουν τη δυνατότητα να ελέγχουμε την ταχύτητα των κινητήρων. Οι τιμές που χρησιμοποιούμε στην Python είναι 0.0 για 0V και 1.0 για 3,3V στην έξοδο.

Η οδήγηση των κινητήρων υλοποιείται μέσω του IC1 (L293D). Η τροφοδοσία του IC1 και κατά συνέπεια των κινητήρων γίνεται με 5V. Ο θετικός ακροδέκτης του αριστερού κινητήρα (κόκκινο καλώδιο στην κατασκευή) συνδέεται στο ποδαράκι (pin) 3 του ολοκληρωμένου IC1, ενώ ο αρνητικός (μαύρο καλώδιο) στο ποδαράκι 6. Αντίστοιχα, για τον δεξιό κινητήρα ο θετικός ακροδέκτης στο ποδαράκι 11, ενώ ο αρνητικός στο ποδαράκι 14. Για τον έλεγχο του αριστερού κινητήρα χρησιμοποιούμε τους ακροδέκτες GPIO26, GPIO19 και για τον δεξιό τους GPIO13, GPIO12. Αν θέλουμε να κινήσουμε το ρομπότ με μέγιστη ταχύτητα (για τη μισή ταχύτητα φτάνει να γράψουμε 0.5 αντί για 1.0) πρέπει να γράψουμε στο πρόγραμμά μας:

GPIO26 GPIO19 GPIO13 GPIO12 Αριστερός

Κινητήρας

Δεξιός

Κινητήρας

Ρομπότ

1.0

0.0

1.0

0.0

μπροστά

μπροστά

μπροστά

1.0

0.0

0.0

0.0

μπροστά

σταματά

δεξιά

0.0

0.0

1.0

0.0

σταματά

μπροστά

αριστερά

0.0

1.0

0.0

1.0

πίσω

πίσω

πίσω

0.0

0.0

0.0

0.0

σταματά

σταματά

σταματά

Τα IC2, IC3, IC4 (CNY70) είναι είσοδοι για το raspberry, μέσω αυτών των αισθητήρων “βλέπει” την γραμμή. Το CNY70 αποτελείται από έναν πομπό και έναν δέκτη υπερύθρου φωτός (το φως αυτό δεν είναι ορατό από το ανθρώπινο μάτι). Ο πομπός είναι μία δίοδος LED που η άνοδός της (A) συνδέεται στα 5V, μέσω μιας αντίστασης 220Ω και η κάθοδός της (K) στο Ground (το – του powerbank). Έτσι, ο πομπός φωτοβολεί συνεχώς στο έδαφος. Ο δέκτης είναι ένα φωτοτρανζίστορ, το οποίο όταν λαμβάνει φως βρίσκεται σε αγωγιμότητα, ενώ όταν δε λαμβάνει βρίσκεται σε αποκοπή. Στο συλλέκτη (C) του φωτοτρανζίστορ δεν χρησιμοποιούμε εξωτερική αντίσταση πρόσδεσης (pull-up) αλλά χρησιμοποιούμε την εσωτερική αντίσταση pull-up του raspberry που υπάρχει σε κάθε GPIO. Ο εκπομπός (E) του φωτοτρανζίστορ συνδέεται στο Ground. Έτσι, όταν υπάρχει αντανάκλαση φωτός το φωτοτρανζίστορ βρίσκεται σε αγωγιμότητα, με αποτέλεσμα το αντίστοιχο GPIO να βρίσκεται σε κατάσταση LOW, ενώ όταν δεν υπάρχει βρίσκεται σε κατάσταση HIGH. Αν υποθέσουμε ότι χρησιμοποιούμε μαύρη γραμμή και κάποιος αισθητήρας βρίσκεται από πάνω της, τότε το αντίστοιχο GPIO βρίσκεται σε κατάσταση HIGH. Επειδή, εσωτερικά, υπάρχει ένα κύκλωμα υστέρησης, τα επίπεδα αντιστρέφονται, οπότε, τελικά, το πρόγραμμα διαβάζει LOW. Τέλος, ο αριστερός αισθητήρας συνδέεται στο GPIO6, ο μεσαίος στο GPIO5 και ο δεξιός στο GPIO4.

Κατασκευή

Υλικά που χρησιμοποιήσαμε

 

Τα εργαλεία που χρησιμοποιήσαμε

 

Βήματα κατασκευής

Σημειώνουμε στην διάτρητη πλακέτα τις οπές

 

 

 

 

 

 

 

 

Τρυπάμε με τρυπάνι 3mm τα σημειωμένα σημεία

 

 

 

 

 

 

 

 

 

 

 

Μόλις τελειώσουμε, η πλακέτα θα πρέπει να είναι έτσι:

 

 

 

 

 

 

 

 

Σημειώνουμε ποιος είναι ο δεξιός και ποιος ο αριστερός κινητήρας κατά τέτοιο τρόπο ώστε οι πόλοι του καθενός να κοιτάζουν προς τα μέσα όταν τους τοποθετούμε στη πλακέτα και κολλάμε μαύρο καλώδιο 10cm και κόκκινο καλώδιο 10cm όπως φαίνονται στην εικόνα

 

 

 

Κάνουμε ένα σημάδι στις γωνίες σύνδεσης όπως και στην εικόνα(απόσταση:18mm)

 

 

 

 

 

 

 

 

Και ύστερα τα τρυπάμε με τρυπάνι 3mm

 

 

 

 

Βιδώνουμε πάνω στη πλακέτα το Ball Caster

 

 

 

 

 

Πρώτα ξεβιδώνουμε τις δύο βίδες που έχει το Ball Caster με προσοχή. Τοποθετούμε τις βίδες στις τρύπες που ήδη έχουμε κάνει στη πλακέτα και στη συνέχεια εφαρμόζουμε τα παξιμάδια σε κάθε βίδα και τέλος βιδώνουμε  με προσοχή το Ball Caster

 

Τοποθετούμε τη βάση ολοκληρωμένου κυκλώματος και τον κεραμικό πυκνωτή

 

 

 

 

 

 

 

 

Κάνουμε τις κολλήσεις της βάσης στην πίσω πλευρά της πλακέτας όπως στη φωτογραφία

 

 

 

 

Τοποθετούμε τον ηλεκτρολυτικό πυκνωτή μαζί με την ασφάλεια όπως στη φωτογραφία στις συντεταγμένες πυκνωτής: Ν 24 P 24 / ασφάλεια: L24. Προσοχή στο Ν24 να είναι το θετικό πόδι. Ο πυκνωτής έχει μια γκρι γραμμή στο αρνητικό πόδι

 

 

 

Βιδώνουμε τις γωνίες σύνδεσης όπως στη φωτογραφία με την εξτρά τρύπα που κάναμε προς τα έξω

 

 

 

 

 

 

Τοποθετούμε τον γωνιακό header στη πλακέτα στις συντεταγμένες K L  και 6-25 και αφού τον συγκολλήσουμε αφαιρούμε το raspberry.

 

 

 

 

 

 

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

 

 

 

 

Κόβουμε το pin header ανά δύο όπως στη φωτογραφία

 

 

 

 

 

 

 

 

Ύστερα κουμπώνουμε  τους αισθητήρες CNY70 πάνω στα κομμάτια που κόψαμε(το κάθε CNY70 κουμπώνει σε δύο κομμάτια)

 

 

 

 

Τοποθετούμε τα CNY70 στη κάτω μεριά της πλακέτας και με τα γράμματα προς τα έξω.

 

 

 

 

Και κάνουμε τις κολλήσεις

 

 

 

Τοποθετούμε τις 3 αντιστάσεις στη πάνω μεριά της πλακέτας, κάνουμε τις κολλήσεις και αφαιρούμε τους τροχούς

 

 

 

 

 

Κάνουμε τις καλωδιώσεις σύμφωνα με το παρακάτω σχέδιο:

Κολλάμε όπως φαίνεται στο σχέδιο και στο βίντεο

Κόβουμε το καλώδιο φόρτισης του powerbank περίπου 15εκατοστά

 

 

 

 

 

Απογυμνώνουμε το καλώδιο

 

 

 

 

 

 

 

Κολλάμε το κόκκινο καλώδιο στην ασφάλεια και το μαύρο στον ηλεκτρολυτικό πυκνωτή

 

 

 

 

 

 

 

 

Στερεώνουμε το καλώδιο με τη βοήθεια ενός δεματικού καλωδίου. Τοποθετούμε το power bank στην πλακέτα και το στηρίζουμε με ένα δεματικό.

 

 

 

Το τελικό αποτέλεσμα από τη πίσω πλευρά της πλακέτας θα είναι αυτό.

Εγκατάσταση λειτουργικού συστήματος στο Raspberry

  • Κατεβάζουμε στον υπολογιστή μας το Etcher και το εγκαθιστούμε.
  • Τοποθετούμε τη κάρτα μνήμης (SD card) στον υπολογιστή μας.
  • Κατεβάζουμε το Raspbian Stretch with desktop and recommended software . Αυτό είναι το λειτουργικό σύστημα για το Raspberry.
  • Ανοίγουμε το Etcher και επιλέγουμε το Rasbian Strech που μόλις κατεβάσαμε..
  • Επιλέγουμε τη κάρτα μνήμης στην οποία θέλουμε να γράψουμε το λειτουργικό σύστημα.
  • Πατάμε “Flash!” για να αρχίσει η εγγραφή στη κάρτα μνήμης.

Εκκινούμε το Raspberry

  • Βγάζουμε τη κάρτα μνήμης από τον υπολογιστή μας και τη βάζουμε στο Raspberry. Συνδέουμε το Raspberry στην τροφοδοσία και σε μια οθόνη, όπως και ένα ποντίκι και ένα πληκτρολόγιο .Θα χρειαστείτε ένα USB HUB γιατί το Raspberry δεν έχει αρκετές θύρες και ένα καλώδιο micro HDMI σε HDMI. Αφότου το εκκινήσουμε θα δούμε στην οθόνη την εικόνα του raspbian stretch.
  • Kάνουμε τις απαραίτητες ρυθμίσεις όπως να επιλέξουμε χώρα,γλώσσα.
  • Βάζουμε τον επιθυμητό κωδικό στο Raspberry.
  • Συνδεόμαστε στο ασύρματο μας δίκτυο .
  • Κάνουμε τις απαραίτητες ενημερώσεις και επανεκκινούμε το Raspberry για να γίνουν οι ρυθμίσεις μας. Στη συνέχεια κάνουμε κλικ στη πάνω αριστερή γωνία Menu > Προτιμήσεις > Raspberry Pi Configuration, επιλέγουμε τη καρτέλα interfaces και κάνουμε την επιλογή VNC enable.

Απομακρυσμένος έλεγχος του Raspberry μέσω VNC

Από τη μεριά του Raspberry υπάρχει προεγκατεστημένος o VNC server και από τη πλευρά του υπολογιστή μας θα πρέπει να εγκαταστήσουμε τον VNC viewer.

  • Εγκαθιστούμε στον υπολογιστή μας τον VNC viewer .
  • Βρίσκουμε στο ασύρματο δίκτυο μας την IP του Raspberry.Αυτό το κάνουμε χρησιμοποιώντας για παράδειγμα  το wireless network watcher.
  • Στον VNC viewer του υπολογιστή μας πληκτρολογούμε την IP διεύθυνση(πχ. 192.168.1.160) του Raspberry.
  • Βάζουμε username: pi και password:τον κωδικό που είχαμε βάλει στις αρχικές ρυθμίσεις.
  • Πλέον ελέγχουμε το Raspberry μέσω του υπολογιστή μας.
  • Τέλος κάνουμε shutdown το Raspberry, αποσυνδέουμε το ποντίκι, το πληκτρολόγιο, την οθόνη  και το ξανατοποθετούμε στο ρομποτικό όχημα μας.Τώρα το μόνο που θα χρειάζεται κάθε φορά για να ελέγξουμε το raspberry είναι να το συνδέουμε στο power bank,να περιμένουμε περίπου 1 λεπτό και να συνδεόμαστε με  το VNC viewer από τον υπολογιστή μας σε αυτό.

Για να κατεβάσουμε το αρχείο με τον κώδικα στον υπολογιστή μας:

  • Πηγαίνουμε στη σελίδα η οποία περιέχει το αρχείο στο GitHub
  • Κάνουμε δεξί κλικ στο κουμπί “Raw”.
  • Πατάμε “Αποθήκευση συνδέσμου ως…”.
  • Στο παράθυρο που εμφανίζεται, επιλέγουμε τον φάκελο στον οποίο θέλουμε να αποθηκεύσουμε το αρχείο και πατάμε “Αποθήκευση”.

Για να στείλουμε το αρχείο στο Raspberry Pi:

  • Ενεργοποιούμε το Raspberry Pi και συνδεόμαστε σε αυτό με το VNC Viewer.
  • Κάνουμε δεξί κλικ στο πάνω μέρος του παραθύρου του Raspberry Pi.
  • Πατάμε ” Transfer files…”.
  • Στο παράθυρο που εμφανίζεται, πατάμε “Send files…”.
  • Επιλέγουμε τον φάκελο στον οποίο αποθηκεύσαμε το αρχείο.
  • Επιλέγουμε το αρχείο.
  • Πατάμε “Άνοιγμα”.

Στο τέλος, το αρχείο πρέπει να βρίσκεται στην Επιφάνεια Εργασίας του Raspberry Pi.

Για να κατεβάσουμε το αρχείο με τον κώδικα κατευθείαν στο Raspberry Pi (εναλλακτικός τρόπος):

  • Ανοίγουμε το Web Browser στο Raspberry Pi.
  • Πηγαίνουμε στη σελίδα η οποία περιέχει το αρχείο στο GitHub:
  • Κάνουμε δεξί κλικ στο κουμπί Raw.
  • Πατάμε “Αποθήκευση συνδέσμου ως…”.
  • Αποθηκεύουμε το αρχείο στην επιφάνεια εργασίας, με όνομα “LineFollower.py”.

Για να τρέξουμε το πρόγραμμα:

  • Πατάμε το κουμπί που βρίσκεται πάνω αριστερά.
  • Πάμε στην επιλογή “Προγραμματισμός”.
  • Πατάμε “Python 3 (IDLE)”.
  • Στο παράθυρο που εμφανίζεται, πατάμε “File”.
  • Πατάμε “Open…”.
  • Κάνουμε διπλό κλικ στο “Desktop”.
  • Επιλέγουμε το αρχείο.
  • Πατάμε “Άνοιγμα”.
  • Στο παράθυρο που εμφανίζεται, πατάμε “Run”.
  • Πατάμε “Run Module”.

Για να σταματήσουμε το όχημα:

Πάμε στο παράθυρο που άνοιξε όταν τρέξαμε το πρόγραμμα (Python Shell) και πατάμε ctrl+c. Έτσι διακόπτεται η εκτέλεση του προγράμματος. Οι κινητήρες, όμως, εξακολουθούν να λειτουργούν και για να σταματήσουν πρέπει να γράψουμε “MotorsSpeed(0,0)” στο ίδιο παράθυρο και να πατήσουμε Enter.

Στην ομάδα του σχολείου μας συμμετείχαν οι μαθητές:

Δημήτρης Βλαχάκης | Α’ τάξη

Χάρης  Αρσενιάδης | Α’ τάξη

Θοδωρής Βαρβαρέσσος | Α’ τάξη

Νικόλας Βόσσος | Α’ τάξη

Παναγιώτης Αλεξανδρής | Α’ τάξη

Δημήτρης Φανουργάκης | Α’ τάξη

Μανώλης Λάρδας | Γ’ τάξη

και ο καθηγητής:

Αποστόλης Σαρημιχαηλίδης | ΠΕ86