Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 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
Προγραμματισμός 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
Ολοκληρωμένο Παράδειγμα
Ολοκληρωμένο Παράδειγμα (DEMO)
Εργαστήριο ενσωματωμένων συστημάτων Τέλος Παρουσίασης Εργαστήριο Αυτομάτου Ελέγχου