Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 2: Βασικός Προγραμματισμός Arduino (AVR) Εργαστήριο Αυτομάτου Ελέγχου
Η πλατφόρμα Arduino Microcontroller: ATmega328 Operating Voltage: 5V Digital I/O Pins: 14 (of which 6 provide PWM output) Analog Input Pins: 6 Flash Memory: SRAM: 32 KB (ATmega328) 2 KB (ATmega328) EEPROM: 1 KB (ATmega328) Clock Speed: 16 MHz
Θύρες εισόδων/εξόδων (I/O) Βασικές θύρες GPIO (General Purpose Input/Output) Οι AVR μικροελεγτές χαρακτηριστικά. και όχι μόνο Παράδειγματα: Είσοδος: Διακόπτης button Pin: Λογικό 0 Pin: Λογικό 1 Έξοδος: LED Σήμα Εισόδου Pin: Λογικό 0 Σήμα Εισόδου Pin: Λογικό 1 διαθέτουν pins με on-off
Θύρες εισόδων/εξόδων (I/O) Σειριακή θύρα (UART) Οι σειρακές θύρες χρησιμοποιούν το πρωτόκολλο επικοινωνίας UART για να μεταφέρονται τα δεδομένα ασύχρονα απο μία συσκευή σε μία άλλη και αντίστροφα.
Θύρες εισόδων/εξόδων (I/O) Ψηφιακόι Παλμοί (PWM) Οι θύρες PWM μπρούν να χρησιμοποιηθούν είτε ως είσοδοι, είτε ως έξοδοι. Ρυθμίζοντας το πλάτος του παλμού μπρούμε να δώσουμε ή να πάρουμε ουσιαστικά διαφορετικές τιμές σε ένα ψηφιακό σήμα. Παράδειγματα: Είσοδος: RPM Sensor Έξοδος: Servo Motor
Θύρες εισόδων/εξόδων (I/O) Διάυλος I²C Ο δίαυλος I²C είναι ένας σειριακός δίαυλος και χρησιμοποιείται για την σύνδεση περιφερειακών μικρής ταχύτητας. Χρησιμοποιεί μόνο δύο καλώδια, τα οποία είναι αμφίδρομης κατεύθυνσης: Τα SCL και SDA. Η γραμμή SCL είναι η γραμμή ρολογιού, ενώ η SDA είναι η γραμμή δεδομένων. Εγγραφή σε συσκευή Ανάγνωση απο συσκευή
Προγραμματισμός Arduino Η γλώσσα του Arduino βασίζεται στη γλώσσα Wiring. Υποστηρίζει όλες τις βασικές δομές της C καθώς και κάποιες της C++. Υπάρχουν έτοιμες βιβλιοθήκες για την επικοινωνία με συσκευές εισόδων/εξόδων. Ο χρήστης θα πρέπει να ορίσει δύο βασικές λειτουργίες για να κάνουν ένα πρόγραμμα κυκλικής εκτέλεσης: void setup() void loop() Xρησιμοποιεί το GNU toolchain και το AVR Libc για να μεταγλωττίζει προγράμματα.
Βασικές συναρτήσεις Ψηφιακές θύρες: pinmode(pin,mode) : Ορίζει την λειτουργία του pin (είσοδος/έξοδος) digitalwrite(pin,val): Γραφει την τιμή εξόδου του pin (LOW/HIGH) val = digitalread(pin): Διαβάζει την τιμή του pin Αναλογικές θύρες: analogwrite(pin,val): (PWM) Γραφει την τιμή % duty cycle του pin (0-255) val = analogread(pin): Διαβάζει την τιμή του pin (0-1023) Χρονιστές time = millis(): time = micros(): delay(val): Επιστρέφει τον χρόνο σε ms από τότε που άρχισε το πρόγραμμα Επισρέφει τον χρόνο σε μs από τότε που άρχισε το πρόγραμμα Κάνει πάυση το πρόγραμμα για val ms delaymicroseconds(val): Κάνει πάυση το πρόγραμμα για val μs
Βασικές συναρτήσεις Σειριακές θύρες / USB Με την σειριακή θύρα μπορείς να επικοινωνήσεις είτε με άλλες συσκευές που διαθέτουν σειριακές θύρες ή με τον υπολογιστή μεσω USB. Βασικές συναρτήσεις δομής: val = avaliable() : Επιστρέφει τον αριθμό των bytes που είναι διαθέσιμα στην θύρα begin(baudrate): Ξεκινάει/Ρυθμίζει την σειριακή θύρα. Συνήθως δίνουμε μόνο το baudrate print(val): Τυπώνει την τιμή val σε ASCII text println(val): Τυπώνει την τιμή val σε ASCII text και αλλάζει γραμμή ('\r') val = read(): Διαβάζει ένα byte απο την σειριακή readbytes(buffer,length): Διαβάζει length bytes απο την σειριακή και τα σώζει στον buffer.
Βασικές βιβλιοθήκες Servo Η βιβλιοθήκη Servo επιτρέπει τον έλεγχο σερβοκινητήρων από τον Arduino, μέσω σημάτων PWM. Βασικές συναρτήσεις δομής: attach(pin) : Αντιστοιχίζει ένα αντικείμενο servo σε μία PWM θύρα του Arduino write(degrees): Στρέφει τον άξονα του σερβοκινητήρα στις degree μοίρες
Βασικές βιβλιοθήκες Επικοινωνία με I2C (Wire, I2Cdev) Η βιβλιοθήκη Wire, η οποία περιλαμβάνεται στην βασική έκδοση του Arduino IDE, ενσωματώνει τις βασικές λειτουργίες επικοινωνίας με I2C περιφερειακές συσκευές. Βασικές συναρτήσεις δομής: begin()/begin(address): Συνδέει την συσκευή στον δίαυλο I2C ως master ή ως slave με διεύθυνση address. begintransmission(address): Ξεκινά την επικοινωνία μεταξύ master και του slave στη διεύθυνση address. endtransmission(address): Λήγει την τρέχουσα επικοινωνία. write(val): Στέλνει στον slave το περιεχόμενο της val (τιμή, string, array) requestfrom(address, quantity): Ζητά από τον slave στη διεύθυνση address απάντησ μήκους quantity val = read(): Διαβάζει ένα byte απο τον slave
Βασικές βιβλιοθήκες Επικοινωνία με I2C (Wire, I2Cdev) #2 Η βιβλιοθήκη I2Cdev δεν αποτελεί μέρος της επίσημης έκδοσης του Arduino IDE, όμως διευκολύνει σημαντικά την επικοινωνία με δημοφιλείς I2C συσκευές, παρέχοντας προεπιλεγμένες ρυθμίσεις. Καθώς δεν είναι επίσημη Arduino βιβλιοθήκη, χρειάζεται να αντιγράψουμε στο φάκελο libraries της εγκατάστασης του Arduino. την Μαζί με την I2Cdev, παρέχονται και έτοιμες, εξειδικευμένες βιβλιοθήκες που αφορούν συγκεκριμένες συσκευές (πχ την IMU MPU6050). Οι βιβλιοθήκες αυτές χρησιμοποιούν την I2Cdev για να παράσχουν έναν πολύ αφηρημένο και εύχρηστο τρόπο επικοινωνίας με την εκάστοτε συσκευή. Χρειάζεται να προσθέσουμε την βιβλιοθήκη της συσκευής που μας ενδιαφέρει στον φάκελο libraries
Ολοκληρωμένο Παράδειγμα
Εργαστήριο ενσωματωμένων συστημάτων Τέλος Παρουσίασης Εργαστήριο Αυτομάτου Ελέγχου