Διάρκεια: 3 ώρες
Συστήματα: Arduino και Raspberry Pi
Στόχοι:
- Καταγραφή και απεικόνιση δεδομένων σε πραγματικό χρόνο.
- Συνδυασμός Arduino για ανάγνωση δεδομένων και Raspberry Pi για επεξεργασία.
- Εξάσκηση σε σειριακή επικοινωνία και γραφική αναπαράσταση δεδομένων με Python.
Περιγραφή
Οι μαθητές θα κατασκευάσουν ένα σύστημα που χρησιμοποιεί έναν αισθητήρα συνδεδεμένο στο Arduino για να κάνει μια μέτρηση. Για παράδειγμα, μπορεί να μετρά τη θερμοκρασία χρησιμοποιώντας έναν αισθητήρα LM35 ή DHT11. Τα δεδομένα θα αποστέλλονται μέσω σειριακής επικοινωνίας στο Raspberry Pi, όπου θα προβάλλονται σε πραγματικό χρόνο σε διάγραμμα με τη χρήση Python (matplotlib).
Υλικά
- 1 Arduino Uno ή συμβατό.
- 1 Raspberry Pi (με προεγκατεστημένο Raspbian και Python libraries).
- 1 αισθητήρας (θερμοκρασίας, υγρασίας, φωτός, μαγνητικού πεδίου, κίνησης κλπ).
- Καλώδια σύνδεσης και breadboard.
- USB καλώδιο για σύνδεση Arduino – Raspberry Pi.
Βήματα Εργασίας
1. Σύνδεση και Προγραμματισμός του Arduino (1 ώρα)
- Συνδέστε τον αισθητήρα θερμοκρασίας στο Arduino:
- LM35:
- VCC → 5V,
- GND → GND,
- OUT → A0 (αναλογική είσοδος).
- DHT11:
- DATA → ψηφιακή είσοδος (π.χ., D2).
- LM35:
- Προγραμματίστε το Arduino να διαβάζει τη θερμοκρασία και να στέλνει τα δεδομένα μέσω του σειριακού port.
Παράδειγμα κώδικα (LM35):
const int sensorPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(sensorPin);
float temperature = (sensorValue * 5.0 / 1023.0) * 100; // Μετατροπή σε °C
Serial.println(temperature);
delay(1000);
}
2. Σύνδεση Arduino – Raspberry Pi (15 λεπτά)
- Συνδέστε το Arduino στο Raspberry Pi μέσω USB.
- Εγκαταστήστε το
pyserial
στο Raspberry Pi:
pip install pyserial
3. Προγραμματισμός του Raspberry Pi (1 ώρα και 15 λεπτά)
- Γράψτε ένα Python script που:
- Διαβάζει δεδομένα από το Arduino.
- Εμφανίζει τη θερμοκρασία στην οθόνη.
- Απεικονίζει τα δεδομένα σε πραγματικό χρόνο με χρήση
matplotlib
.
Ο παρακάτω κώδικας είναι ημιτελής και περιλαμβάνει:
- Την αρχική ρύθμιση της σειριακής επικοινωνίας.
- Τη βασική δομή για την καταγραφή και εμφάνιση δεδομένων.
Εσείς πρέπει να γράψετε τα τμήματα για:
- Την ανάγνωση και αποκωδικοποίηση δεδομένων από το Arduino.
- Την ενημέρωση της λίστας θερμοκρασιών και του γραφήματος.
- Την αποθήκευση των δεδομένων σε αρχείο
.csv
(προαιρετικά, για πιο προχωρημένους).
import serial
import matplotlib.pyplot as plt
import time
# Σύνδεση με Arduino
try:
arduino = serial.Serial('/dev/ttyUSB0', 9600)
time.sleep(2) # Χρόνος για να σταθεροποιηθεί η σύνδεση
print("Σύνδεση με Arduino επιτυχής!")
except:
print("Αποτυχία σύνδεσης με Arduino.")
exit()
# Αρχικοποίηση δεδομένων
temperatures = []
timestamps = []
# Ρύθμιση γραφήματος
plt.ion()
fig, ax = plt.subplots()
line, = ax.plot([], [], 'r-')
ax.set_xlim(0, 60)
ax.set_ylim(0, 50)
ax.set_xlabel('Χρόνος (δευτερόλεπτα)')
ax.set_ylabel('Θερμοκρασία (°C)')
start_time = time.time()
while True:
try:
# Συμπλήρωσε τον κώδικα εδώ για την ανάγνωση δεδομένων
# data = ...
# temp = ...
# Συμπλήρωσε τον κώδικα για να προσθέσεις δεδομένα στις λίστες
# temperatures.append(...)
# timestamps.append(...)
# Ενημέρωση γραφήματος
line.set_data(timestamps, temperatures)
ax.set_xlim(0, max(60, time.time() - start_time + 10))
ax.set_ylim(min(temperatures) - 5, max(temperatures) + 5)
plt.draw()
plt.pause(0.1)
except KeyboardInterrupt:
print("Τέλος μέτρησης")
# Προαιρετικά: Αποθήκευση δεδομένων σε αρχείο CSV
# with open('data.csv', 'w') as f:
# f.write(...)
break
4. Επεκτάσεις (Προαιρετικά)
- Αποθήκευση των δεδομένων σε αρχείο
.csv
. - Εφαρμογή φίλτρου για την εξομάλυνση των δεδομένων.