Ένα ιστολόγιο για όσους αγαπούν τις ηλεκτρονικές κατασκευές...

Σάββατο 15 Σεπτεμβρίου 2018

ARDUINO σε απλά Ελληνικά.


Υπάρχουν εκατομμύρια άρθρα και οδηγοί χρήσης για το Arduino στο διαδίκτυο. Ο σκοπός του άρθρου μου δεν είναι να κάνω άλλη μία επανάληψη αλλά το να φωτίσω κάποιες σκοτεινές πλευρές που με δυσκόλεψαν και εμένα όταν έκανα τα πρώτα βήματα με τους μικροελεκτές με όσο το δυνατόν πιο απλά λόγια όπως λέμε δηλαδή σε απλά Ελληνικά.






Τι είναι το Arduino.

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

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



Μπορούμε δηλαδή να έχουμε συνδεδεμένη την πλακέτα με τον υπολογιστή να φορτώνουμε το πρόγραμμα στον μικροελεγκτή για να δοκιμάσουμε την λειτουργία του χωρίς να συνδέουμε - αποσυνδέουμε συνεχώς την πλακέτα για δοκιμές. Σε αυτό το δοκιμαστικό στάδιο η τροφοδοσία της πλακέτας μπορεί να γίνεται από τον ίδιο τον υπολογιστή χωρίς άλλη εξωτερική τροφοδοσία αρκεί να μην βάλουμε περιφερειακά modules που ζητάνε πολύ ρεύμα.

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


Κατασκευές με Arduino.

Όταν κάνουμε μια χρήσιμη κατασκευή με το Arduino και θέλουμε να την λειτουργήσουμε τότε η πλακέτα μας (το Arduino μας) θα μείνει δεσμευμένο πάνω στην εφαρμογή που κάναμε. Στην πραγματικότητα ένα μικρό μέρος της πλακέτας θα χρησιμοποιηθεί από την εφαρμογή αφού η διασύνδεση με τον υπολογιστή δεν θα χρειάζεται πλέον.
Ακόμη και ένας κλώνος του Arduino με μικροελεγκτή DIP28 σε βάση αγορασμένος από την Κίνα κοστίζει 5 με 6 ευρώ ενώ ένας αντίστοιχος μικροελεγκτής μόνος του κοστίζει περίπου 1,5 ευρώ.
Επιπλέον όταν κάνετε μια εφαρμογή χρησιμοποιώντας την ίδια την πλακέτα του Arduino και κάνετε συνδέσεις με καλώδια μεταξύ της πλακέτας και των υπόλοιπων κυκλωμάτων τότε μπορούν να εμφανιστούν πολλά προβλήματα κακής επαφής των καλωδίων είτε οξειδώσεις με αποτέλεσμα να μην λειτουργεί σωστά ή καθόλου η κατασκευή μας.
Το καλύτερο που μπορείτε να κάνετε είναι αφού τελειώσει η διαδικασία προγραμματισμού να μεταφέρετε το σύνολο της κατασκευής σε δική της πλακέτα, να αφαιρέσετε τον μικροελεγκτή από το Arduino και να τον βάλετε στην πλακέτα της εφαρμογής σας.

Στο Arduino θα βάλετε ένα νέο μικροελεγκτή με προ-γραμμένο bootloader και η πλακέτα θα είναι έτοιμη για την επόμενη σας εφαρμογή.
Το ίδιο αποτέλεσμα μπορείτε να πετύχετε χρησιμοποιώντας αντί για πλακέτα τον Arduino Uno ή τον Adruino Nano που έχουν ενσωματωμένη την επικοινωνία με το PC, την πλακέτα Arduino pro mini ή οποία καταλαμβάνει πολύ μικρό χώρο και δεν ενσωματώνει επικοινωνία με PC. Κοστίζει λιγότερο από 2 ευρώ (πάντα με αγορά από Κίνα) και θα πρέπει να την συνδέσετε με μια εξωτερική πλακέτα διασύνδεσης με υπολογιστή που θα την κρατήσετε και για τις επόμενες εφαρμογές σας.

Δομή του προγράμματος ενός Arduino.

Κατά την δική μου εκτίμηση το Α και το Ω στον προγραμματισμό του Arduino είναι η κατανόηση της φιλοσοφίας με βάση την οποία λειτουργεί ένας μικροελεγκτής. Στον κλασσικό προγραμματισμό συντάσσουμε ένα πρόγραμμα το οποίο στη συνέχεια εκτελείτε κάνει αυτό που είναι προορισμένο να κάνει και τερματίζεται η λειτουργία του.
Ένα πρόγραμμα για μικροελεγκτή δεν τερματίζεται ποτέ αν δεν αφαιρέσουμε την τροφοδοσία του κυκλώματος. Μόλις τελειώσει το σετ εντολών που έχουμε δώσει αρχίζουν να εκτελούνται πάλι από την αρχή.
Αυτή η επανάληψη των εντολών μπερδεύει εύκολα τον αρχάριο χρήστη. Για παράδειγμα μια συχνή ερώτηση είναι πως θα κάνω μια εργασία μόνο μια φορά; Άλλο ένα πρόβλημα είναι η μεγάλη ταχύτητα εκτέλεσης. Αν π.χ. βάλουμε απλά να ανάβουν ένα ή παραπάνω LED και μετά δίνουμε εντολή να σβήσουν τότε αυτό θα συμβαίνει εκατομμύρια φορές το δευτερόλεπτο με αποτέλεσμα να τα βλέπουμε μονίμως αναμμένα.
Το ίδιο συμβαίνει σε μια οθόνη LCD όταν γράφουμε ταχύτατα κάτι πριν παραμείνει για ορατο χρόνο αυτό που είχαμε στείλει προηγουμένως.

