Ειςαγωγι ςτο Arduino Εκπαιδευτήσ: Λουκήσ Αγγελίδησ
Τι είναι το Arduino To Arduino είναι ζνασ μικροελεγκτισ, προςαρμοςμζνοσ ςε μια πλακζτα και ζτοιμοσ προσ χριςθ. Μασ φώτιςεσ. Και τι είναι ζνασ μικροελεγκτήσ; Φανταςτείτε το μικροελεγκτι ςαν ζνα τςιπάκι που περιζχει μζςα του ζνα ολόκλθρο μικρό υπολογιςτι. Είναι ζνασ υπολογιςτισ ειδικοφ ςκοποφ: δεν κα τον χρθςιμοποιιςετε για να γράψετε ζνα κείμενο αλλά μπορείτε να τον προγραμματίςετε να ελζγχει άλλεσ ςυςκευζσ: να αναβοςβινει φωτάκια (LED) να περιςτρζφει κινθτιρεσ κλπ.
Που χρθςιμοποιείται Παντοφ γφρω μασ, χωρίσ ςυχνά να του δίνουμε ςθμαςία. Σχεδόν όλεσ οι θλεκτρονικζσ ςυςκευζσ που διακζτετε ζχουν τουλάχιςτον ζνα μζςα τουσ. Το ψυγείο ςασ, ο φοφρνοσ μικροκυμάτων, το κινθτό, θ τθλεόραςθ, το αυτοκίνθτο, τα ρομποτάκια κ.τ.λ. είναι γεμάτα μικροελεγκτζσ.
Σε τι διαφζρει από ζνα κανονικό υπολογιςτι Σε αντίκεςθ με τον υπολογιςτι που χρθςιμοποιοφμε για τισ κακθμερινζσ μασ εργαςίεσ, ζνασ μικροελεγκτισ ζχει τα παρακάτω χαρακτθριςτικά και διαφορζσ: Δεν διακζτει λειτουργικό ςφςτθμα. Δεν πρόκειται να βάλετε Windows ςε ζνα μικροελεγκτι! Τρζχει κάκε φορά ζνα και μοναδικό πρόγραμμα που γράφουμε εμείσ και κάνει μια ςυγκεκριμζνθ λειτουργία. Κάκε φορά που τον ενεργοποιοφμε αυτόματα αρχίηει να εκτελεί το πρόγραμμα που του βάλαμε πριν. Το πρόγραμμα αποκθκεφεται μόνιμα μζςα ςτο ίδιο το κφκλωμα. Οι μικροελεγκτζσ δεν διακζτουν ςκλθροφσ δίςκουσ αλλά flash μνιμθ (όπωσ το usb stick που ζχετε) και μια μικρι ποςότθτα μνιμθσ RAM για χριςθ από το πρόγραμμα.
Σε τι διαφζρει από ζνα κανονικό υπολογιςτι Οι μικροελεγκτζσ ςυνικωσ λειτουργοφν με ελάχιςτθ ενζργεια. Οι περιςςότεροι μποροφν να δουλζψουν για αρκετό διάςτθμα με μια μπαταρία ρολογιοφ. Πολλά μοντζλα διακζτουν κατάςταςθ χαμθλισ ενζργειασ και παραμζνουν ςχεδόν ςβθςτά αν δεν χρειάηεται να κάνουν κάτι. Οι μικροελεγκτζσ είναι ςυνικωσ πολφ φτθνότεροι από οποιοδιποτε υπολογιςτι. Διακζτουν ακροδζκτεσ που μποροφμε να χρθςιμοποιιςουμε ωσ ειςόδουσ για να ςυνδζςουμε αιςκθτιρεσ (π.χ. κερμοκραςίασ, διακόπτεσ, κλπ) και εξόδουσ που μποροφμε να ςυνδζςουμε μικροφσ θλεκτρικοφσ κινθτιρεσ, LED ι ακόμα και μικρζσ οκόνεσ.
Ζτοιμθ πλακζτα Arduino Δηλ. το Arduino είναι ζνασ μικροελεγκτήσ; Μικροελεγκτισ είναι μόνο το τςιπάκι. Αυτό από μόνο του δεν κα ιταν εφκολο να το κάνουμε κάτι: χρειαηόμαςτε ζνα τρόπο για να το προγραμματίςουμε (απαιτεί να το ςυνδζςουμε ςε ζνα κανονικό υπολογιςτι) και κάποιο εφκολο ςφςτθμα για να του ςυνδζςουμε ζξτρα εξαρτιματα (LED, κινθτιρεσ, διακόπτεσ, κλπ). Αν και κα μποροφςαμε να ξεκινιςουμε από το μθδζν για να τα φτιάξουμε όλα αυτά, είναι πολφ πιο εφκολο να αγοράςουμε ζνα ςφςτθμα που να μασ δίνει ζνα μικροελεγκτι ζτοιμο προσ χριςθ. Ζνα τζτοιο ςφςτθμα είναι το Arduino το οποίο χρθςιμοποιεί ςυνικωσ τουσ μικροελεγκτζσ AVR τθσ εταιρίασ Atmel. Το Arduino δθλαδι μασ παρζχεται ωσ πλακζτα ζτοιμθ για χριςθ.
Δθμοτικότθτα του Arduino Τελικά, γιατί είναι τόςο δημοφιλζσ το Arduino; Διότι ζρχεται μαηί με μιαν ανοικτι, δωρεάν και πλοφςια Βάςθ Γνϊςθσ. Το κφριο πλεονζκτθμά του Arduino ςε ςχζςθ με άλλουσ μικροελεγκτζσ είναι θ τεράςτια κοινότθτα που το υποςτθρίηει και θ οποία ζχει δθμιουργιςει, ςυντθρεί και επεκτείνει μια τεράςτια γνωςιακι βάςθ online. Η ςελίδα του http://arduino.cc περιζχει πάρα πολλζσ πλθροφορίεσ αλλά και φόρουμ επίλυςθσ προβλθμάτων. Ζτςι πολλά προβλιματα είναι ιδθ λυμζνα! Εμείσ μποροφμε να τα χρθςιμοποιιςουμε προςαρμόηοντασ τα ςτα δικά μασ δεδομζνα.
Πωσ μοιάηει το Arduino The Uno
Πωσ μοιάηει το Arduino The Mega
Πωσ μοιάηει το Arduino The Micro
Πωσ μοιάηει το Arduino The Nano
Πωσ μοιάηει το Arduino The Gemma
Πωσ μοιάηει το Arduino The LilyPad
Arduino UNO
Θφρεσ ειςόδου/εξόδου (Pins) Το Arduino Uno R3 ζχει 14 ψθφιακζσ κφρεσ ειςόδου ι εξόδου (digital input/outpit pins) και ζξι αναλογικζσ ειςόδουσ (analog input pins). Για ψθφιακι είςοδο, χρθςιμοποιοφμε τισ 14 ψθφιακζσ 0..13. Όταν δουλεφουν ψθφιακά, θ είςοδοσ μπορεί να είναι ι 0 ι 5V, με τον χαρακτθριςμό LOW ι HIGH. Για ψθφιακι ζξοδο, χρθςιμοποιοφμε τισ 14 ψθφιακζσ 0..13. Όταν δουλεφουν ψθφιακά, θ ζξοδοσ μπορεί να είναι 0 ι 5V, με τον χαρακτθριςμό LOW ι HIGH. Για αναλογικι είςοδο, δθλαδι να διαβάςουμε τιμζσ ρεφματοσ ςτο διάςτθμα 0 ζωσ 5V, χρθςιμοποιοφμε τισ ζξι αναλογικζσ κφρεσ A0 A5. Για αναλογικι ζξοδο, μποροφμε να χρθςιμοποιιςουμε τισ ζξι PWM ψθφιακζσ κφρεσ (3, 5, 6, 9, 10, 11), οι οποίεσ κα μασ δϊςουν ρεφμα εξόδου όποιασ τιμι κζλουμε ςτο διάςτθμα από 0 ζωσ 5V.
Επικοινωνία του Arduino με τον υπολογιςτι μασ Το Arduino διακζτει ςειριακό interface. Ο μικροελεγκτισ ATmega υποςτθρίηει ςειριακι επικοινωνία, τθν οποία το Arduino προωκεί μζςα από ζναν ελεγκτι Serial-over-USB ϊςτε να ςυνδζεται με τον υπολογιςτι μζςω USB. Η ςφνδεςθ αυτι χρθςιμοποιείται για τθν μεταφορά των προγραμμάτων που ςχεδιάηονται ςε υπολογιςτι ςτο Arduino αλλά και για αμφίδρομθ επικοινωνία του Arduino με τον υπολογιςτι μζςα από το πρόγραμμα τθν ϊρα που εκτελείται.
Είςοδοι Ζξοδοι Τα pin 0 και 1 λειτουργοφν ωσ RX και TX τθσ ςειριακισ όταν το πρόγραμμά μασ ενεργοποιεί τθν ςειριακι κφρα. Ζτςι, όταν το πρόγραμμά ςασ ςτζλνει δεδομζνα ςτθν ςειριακι, αυτά προωκοφνται και ςτθν κφρα USB μζςω του ελεγκτι Serial- Over-USB αλλά και ςτο pin 0 για να τα διαβάςει ενδεχομζνωσ μια άλλθ ςυςκευι (π.χ. ζνα δεφτερο Arduino ςτο δικό του pin 1). Αυτό φυςικά ςθμαίνει ότι αν ςτο πρόγραμμά ςασ ενεργοποιιςετε το ςειριακό interface, χάνετε 2 ψθφιακζσ ειςόδουσ/εξόδουσ. Τα pin 2 και 3 λειτουργοφν και ωσ εξωτερικά interrupt (interrupt 0 και 1 αντίςτοιχα). Με άλλα λόγια, μπορείτε να τα ρυκμίςετε μζςα από το πρόγραμμά ςασ ϊςτε να λειτουργοφν αποκλειςτικά ωσ ψθφιακζσ είςοδοι ςτισ οποίεσ όταν ςυμβαίνουν ςυγκεκριμζνεσ αλλαγζσ, θ κανονικι ροι του προγράμματοσ ςταματάει *άμεςα* και εκτελείται μια ςυγκεκριμζνθ ςυνάρτθςθ. Τα εξωτερικά interrupt είναι ιδιαίτερα χριςιμα ςε εφαρμογζσ που απαιτοφν ςυγχρονιςμό μεγάλθσ ακρίβειασ.
Είςοδοι Ζξοδοι Τα pin 3, 5, 6, 9, 10 και 11 μποροφν να λειτουργιςουν και ωσ αναλογικζσ ζξοδοι με το ςφςτθμα Διαμόρφωςθσ Πλάτουσ Παλμοφ γνωςτι με τθν ονομαςία PWM (Pulse Width Modulation). Ζτςι, μπορείτε να ςυνδζςετε λόγου χάρθ ζνα LED ςε κάποιο από αυτά τα pin και να ελζγξετε πλιρωσ τθν φωτεινότθτά του με 256 καταςτάςεισ από 0 (ςβθςτό) ωσ 255 (πλιρωσ αναμμζνο). Οι υπόλοιπζσ ψθφιακζσ ζξοδοι ζχουν απλά τθν δυνατότθτα αναμμζνο-ςβθςτό. Είναι ςθμαντικό να τονίςουμε ότι το PWM δεν είναι πραγματικά αναλογικό ςφςτθμα και ότι κζτοντασ ςτθν ζξοδο τθν τιμι 127, δεν ςθμαίνει ότι θ ζξοδοσ κα δίνει 2,5V αντί τθσ κανονικισ τιμισ των 5V, αλλά ότι κα δίνει ζνα παλμό που κα εναλλάςςεται με μεγάλθ ςυχνότθτα και για ίςουσ χρόνουσ μεταξφ των τιμϊν 0 και 5V.
Είςοδοι Ζξοδοι Στθν κάτω πλευρά του Arduino, με τθ ςιμανςθ ANALOG IN, κα βρείτε μια ακόμθ ςειρά από 6 pin, αρικμθμζνα από το A0 ωσ το A5. Το κακζνα από αυτά λειτουργεί ωσ αναλογικι είςοδοσ κάνοντασ χριςθ του ADC (Analog to Digital Converter) που είναι ενςωματωμζνο ςτον μικροελεγκτι. Για παράδειγμα, μπορείτε να τροφοδοτιςετε ζνα από αυτά με μια τάςθ τθν οποία μπορείτε να κυμάνετε με ζνα ποτενςιόμετρο από 0V ωσ ςτα 5V. Τότε, μζςα από το πρόγραμμά ςασ μπορείτε να «διαβάςετε» τθν τιμι του pin ωσ ζνα ακζραιο αρικμό ανάλυςθσ 10-bit, από 0 (όταν θ τάςθ ςτο pin είναι 0V) μζχρι 1023 (όταν θ τάςθ ςτο pin είναι 5V).
Είςοδοι Ζξοδοι Επιπρόςκετα, κακζνα από τα 6 αυτά pin, με κατάλλθλθ εντολι μζςα από το πρόγραμμα μπορεί να μετατραπεί ςε ψθφιακό pin ειςόδου/εξόδου όπωσ τα 14 που βρίςκονται ςτθν απζναντι πλευρά και τα οποία περιγράφθκαν πριν. Σε αυτι τθν περίπτωςθ τα pin μετονομάηονται από A0-A5 ςε 14-19 αντίςτοιχα.
Είςοδοι Ζξοδοι Η τάςθ αναφοράσ μπορεί να ρυκμιςτεί με μια εντολι ςτο 1.1V, ι ςε όποια τάςθ επικυμείτε (μεταξφ 2 και 5V) τροφοδοτϊντασ εξωτερικά με αυτι τθν τάςθ το pin με τθν ςιμανςθ AREF που βρίςκεται ςτθν απζναντι πλευρά τθσ πλακζτασ. Ζτςι, αν τροφοδοτιςετε το pin AREF με 3.3V και ςτθν ςυνζχεια δοκιμάςετε να διαβάςετε κάποιο pin αναλογικισ ειςόδου ςτο οποίο εφαρμόηετε τάςθ 1.65V, το Arduino κα ςασ επιςτρζψει τθν τιμι 512. AREF
Τροφοδοςία του Arduino Το Arduino μπορεί να τροφοδοτθκεί με ρεφμα είτε από τον υπολογιςτι μζςω τθσ ςφνδεςθσ USB, είτε από εξωτερικι τροφοδοςία που παρζχεται μζςω μιασ υποδοχισ φισ των 2.1mm (κετικόσ πόλοσ ςτο κζντρο). Για να μθν υπάρχουν προβλιματα, θ εξωτερικι τροφοδοςία πρζπει να είναι από 7 ωσ 12V και μπορεί να προζρχεται από ζνα τροφοδοτικό του εμπορίου, από μπαταρίεσ ι οποιαδιποτε άλλθ πθγι DC.
Τροφοδοςία του Arduino Δίπλα από τα pin αναλογικισ ειςόδου, υπάρχει μια ακόμα ςυςτοιχία από 6 pin με τθν ςιμανςθ POWER. Η λειτουργία του κακενόσ ζχει ωσ εξισ: Το πρϊτο, με τθν ζνδειξθ RESET, όταν γειωκεί (ςε οποιοδιποτε από τα 3 pin με τθν ζνδειξθ GND που υπάρχουν ςτο Arduino) ζχει ωσ αποτζλεςμα τθν επανεκκίνθςθ του Arduino. Το δεφτερο, με τθν ζνδειξθ 3.3V, μπορεί να τροφοδοτιςει εξαρτιματα με τάςθ 3.3V. Η τάςθ αυτι δεν προζρχεται από τθν εξωτερικι τροφοδοςία αλλά παράγεται από τον ελεγκτι Serial-over-USB και ζτςι θ μζγιςτθ ζνταςθ που μπορεί να παρζχει είναι μόλισ 50mA. Το τρίτο, με τθν ζνδειξθ 5V, μπορεί να τροφοδοτιςει τα εξαρτιματα με τάςθ 5V. Ανάλογα με τον τρόπο τροφοδοςίασ του ίδιου του Arduino, θ τάςθ αυτι προζρχεται είτε άμεςα από τθν κφρα USB (που οφτωσ ι άλλωσ λειτουργεί ςτα 5V), είτε από τθν εξωτερικι τροφοδοςία αφοφ αυτι περάςει από ζνα ρυκμιςτι τάςθσ για να τθν «φζρει» ςτα 5V.
Τροφοδοςία του Arduino Το τζταρτο και το πζμπτο pin, με τθν ζνδειξθ GND, είναι γειϊςεισ. Το ζκτο και τελευταίο pin, με τθν ζνδειξθ Vin ζχει διπλό ρόλο. Σε ςυνδυαςμό με το pin γείωςθσ δίπλα του, μπορεί να λειτουργιςει ωσ μζκοδοσ εξωτερικισ τροφοδοςίασ του Arduino, ςτθν περίπτωςθ που δεν ςασ βολεφει να χρθςιμοποιιςετε τθν υποδοχι του φισ των 2.1mm. Αν όμωσ ζχετε ιδθ ςυνδεδεμζνθ εξωτερικι τροφοδοςία μζςω του φισ, μπορείτε να χρθςιμοποιιςετε αυτό το pin για να τροφοδοτιςετε εξαρτιματα με τθν πλιρθ τάςθ τθσ εξωτερικισ τροφοδοςίασ (7-12V), πριν αυτι περάςει από τον ρυκμιςτι τάςθσ όπωσ γίνεται με το pin των 5V.
Ενςωματωμζνα κουμπιά και LED Πάνω ςτθν πλακζτα του Arduino υπάρχει ζνασ διακόπτθσ micro-switch και 4 μικροςκοπικά LED επιφανειακισ ςτιριξθσ. Η λειτουργία του διακόπτθ (που ζχει τθν ςιμανςθ RESET) και του ενόσ LED με τθν ςιμανςθ POWER είναι προφανισ. Τα δφο LED με τισ ςθμάνςεισ TX και RX, χρθςιμοποιοφνται ωσ ζνδειξθ λειτουργίασ του ςειριακοφ interface, κακϊσ ανάβουν όταν το Arduino ςτζλνει ι λαμβάνει (αντίςτοιχα) δεδομζνα μζςω USB. Σθμειϊςτε ότι τα LED αυτά ελζγχονται από τον ελεγκτι Serial-over-USB και ςυνεπϊσ δεν λειτουργοφν όταν θ ςειριακι επικοινωνία γίνεται αποκλειςτικά μζςω των ψθφιακϊν pin 0 και 1. Τζλοσ, υπάρχει το LED με τθν ςιμανςθ L. Η βαςικι δοκιμι λειτουργίασ του Arduino είναι να του ανακζςετε να αναβοςβινει ζνα LED. Για να μπορείτε να το κάνετε αυτό από τθν πρϊτθ ςτιγμι, χωρίσ να ςυνδζςετε τίποτα πάνω ςτο Arduino, οι καταςκευαςτζσ του ςκζφτθκαν να ενςωματϊςουν ζνα LED ςτθν πλακζτα, το οποίο ςφνδεςαν ςτο ψθφιακό pin 13. Ζτςι, ακόμα και αν δεν ζχετε ςυνδζςει τίποτα πάνω ςτο φυςικό pin 13, ανακζτοντάσ του τθν τιμι HIGH μζςα από το πρόγραμμά ςασ, κα ανάψει αυτό το ενςωματωμζνο LED.
Arduino IDE και ςφνδεςθ με τον υπολογιςτι Ότι χρειάηεςτε για τθν διαχείριςθ του Arduino από τον υπολογιςτι ςασ το παρζχει το Arduino IDE, τθν τελευταία ζκδοςθ του οποίου μπορείτε να κατεβάςετε από το επίςθμο site (https://www.arduino.cc). Το Arduino IDE είναι βαςιςμζνο ςε Java και ςυγκεκριμζνα παρζχει:
Arduino IDE και ςφνδεςθ με τον υπολογιςτι ζνα πρακτικό περιβάλλον για τθν ςυγγραφι των προγραμμάτων ςασ (τα οποία ονομάηονται sketch ςτθν ορολογία του Arduino) με ςυντακτικι χρωματικι ςιμανςθ,
Arduino IDE και ςφνδεςθ με τον υπολογιςτι ζνα πρακτικό περιβάλλον για τθν ςυγγραφι των προγραμμάτων ςασ (τα οποία ονομάηονται sketch ςτθν ορολογία του Arduino) με ςυντακτικι χρωματικι ςιμανςθ,
Arduino IDE και ςφνδεςθ με τον υπολογιςτι αρκετά ζτοιμα παραδείγματα,
Arduino IDE και ςφνδεςθ με τον υπολογιςτι μερικζσ ζτοιμεσ βιβλιοκικεσ για προζκταςθ τθσ γλϊςςασ και για να χειρίηεςτε εφκολα μζςα από τον κϊδικά ςασ τα εξαρτιματα που ςυνδζετε ςτο Arduino,
Arduino IDE και ςφνδεςθ με τον υπολογιςτι τον compiler για τθν μεταγλϊττιςθ των sketch ςασ,
ζνα serial monitor που παρακολουκεί τισ επικοινωνίεσ τθσ ςειριακισ (USB), αναλαμβάνει να ςτείλει αλφαρικμθτικά τθσ επιλογισ ςασ ςτο Arduino μζςω αυτισ και είναι ιδιαίτερα χριςιμο για τθν ρφκμιςθ των sketch ςασ, Arduino IDE και ςφνδεςθ με τον υπολογιςτι
Arduino IDE και ςφνδεςθ με τον υπολογιςτι και τθν επιλογι να ανεβάςετε το μεταγλωττιςμζνο sketch ςτο Arduino.
Δομι προγράμματοσ (sketch) Στθν γλϊςςα του Arduino κάκε πρόγραμμα αποτελείται από δφο βαςικζσ ρουτίνεσ ϊςτε να ζχει τθν γενικι δομι: / / Ενςωμάτωςη βιβλιοθηκών, δηλώςεισ μεταβλητών void setup() { / / } void loop() { / / } / / Υπόλοιπεσ ςυναρτήςεισ Η βαςικι ρουτίνα setup() εκτελείται μόνο μια φορά κατά τθν εκκίνθςθ του προγράμματοσ ενϊ θ βαςικι ρουτίνα loop() που περιζχει τον βαςικό κορμό του προγράμματοσ θ εκτζλεςι τθσ επαναλαμβάνεται ςυνζχεια ςαν ζνασ βρόγχοσ.
Γλϊςςα προγραμματιςμοφ Η γλϊςςα του Arduino βαςίηεται ςτθ γλϊςςα Wiring, μια παραλλαγι C/C++ για μικροελεγκτζσ αρχιτεκτονικισ AVR όπωσ ο ATmega, και υποςτθρίηει όλεσ τισ βαςικζσ δομζσ τθσ C κακϊσ και μερικά χαρακτθριςτικά τθσ C++. Πζρα από αυτζσ όμωσ, υπάρχουν κάποιεσ ειδικζσ εντολζσ, ςυναρτιςεισ και ςτακερζσ που βοθκοφν για τθν διαχείριςθ του ειδικοφ hardware του Arduino. Οι πιο ςθμαντικζσ από αυτζσ επεξθγοφνται ςτισ εργαςτθριακζσ αςκιςεισ που ακολουκοφν.
ΤΕΛΟΣ Εκπαιδευτήσ: Λουκήσ Αγγελίδησ