Πίνακας περιεχομένων:

Τηλεχειριστήριο Hackable για Microcar ZenWheels: 7 Βήματα
Τηλεχειριστήριο Hackable για Microcar ZenWheels: 7 Βήματα

Βίντεο: Τηλεχειριστήριο Hackable για Microcar ZenWheels: 7 Βήματα

Βίντεο: Τηλεχειριστήριο Hackable για Microcar ZenWheels: 7 Βήματα
Βίντεο: Arduino remote control for ZenWheels microcar 2024, Ιούνιος
Anonim
Image
Image
Συνέλευση
Συνέλευση

Σε αυτό το σεμινάριο θα φτιάξουμε ένα προσαρμοσμένο τηλεχειριστήριο για το μικροκάρυκο ZenWheels. Το microcar ZenWheels είναι ένα παιχνίδι παιχνιδιού 5 εκατοστών που μπορεί να ελεγχθεί μέσω εφαρμογής Android ή Iphone. Θα σας δείξω πώς να αντιστρέψετε την εφαρμογή Android για να μάθετε σχετικά με το πρωτόκολλο επικοινωνίας και πώς μπορείτε να δημιουργήσετε ένα τηλεχειριστήριο χρησιμοποιώντας arduino και γυροσκόπιο.

Βήμα 1: Εξαρτήματα και εργαλεία

Μέρη:

1. Το μικροκίνητο ZenWheels

2. Arduino pro mini 328p

3. Breadboard

4. Γυροσκόπιο MPU6050

5. πηγή ενέργειας <= 5 v (λίγη μπαταρία που μπορούμε να συνδέσουμε στο ψωμί)

6. Καλώδια άλματος σχήματος U (προαιρετικά). Έχω χρησιμοποιήσει αυτά τα καλώδια jumper επειδή φαίνονται καλύτερα στο breadboard. Αντ 'αυτού, μπορούν να χρησιμοποιηθούν κανονικά καλώδια βραχυκυκλωτήρων

7. Μονάδα bluetooth HC-05 (με κουμπί για είσοδο σε λειτουργία AT)

Εργαλεία:

1. Προσαρμογέας USB σε σειριακό FTDI FT232RL για προγραμματισμό του Arduino pro mini

2. Arduino IDE

3. Τηλέφωνο Android

4. Android Studio [Προαιρετικό]

Βήμα 2: Αντίστροφη μηχανική της εφαρμογής ZenWheels Android [προαιρετικό]

Απαιτείται κάποια γνώση Java και Android για την κατανόηση αυτού του τμήματος.

Στόχος του έργου είναι ο έλεγχος του μικροκάρου χρησιμοποιώντας γυροσκόπιο. Για αυτό πρέπει να μάθουμε περισσότερα για την επικοινωνία bluetooth μεταξύ αυτού του παιχνιδιού και της εφαρμογής Android.

Σε αυτό το βήμα θα εξηγήσω πώς να αντιστρέψετε το πρωτόκολλο επικοινωνίας μεταξύ του microcar και της εφαρμογής Android. Αν θέλετε απλά να φτιάξετε το τηλεχειριστήριο αυτό το βήμα δεν είναι απαραίτητο. Ένας τρόπος για να ανακαλύψετε το πρωτόκολλο είναι να κοιτάξετε τον πηγαίο κώδικα. Χμμ αλλά αυτό δεν είναι απλό, οι εφαρμογές android συγκεντρώνονται και μπορεί κανείς να εγκαταστήσει το apk μέσω του google play.

Έφτιαξα λοιπόν έναν βασικό οδηγό για να το κάνω αυτό:

1. Κατεβάστε το APK. Ένα Android Package Kit (APK για συντομία) είναι η μορφή αρχείου πακέτου που χρησιμοποιείται από το λειτουργικό σύστημα Android για διανομή και εγκατάσταση εφαρμογών για κινητά

Πρώτα αναζητήστε την εφαρμογή στο google play store, στην περίπτωσή μας αναζητήστε "zenwheels" και θα λάβετε τον σύνδεσμο της εφαρμογής

Στη συνέχεια, αναζητήστε στο Google "online downloader apk" και χρησιμοποιήστε ένα για να κατεβάσετε το apk. Συνήθως θα ζητήσουν τον σύνδεσμο της εφαρμογής (αυτόν που έχουμε αποκτήσει νωρίτερα), στη συνέχεια θα πατήσουμε ένα κουμπί λήψης και θα το αποθηκεύσουμε στον υπολογιστή μας.

