Ρομπότ 4WD
Ρομπότ 4WD v1.5 · Καλωδίωση
ESP32-CAM · L298N · 4 μοτέρ TT · HW-468 (5V 5A) · DFPlayer Pro · ενισχυτής DFR0119 · ηχείο 4Ω · 3×18650 · 4 WAGO. Πάτα πάνω σε ένα καλώδιο ή σε μια γραμμή του πίνακα για να φωτιστεί από άκρη σε άκρη.
Διάγραμμα καλωδίωσης
- Με πολύμετρο: κανένα βραχυκύκλωμα μεταξύ WAGO A και WAGO B.
- Βγάλε την ESP32-CAM από τα Dupont, άναψε: στο Dupont του καλωδίου #11 μέτρα 5.0–5.2V ως προς το #12. Σβήσε.
- Βάλε την ESP32-CAM: το #11 πρέπει να είναι στο pin που γράφει 5V και το #12 στο GND ακριβώς δίπλα. ΠΟΤΕ στο 3V3 (απέναντι σειρά).
- Ο πυκνωτής C1 έχει τη λωρίδα (−) προς το GND.
- Πρώτη φορά: ρόδες στον αέρα.
Harness ακροδεκτών
Κάθε εξάρτημα και κάθε WAGO σαν «συνδετήρας» με τη λίστα των ακροδεκτών του. Οι γκρι ακροδέκτες μένουν ασύνδετοι. Οι αριθμοί είναι ίδιοι με τον πίνακα και το διάγραμμα.
Πίνακας 36 συνδέσεων
Πάτα μια γραμμή για να τη δεις στο διάγραμμα. «0.5mm²» = χοντρό κόκκινο/μαύρο καλώδιο ισχύος. «Dupont» = καλώδιο με θηλυκό ακροδέκτη· όπου καταλήγει σε WAGO, κόψε τον ακροδέκτη και γδάρε 11 mm.
| # | Χρώμα | Από | Προς | Καλώδιο | Σημείωση |
|---|---|---|---|---|---|
| 1 | κόκκινο | Θήκη 3×18650 + | Ασφάλεια 5A (προς μπαταρία) | 0.5mm² (22AWG) | χωρίς ασφάλεια: κατευθείαν στο IN του διακόπτη |
| 2 | κόκκινο | Ασφάλεια 5A (προς διακόπτη) | Διακόπτης ON/OFF IN | 0.5mm² (22AWG) | |
| 3 | κόκκινο | Διακόπτης ON/OFF OUT | WAGO A · θέση 1 | 0.5mm² (22AWG) | |
| 4 | κόκκινο | WAGO A · θέση 2 | L298N 12V | 0.5mm² (22AWG) | |
| 5 | κόκκινο | WAGO A · θέση 3 | HW-468 IN+ | 0.5mm² (22AWG) | |
| 6 | μαύρο | Θήκη 3×18650 − | WAGO B · θέση 1 | 0.5mm² (22AWG) | |
| 7 | μαύρο | WAGO B · θέση 3 | L298N GND | 0.5mm² (22AWG) | |
| 8 | μαύρο | WAGO B · θέση 2 | WAGO GND · θέση 4 | 0.5mm² (22AWG) | γέφυρα GND μπαταρίας → GND λογικής |
| 9 | μαύρο | HW-468 GND | WAGO GND · θέση 1 | 0.5mm² (22AWG) | |
| 10 | πορτοκαλί | HW-468 OUT+ | WAGO 5V · θέση 1 | 0.5mm² (22AWG) | |
| 11 | πορτοκαλί | WAGO 5V · θέση 5 | ESP32-CAM 5V | 0.5mm² με θηλυκό Dupont (crimp), όσο πιο κοντό | ⚠ 5V = το ΤΕΛΕΥΤΑΙΟ pin της σειράς με τα IO, στην άκρη ΜΑΚΡΙΑ από την κεραία (δίπλα στο AMS1117). ΠΟΤΕ στο 3V3 της απέναντι σειράς. Ο C1 κολλάει εδώ. |
| 12 | μαύρο | WAGO GND · θέση 5 | ESP32-CAM GND | 0.5mm² με θηλυκό Dupont (crimp), όσο πιο κοντό | ⚠ GND = το pin ΑΚΡΙΒΩΣ δίπλα στο 5V (2ο από την άκρη, ίδια σειρά). Ο C1 (και η R1) κολλάνε εδώ. |
| 13 | πορτοκαλί | WAGO 5V · θέση 4 | DFPlayer Pro VIN | Dupont | |
| 14 | μαύρο | WAGO GND · θέση 3 | DFPlayer Pro GND | Dupont | |
| 15 | πορτοκαλί | WAGO 5V · θέση 2 | Ενισχυτής VCC | Dupont | |
| 16 | μαύρο | WAGO GND · θέση 2 | Ενισχυτής GND | Dupont | |
| 17 | μπλε | ESP32-CAM IO14 | L298N IN1 | Dupont | |
| 18 | γαλάζιο | ESP32-CAM IO15 | L298N IN2 | Dupont | |
| 19 | κίτρινο | ESP32-CAM IO13 | L298N IN3 | Dupont | |
| 20 | λευκό | ESP32-CAM IO12 | L298N IN4 | Dupont | |
| 21 | πράσινο | ESP32-CAM IO2 | DFPlayer Pro RX | Dupont | αν αποτυγχάνει το upload, βγάλ' το προσωρινά |
| 22 | μωβ | DFPlayer Pro DACL | Ενισχυτής LIN | Dupont | μόνο αριστερό κανάλι |
| 23 | μωβ | Ενισχυτής L+ | Ηχείο + | Dupont | |
| 24 | μωβ | Ενισχυτής L− | Ηχείο − | Dupont | ποτέ στο GND |
| 25 | καφέ | L298N OUT1 | Μοτέρ αριστερό μπροστά + | 0.5mm² / καλώδιο μοτέρ | |
| 26 | καφέ | L298N OUT2 | Μοτέρ αριστερό μπροστά − | 0.5mm² / καλώδιο μοτέρ | |
| 27 | καφέ | L298N OUT1 | Μοτέρ αριστερό πίσω + | 0.5mm² / καλώδιο μοτέρ | ίδια βίδα με το #25 (παράλληλα) |
| 28 | καφέ | L298N OUT2 | Μοτέρ αριστερό πίσω − | 0.5mm² / καλώδιο μοτέρ | ίδια βίδα με το #26 (παράλληλα) |
| 29 | καφέ | L298N OUT3 | Μοτέρ δεξί μπροστά + | 0.5mm² / καλώδιο μοτέρ | |
| 30 | καφέ | L298N OUT4 | Μοτέρ δεξί μπροστά − | 0.5mm² / καλώδιο μοτέρ | |
| 31 | καφέ | L298N OUT3 | Μοτέρ δεξί πίσω + | 0.5mm² / καλώδιο μοτέρ | ίδια βίδα με το #29 (παράλληλα) |
| 32 | καφέ | L298N OUT4 | Μοτέρ δεξί πίσω − | 0.5mm² / καλώδιο μοτέρ | ίδια βίδα με το #30 (παράλληλα) |
| 33 | πόδι | Πυκνωτής C1 470–1000µF/16V · πόδι + (μακρύ) | ESP32-CAM 5V (κόλληση στο καλώδιο #11) | κόλληση | μακρύ πόδι (+) στο 5V |
| 34 | πόδι | Πυκνωτής C1 470–1000µF/16V · πόδι − (λωρίδα) | ESP32-CAM GND (κόλληση στο καλώδιο #12) | κόλληση | πλευρά με τη λωρίδα (−) στο GND |
| 35 | πόδι | Αντίσταση R1 10kΩ · πόδι 1 | ESP32-CAM IO12 (κόλληση στο καλώδιο #20) | κόλληση | προαιρετικό, συνιστάται προαιρετικό, συνιστάται |
| 36 | πόδι | Αντίσταση R1 10kΩ · πόδι 2 | ESP32-CAM GND (κόλληση στο καλώδιο #12) | κόλληση | προαιρετικό, συνιστάται προαιρετικό, συνιστάται |
Σημειώσεις και προειδοποιήσεις
Ασφάλεια μπαταρίας
Τροφοδοσία και γειώσεις
ESP32-CAM
Συμπτώματα
L298N και μοτέρ
MAX_DUTY πάνω από 170 χωρίς λόγο: τα μοτέρ ζεσταίνονται και τα γρανάζια φθείρονται.INVERT_LEFT/INVERT_RIGHT στο robot_config.h.Ήχος
Firmware: ανέβασμα και πρώτη χρήση
1. Arduino IDE
- Arduino IDE 2.x → File → Preferences → Additional boards manager URLs:
https://espressif.github.io/arduino-esp32/package_esp32_index.json - Tools → Board → Boards Manager → «esp32» της Espressif, έκδοση 3.x (δοκιμάστηκε η 3.3.6).
- Άνοιξε τον φάκελο
robot_firmware(τοrobot_firmware.inoμαζί με τα.h). - Στο
robot_config.hάλλαξε τουλάχιστον τον κωδικόAP_PASSWORD(8+ χαρακτήρες) και τοOTA_PASSWORD. - Ρυθμίσεις Tools:
- Board: AI Thinker ESP32-CAM (το PSRAM ενεργοποιείται αυτόματα με αυτή την πλακέτα· αν διαλέξεις «ESP32 Dev Module», βάλε PSRAM: Enabled)
- Partition Scheme: Minimal SPIFFS (1.9MB APP with OTA/128KB SPIFFS). Για να δουλέψει το OTA πρέπει να το διαλέξεις ΑΠΟ ΤΟ ΠΡΩΤΟ upload· η προεπιλογή «Huge APP» δεν έχει χώρο OTA (το firmware τότε γράφει προειδοποίηση στο Serial και απλώς δεν ενεργοποιεί το OTA).
- Upload Speed: αν το upload σταματά στη μέση, βάλε 115200.
- Port: η θύρα της βάσης MB (CH340).
2. Ανέβασμα με τη βάση ESP32-CAM-MB
- Σβήσε το ρομπότ. Βγάλε την ESP32-CAM από τα Dupont του ρομπότ και κούμπωσέ τη στη MB με την κάμερα προς τα πάνω, ταιριάζοντας τα γράμματα: το 5V/GND της ESP32-CAM πάνω στο 5V/GND της MB (στις περισσότερες MB, η άκρη με το microSD/5V είναι προς το USB). Οι δύο σειρές έχουν από 8 pin, άρα μπαίνει και ανάποδα: έλεγξε δύο φορές.
- Σύνδεσε USB στον υπολογιστή. Αν δεν εμφανίζεται θύρα, εγκατάστησε τον οδηγό CH340.
- Πάτα Upload. Αν κολλήσει στο «Connecting…», κράτα πατημένο το IO0 της MB, πάτα RST στην ESP32-CAM, άφησε το IO0.
- Άνοιξε τον Serial Monitor στα 115200 και πάτα RST (αν δεν δείχνει τίποτα, ξαναπάτα RST στην ESP32-CAM): θα δεις «Access Point "Robot-4WD"» και τη διεύθυνση
http://192.168.4.1. - Βγάλε το USB, βγάλε την ESP32-CAM από τη MB και ξαναβάλ' τη στα καλώδια του ρομπότ (5V/GND/IO στις σωστές θέσεις, δες τον πίνακα).
3. Επόμενες αναβαθμίσεις χωρίς MB (OTA)
Με το κινητό ή το laptop συνδεδεμένο στο Wi-Fi «Robot-4WD», στο Arduino IDE εμφανίζεται θύρα δικτύου robot4wd. Διάλεξέ τη και πάτα Upload (ζητά τον OTA_PASSWORD). Τα μοτέρ σταματούν αυτόματα κατά την αναβάθμιση.
4. Πρώτη εκκίνηση και σύνδεση κινητού
- Σήκωσε το ρομπότ ώστε οι ρόδες να μην ακουμπούν. Άναψε τον διακόπτη.
- Στο κινητό: Ρυθμίσεις → Wi-Fi → Robot-4WD, κωδικός από το
AP_PASSWORD. Αν το κινητό πει «χωρίς Internet», επίλεξε «παραμονή συνδεδεμένο». - Άνοιξε τον browser στο
http://192.168.4.1. Πάνω βλέπεις την κάμερα, από κάτω joystick, φως και ήχο. Η τελεία δίπλα στον τίτλο γίνεται πράσινη όταν υπάρχει σύνδεση. - Σπρώξε λίγο το joystick μπροστά: πρέπει να γυρίσουν και οι 4 ρόδες προς τα εμπρός. Αν μια πλευρά γυρίζει ανάποδα, άλλαξε
INVERT_LEFT/INVERT_RIGHT. Αν το δεξί/αριστερό είναι μπερδεμένα, αντάλλαξε τα ζεύγη OUT1/2 ↔ OUT3/4. - Αν χαθεί η σύνδεση για μισό δευτερόλεπτο, τα μοτέρ σταματούν μόνα τους.
Προαιρετικά, για σύνδεση στο Wi-Fi του σπιτιού, συμπλήρωσε STA_SSID/STA_PASSWORD: η IP φαίνεται στον Serial Monitor. Αν αποτύχει μέσα σε 10 s, γυρίζει σε Access Point.
5. Τραγούδια στο DFPlayer Pro
- Σύνδεσε το DFPlayer Pro με καλώδιο USB-C στον υπολογιστή (μπορεί να μείνει στη θέση του· καλό είναι το ρομπότ να είναι σβηστό). Εμφανίζεται σαν δίσκος USB 128MB.
- Αντέγραψε τα αρχεία στη ρίζα του δίσκου με ονόματα
01.mp3,02.mp3, … (με αυτή τη σειρά, ένα-ένα). Κατά προτίμηση mono, 128 kbps. - Το κουμπί «♪ 1» παίζει το 1ο αρχείο κ.ο.κ. Με
TRACK_BY_FILENAME 0(προεπιλογή) η αρίθμηση ακολουθεί τη σειρά αντιγραφής. Αν θες να παίζει ακριβώς με βάση το όνομα, βάλεTRACK_BY_FILENAME 1. ΤοTRACK_COUNTορίζει πόσα κουμπιά εμφανίζονται. - «Αφαίρεση με ασφάλεια» πριν βγάλεις το USB-C.
silence.mp3· (2) αντέγραψέ το στη ρίζα του δίσκου ΤΕΛΕΥΤΑΙΟ, μετά από όλα τα τραγούδια (αλλιώς μετακινούνται τα νούμερα των κουμπιών)· (3) στο robot_config.h βάλε DFP_STOP_ON_BOOT 1 και ξανανέβασε. Το ρομπότ παίζει τη σιωπή στην εκκίνηση και η μονάδα σταματά.DFP_DEFAULT_VOLUME (20). Σε κάθε άναμμα το ρομπότ ξαναστέλνει τις ρυθμίσεις (χωρίς φωνητικό μήνυμα εκκίνησης, ένα κομμάτι τη φορά).Τι κάνει το firmware
- Κάμερα MJPEG στη θύρα 81 (
/stream), σελίδα ελέγχου στη θύρα 80, έλεγχος μέσω WebSocket/ws(~20 μηνύματα/δευτ.) με εφεδρικό HTTP/control. - PWM 1 kHz, 8-bit στα IN1–IN4 (κανάλια LEDC 2–5), όριο 65%, ελάχιστο 30%, ομαλή επιτάχυνση, failsafe 500 ms.
- Φλας στο GPIO4 (κανάλι LEDC 6) με ρύθμιση φωτεινότητας.
- DFPlayer Pro μέσω εντολών AT στο GPIO2, 115200 baud.
Το διάγραμμα, το harness και ο πίνακας παράγονται από το ίδιο μοντέλο δεδομένων (tools/model.py) και ελέγχονται αυτόματα από το tools/check.py.
Η παραπάνω δήλωση προέρχεται από την αρχική πηγή. Τα tools/model.py και tools/check.py δεν παραδόθηκαν και ο έλεγχός τους δεν έχει εκτελεστεί.
Λήψεις και εικόνες αναφοράς
Λήψη του παρεχόμενου firmware (.zip) — περιλαμβάνει το robot_firmware.ino και τα 6 αρχεία .h. Άλλαξε τα AP_PASSWORD και OTA_PASSWORD πριν από τη χρήση, όπως περιγράφεται στον οδηγό.
Τα MP3 που περιγράφονται στον οδηγό δημιουργούνται ή αντιγράφονται από εσένα και δεν περιλαμβάνονται στις λήψεις.
Διαφορές ανάμεσα στον οδηγό και στο παρεχόμενο firmware
Ο οδηγός και τα δύο διαγράμματα περιγράφουν εξωτερικό ενισχυτή DFR0119. Στο ZIP, τα σχόλια του robot_config.h και η εντολή AT+AMP=ON του robot_audio.h αναφέρονται στον ενσωματωμένο ενισχυτή του DFPlayer Pro και σε ηχείο απευθείας στα L+/L− του. Οι δύο πηγές διατηρούνται όπως παραδόθηκαν· επιβεβαίωσε με τον συντάκτη ποια διάταξη χρησιμοποιείς.
Ο οδηγός αναφέρει επιστροφή σε Access Point σε 10 s, ενώ το παρεχόμενο robot_config.h ορίζει STA_TIMEOUT_MS 20000 (20 s). Η ένδειξη καλωδίων 0.5mm² (22AWG) διατηρείται αυτούσια και χρειάζεται επιβεβαίωση από τον συντάκτη.

