Arduino UNO R3

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

Σημείωση: Παρόλο που αυτός ο οδηγός εστιάζει στο pinout του Arduino Uno R3, είναι σημαντικό να αναφέρουμε ότι υπάρχει και μία νεότερη έκδοση, το Arduino Uno R4. Το R4 έρχεται με ορισμένες αξιοσημείωτες διαφορές, όπως ταχύτερο επεξεργαστή και διευρυμένες δυνατότητες.

Το Arduino Uno διαθέτει συνολικά 32 ακίδες. Το pinout έχει ως εξής:

Ας ρίξουμε μια πιο προσεκτική ματιά στα pins του Arduino και στις λειτουργίες τους, ένα‑ένα.

Το Arduino Uno διαθέτει 14 ψηφιακές ακίδες εισόδου/εξόδου, με ονομασίες D0 έως D13.

Αυτές οι ακίδες μπορούν να ρυθμιστούν είτε ως είσοδοι είτε ως έξοδοι. Όταν είναι είσοδοι, μπορούν να διαβάσουν ψηφιακά σήματα (HIGH ή LOW), ενώ όταν είναι έξοδοι μπορούν να στέλνουν ψηφιακά σήματα για να ελέγχουν εξωτερικά στοιχεία, όπως LEDs, κινητήρες και ρελέ.

Για να πεις στο Arduino αν ένα ψηφιακό pin θα είναι είσοδος ή έξοδος, χρησιμοποιείς μια ειδική συνάρτηση που ονομάζεται pinMode(). Για παράδειγμα, για να ορίσεις ένα pin ως είσοδο, χρησιμοποιείς τη συνάρτηση pinMode(pin, INPUT) και μετά τη συνάρτηση digitalRead(pin) για να διαβάσεις την κατάσταση του pin. Για να ορίσεις ένα pin ως έξοδο, χρησιμοποιείς τη συνάρτηση pinMode(pin, OUTPUT) και στη συνέχεια digitalWrite(pin, HIGH) ή digitalWrite(pin, LOW) για να το θέσεις σε HIGH ή LOW.

Λάβε υπόψη ότι αυτά τα pins λειτουργούν σε λογικό επίπεδο 5V και κάθε pin μπορεί να δώσει ή να απορροφήσει μέγιστο ρεύμα 20 mA.

Κάθε ψηφιακό pin στο Arduino Uno διαθέτει μια ενσωματωμένη αντίσταση pull‑up. Μπορείς να ενεργοποιήσεις αυτή την αντίσταση όταν χρησιμοποιείς ένα pin ως είσοδο, με τη χρήση της pinMode(pinNumber, INPUT_PULLUP). Αυτό βοηθά όταν δεν είναι συνδεδεμένο τίποτα στο pin εισόδου και με χωρίς αυτή την αντίσταση, το pin μπορεί να «αιωρείται» και να λαμβάνει τυχαίο ηλεκτρικό θόρυβο, κάνοντας δύσκολο για το Arduino να ξεχωρίσει αν είναι HIGH ή LOW. Η εσωτερική αντίσταση pull‑up τραβάει ασθενώς την τάση του pin προς HIGH, κρατώντας την σταθερή. Η τιμή αυτής της αντίστασης pull‑up δεν είναι ακριβής, αλλά συνήθως κυμαίνεται μεταξύ 20 kΩ και 50 kΩ.

Οι ακίδες interrupt είναι ειδικές ψηφιακές είσοδοι που μπορούν να πυροδοτήσουν ένα συγκεκριμένο block κώδικα (interrupt service routine ή ISR) όταν συμβεί κάποιο εξωτερικό γεγονός, όπως μια αλλαγή στη στάθμη τάσης (από HIGH σε LOW ή αντίστροφα). Αυτό επιτρέπει στο Arduino να ανταποκρίνεται άμεσα σε γεγονότα, χωρίς να χρειάζεται να ελέγχει συνεχώς την κατάσταση του pin στο κύριο loop του κώδικα.

Αυτές οι ακίδες μπορούν να ρυθμιστούν ώστε να πυροδοτούν διακοπή σε ανερχόμενο μέτωπο (rising), κατερχόμενο μέτωπο (falling) ή σε οποιαδήποτε αλλαγή σήματος (change). Αυτό είναι χρήσιμο για εργασίες που απαιτούν άμεση προσοχή, όπως η ανάγνωση ενός αισθητήρα που πρέπει να επεξεργαστεί γρήγορα.

