Προγραμματισμός Ρομπότ
Arduino & προγραμματισμός
INPUT vs. OUTPUT Για το μικροελεγκτή (microcontroller ). Inputs είναι ένα σήμα ή πληροφορία που φτάνει στον ελεγκτή. Output είναι κάθε σήμα που βγαίνει από τον ελεγκτή
INPUT vs. OUTPUT Για το μικροελεγκτή (microcontroller ). Inputs είναι ένα σήμα ή πληροφορία που φτάνει στον ελεγκτή. Output είναι κάθε σήμα που βγαίνει από τον ελεγκτή Παράδειγμα: διακόπτες, αισθητήρες Examples: LEDs, μότορες
Ρομποτικό τρένο 1. Προχώρησε Μπροστά 3 Κμ 2. Υρενάρισε 3. Άνοιξε Πόρτα 4. Κλείσε Πόρτα όταν δεν περνάει κανείς Προχώρησε πίσω 3 Κμ 5
Ρομποτικό τρένο 1. Προχώρησε Μπροστά 3 Κμ 2. Υρενάρισε 3. Άνοιξε Πόρτα 4. Κλείσε Πόρτα όταν δεν περνάει κανείς 5. Προχώρησε πίσω 3 Κμ 6
LOOP( ) Ρομποτικό τρένο { 1. Προχώρησε Ποξχώοηζε Μποξζηά Μπροστά 3 Κμ 2. Υρενάρισε Φοεμάοιζε 3. Άνοιξε Άμξινε Πόοηα Πόρτα 4. Κλείσε Κλείζε Πόοηα Πόρτα όηαμ όταν δεμ δεν πεομάει περνάει κανείς 5. Προχώρησε καμείπ πίσω 3 Κμ 6. 5. Υρενάρισε Ποξχώοηζε πίζω 3 Κμ 7. 6. Άνοιξε Φοεμάοιζε Πόρτα 8. 7. Κλείσε Άμξινε Πόοηα Πόρτα όταν δεν περνάει κανείς 8. Κλείζε Πόοηα όηαμ δεμ πεομάει καμείπ } 7
Ρομποτικό Βάψιμο 1. Έλεγχος για αντικείμενο 2. Ρίξε Μπογιά 3. Αναμονή 8
υναρτήσεις 1. Έλεγχος_αντικείμενου( ) 2. ΡίξεΜπογιά (κόκκινο) 3. Αναμονή (5) τύπος Ονομαυνάρτησης (παράμετροι) { εντολές; } 9
Σύποι Σύπος ακεραίου: int int value=5; Σύπος πραγματικού: float float value=5.4; 10
Do < while int CheckObject( ) { do { x=readsensor(); delay (50); }while (x!=1); return x; } 11
Προγραμματίζοντας Ρομποτ Η δράση και οι αποφάσεις του ρομποτ καθορίζουν τη συμπεριφορά του
Βασική δράση Απομονωμένες μικρες λειτουργίες που το ρομποτ κάνει αμέσως Βασική Δράση Θέσε το μότορα A σε κίνηση προς τα εμπρός
Απλή υμπεριφορά υνδυασμός βασικών δράσεων Μας επιτρέπει να περιγράψουμε μια πλήρη δράση του ρομποτ Θέσε το μότορ Α σε κίνηση Θέσε το μότορ C σε κίνηση Απλή συμπεριφορά Πήγαινε μπροστά μέχρι να χτυπήσεις ένα τοίχο και γύρνα Θέσε μότορ Α προς πίσω Θέσε μότορ C προς πίσω Επικοινώνησε με αισθητήρα στη Θύρα 1 ύγκρινε την τιμή του αισθητήρα με το 0. Κλείσε τους μότορες A & C
Πολύπλοκη υμπεριφορά Περιγράφει το σκοπό του ρομπότ Πάντα αποτελείται από απλές συμπεριφορές, που πρέπει να τις εντοπίσουμε Οδήγησε μπροστά ταμάτα σε τοίχο Πολύπλοκη Συμπεριφορά Διέτρεξε λαβύρινθο τρίψε δεξιά ταμάτα σε τοίχο τρίψε δεξιά Οδήγησε εμπρός ταμάτα σε τοίχο τρίψε Αριστερά Οδήγησε μπροστά
Διαγράμματα Ροής Οργανώνει οπτικά τα διάφορα βήματα σε προκαθορισμένα σχήματα Καλώς τρόπος να δουλέψουμε τα βήματα πριν την εγγραφή κώδικα Όχι Αρχή Οδήγησε μπροστά Τπάρχει τοίχος? Ναι ταμάτα Σέλος
Παραδείγματα Διαγράμματων Ροής Σι κάνουν; Φούσκωμα Λάστιχου No Αρχή Βάλε αέρα Επιθυμητή πίεση στο λάστιχο? Yes Σέλος Ξεκίνα όταν πιεστεί αισθητήρας πίεσης Start Πίεση στον αισθητήρα? Yes ξεκίνα μοτορ Σέλος No
Χευδοκώδικας Μεταξύ φυσική γλώσσας και κώδικα Περιγράφει τι κάνουν οι μότορες και οι κινητήρες και ορίζει απλές συμπεριφορές
Χευδοκώδικας 1. Κινήζος μπποζηά μέσπι να πιεζηεί ο αιζθηηήπαρ επαθήρ 2. Σηαμάηα όλοςρ ηοςρ μόηοπερ 3. Γύπνα για 1 sec 4. Σηαμάηα όλοςρ ηοςρ μόηοπερ 5. Σηπίτε δεξιά Πήγαινε μέχρι τοίχο και στρίψε δεξιά
Arduino
Arduino 21
Διάφοροι τύποι Arduinos Boarduino Kit DIY Arduino Arduino Uno Arduino LilyPad Arduino Mega 2560
Arduino ΠΟΤΕ!!!
Arduino Από ηιρ άκπερ!!!
Applications http://www.youtube.com/watch?v=8dynrqvf_be http://www.youtube.com/watch?v=mw gojdyyi https://www.youtube.com/watch?v=drcnccv_dve https://www.youtube.com/watch?v=oab_0qnfmic
Arduino Components
1.- Κατεβάστε και εγκαταστήστε το λογισμικό του Arduino http://arduino.cc/en/main/software
2.Settings: Tools Serial Port
3. Settings: Tools Board
Arduino Integrated Development Environment (IDE) Δύο απαραίτητες συναρτήσεις void setup() { // τρέχει 1 φορά } error & status messages void loop() { // επανάληψη }
4.- Ανοίξτε το προγραμμα Blink (πιθανώς να αλλάζει το menu σε νεώτερη έκδοση)
Κώδικας Περιοχή ενημέρωσης Status bar
Ας προγραμματίσουμε< Project Blink Πως θα ήταν σε ψευδοκώδικα; Turn LED ON Wait Turn LED OFF Wait Repeat
Code
5.- Verify/Compile 6.- Αφού γίνει μεταγλώτιση, δείτε τα μηνύματα στο Status bar
7.- Υορτώστε το 8.- Δείτε πάλι το Status bar
9.- Σοποθετήστε το LED Αναβοσβήνει!!!
Μέρη του προγράμματος
χόλια Σα σχόλια πάνε παντού
χόλια Σα σχόλια πάνε παντού Μπαίνουν με // ή /* και */
σχόλια
Βασικά digitalwrite() analogwrite() digitalread() if() statements / Boolean analogread()
3 εντολές.. pinmode(pin, INPUT/OUTPUT); πχ: pinmode(13, OUTPUT); digitalwrite(pin, HIGH/LOW); πχ: digitalwrite(13, HIGH); delay(time_ms); πχ: delay(2500); //wait 2.5 sec.
Σελεστές Σο ΙΟΝ = χρησιμοιποείται για να δώσει τιμή == ή να συγκρίνει τιμές
Σελεστές && είναι and είναι or
Boolean Σελεστές Τελεστής Περιγραφή ( ) == ( ) Είναι ίσο? ( )!= ( ) Δεν είναι ίσο? ( ) > ( ) Μεγαλύτερο από ( ) >= ( ) Μεγαλύτερο από ή ίσο ( ) < ( ) Μικρότερο από ( ) <= ( ) Μικρότερο από ή ίσο
Μεταβλητές Βασικοί τύπου Boolean Ακέραιοι Φαρακτήρες
Δήλωση μεταβλητών Boolean: boolean variablename; Ακέραιος: int variablename; Φαρακτήρας: char variablename;
Σύποι Μεταβλητών 8 bits 16 bits 32 bits byte char int unsigned int long unsigned long float
Ορισμός τιμής Boolean: flag= true; Ή flag= false; Ακέραιος: i= 32767; Ή i= -32768; Φαρακτήρας: mychar= A ;
Μεταβλητές Εμβέλεια
Setup Η setup συνάρτηση μπαίνει πριν τη συνάρτηση loop και είναι απαραίτητη σε όλα τα προγράμματα του Arduino
Setup Η κεφαλίδα δεν αλλάζει ποτέ!
Setup Η έξοδος δηλώνετε στη setup με τη συνάρτηση pinmode ΚΕΥΑΛΑΙΑ!!!
Setup Η σειριακή επικοινωνία αρχίζει στο setup
If ενηολή if (true ) { do this; }
If if (true ) { do this; }
Else else { do this; }
Εντολή if()
if() void loop() { int buttonstate = digitalread(5); if(buttonstate == LOW) { // do something } else { // do something else } } DIG INPUT
Επανάλητη loop For while
void loop ( ) { }
Η βαζική επανάλητη void loop ( ) { }
for (int count = 0; count<10; count++) { //εντολές; }
for (int count = 0; count<10; count++) { //εντολές; }
while ( count<10 ) { //εντολές; } Μοιάζει με for χωρίς μετρητή Πρέπει να τερματίζει
while ( digitalread(buttonpin)==1 ) { //εντολές; }
ημαντικές συναρτήσεις Serial.println(value); Εκτυπώνει την τιμή στον υπολογιστή σας pinmode(pin, mode); Ρυθμίζει ένα digital pin να διαβάσει (INPUT) ή να γράψει (OUTPUT) digitalread(pin); Διαβάζει μία τιμή (HIGH or LOW) από ένα pin για είσοδο digitalwrite(pin, value); Γράφει μια τιμή (HIGH or LOW) σε ένα pin για έξοδο
Παραδείγματα 69
Διακόπτες const int inputpin = 2; // choose the input pin void setup() { pinmode(inputpin, INPUT); // declare pushbutton as input } void loop(){ int val = digitalread(inputpin); // read input value }
Reading data from Arduino void setup() { Serial.begin(9600); } void serialtest() { int i; for(i=0; i<10; i++) Serial.println(i); }
Αισθητήρες παθητικών υπερήθρων
Αισθητήρες παθητικών υπερήθρων const int ledpin = 13; // pin for the LED const int inputpin = 2; // input pin (for the PIR sensor) void setup() { pinmode(ledpin, OUTPUT); // declare LED as output pinmode(inputpin, INPUT); // declare pushbutton as input } void loop(){ int val = digitalread(inputpin); // read input value if (val == HIGH) // check if the input is HIGH { digitalwrite(ledpin, HIGH); // turn LED on if motion delay(500); digitalwrite(ledpin, LOW); // turn LED off } }
Αισθητήρες υπερήφων Ο ping παλμός ήχου δημιουργείται όταν το επίπεδο του pingpin level γίνεται HIGH για 2 microseconds. Ο αισθητήρας τότε παράγει έναν παλμό που θα τερματίσει όταν επιστρέψει ο ήχος. Σο πλάτος του παλμού είναι ανάλογο της απόστασης που διένυσε ο ήχος Η ταχύτητα του ήχου είναι 340 m/sec η 29 μsec/cm Η απόσταση λοιπόν της διαδρομής είναι RoundTrip = microseconds / 29
Αισθητήρες υπερήφων const int pingpin = 5; const int ledpin = 13; // pin connected to LED void setup() { Serial.begin(9600); pinmode(ledpin, OUTPUT); } void loop() { int cm = ping(pingpin) ; Serial.println(cm); digitalwrite(ledpin, HIGH); delay(cm * 10 ); // each centimeter adds 10 milliseconds delay digitalwrite(ledpin, LOW); delay( cm * 10); }
Αισθητήρες υπερήφων int ping(int pingpin) { long duration, cm; pinmode(pingpin, OUTPUT); digitalwrite(pingpin, LOW); delaymicroseconds(2); digitalwrite(pingpin, HIGH); delaymicroseconds(5); digitalwrite(pingpin, LOW); pinmode(pingpin, INPUT); duration = pulsein(pingpin, HIGH); // convert the time into a distance cm = microsecondstocentimeters(duration); return cm ; } long microsecondstocentimeters(long microseconds) { // The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. return microseconds / 29 / 2; }
Audio tone(speakerpin, frequency, duration); // play the tone delay(duration); //wait for the tone to finish
Παράδειγμα Γράψτε ένα πρόγραμμα που παίζει μια νότα Λα (440 Hz) για 1 δευτερόλεπτο όταν ένας αισθητήρας κίνησης ανιχνεύει κίνηση.
Image created in Fritzing Άσκηση