Εισαγωγή στο Arduino: Χειρισμός LED

dimitris | Δευ, 09/08/2014 - 14:03 | 15' | 2

Σε αυτό το εισαγωγικό άρθρο μαθαίνουμε τι είναι το Arduino, πως θα αρχίσουμε να ασχολούμαστε με αυτό και τι μπορούμε να κάνουμε, καθώς και το πως θα “γράψουμε” το πρώτο μας πρόγραμμα.

Του Δήμου Πούπο

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

Τι είναι το Arduino;

Το Arduino (εικόνα 1) είναι μια ελεύθερη πλατφόρμα με την οποίο μπορούμε να φτιάξουμε διάφορα υπολογιστικά συστήματα. Η σχεδίαση του υλικού και λογισμικού μέρους του Arduino είναι ελεύθερη και ανοιχτή προς όλους, πράγμα που σημαίνει πως οποιοσδήποτε μπορεί να κατασκευάσει την δική του πλακέτα Arduino ελεύθερα. Αυτό βέβαια δεν συνιστάται για αρχάριους χρήστες, γι' αυτό αγοράζουμε έτοιμες πλακέτες είτε από το Internet είτε από κάποιο μαγαζί ηλεκτρικών - ηλεκτρονικών ειδών.

1  To Arduino Uno!1  To Arduino Uno!

Στην πράξη, το Arduino βασίζεται σε μια απλή μητρική πλακέτα, με ενσωματωμένο μικροελεγκτή και εισόδους/εξόδους, η οποία μπορεί να προγραμματιστεί με τη γλώσσα Wiring, μια παραλλαγή της C++. Μπορεί να χρησιμοποιηθεί για ανάπτυξη διαδραστικών αντικειμένων, λαμβάνοντας δεδομένα από μια ποικιλία από διακόπτες ή αισθητήρες, ελέγχοντας φώτα, led, κινητήρες και διάφορες άλλες συσκευές. Οι εφαρμογές μπορεί να είναι αυτόνομες ή να επικοινωνούν με λογισμικό που τρέχει στον υπολογιστή σας.

Πλακέτες Arduino

Σε αυτό το άρθρο βασιστήκαμε στο Arduino Diecimila. Για αρχή όμως θα σας πρότεινα ένα Arduino Kit και πιο συγκεκριμένα το Arduino Starter Kit (ARDX). Μπορείτε επίσης να αγοράσετε μόνο την πλακέτα Arduino (π.χ. Την Arduino Uno). Οι αγορές γίνονται μέσω internet ή κάποιου καταστήματος ηλεκτρονικών-ηλεκτρικών ειδών στην περιοχή σας. Για περισσότερες πληροφορίες επισκεφτείτε το site του Arduino http://www.arduino.cc/ .

Γιατί Arduino;

Μερικοί από τους λόγους για να προτιμήσουμε το Arduino:

  1. Μεταφέρσιμο: τρέχει σε GNU/Linux, Mac OS X,Windows κ.λπ
  2. Φθηνό σε κόστος: από 15 έως 35 ευρώ
  3. Απλό και εύχρηστο προγραμματιστικό περιβάλλον
  4. Ελεύθερο Λογισμικό – Λογισμικό Ανοιχτού Κώδικα (GPL)
  5. Επεκτάσιμο: βιβλιοθήκες, εξωτερικό υλικό -εξαρτήματα,αισθητήρες κ.λπ
  6. Καλή υποστήριξη: κοινότητες,εγχειρίδια,βιβλία κ.λπ
  7. Συνδεσιμότητα με Python, Java, Perl, C/C++, Processing, Ruby κ.λπ

Το περιβάλλον ανάπτυξης