Η συνάρτηση attachInterrupt(interrupt, ISR, mode) χρησιμοποιείται για να ρυθμίσει τα pins ως εξωτερικά interrupts, όπου interrupt είναι ο αριθμός του interrupt (0 για το pin 2, 1 για το pin 3), ISR είναι η ρουτίνα εξυπηρέτησης διακοπής (μια συνάρτηση που καλείται όταν συμβεί η διακοπή) και mode καθορίζει τη συνθήκη ενεργοποίησης (RISING, FALLING ή CHANGE).

Λάβε υπόψη ότι το Interrupt 0 (pin 2) έχει υψηλότερη προτεραιότητα από το Interrupt 1 (pin 3). Αν και τα δύο interrupts ενεργοποιηθούν ταυτόχρονα, το Interrupt 0 θα εξυπηρετηθεί πρώτο.

Οι ακίδες PWM στο Arduino Uno είναι ψηφιακά pins που μπορούν να προσομοιώσουν αναλογική έξοδο. Αυτό το πετυχαίνουν με το να εναλλάσσουν γρήγορα την έξοδο μεταξύ HIGH και LOW, δημιουργώντας ένα σήμα τετραγωνικού παλμού (square wave). Ο λόγος του χρόνου που το σήμα είναι «ON» προς την συνολική περίοδο ονομάζεται duty cycle. Με την αλλαγή του duty cycle, μπορείς να ελέγξεις τη μέση τάση που παρέχεται σε ένα συνδεδεμένο στοιχείο, επιτρέποντάς σου να χαμηλώνεις τη φωτεινότητα LED, να ελέγχεις τις στροφές κινητήρων, ή ακόμη και να δημιουργείς απλούς ηχητικούς τόνους.

Το Arduino Uno παρέχει 6 ψηφιακά pins με δυνατότητα PWM: D3, D5, D6, D9, D10 και D11. Αυτά τα pins είναι σημειωμένα με το σύμβολο της περισπωμένης (~) δίπλα στον αριθμό της ακίδας στην πλακέτα.

Η έξοδος PWM είναι σήμα 8‑bit, που σημαίνει ότι μπορεί να πάρει οποιαδήποτε τιμή από 0 έως 255. Αυτό αντιστοιχεί σε 256 διακριτά επίπεδα duty cycle.

Η συνάρτηση pinMode(pin, OUTPUT) χρησιμοποιείται για να ορίσει το επιθυμητό PWM pin ως έξοδο. Στη συνέχεια, η συνάρτηση analogWrite(pin, value) χρησιμοποιείται για να ορίσει την τιμή PWM σε ένα pin. Εδώ, pin είναι το pin με δυνατότητα PWM και value είναι ένας ακέραιος μεταξύ 0 και 255.

  • analogWrite(pin, 0): Θέτει το duty cycle στο 0% (πάντα off).
  • analogWrite(pin, 127): Θέτει το duty cycle περίπου στο 50%.
  • analogWrite(pin, 255): Θέτει το duty cycle στο 100% (πάντα on).

Η προεπιλεγμένη συχνότητα του σήματος PWM είναι περίπου 490 Hz σε όλα τα pins, εκτός από τα pins D5 και D6, τα οποία έχουν συχνότητα περίπου 980 Hz.

Τα PWM pins στο Arduino Uno είναι συνδεδεμένα με διαφορετικούς timers του μικροελεγκτή ATmega328P:

  • D3 και D11: Ελεγχόμενα από τον Timer 2.
  • D5 και D6: Ελεγχόμενα από τον Timer 0.
  • D9 και D10: Ελεγχόμενα από τον Timer 1.

Μπορείς να χειριστείς τους timers απευθείας για να αλλάξεις τη συχνότητα και τη λειτουργία του PWM, ρυθμίζοντας τα registers του μικροελεγκτή ATmega328P. Ωστόσο, κάνοντας αυτό επηρεάζεις επίσης συναρτήσεις όπως delay() και millis(), που βασίζονται στον Timer 0.

Οι αναλογικές ακίδες εισόδου στο Arduino Uno έχουν σχεδιαστεί για να διαβάζουν συνεχόμενα αναλογικά σήματα. Αυτά τα σήματα προέρχονται συχνά από αισθητήρες που μετρούν φυσικές ποσότητες όπως θερμοκρασία, ένταση φωτός ή πίεση. Το Arduino Uno μετατρέπει αυτά τα αναλογικά σήματα σε ψηφιακές τιμές με τη χρήση ενός μετατροπέα Αναλογικού σε Ψηφιακό (ADC), επιτρέποντάς σου να επεξεργαστείς και να αναλύσεις τα δεδομένα μέσα στον κώδικα του Arduino. Το Arduino Uno διαθέτει έξι αναλογικές ακίδες εισόδου, με ονομασίες A0 έως A5.
arduino adc pins