2. Αποσυμπιέσετε το APK. Ένας αποσυμπιεστής στην περίπτωσή μας είναι ένα εργαλείο που παίρνει το APK και παράγει πηγαίο κώδικα Java.

Η απλούστερη λύση είναι να χρησιμοποιήσετε έναν διαδικτυακό αποσυμπιεστή για να κάνετε τη δουλειά. Έχω κάνει αναζήτηση στο google για "online decompliler" και έχω επιλέξει https://www.javadecompilers.com/. Απλώς πρέπει να ανεβάσετε το APK που έχετε αποκτήσει νωρίτερα και

πατήστε το decompile. Στη συνέχεια, απλώς κατεβάζετε τις πηγές.

3. Προσπαθήστε να αντιστρέψετε τον μηχανικό που κοιτάζει τον κώδικα

Για να ανοίξετε το έργο χρειάζεστε έναν επεξεργαστή κειμένου ή καλύτερα ένα IDE (ολοκληρωμένο περιβάλλον ανάπτυξης). Το προεπιλεγμένο IDE για Android Projects είναι το Android Studio (https://developer.android.com/studio). Αφού εγκαταστήσετε το Android Studio, ανοίξτε το φάκελο έργου.

Επειδή το αυτοκίνητό μας ελέγχεται από bluetooth ξεκίνησα την αναζήτησή μου στον αποσυμπιεσμένο κώδικα με τη λέξη -κλειδί "bluetooth", από τα περιστατικά που βρήκα ότι "BluetoothSerialService" ήταν ο χειρισμός της επικοινωνίας. Εάν αυτή η κλάση χειρίζεται την επικοινωνία, τότε πρέπει να έχει μια μέθοδο εντολής αποστολής. Αποδεικνύεται ότι υπάρχει μία μέθοδος εγγραφής που στέλνει δεδομένα μέσω του καναλιού bluetooth:

public void write (byte out)

Αυτή είναι μια καλή αρχή, έψαξα για. η λογική βρίσκεται στους ελεγκτές: BaseController και StandardController.

Στο BaseController έχουμε την προετοιμασία της υπηρεσίας, καθώς και ορισμούς των καναλιών διεύθυνσης και γκαζιού, τα κανάλια είναι στην πραγματικότητα προθέματα εντολών για να καθορίσουν ότι θα ακολουθήσει κάποιος τύπος εντολής:

προστατευμένο ZenWheelsMicrocar microcar = νέο ZenWheelsMicrocar (αυτό, αυτό.btHandler);

προστατευμένες εξόδους ChannelOutput = {new TrimChannelOutput (ZenWheelsMicrocar. STEERING_CHANNEL), νέο TrimChannelOutput (ZenWheelsMicrocar. THROTTLE_CHANNEL)};

Στο StandardController το τιμόνι χειρίζεται:

λαϊκή κενή λαβή Steering (TouchEvent touchEvent) {

… This.microcar.setChannel (steeringOutput.channel, steeringOutput.resolveValue ()); }

Αναλύοντας τη μέθοδο, το κανάλι steeringOutput. έχει την τιμή 129 (κανάλι που χρησιμοποιείται για το τιμόνι) και το steeringOutput.resolveValue () μπορεί να έχει τιμή μεταξύ -90 και 90. Η τιμή του καναλιού (129) αποστέλλεται απευθείας και η τιμή διεύθυνσης τροποποιείται εφαρμόζοντας δυαδικές πράξεις:

private final int value_convert_out (int value) {

boolean negative = false? if (τιμή <0) {negative = f6D; } int value2 = value & 63; αν (αρνητικό) {τιμή επιστροφής2 | 64; } τιμή επιστροφής2; }

Υπάρχει μια παρόμοια μέθοδος στο StandardController που ονομάζεται

δημόσια κενή λαβήThrottle (TouchEvent touchEvent)

Βήμα 3: Συστατικά

Μέρη:

1. Arduino pro mini 328p 2 $

2. Breadboard

3. Γυροσκόπιο MPU6050 1,2 $

4. Ενότητα HC-05 master-slave 6 ακίδων 3 $

5. Μπαταρία 4 x AA με 4 μπαταρίες

6. Καλώδια άλματος σχήματος U (προαιρετικά). Έχω χρησιμοποιήσει αυτά τα καλώδια jumper επειδή φαίνονται καλύτερα στο breadboard και τα led είναι πιο ορατά με αυτόν τον τρόπο. Εάν δεν έχετε αυτά τα καλώδια, μπορείτε να τα αντικαταστήσετε με καλώδια dupont.

Οι παραπάνω τιμές λαμβάνονται από το eBay.

Εργαλεία:

1. Προσαρμογέας USB σε σειριακό FTDI FT232RL για τον προγραμματισμό του arduino pro mini

2. Arduino IDE

3. Android Studio (προαιρετικό αν θέλετε να ανατρέψετε μόνοι σας)

Βήμα 4: Συναρμολόγηση

Συνέλευση
Συνέλευση

Η συναρμολόγηση είναι πολύ απλή γιατί το κάνουμε σε ένα breadboard:)