Το περιβάλλον ανάπτυξης (IDE) του Arduino είναι μια εφαρμογή, πολυπλατφορμική, γραμμένη σε Java και βασίζεται στο περιβάλλον της γλώσσας προγραμματισμού Processing (δείτε το άρθρο μας "Εισαγωγή στην Processing"). Μπορείτε να τo κατεβάσετε δωρεάν για οποιοδήποτε λειτουργικό από το site του Arduino (http://arduino.cc) Μερικές από τις βασικές λειτουργίες που μπορούμε να έχουμε διαθέσιμες, πάνω στο panel, είναι:

  • Έλεγχος του κώδικα για λάθη.
  • Τερματισμός της σειριακής κονσόλας.
  • Δημιουργία νέου έργου(sketch).
  • Προβολή των αποθηκευμένων έργων μας.
  • Αποθήκευση του έργου μας.
  • Εμφάνιση της σειριακής κοσνόλας καθώς και αποστολή-λήψη δεδομένων που στάλθηκαν μέσω αυτής.

Επίσης μπορούμε να κάνουμε ρυθμίσεις για να δηλώσουμε ποια πλακέτα Arduino έχουμε και επιλογή σειριακής θύρας. Για να το κάνουμε αυτό ακολουθούμε την διαδρομή στο μενού: Tools -> Board και επιλέγουμε την πλακέτα μας. Στη συνέχεια πηγαίνουμε Tools -> Serial Port και επιλέγουμε την θύρα που έχουμε συνδεδεμένο το Arduino. Μπορείτε να “παίξετε” παραπάνω με τις ρυθμίσεις στο File -> Preferences.

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

Ένα τυπικό πρόγραμμα Arduino αποτελείται από 2 βασικές συναρτήσεις (την setup() και την loop()) και έχει αυτή την μορφή (ότι ακολουθεί μετά τα “//” είναι σχόλια και στο πρόγραμμα είναι σαν να μην υπάρχουν, παραλείπονται):

//δήλωση μεταβλητών

void setup() {
	//εντολές αρχικοποίησης
}

void loop() {
	//κώδικας
}

Η συνάρτηση setup() τρέχει μόνο στη αρχή του προγράμματός μας και την χρησιμοποιούμε για να αρχικοποιήσουμε μεταβλητές και βιβλιοθήκες, να δηλώσουμε τα pin (αν χρησιμοποιούνται ως είσοδος ή έξοδος). Ό,τι βρίσκεται μέσα στην συνάρτηση loop() επαναλαμβάνεται συνεχώς μέχρι εμείς να το διακόψουμε.

Ψηφιακή Έξοδος

Κάθε πλακέτα arduino έχει κάποια ψηφιακά pin τα οποία μπορούμε να χρησιμοποιήσουμε το καθένα ξεχωριστά ως είσοδο ή έξοδο. Τα προγραμματίζουμε για τον σκοπό που θέλουμε, αρκεί να κάνουμε τις σωστές δηλώσεις στο κώδικα που θα φορτώσουμε στη πλακέτα arduino. Η έξοδος κάθε pin μπορεί να δίνει τις τιμές HIGH ή LOW. Δίνοντας την τιμή HIGH ενώνουμε το δυαδικό “1” και έχουμε τάση εξόδου 5V DC, ενώ LOW είναι το δυαδικό “0” και έχει τάση εξόδου 0V DC (ground).

Ας φτιάξουμε τώρα ένα προγραμματάκι το οποίο θα δίνει εντολή σε ένα led να ανάβει και να σβήνει σε χρονικά διαστήματα ενός δευτερολέπτου. Τα υλικά που θα χρειαστούμε είναι: 1x Breadboard, 1x led, 1x αντίσταση 220Ω (red-red-brown). Ο τρόπος με τον οποίο θα τα συνδέσουμε φαίνεται στην εικόνα 2.

2  Ο τρόπος σύνδεσης των εξαρτημάτων για την 1η μας εφαρμογή.

Ο κώδικας του προγράμματός μας είναι ο εξής:

int ledPin = 13; 
void setup(){ 
  	pinMode(ledPin, OUTPUT); 
} 
void loop(){ 
    	digitalWrite(ledPin, HIGH); 
    	delay(1000);  
    	digitalWrite(ledPin, LOW); 
    	delay(1000); 
}

Ας αναλύσουμε τώρα τον κώδικα του προγράμματος μας για να δούμε τι κάνει η κάθε σειρά του. Λοιπόν, στην πρώτη σειρά δηλώνουμε μια ακέραια μεταβλητή με το όνομα ledPin και τις δίνουμε την τιμή 13. Αυτό το κάνουμε για να μας διευκολύνει να θυμόμαστε σε ποιο pin συνδέσαμε το led μας (αφού το έχουμε συνδέσει στο pin 13). Ετσι, για να αναφερόμαστε στο συγκεκριμένο pin θα γράφουμε ledPin.

Στη συνάρτηση setup() χρησιμοποιούμε την εντολή pinMode() για να δηλώσουμε αν το pin 13 θα χρησιμοποιείται ως είσοδος(INPUT) ή ως έξοδος(OUTPUT).

Παρακάτω, στη συνάρτηση loop(), γράφουμε των κώδικα που θα εκτελείται συνεχώς στο πρόγραμμά μας. Η εντολή digitalWrite() δίνει την τιμή HIGH ή LOW στο pin που θα της δηλώσουμε μέσα στην παρένθεση. Η εντολή delay() κάνει παύση του προγράμματος μας για το χρονικό διάστημα που θα δηλώσουμε εμείς μέσα στην παρένθεση, σε microseconds (=ms->1000ms = 1sec). Οι αγκύλες ( {} ) δηλώνουν την αρχή και το τέλος μια συνάρτησης(π.χ. setup(){κώδικας εδώ....} ).

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

Ψηφιακή Είσοδος

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

Στην είσοδο (όπως και στην έξοδο) ένα pin μπορεί να δεχτεί τις τιμές HIGH (που μπορούμε να την πάρουμε από το pin 5V του Arduino) ή LOW (που μπορούμε να την πάρουμε από τα pin GND -ground, 0V-). Για να επιλέγουμε ανάμεσα στις τιμές 0V και 5V θα χρησιμοποιήσουμε έναν διακόπτη. Έτσι, στο παρακάτω παράδειγμα με την βοήθεια ενός διακόπτη θα δίνουμε εντολή σε ένα led να ανάβει για 1 δευτερόλεπτο. Τα υλικά που θα χρειαστούμε: 1 x breadboard,1 x led, 1 x αντίσταση 220Ω, 1 x διακόπτη tact switch, 1 x αντίσταση 10kΩ (red–black–orange).Οι συνδέσεις φαίνονται στην εικόνα 3.

3  Η συνδεσμολογία για την 2η μας εφαρμογή.

Ο κώδικας είναι παρακάτω:

int ledPin = 13; 
int inPin = 10; 
void setup(){ 
 	pinMode(ledPin, OUTPUT); 
  	pinMode(inPin, INPUT); 
} 
void loop(){ 
 	 if (digitalRead(inPin) == HIGH){ 
    		digitalWrite(ledPin, HIGH); 
    		delay(1000);  
    		digitalWrite(ledPin, LOW); 
    		delay(1000); 
  	}  
}

Ήδη γνωρίζετε τι κάνουν ακριβώς κάποιες γραμμές του κώδικά μας. Τώρα θα δούμε για την γραμμή στην οποία υπάρχει η συνθήκη if (digitalRead(inPin) == HIGH){}. Η εντολή digitalRead(inPin) ελέγχει την κατάσταση του pin10 και εξετάζει την τιμή που της δόθηκε. Αν πατήσουμε τον διακόπτη που βρίσκεται στο pin10 θα δώσουμε σε αυτόν την τιμή HIGH. Όταν αφήσουμε το διακόπτη, το pin10 γειώνεται και βρίσκεται στην κατάσταση LOW. Έτσι, μόλις το pin10 πάρει την τιμή HIGH εκτελείται ο κώδικας που βρίσκεται μέσα στο if(). Με απλά ελληνικά η εντολή λέει: αν(κάτι){τότε αυτό}.
 

Από εδώ και πέρα

Οι εφαρμογές,τα συστήματα που μπορούμε να φτιάξουμε δεν τελειώνουν σε ένα ledάκι που αναβοσβήνει. Όπως θα δείτε σε επόμενα άρθρα που θα δημοσιεύσουμε στο linuxinsider.gr, υπάρχουν άπειρες και καταπληκτικές ιδέες που μπορείτε να υλοποιήσετε με το Arduino.

Μπορείτε να κατασκευάσετε διάφορα συστήματα που θα αυτοματοποιούν κάποιες δουλειές σας, να διαχειρίζεστε άλλες συσκευές, αλλά και να ειδοποιήστε για διάφορα πράγματα από το Arduino στον υπολογιστή, στο mail ή ακόμα και στο κινητό σας τηλέφωνο. Μπορείτε να συνεχίσετε να επεκτείνετε τις γνώσεις σας σε αυτό από διάφορα βιβλία που κυκλοφορούν, από διάφορα sites και από την ιστοσελίδα του Arduino που τα περιλαμβάνει όλα. Καλή συνέχεια!

 

 

Κάρτα αναφοράς: Η γλώσσα του Arduino

Δομή προγράμματος:

setup(),loop() .

Δομές ελέγχου:

if,if...else,switch...case,for,while,do...while,break,continue,return,goto .

Περαιτέρω σύνταξη:

;, {}, (), [ ], ->, ., //, +, -, /* ... */, ? :, κ.λπ .

Αριθμητικοί τελεστές:

=, +, -, *, /, % .

Τελεστές σύγκρισης:

==, !=, <, >, <=, >= .

Σταθερές:

HIGH, LOW, INPUT, OUTPUT, true, false .

Τύποι δεδομένων:

void,boolean ,char,unsigned char ,byte,word ,int,unsigned int,long,unsigned long , float,double ,String (C++ κλάση) .

Ψηφιακή ε/ε:

pinMode(), digitalWrite(), digitalRead()

Αναλογική ε/ε:

analogRead(), analogWrite() - PWM

Χρόνος:

millis(), micros(), delay(), delayMicroseconds()

 

 

Ο συντάκτης του άρθρου:

Ο Δήμος, αν και μαθητής ακόμα, περνάει τον ελεύθερό του χρόνο μαθαίνοντας περισσότερα για το Linux, ελ/λακ και υπολογιστές.

 

Φόρουμ
Δώσε αστέρια!

MO: 5 (ψήφοι: 1)

Σχόλια

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