Το εργαστήριο αυτό είναι μέρος του Project που έχουν αναλάβει μαθητές και μαθήτριες του Maker Lab μας για την καταγραφή των διαδρομών της πόλης μας και την βαθμολόγηση τους για την ευκολία πρόσβασης σε καρότσια.
🔵 Mission 1: Τι είναι το GPS L76K;
Το L76K είναι ένα μικρό module που “πιάνει” δορυφόρους και βρίσκει:
- γεωγραφικό πλάτος (latitude)
- γεωγραφικό μήκος (longitude)
- ύψος
- ακρίβεια
- ώρα από δορυφόρους
- ταχύτητα (αν κινείται η συσκευή)
💡 Γιατί το χρειaζ;oμαστε σε αυτό το project
Για να βλέπουμε πού βρίσκεται η κατασκευή μας στον χώρο και να συσχετίζουμε δονήσεις και θέση (π.χ. σε ποιες περιοχές έχει πολλές λακκούβες).
🔵 Mission 2: Σύνδεση GPS με FireBeetle (UART)
Το L76K χρησιμοποιεί σειριακή επικοινωνία (UART).
🔧 Τα pins που θα χρησιμοποιήσουμε:
| GPS pin | FireBeetle pin | Τι κάνει |
|---|---|---|
| VCC | 3.3V ή 5V | ρεύμα στο GPS |
| GND | GND | γείωση |
| TX | D16 (RX2) | το GPS στέλνει δεδομένα στο ESP |
| RX | D17 (TX2) | το ESP στέλνει εντολές στο GPS |
| PPS | (δεν χρειάζεται) | pulse per second, δεν το χρησιμοποιούμε τώρα |
💡 Γιατί έτσι;
Σε UART, η TX (Transmit data) μιας συσκευής πάει στη RX (Recieve data) της άλλης (και το αντίστροφο).
Στο ESP32, η 2η σειριακή είναι στα:
- RX2 = D16
- TX2 = D17
🔵 Mission 3: Πρώτο πρόγραμμα για GPS – Έλεγχος σύνδεσης
Το πρώτο πρόγραμμα θα:
- ανοίξει τη Serial2 (την εξωτερική UART)
- θα διαβάσει ό,τι στέλνει το GPS
- θα τυπώσει τα “NMEA messages” στη Serial Monitor (είναι κάτι σαν “φράσεις δεδομένων” από δορυφόρους)
➤ Κώδικας: NMEA Reader
void setup() {
Serial.begin(115200); // Η οθόνη του υπολογιστή
Serial2.begin(9600, SERIAL_8N1, 16, 17);
// 9600 baud είναι το default του L76K
Serial.println("Ξεκινάμε αναμονή για GPS...");
}
void loop() {
while (Serial2.available()) {
char c = Serial2.read();
Serial.print(c);
}
}
Ανοίγουμε Serial Monitor → 115200 baud.
Θα δούμε γραμμές όπως:
$GNGGA,....*XX
$GNRMC,....*YY
$GNVTG,....*ZZ
💡 Γιατί βλέπουμε κωδικοποιημένα μηνύματα;
Είναι οι “προτάσεις” που στέλνει το GPS.
Με αυτές καταλαβαίνει το ESP “τι ώρα είναι” και “πού βρισκόμαστε”.
🔵 Mission 4: Πότε δουλεύει πραγματικά το GPS;
🟥 ΣΗΜΑΝΤΙΚΟ
Το GPS δεν πιάνει ποτέ σήμα μέσα στο σχολείο. Για να “δει” δορυφόρους:
- πρέπει να είστε έξω
- σε ανοιχτό ουρανό
- να μην είστε κάτω από δέντρα / μπαλκόνια / στέγαστρα
🟡 Cold Start (ξεκίνημα από το μηδέν)
Την πρώτη φορά που ανοίγει το GPS, χρειάζεται έως 1-3 λεπτά για να βρει δορυφόρους. Αυτό ονομάζεται cold start.
💡 Γιατί αργεί;
Γιατί πρέπει να “χαρτογραφήσει” ποιοι δορυφόροι είναι πάνω από εμάς.
🔵 Mission 5: Δοκιμή στην αυλή
📍 Τι κάνουμε:
- Παίρνουμε Laptop + FireBeetle + GPS έξω στην αυλή.
- Ανοίγουμε Serial Monitor.
- Περιμένουμε.
✔ Τι περιμένουμε να δούμε;
🔸 Πριν βρει δορυφόρους:
Θα βλέπουμε πολλά NMEA μηνύματα, αλλά:
- Οι γραμμές είναι άδειες ή έχουν 0.0000
- Στην πρόταση $GNGGA το “fix” είναι 0 (μηδέν)
- Στην $GNRMC γράφει “V” (void = χωρίς σήμα)
🔸 Όταν βρει δορυφόρους (GPS FIX):
- Η $GNGGA δείχνει fix = 1 (valid)
- Η $GNRMC γράφει “A” (active)
- Εμφανίζεται latitude και longitude
- Οι τιμές αλλάζουν όταν κινείστε
Αυτό σημαίνει:
🎉 Το GPS δουλεύει!
🔵 Mission 6: Λαμβάνουμε καθαρά δεδομένα (Latitude/Longitude)
Μόλις βεβαιωθούμε ότι το GPS “πιάνει”, περνάμε σε πρόγραμμα που βελτιώνει την ανάγνωση και εξάγει καθαρές συντεταγμένες.
Χρησιμοποιούμε απλή επεξεργασία NMEA:
#include <TinyGPSPlus.h>
TinyGPSPlus gps;
void setup() {
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, 16, 17);
Serial.println("Ψάχνουμε δορυφόρους...");
}
void loop() {
while (Serial2.available() > 0) {
gps.encode(Serial2.read());
}
if (gps.location.isValid()) {
Serial.print("Latitude: ");
Serial.println(gps.location.lat(), 6);
Serial.print("Longitude: ");
Serial.println(gps.location.lng(), 6);
Serial.println("-------------------");
} else {
Serial.println("Ακόμη δεν έχουμε σήμα GPS...");
}
delay(500);
}
💡 Γιατί TinyGPSPlus;
Γιατί μετατρέπει τα δύσκολα NMEA μηνύματα σε “καθαρά” νούμερα.
🔵 Mission 7: Τι μπορεί να πάει στραβά; (και πώς το διορθώνουμε)
🟥 Πρόβλημα 1: Δεν βλέπω τίποτα στη Serial Monitor
✔ Κλείνω όλα τα άλλα Serial (π.χ. Plotter)
✔ Βάζω baud: 115200
✔ Ξαναπατάω Reset
🟥 Πρόβλημα 2: Βλέπω NMEA μηνύματα αλλά χωρίς δεδομένα
✔ Αυτό είναι φυσιολογικό αν είμαστε μέσα
✔ Πηγαίνουμε έξω
✔ Περιμένουμε 1–2 λεπτά (cold start)
✔ Κρατάμε το GPS οριζόντιο για καλύτερο σήμα
🟥 Πρόβλημα 3: Δεν βρίσκει ποτέ δορυφόρους
✔ Μήπως είμαστε κοντά σε κτίρια/τοιχους;
✔ Δοκιμάζουμε πιο ανοιχτό χώρο
✔ Δοκιμάζουμε άλλη ώρα (σπάνιο αλλά συμβαίνει)
🟥 Πρόβλημα 4: Βλέπω περίεργα σύμβολα / ακαταλαβίστικα γράμματα
✔ Λάθος baud rate
– Το GPS έχει 9600
– Το Serial Monitor 115200
🟦 Mission 8: Extra Challenges
✔ Βρες τις συντεταγμένες της πόρτας του σχολείου
✔ Περπάτησε 20 μέτρα και δες πόσο άλλαξε η θέση
✔ Δες αν αυξάνεται η ταχύτητα όταν περπατάς γρήγορα
🟦 Τελικό σημείωμα
«Σήμερα καταφέραμε:
✓ να συνδέσουμε GPS με ESP32
✓ να διαβάσουμε NMEA μηνύματα
✓ να εντοπίσουμε δορυφόρους
✓ να πάρουμε πραγματικές συντεταγμένες στην αυλή του σχολείουΤώρα το σύστημα μπορεί να ξέρει πού βρίσκεται και πώς κινείται.
Στο επόμενο βήμα θα τα ενώσουμε όλα με τον αισθητήρα επιτάχυνσης.»