Βλέποντας ένα πρόγραμμα γραμμένο για Arduino διακρίνουμε μια περιοχή στην αρχή του προγράμματος όπου τοποθετούνται εντολές αρχικοποίησης. Εισάγονται βιβλιοθήκες, δηλώνονται μεταβλητές κλπ. Και στη συνέχεια δύο βασικές functions την Setup() και την loop(). Όπως φαίνεται και από τα ονόματά τους η εντολή setup τρέχει μόνο μια φορά και στη συνέχεια μπαίνει στην loop την οποία επαναλαμβάνει συνεχώς μέχρι να πάψει να τροφοδοτείται ή να πατηθεί το reset οπότε το πρόγραμμα θα ξεκινήσει πάλι από την κορυφή θα εκτελεστεί η setup και θα μπει πάλι στο loop.

Έξω από την loop μπορεί να υπάρχουν άλλες functions που να καλούνται κατά την διάρκεια του loop μέσα από το loop. Αυτό σημαίνει ότι κάθε φορά που καλείται μια εξωτερική function ο έλεγχος περνάει μέσα στην function που καλέσαμε και όταν τελειώσει η εκτέλεση των εντολών που περιέχει ο έλεγχος περνάει πάλι στο σημείο του loop αμέσως μετά την κλήση της function.

H function loop() λοιπόν είναι το μέρος μέσα στο οποίο γράφουμε το βασικό κομμάτι του κώδικα που επαναλαμβάνεται συνεχώς. 

Για παράδειγμα θέλουμε να κάνουμε ένα θερμόμετρο με LCD οθόνη που να μας δείχνει την θερμοκρασία σε βαθμούς Κελσίου.  Για αισθητήριο θα χρησιμοποιήσουμε το DS18B20 που είναι πολύ ακριβές στη μέτρηση του και δεν χρειάζεται καλιμπράρισμα. Οθόνη μπορούμε να βάλουμε μία LCD 16Χ2 (δηλαδή δύο γραμμών των 16 χαρακτήρων) που είναι από τις πιο φτηνές. Σε αυτό το σημείο δεν θα δώσω λεπτομέρειες της κατασκευής, για την οποία θα γράψω άλλο άρθρο, για να επικεντρωθούμε στη δομή του προγράμματος.  Αρχικά στην κορυφή του προγράμματος θα ενσωματώσουμε τις βιβλιοθήκες του αισθητηρίου και της οθόνης. Στη συνέχεια θα ορίσουμε σε ποιές εισόδους / εξόδους θα συνδέσουμε το αισθητήριο και την οθόνη. Αμέσως μετά θα ορίσουμε μια (ή περισσότερες) μεταβλητή,  για να κρατάει την τιμή της θερμοκρασίας. Αν θέλουμε να παίρνουμε περισσότερα στοιχεία από το θερμόμετρο μας π.χ. μέγιστη και ελάχιστη θερμοκρασία ημέρας θα ορίσουμε περισσότερες μεταβλητές που θα κρατάνε και αυτές τις τιμές. Στην συνέχεια στην Setup() θα αρχικοποιησουμε την οθόνη και το αισθητήριο. Εδώ μπορούμε αν θέλουμε να βάλουμε την οθόνη να δείχνει κάποιο εισαγωγικό ενημερωτικό μήνυμα για μία μόνο φορά μετά το άνοιγμα της τροφοδοσίας. Και τέλος θα γράψουμε το κομμάτι του κώδικα που θα επαναλαμβάνεται διαρκώς μέσα στην loop(). Εδώ θα βάλουμε το arduino να διαβάζει από το αισθητήριο την θερμοκρασία και να την τυπώνει στην οθόνη. Αυτή η διαδικασία θα επαναλαμβάνεται συνεχώς οπότε κάθε φορά που θα αλλάζει η θερμοκρασία στην οθόνη θα βλέπουμε την νέα τιμή και αυτό θα συνεχίζεται μέχρι να κλείσουμε την τροφοδοσία του arduino.

Το παράδειγμα μας είναι μια πολύ απλή κατασκευή αλλά μπορεί να αποτελέσει την βάση για να κάνουμε μια πιο σύνθετη κατασκευή. Βάζοντας επιπλέον αισθητήρια μπορούμε να κάνουμε ένα ερασιτεχνικό μετεωρολογίκο σταθμό, ή βάζοντας ρελέ σε κάποιες εξόδους του arduino μπορούμε να μετατρέψουμε το θερμόμετρο σε θερμοστάση. 

Η λίστα με τις δυνατότητες περιορίζεται μόνο από την φαντασία σας. 

Σύντομα θα γράψω ένα άρθρο με την υλοποίηση του θερμόμετρου στην πράξη για να το κατασκευασάσουμε παρέα και να παίξουμε με τις δυνατότητες επέκτασης του.




Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

Count down timer - χρονικό αντίστροφης μέτρησης

Μια απλή κατασκευή χρονομέτρου με αντίστροφη μέτρηση. Μπορεί να μετρήσει μέχρι 100 λεπτά με βήμα του ενός δευτερολέπτου. Είναι ιδανικό για ...