- πρώτα τοποθετούμε τα εξαρτήματά μας στο breadboard: τον μικροελεγκτή, τη μονάδα bluetooth και το γυροσκόπιο

- συνδέστε τις ακίδες bluetooth RX και TX HC-05 με arduino 10 και 11 ακίδες. Το γυροσκόπιο SDA και SCL πρέπει να συνδέονται με τις ακίδες arduino A4 και A5

- συνδέστε τις ακίδες τροφοδοσίας στο bluetooth, το γυροσκόπιο και το arduino. οι καρφίτσες πρέπει να συνδέονται με το + και - στην πλευρά της σανίδας

- τελευταία σύνδεση τροφοδοσίας (μεταξύ 3,3V και 5V) στο breadboard, έχω χρησιμοποιήσει μια μικρή μπαταρία LiPo μιας κυψέλης, αλλά οποιαδήποτε θα είναι εφόσον είναι στην περιοχή ισχύος

Ελέγξτε τις παραπάνω εικόνες για περισσότερες λεπτομέρειες

Βήμα 5: Συνδέστε το Bluetooth HC-05 με το Microcar

Συνδέστε το Bluetooth HC-05 με το Microcar
Συνδέστε το Bluetooth HC-05 με το Microcar
Συνδέστε το Bluetooth HC-05 με το Microcar
Συνδέστε το Bluetooth HC-05 με το Microcar
Συνδέστε το Bluetooth HC-05 με το Microcar
Συνδέστε το Bluetooth HC-05 με το Microcar

Για αυτό θα χρειαστείτε ένα τηλέφωνο Android, τη μονάδα bluetooth HC-05 και τον σειριακό προσαρμογέα FTDI με καλώδια. Επίσης, θα χρησιμοποιούμε το Arduino IDE για να επικοινωνούμε με τη μονάδα bluetooth.

Πρώτα πρέπει να μάθουμε τη διεύθυνση bluetooth microcar:

- ενεργοποιήστε το bluetooth στο τηλέφωνό σας

- ενεργοποιήστε το αυτοκίνητο και μεταβείτε στην ενότητα bluetooth των ρυθμίσεών σας στο Android

- αναζητήστε νέες συσκευές και πρέπει να εμφανιστεί κάποια συσκευή που ονομάζεται "Microcar"

- ζεύγος με αυτήν τη συσκευή

- στη συνέχεια, για να εξαγάγετε το bluetooth MAC, έχω χρησιμοποιήσει αυτήν την εφαρμογή από το Google Play Serial Bluetooth Terminal

Αφού εγκαταστήσετε αυτήν την εφαρμογή, μεταβείτε στο μενού -> συσκευές και εκεί θα έχετε μια λίστα με όλες τις συζευγμένες συσκευές bluetooth. Μας ενδιαφέρει μόνο ο κωδικός παρακάτω, το ορυχείο "Microcar" είναι 00: 06: 66: 49: A0: 4B

Στη συνέχεια, συνδέστε τον προσαρμογέα FTDI στη μονάδα bluetooth. Πρώτα καρφίτσες VCC και GROUND και μετά FTDI RX σε bluetooth TX και FTDI TX σε bluetooth RX. Επίσης, θα πρέπει να υπάρχει μια καρφίτσα στη μονάδα bluetooth που θα πρέπει να είναι συνδεδεμένη στο VCC. Με αυτόν τον τρόπο, η μονάδα bluetooth μπαίνει σε "προγραμματιζόμενη λειτουργία". Η μονάδα μου διαθέτει ένα κουμπί που συνδέει το VCC με τον ειδικό πείρο. Όταν συνδέετε το FTDI στο USB, θα πρέπει να είναι συνδεδεμένο / πιεσμένο το κουμπί για να μπείτε σε αυτήν την ειδική προγραμματιζόμενη λειτουργία. Το bluetooth επιβεβαιώνει την είσοδο σε αυτόν τον τρόπο λειτουργίας αναβοσβήνοντας αργά κάθε 2 δευτερόλεπτα.

