Arduino, ο βοηθός του Φυσικού στην τάξη.
Ο μικροελεγκτής Arduino με τους αισθητήρες που διαθέτει είναι ένας πρώτης τάξης συνεργάτης για την εκτέλεση πειραμάτων προς εξαγωγή συμπερασμάτων και επαλήθευση φυσικών νόμων.
• Αγοράζουμε και
εγκαθιστούμε τον εξοπλισμό.
• Πείραμα για τη μέτρηση
της ταχύτητας του ήχου από μαθητές Α΄ γυμνασίου ή Α΄ λυκείου.
• Πείραμα για τη μελέτη
της φθίνουσας ταλάντωσης από μαθητές Γ΄ λυκείου.
Αγοράζουμε ένα Arduino Uno. Αν είναι συμβατό (compatible) θα το βρείτε με κόστος λίγο κάτω από 7€, μαζί με το καλώδιο σύνδεσής του
στον υπολογιστή, αν και είναι μόνο 30cm.
Βέβαια κατάλληλα είναι
και τα καλώδια των εκτυπωτών.
Κατεβάζουμε
και εγκαθιστούμε στον υπολογιστή μας το περιβάλλον προγραμματισμού Arduino
IDE (Integrated Development Environment) από την
επίσημη ιστοσελίδα (http://arduino.cc/en/Main/Software).
Ανοίγουμε το περιβάλλον προγραμματισμού που εγκαταστήσαμε, με κλικ στο
εικονίδιο του Arduino.
v
Επιλέγουμε: Αρχείο –
Παραδείγματα – 01.Basics – Blink – Enter
v
Επιλέγουμε: Εργαλεία
– Πλακέτα: ¨Arduino Uno¨ - Enter
v
Επιλέγουμε: Εργαλεία
– Θύρα και σημειώνουμε ποιες COM χρησιμοποιεί
v
Κλείνουμε τα
Εργαλεία, συνδέουμε το Arduino με τον υπολογιστή και ξανά
v
Εργαλεία – Θύρα – COM (που προστέθηκε μετά τη σύνδεση) – Enter.
v
Κλικ στο οριζόντιο βελάκι της
δεύτερης γραμμής, οπότε κάνει μεταγλώττιση και ανέβασμα. Μόλις ολοκληρώσει θα
δούμε ένα LED στην πλακέτα να αναβοσβήνει.
Μπορούμε να επέμβουμε στις εντολές delay(1000); των τελευταίων γραμμών αλλάζοντας το
1000. Η πρώτη delay(1000); κρατάει το LED αναμμένο για ένα δευτερόλεπτο μιας και μετράει το χρόνο σε χιλιοστά του
δευτερόλεπτου και η δεύτερη το σβήνει για ένα δευτερόλεπτο. Βάζοντας στο πρώτο delay(2000); και στο δεύτερο delay(500); θα το ανάβει για δύο δευτερόλεπτα και θα
το σβήνει για μισό δευτερόλεπτο.
Δύο διευθύνσεις από τις πολλές στο youtube με επίδειξη σύνδεσης και δοκιμής του Arduino.
https://www.youtube.com/watch?v=fJWR7dBuc18 (23:49)
https://www.youtube.com/watch?v=_-g5sWQyROg (8:17)
Για το πείραμα που ακολουθεί, απαιτείται η αγορά ενός πομποδέκτη υπέρηχων
HC–SR04 (40.000 Hz) της τάξεως των 2€.
Διαθέτει τέσσερεις
ακροδέκτες – ακίδες που κουμπώνουν στις θύρες:
GND, 13, 12 και 11.
Προγραμματίζεται να
εκπέμπει ένα παλμό των 10 μικροδευτερόλεπτων, που αν συναντήσει εμπόδιο
ανακλάται και επιστρέφει διεγείροντας τον δέκτη και καταγράφεται η χρονική
διάρκεια από την εκπομπή μέχρι τη λήψη.
1.
Ανοίγουμε το
περιβάλλον προγραμματισμού Arduino IDE, αντιγράφουμε (copy) το παρακάτω πρόγραμμα και το επικολλούμε (paste) στο περιβάλλον.
2.
Στη συνέχεια κλικ
στο οριζόντιο βελάκι της δεύτερης γραμμής ώστε να μεταγλωττίσει το
πρόγραμμα σε κώδικα μηχανής και να το φορτώσει.
3.
Θα μας ζητήσει να
σώσουμε το πρόγραμμα με μια ονομασία, πράγμα που κάνουμε, ας πούμε την UltraSonicExperiment.
4. Μόλις ολοκληρωθεί η φόρτιση, κλικ στο φακό της ίδιας γραμμής, ανοίγει η σειριακή θύρα επικοινωνίας και κάθε τρία δευτερόλεπτα αναγράφει τη χρονική διάρκεια που χρειάστηκε ο παλμός να συναντήσει το εμπόδιο και να επιστρέψει.
Πρόγραμμα
//Ultrasonic
const
int vccPin = 11; //ακίδα τροφοδοσίας
const
int trigPin = 12; //ακίδα πομπού
const
int echoPin =
13; //ακίδα δέκτη
long duration; //μεταβλητή χρονικής διάρκειας
long distance; //μεταβλητή απόστασης
void setup() {
Serial.begin(9600); //ορισμός
σειριακής επικοινωνίας
pinMode(vccPin, OUTPUT); //ορισμός
τροφοδοσίας ως έξοδος
pinMode(trigPin, OUTPUT); //ορισμός
πομπού ως έξοδος
pinMode(echoPin, INPUT); //ορισμός
δέκτη ως είσοδος
digitalWrite(vccPin,
1); //τροφοδοσία
}
void loop() {
digitalWrite(trigPin,
LOW); //πομπός off
delayMicroseconds(2); //για 2 μικροδευτερόλεπτα
digitalWrite(trigPin,
HIGH); //πομπός on
delayMicroseconds(10); // για 10 μικροδευτερόλεπτα
digitalWrite(trigPin,
LOW); // πομπός off
duration = pulseIn(echoPin, HIGH);
//χρονική διάρκεια πήγαινε – έλα παλμού
distance
=
0.017*duration; //υπολογισμός απόστασης
Serial.print(duration); Serial.println(" microseconds ");
//εκτύπωση χρονικής //διάρκειας σε μικροδευτερόλεπτα
//Serial.print(distance); Serial.println(" cm");
//εκτύπωση απόστασης σε cm
delay(3000);
//καθυστέρηση
επανάληψης 3 δευτερόλεπτα
}
Όπου στο πρόγραμμα υπάρχει διπλή πλάγια γραμμή //
, κατά τη μεταγλώττιση σε κώδικα μηχανής, δε μεταφράζεται, αποτελούν σχόλια για
τον προγραμματιστή ή προς τον χρήστη.
Το πείραμα
Έτοιμοι
λοιπόν για πείραμα.
1. Κολλάμε κατά
μήκος του θρανίου με σελοτέιπ μια μετροταινία ενός μέτρου.
2. Τοποθετούμε
το Arduino με τον πομποδέκτη
στο μηδέν της μετροταινίας.
3. Τοποθετούμε το
εμπόδιο – ανακλαστήρα σε απόσταση 20 εκατοστά.
4. Καταγράφουμε σε
πίνακα τις μετρήσεις: απόσταση – χρόνος που διαβάζουμε
στην οθόνη.
5. Επαναλαμβάνουμε τα βήματα 3 και 4 για αποστάσεις 40, 60, 80 και 100 εκατοστά
x (m) |
2x (m) |
t (μs) |
t (s) |
v (m/s) |
0 |
0 |
0 |
0 |
------------------- |
0,2 |
0,4 |
|||
0,4 |
0,8 |
|||
0,6 |
1,2 |
|||
0,8 |
1,6 |
|||
1,0 |
2,0 |
|||
Μέσος όρος: |
Εδώ τελειώνουν οι μετρήσεις και αρχίζουν οι υπολογισμοί.
Ο χρόνος που αναγράφεται στην οθόνη, είναι σε μικροδευτερόλεπτα, οπότε στην τέταρτη στήλη καταγράφουμε το χρόνο της τρίτης στήλης διηρεμένο με
1 000 000 ώστε η χρονική διάρκεια
να είναι σε δευτερόλεπτα.
Στην πέμπτη στήλη γράφουμε το πηλίκο της δεύτερης στήλης (απόσταση 2x σε μέτρα) προς την τέταρτη στήλη (χρονική διάρκεια
σε δευτερόλεπτα), δηλαδή την ταχύτητα του ήχου στον
αέρα (v σε m/s).
Στο τελευταίο κουτάκι γράφουμε τη μέση τιμή της ταχύτητας του ήχου στον αέρα.
Μια δεύτερη μέθοδος υπολογισμού της ταχύτητας του ήχου στον αέρα, είναι
μέσω της γραφικής παράστασης των μετρήσεων.
Συμπληρώνουμε τη γραφική παράσταση με
κουκίδες που ανταποκρίνονται στα δεδομένα της δεύτερης, τέταρτης στήλης.
Χαράσσουμε την καλύτερη ευθεία που περνάει από το 0.
Η κλίση αυτής της ευθείας ταυτίζεται με την ταχύτητα του
ήχου στον αέρα.
Παράδειγμα μετρήσεων –
υπολογισμών
Εφαρμογή και προεκτάσεις:
Τώρα που υπολογίσαμε την
ταχύτητα του ήχου στον αέρα, έχουμε τη δυνατότητα να προγραμματίσουμε το Arduino ώστε να μετράει απευθείας την απόσταση.
Έστω ότι μετρήσαμε –
υπολογίσαμε την ταχύτητα του ήχου στον αέρα 356 m/s.
Τότε ισχύει:
Στην τέταρτη γραμμή από το τέλος, διορθώνουμε το
distance =
0.017*duration;
σε distance = 0.0178*duration;
Και από την προτελευταία γραμμή
//Serial.print(distance); Serial.println(" cm");
σβήνουμε τις δυο πλάγιες γραμμές // ώστε η μεταγλώττιση να την αναγνωρίσει και να την εκτελέσει, οπότε η οθόνη θα αναγράφει τη χρονική διάρκεια και την απόσταση σε κάθε γραμμή.
Ευκαιρία είναι να μετρήσουμε:
•
την απόσταση μεταξύ
πατώματος και οροφής
•
το ύψος μας
•
ή να επαληθεύσουμε
τους νόμους της ανάκλασης με την κατάλληλη πίστα.
Με μια μικρή επιβάρυνση της
τάξης των 10 €, προσθέτουμε μια μπαταρία (9V), καλώδια σύνδεσης και μια οθόνη υγρών
κρυστάλλων (LCDi2c) και ανεξαρτητοποιούμε τη συσκευή από τον
υπολογιστή.
οθόνη |
Arduino |
GND |
GND |
VCC |
5V |
SDA |
A4 |
SCL |
A5 |
Μόλις
συνδέσουμε τον πομποδέκτη υπέρηχων και την
οθόνη υγρών κρυστάλλων με το Arduino,
φορτώνουμε το παρακάτω πρόγραμμα από τον υπολογιστή και η οθόνη θα δείχνει το
χρόνο σε μικροδευτερόλεπτα. Αποσυνδέουμε το Arduino από τον υπολογιστή και
συνδέουμε τη μπαταρία των 9V, η
οθόνη ανάβει και εκτελούμε το πείραμα.
Πρόγραμμα για τη χρήση οθόνης LCDi2c, θα χρειαστεί να ενεργοποιήσουμε τη βιβλιοθήκη LiquidCrystal_I2C.h που θα βρούμε στο:
Σχέδιο - Συμπερίληψη βιβλιοθήκης - LiquidCrystal_I2C - Enter
ή την κατεβάζουμε από το διαδίκτυο και την ενεργοποιούμε με:
Σχέδιο - Συμπερίληψη βιβλιοθήκης - Προσθήκη Βιβλιοθήκης ZIP - Enter
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int vccPin = 11;
const int trigPin = 12;
const int echoPin = 13;
long duration;
long distance;
// micro symbol:
byte micro[] = {
B00000,
B00000,
B10010,
B10010,
B11110,
B10001,
B10000,
B10000
};
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
// Create a
custom character:
lcd.createChar(0, micro);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(vccPin, OUTPUT);
digitalWrite(vccPin,HIGH);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration =
pulseIn(echoPin, HIGH);
distance =
0.017 * duration;
Serial.print(duration);Serial.print(" ");
//Serial.println(distance);
lcd.clear();
lcd.print("dur: "); lcd.print(duration); lcd.print("
");lcd.write(0); lcd.print("s");
lcd.setCursor(0,1);
//
lcd.print("distance: "); lcd.print(distance); lcd.print("
"); lcd.print("cm");
delay(3000);
}
Πειραματική απόδειξη της ανάκλασης
Και κάτι για την Γ λυκείου
Στις φθίνουσες ταλαντώσεις με δύναμη απόσβεσης της μορφής F= –bv, η συνάρτηση y=f(t) είναι της μορφής:
Στην εικόνα, φαίνεται ο
ταλαντωτής (ελατήριο από το νόμο του Χουκ, μάζα 1 kg και δίσκος από χαρτόνι για αύξηση της απόσβεσης) και η συσκευή DbLab με τον αισθητήρα απόστασης, συνδεδεμένη με υπολογιστή. Η συσκευή DbLab έχει ρυθμιστεί να πάρει 2000 μετρήσεις με ρυθμό 25 μετρήσεις το
δευτερόλεπτο (80 s).
Στη συνέχεια εκτυπώνουμε
τη γραφική παράσταση, τη φωτοτυπούμε και τη μοιράζουμε στους μαθητές, να τη
μελετήσουν και να βρουν τη συνάρτηση που την εκφράζει.
Για να ελέγξουμε το
αποτέλεσμα, γράφουμε τη συνάρτηση στο GeoGebra και συγκρίνουμε τη
γραφική παράσταση με την πειραματική.
Μαθητές του σχολείου μας, εξηγούν τη φθίνουσα
ταλάντωση στο πρώτο Πανελλήνιο Μαθηματικό Μαθητικό Συνέδριο που έλαβε χώρα στην
ΑΣΠΑΙΤΕ το Δεκέμβριο 2018,
Στη φωτογραφία έχουμε
αντικαταστήσει το DbLab με το Arduino και τη συσκευή υπερήχων Ultrasonic.
Με μια μικρή αλλαγή στο
πρόγραμμα μας δίνει απευθείας τη γραφική παράσταση στην οθόνη του υπολογιστή
από όπου μπορούμε να την εκτυπώσουμε και να την επεξεργαστούμε.