Ο ADC στο Arduino Uno έχει ανάλυση 10 bit, που σημαίνει ότι μπορεί να ανιχνεύσει 1024 (2^10) διακριτά αναλογικά επίπεδα. Με άλλα λόγια, μετατρέπει τάσεις εισόδου από 0 έως 5V (τάση λειτουργίας) σε ακέραιες τιμές από 0 έως 1023. Αυτό οδηγεί σε ανάλυση 5 volts / 1024 μονάδες, ή περίπου 0,0049 volts (4,9 mV) ανά μονάδα.

Αυτό το επίπεδο ακρίβειας είναι γενικά επαρκές για τα περισσότερα projects, αλλά για πιο ακριβείς μετρήσεις θα πρέπει να χρησιμοποιηθεί εξωτερικός ADC με μεγαλύτερη ανάλυση.

Για να διαβάσεις μια αναλογική τιμή από ένα pin, χρησιμοποιείς τη συνάρτηση analogRead(pin). Αυτή η συνάρτηση επιστρέφει μια ακέραια τιμή μεταξύ 0 και 1023, που αντιστοιχεί στην μετρούμενη τάση στο pin. Για παράδειγμα, αν το pin μετράει τάση 2,5V (δηλαδή τη μισή της μέγιστης τάσης 5V), η συνάρτηση analogRead() θα επιστρέψει περίπου 512.

Λάβε υπόψη ότι οι αναλογικές ακίδες (A0‑A5) μπορούν επίσης να χρησιμοποιηθούν ως ψηφιακά pins, αν χρειάζεσαι επιπλέον ψηφιακές εισόδους/εξόδους.

Από προεπιλογή, ο ADC μετράει τάσεις από 0V έως 5V, αλλά αυτό το εύρος μπορεί να προσαρμοστεί με τη χρήση του pin AREF και της συνάρτησης analogReference(type). Οι πιθανές τιμές για το type είναι:

  • DEFAULT: Χρησιμοποιεί την προεπιλεγμένη αναλογική τάση αναφοράς 5V.
  • INTERNAL: Χρησιμοποιεί μια εσωτερική τάση αναφοράς 1,1V.
  • EXTERNAL: Χρησιμοποιεί μια εξωτερική τάση αναφοράς που εφαρμόζεται στο pin AREF.

Το Arduino Uno διαθέτει δύο headers ICSP (In‑Circuit Serial Programming), καθένα με έξι ακίδες. Αυτά τα headers χρησιμοποιούνται για:

  • Προγραμματισμό του Arduino: Μπορείς να χρησιμοποιήσεις έναν εξωτερικό programmer (όπως έναν AVR ISP programmer ή ένα άλλο Arduino που λειτουργεί ως ISP) για να ανεβάσεις κώδικα στην πλακέτα απευθείας μέσω του ICSP header. Αυτό είναι ιδιαίτερα χρήσιμο αν ο bootloader έχει καταστραφεί ή αν θέλεις να γράψεις bootloader σε έναν νέο μικροελεγκτή.
  • Επικοινωνία με συσκευές SPI: Το header δίνει πρόσβαση στις ακίδες SPI (Serial Peripheral Interface): MISO (Master In Slave Out), MOSI (Master Out Slave In) και SCK (Serial Clock). Αυτές οι ακίδες μπορούν να χρησιμοποιηθούν για σύνδεση και επικοινωνία με συσκευές SPI, όπως modules καρτών SD ή εξωτερικούς αισθητήρες. Είναι σημαντικό να σημειωθεί ότι το pin Slave Select (SS), που είναι απαραίτητο για τον έλεγχο πολλαπλών συσκευών SPI, δεν περιλαμβάνεται στο header και πρέπει να οδηγείται χειροκίνητα.

Στο Arduino Uno, οι ακίδες I2C (SDA και SCL) είναι επίσης διαθέσιμες στις ειδικές ακίδες κοντά στο pin AREF. Αυτές οι ακίδες είναι απευθείας συνδεδεμένες με τα A4 και A5 στην πλακέτα, προσφέροντας έναν εναλλακτικό και συχνά πιο βολικό τρόπο σύνδεσης συσκευών I2C.
arduino i2c pins

Λάβε υπόψη ότι τόσο οι γραμμές SDA όσο και SCL απαιτούν συνήθως εξωτερικές αντιστάσεις pull‑up (συνήθως γύρω στα 4,7 kΩ) για αξιόπιστη επικοινωνία.

Το Arduino Uno διαθέτει ένα ειδικό σετ από pins για επικοινωνία SPI:

Η ακίδα 11, με την ονομασία MOSI (Master Out Slave In), χρησιμοποιείται από τη συσκευή master (Arduino) για να στείλει δεδομένα στη συσκευή slave.
Αντίστροφα, η ακίδα 12, με την ονομασία MISO (Master In Slave Out), χρησιμοποιείται από τη συσκευή slave για να στείλει δεδομένα πίσω στο Arduino.
Η ακίδα 13, με την ονομασία SCK (Serial Clock), μεταφέρει το ρολόι που συγχρονίζει τη μεταφορά δεδομένων μεταξύ master και slave.
Τέλος, η ακίδα 10, που συνήθως αντιστοιχεί στο SS (Slave Select), χρησιμοποιείται για να επιλέξεις τη συγκεκριμένη συσκευή slave με την οποία θέλεις να επικοινωνήσεις, όταν έχεις συνδέσει πολλαπλές συσκευές SPI.

Εκτός από τα τυπικά pins SPI, το Arduino Uno έχει επίσης ένα header ICSP (In‑Circuit Serial Programming) που παρέχει πρόσβαση στα ίδια σήματα SPI. Μπορείς να χρησιμοποιήσεις είτε τα κλασικά pins είτε το header ICSP για επικοινωνία SPI.

Το Arduino Uno διαθέτει μία μόνο διεπαφή υλικού UART, η οποία αντιστοιχεί στα ψηφιακά pins 0 (RX) και 1 (TX).

Αυτό το hardware UART χρησιμοποιείται επίσης για το ανέβασμα των sketches και την σειριακή επικοινωνία με τον υπολογιστή μέσω της σύνδεσης USB, γεγονός που σημαίνει ότι μοιράζεται με τον μετατροπέα USB‑σε‑σειριακό πάνω στην πλακέτα.

Αν χρειάζεσαι περισσότερα κανάλια UART, το Arduino Uno υποστηρίζει μια βιβλιοθήκη που ονομάζεται SoftwareSerial, η οποία επιτρέπει να δημιουργήσεις επιπλέον, υλοποιημένες σε λογισμικό, σειριακές συνδέσεις UART σε άλλα ψηφιακά pins. Ωστόσο, το SoftwareSerial έχει περιορισμούς σε ό,τι αφορά την ταχύτητα και την αξιοπιστία σε σύγκριση με το hardware UART.

Το Arduino Uno διαθέτει αρκετά pins τροφοδοσίας. Αυτά τα pins είναι απαραίτητα για την τροφοδοσία της ίδιας της πλακέτας καθώς και για την παροχή ισχύος σε συνδεδεμένα στοιχεία και αισθητήρες.
arduino power pins

VIN: Αυτό το pin σου επιτρέπει να παρέχεις τροφοδοσία στην πλακέτα Arduino χρησιμοποιώντας μια εξωτερική πηγή, όπως έναν μετασχηματιστή τοίχου ή ένα battery pack. Αυτό είναι χρήσιμο για αυτόνομα projects όπου η πλακέτα δεν είναι συνδεδεμένη σε υπολογιστή μέσω USB. Η τάση εισόδου για το VIN είναι τυπικά 7‑12 volts. Η τάση εισόδου που παρέχεται σε αυτό το pin ρυθμίζεται εσωτερικά σταθερά στα 5V από τον onboard σταθεροποιητή τάσης, ο οποίος στη συνέχεια τροφοδοτεί τον μικροελεγκτή και τα υπόλοιπα στοιχεία της πλακέτας. Το pin Vin είναι εσωτερικά συνδεδεμένο με τον θετικό πόλο της υποδοχής DC. Αυτό σημαίνει ότι όταν παρέχεις τάση από την υποδοχή DC, αυτή είναι διαθέσιμη και μέσω του pin Vin.

5V: Αυτό το pin παρέχει σταθεροποιημένη τάση 5V από τον onboard σταθεροποιητή. Μπορείς να χρησιμοποιήσεις αυτό το pin για να τροφοδοτήσεις διάφορα στοιχεία και αισθητήρες που απαιτούν σταθερή τροφοδοσία 5V. Το pin 5V μπορεί να παρέχει μέγιστο ρεύμα 500 mA αν τροφοδοτείς το Arduino Uno μέσω καλωδίου USB. Ο σταθεροποιητής τάσης είναι τεχνικά σχεδιασμένος για έως 800 mA, αλλά λόγω θεμάτων διάχυσης θερμότητας δεν θα πρέπει να ξεπερνάς τα 400‑500 mA. Αν το project σου απαιτεί περισσότερη ισχύ από όση μπορεί να παρέχει με ασφάλεια το pin 5V, θα χρειαστεί να χρησιμοποιήσεις εξωτερική πηγή τροφοδοσίας.