Στο Arduino IDE επιλέξτε τη σειριακή θύρα και, στη συνέχεια, ανοίξτε τη σειριακή οθόνη (Τόσο NL όσο και CR με ρυθμό baud 9600). Πληκτρολογήστε AT και η μονάδα πρέπει να επιβεβαιώσει με "OK".

Πληκτρολογήστε "AT+ROLE = 1" για να θέσετε τη μονάδα σε κύρια λειτουργία. Για σύζευξη με τη μονάδα bluetooh σας γράψτε: "AT+BIND = 0006, 66, 49A04B", Παρατηρήστε πώς το "00: 06: 66: 49: A0: 4B" μετατρέπεται σε "0006, 66, 49A04B". Λοιπόν, θα πρέπει να κάνετε τον ίδιο μετασχηματισμό για το bluetooh MAC σας.

Τώρα ενεργοποιήστε το αυτοκίνητο Zenwheels, στη συνέχεια αποσυνδέστε το FTDI και συνδέστε το ξανά χωρίς να πατήσετε το κουμπί / να συνδεθεί ο ειδικός πείρος. Μετά από λίγο θα πρέπει να συνδεθεί με το αυτοκίνητο και θα παρατηρήσετε ότι το αυτοκίνητο κάνει έναν συγκεκριμένο σύνδεσμο επιτυχημένο ήχο.

Αντιμετώπιση προβλημάτων:

- Διαπίστωσα ότι από όλες τις μονάδες Bluetooth που είχα, μόνο αυτή με κουμπί λειτουργούσε ως κύριος!

- βεβαιωθείτε ότι το αυτοκίνητο είναι πλήρως φορτισμένο

- βεβαιωθείτε ότι το αυτοκίνητο δεν είναι συνδεδεμένο στο τηλέφωνο

- εάν το Bluetooth εισέλθει στη λειτουργία AT (αναβοσβήνει αργά) αλλά δεν ανταποκρίνεται στην εντολή, βεβαιωθείτε ότι έχετε και τα δύο NL & CR και πειραματιστείτε με άλλες τιμές BAUD

- ελέγξτε ξανά ότι το RX είναι συνδεδεμένο με το TX και αντίστροφα

- δοκιμάστε αυτό το σεμινάριο

Βήμα 6: Κώδικας & Χρήση

Πρώτα πρέπει να κατεβάσετε και να εγκαταστήσετε δύο βιβλιοθήκες:

1. Βιβλιοθήκη MPU6050 για το γυροσκόπιο

2. Πηγή βιβλιοθήκης I2CDev

Στη συνέχεια, κάντε λήψη και εγκαταστήστε τη βιβλιοθήκη μου από εδώ ή αντιγράψτε την από κάτω:

/** * Βιβλιοθήκες: * https://github.com/jrowberg/i2cdevlib * https://github.com/jrowberg/i2cdevlib */#include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #include "Wire.h "#include" SoftwareSerial.h"

const int MAX_ANGLE = 45;

const byte commandStering = 129; const byte commandSpeed = 130;

bool initialization = false; // ορίστε true αν το DMP init ήταν επιτυχές

uint8_t mpuIntStatus; // κατέχει πραγματικό byte κατάστασης διακοπής από MPU uint8_t devStatus. // επιστροφή κατάστασης μετά από κάθε λειτουργία συσκευής (0 = επιτυχία,! 0 = σφάλμα) uint16_t packetSize; // αναμενόμενο μέγεθος πακέτου DMP (προεπιλογή είναι 42 byte) uint16_t fifoCount; // αρίθμηση όλων των byte που υπάρχουν στο FIFO uint8_t fifoBuffer [64]; // Ρυθμιστικό αποθήκευσης FIFO Quaternion q; // [w, x, y, z] quaternion container VectorFloat gravity; // [x, y, z] βαρύτητας διάνυσμα float ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll container και gravity velatile bool mpuInterrupt = false; // υποδεικνύει εάν ο πείρος διακοπής MPU έχει ανέβει ψηλά