3.3V: Αυτό το pin παρέχει σταθεροποιημένη τάση 3,3V, χρήσιμη για στοιχεία που λειτουργούν σε χαμηλότερες τάσεις. Πρόσεξε να μη ζητάς υπερβολικό ρεύμα από αυτό το pin, καθώς έχει περιορισμένη δυνατότητα περίπου 50 mA. Αξίζει να σημειωθεί ότι ο ρυθμιστής 3,3V είναι συνδεδεμένος στην έξοδο του ρυθμιστή 5V. Η άντληση ρεύματος από τον ρυθμιστή 3,3V θα προκαλέσει διάχυση θερμότητας τόσο στον ρυθμιστή 3,3V όσο και στον ρυθμιστή 5V. Αυτό σημαίνει ότι αν συνδέσεις μία συσκευή 3,3V στο pin 3,3V, περιορίζεις επίσης το μέγιστο ρεύμα που μπορείς να χρησιμοποιήσεις για modules 5V που είναι συνδεδεμένα στο pin 5V.

GND: Αυτό το pin αντιπροσωπεύει το κοινό σημείο αναφοράς γείωσης για όλες τις ηλεκτρικές συνδέσεις στο Arduino. Είναι απαραίτητο να συνδέεις τις γειώσεις (ground) των εξωτερικών σου στοιχείων σε αυτό το pin για να ολοκληρώνεται το ηλεκτρικό κύκλωμα.

D13: Σε αυτή την ακίδα είναι συνδεδεμένο ένα ενσωματωμένο LED. Ανάβει όταν η ακίδα τίθεται σε HIGH και σβήνει όταν τίθεται σε LOW. Αυτό την κάνει πολύ βολική για debugging ή για σήμανση της κατάστασης ενός project. Αν χρησιμοποιήσεις το D13 για άλλους σκοπούς πέρα από τον έλεγχο του LED, θυμήσου ότι το ενσωματωμένο LED θα ανταποκρίνεται επίσης στις αλλαγές κατάστασης της ακίδας. Αυτό μπορεί να σε μπερδέψει αν δεν γνωρίζεις τη σύνδεση.

IOREF: προέρχεται από το Input/Output Reference Voltage. Αυτό το pin παρέχει μία τάση αναφοράς που δείχνει την τάση λειτουργίας της πλακέτας Arduino. Στην περίπτωση του Arduino UNO, το IOREF pin δίνει τάση 5V. Αυτό το pin προορίζεται κυρίως για χρήση από επεκτάσεις (shields). Όταν ένα shield είναι σωστά σχεδιασμένο, μπορεί να διαβάσει την τάση στο IOREF pin για να προσδιορίσει την τάση λειτουργίας του Arduino. Αυτή η πληροφορία επιτρέπει στο shield να προσαρμόσει τα δικά του επίπεδα τάσης ή να ενεργοποιήσει μεταφραστές τάσης, εξασφαλίζοντας συμβατότητα και αποφεύγοντας πιθανές βλάβες λόγω ασυμβατότητας τάσεων. Λάβε υπόψη ότι το IOREF pin δεν προορίζεται για να χρησιμοποιείται ως πηγή τροφοδοσίας για εξωτερικά στοιχεία. Αν το κάνεις, μπορεί να προκληθεί βλάβη στην πλακέτα Arduino.

RESET: Η ακίδα RESET χρησιμοποιείται για να γίνει reset στον μικροελεγκτή του Arduino UNO, ουσιαστικά επανεκκινώντας το πρόγραμμα που τρέχει σε αυτόν. Το pin RESET είναι ενεργό σε λογικό LOW, που σημαίνει ότι όταν τραβιέται σε LOW (συνδέεται στη γείωση), ο μικροελεγκτής κάνει reset. Συνήθως υπάρχει μια εσωτερική αντίσταση pull‑up που κρατάει το RESET pin σε HIGH από προεπιλογή. Μπορείς να κάνεις reset στο Arduino προγραμματιστικά, συνδέοντας το RESET pin σε μια ψηφιακή ακίδα εξόδου και φέρνοντάς το σε LOW με digitalWrite(RESET_PIN, LOW) και μετά ξανά σε HIGH. Εναλλακτικά, μπορείς να συνδέσεις έναν εξωτερικό διακόπτη ή μία συσκευή σε αυτό το pin. Όταν ο διακόπτης κλείσει ή η συσκευή στείλει σήμα LOW, το Arduino θα κάνει reset.