χωρίς υπογραφή long lastPrintTime, lastMoveTime = 0;

SoftwareSerial BTserial (10, 11);

MPU6050 mpu.

void setup ()

{Serial.begin (9600); BTserial.begin (38400); Serial.println ("Έναρξη προγράμματος"); προετοιμασία = initializeGyroscope (); }

void loop () {

if (! προετοιμασία) {return? } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); ΕΠΙΣΤΡΟΦΗ; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& βαρύτητα, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & gravity); τιμόνι (ypr [0] * 180/M_PI, ypr [1] * 180/M_PI, ypr [2] * 180/M_PI); }}

/*

* Λαμβάνει γωνία από 0 έως 180 όπου 0 είναι max αριστερά και 180 max max δεξιά * Λαμβάνει ταχύτητα από -90 έως 90 όπου -90 είναι max προς τα πίσω και 90 είναι max προς τα εμπρός */ void moveZwheelsCar (γωνία byte, int ταχύτητα) {αν (millis () - lastMoveTime = 90) {resultAngle = χάρτης (γωνία, 91, 180, 1, 60); } else if (γωνία 0) {resultSpeed = χάρτης (ταχύτητα, 0, 90, 0, 60); } else if (ταχύτητα <0) {resultSpeed = χάρτης (ταχύτητα, 0, -90, 120, 60); } Serial.print ("actualAngle ="); Serial.print (angle); Serial.print (";"); Serial.print ("actualSpeed ="); Serial.print (resultSpeed); Serial.println (";"); BTserial.write (commandStering); BTserial.write (resultAngle); BTserial.write (commandSpeed); BTserial.write ((byte) resultSpeed); lastMoveTime = millis (); }

void steer (int x, int y, int z)

{x = περιορισμός (x, -1 * MAX_ANGLE, MAX_ANGLE); y = περιορισμός (y, -1 * MAX_ANGLE, MAX_ANGLE); z = περιορισμός (z, -MAX_ANGLE, MAX_ANGLE); int γωνία = χάρτης (y, -MAX_ANGLE, MAX_ANGLE, 0, 180); int speed = χάρτης (z, -MAX_ANGLE, MAX_ANGLE, 90, -90); printDebug (x, y, z, γωνία, ταχύτητα); moveZwheelsCar (γωνία, ταχύτητα); }

void printDebug (int x, int y, int z, int angle, int speed)

{if (millis () - lastPrintTime <1000) {return? } Serial.print ("z ="); Serial.print (x); Serial.print (";"); Serial.print ("y ="); Serial.print (y); Serial.print (";"); Serial.print ("z ="); Serial.print (z); Serial.print (";"); Serial.print ("angle ="); Serial.print (angle); Serial.print (";"); Serial.print ("speed ="); Serial.print (speed); Serial.println (";"); lastPrintTime = millis (); }

bool initializeGyroscope ()

{Wire.begin (); mpu.initialize (); Serial.println (mpu.testConnection ()? F ("Η σύνδεση MPU6050 είναι επιτυχής"): F ("Η σύνδεση MPU6050 απέτυχε")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("DMP Initialization failed (code")); Serial.println (devStatus); return false;} mpu.setDMPEnabled (true); Serial.println (F ("Enabling ανίχνευση διακοπών (εξωτερική διακοπή Arduino 0)… ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP ready! Αναμονή για την πρώτη διακοπή … ")); packetSize = mpu.dmpGetFIFOPacketSize (); return true;}

void dmpDataReady ()

{mpuInterrupt = true; }

boolean hasFifoOverflown (int mpuIntStatus, int fifoCount)

{return mpuIntStatus & 0x10 || fifoCount == 1024; }

Ανεβάστε τον κωδικό χρησιμοποιώντας τον προσαρμογέα FTDI στο arduino και στη συνέχεια συνδέστε τις μπαταρίες.

Χρησιμοποιώντας το τηλεχειριστήριο:

Αφού ενεργοποιηθεί το arduino, ενεργοποιήστε επίσης το αυτοκίνητο. Η μονάδα HC-05 θα πρέπει να συνδέεται με το αυτοκίνητο, όταν συμβεί αυτό το αυτοκίνητο θα εκπέμπει έναν ήχο. Εάν δεν λειτουργεί, ελέγξτε το προηγούμενο βήμα και την ενότητα αντιμετώπισης προβλημάτων.

Εάν κλίνετε το ψωμί προς τα εμπρός, το αυτοκίνητο θα πρέπει να προχωρήσει μπροστά, δεξιά και το αυτοκίνητο θα πρέπει να κινηθεί δεξιά. Εκτελεί επίσης πιο σταδιακές κινήσεις, όπως κλίση λίγο προς τα εμπρός και λίγο αριστερά, σε αυτή την περίπτωση το αυτοκίνητο θα πήγαινε αργά προς τα αριστερά.

Εάν το αυτοκίνητο πάει με διαφορετικό τρόπο όταν κλίνει το breadboard, κρατήστε πρώτα το breadboard σε διαφορετικές κατευθύνσεις.

Πως δουλεύει:

Το σκίτσο παίρνει το γυροσκόπιο συντεταγμένες κάθε 100 ms, κάνει υπολογισμούς και στη συνέχεια μεταδίδει μέσω bluetooth τις εντολές του αυτοκινήτου. Αρχικά υπάρχει μια μέθοδος "καθοδήγησης" που καλείται με τις ακατέργαστες γωνίες x, y και z. Αυτή η μέθοδος μετατρέπει το τιμόνι μεταξύ 0 και 180 μοίρες και την επιτάχυνση μεταξύ -90 και 90. Αυτή η μέθοδος καλεί

void moveZwheelsCar (γωνία byte, int ταχύτητα) που μετατρέπει το τιμόνι και την επιτάχυνση στις προδιαγραφές ZenWheels και στη συνέχεια μεταδίδει τις εντολές χρησιμοποιώντας bluetooth.

Ο λόγος που έκανα τη μετατροπή σε δύο βήματα, είναι η επαναχρησιμοποίηση. αν χρειαζόταν να προσαρμόσω αυτό το σκίτσο στο τηλεχειριστήριο κάποιας άλλης συσκευής θα ξεκινούσα από τη βασική μέθοδο "steer" που ήδη χαρτογραφεί την ταχύτητα και το τιμόνι σε μερικές χρήσιμες τιμές.

Βήμα 7: Εναλλακτικές λύσεις

Μια εναλλακτική λύση στην "αντίστροφη μηχανική". Έχω μιλήσει για το πώς να αντιστρέψω το έργο, ξεκινώντας με την εφαρμογή Android. Αλλά υπάρχει μια εναλλακτική λύση σε αυτό, μπορείτε να ρυθμίσετε μια σειριακή πλατφόρμα FTDI + bluetooth (κανονικό HC-05 χωρίς καθορισμό των κύριων ρυθμίσεων). Στη συνέχεια, από την εφαρμογή ZenWheels συνδεθείτε στο HC-05 αντί για το "microcar".

Για να αποκωδικοποιήσετε τις εντολές θα χρειαστεί να κρατήσετε το τιμόνι σε κάποια θέση και, στη συνέχεια, χρησιμοποιώντας ένα σενάριο python αναλύστε τη σειριακή επικοινωνία. Προτείνω ένα σενάριο python επειδή υπάρχουν μη εκτυπώσιμοι χαρακτήρες και το Arduino IDE δεν είναι κατάλληλο για αυτό. Θα παρατηρήσετε ότι εάν κρατάτε τον τροχό σε μία θέση, η εφαρμογή θα μεταδίδει τακτικά τα ίδια δύο byte. Εάν αλλάξετε τη θέση του τροχού, το byte της γροθιάς θα παραμείνει ίδιο, το δεύτερο θα αλλάξει. Μετά από πολλές δοκιμές μπορείτε να καταλήξετε στον αλγόριθμο διεύθυνσης, στη συνέχεια γκάζι αντίστροφου μηχανικού κ.λπ.

Μια εναλλακτική λύση στο τηλεχειριστήριο με βάση το arduino θα ήταν ένα τηλεχειριστήριο RaspberryPi. Το raspberry pi έχει μια ενσωματωμένη μονάδα bluetooth που είναι ανώδυνη να ρυθμιστεί στη λειτουργία "master" και η βιβλιοθήκη python bluetooth λειτουργεί σαν γοητεία. Επίσης, μερικά πιο ενδιαφέροντα έργα είναι πιθανά, όπως ο έλεγχος του αυτοκινήτου χρησιμοποιώντας την Alexa echo:)

Ελπίζω να σας άρεσε το έργο και αφήστε σχόλια παρακάτω!

Συνιστάται: