Агуулгын хүснэгт:

ZenWheels Microcar -ийн хакердах боломжтой алсын удирдлага: 7 алхам
ZenWheels Microcar -ийн хакердах боломжтой алсын удирдлага: 7 алхам

Видео: ZenWheels Microcar -ийн хакердах боломжтой алсын удирдлага: 7 алхам

Видео: ZenWheels Microcar -ийн хакердах боломжтой алсын удирдлага: 7 алхам
Видео: MicroCar Next generation Smartphone controlled toy car 2024, Оны зургадугаар сарын
Anonim
Image
Image
Чуулган
Чуулган

Энэхүү гарын авлагад бид ZenWheels микрокарын тусгай алсын удирдлага хийх болно. ZenWheels микрокар нь 5 см хэмжээтэй тоглоомон машин бөгөөд үүнийг Android эсвэл Iphone програмаар удирдах боломжтой. Би танд харилцаа холбооны протоколын талаар болон ардуино, гироскоп ашиглан алсын удирдлага хэрхэн бүтээх талаар олж мэдэхийн тулд Андройд аппликэйшнийг хэрхэн яаж урвуу инженерчлэх талаар үзүүлэх болно.

Алхам 1: Бүрэлдэхүүн хэсгүүд ба багажууд

Эд анги:

1. ZenWheels микро машин

2. Arduino pro mini 328p

3. Талхны самбар

4. MPU6050 гироскоп

5. цахилгаан тэжээлийн эх үүсвэр <= 5 в

6. U хэлбэрийн холбогч кабель (заавал биш). Би эдгээр холбогч кабелийг талхны самбар дээр илүү сайн харагддаг тул ашигладаг байсан. Үүний оронд ердийн холбогч кабелийг ашиглаж болно

7. HC-05 bluetooth модуль (AT горимд орох товчлууртай)

Хэрэгсэл:

1. Arduino pro mini -ийг програмчлах USB FTDI адаптер FT232RL

2. Arduino IDE

3. Андройд утас

4. Android Studio [Нэмэлт]

Алхам 2: ZenWheels Android програмыг урвуу инженерчлэх [заавал биш]

Энэ хэсгийг ойлгохын тулд Java болон Android -ийн зарим мэдлэг шаардлагатай.

Төслийн зорилго нь микро машиныг гироскоп ашиглан удирдах явдал юм. Үүнийг хийхийн тулд бид энэ тоглоом болон андройд аппликэйшны хооронд Bluetooth холболтын талаар илүү ихийг олж мэдэх хэрэгтэй.

Энэ алхамд би микро машин болон андроид програмын хоорондох харилцаа холбооны протоколыг хэрхэн яаж өөрчлөх талаар тайлбарлах болно. Хэрэв та алсын удирдлагыг бүтээхийг хүсч байвал энэ алхам шаардлагагүй болно. Протоколыг олж мэдэх нэг арга бол эх кодыг харах явдал юм. Хмм, гэхдээ энэ нь шууд биш юм, Android програмуудыг эмхэтгэж, Google Play -ээр дамжуулан apk суулгаж болно.

Тиймээс би үүнийг хийх үндсэн гарын авлага хийсэн.

1. APK татаж авах. Андройд Багц Багц (APK товчлол) нь Андройд үйлдлийн системээс гар утасны програм түгээх, суулгахад ашигладаг багц файлын формат юм.

Эхлээд google play store дээрээс програмыг хайж олоорой, манай тохиолдолд "zenwheels" гэж хайвал та програмын линкийг авах болно

Дараа нь google дээрээс "онлайн apk татаж авагч" -ыг хайж олоод apk -ийг татаж авна уу. Ихэвчлэн тэд програмын холбоосыг (бидний өмнө олж авсан линк) асуух болно, дараа нь бид татаж авах товчийг дараад компьютер дээрээ хадгалах болно.

2. APK -г задлах. Бидний нөхцөл байдалд байгаа декомпилятор бол APK -ийг аваад Java эх кодыг гаргах хэрэгсэл юм.

Хамгийн хялбар шийдэл бол ажлыг гүйцэтгэхийн тулд онлайн задлагч ашиглах явдал юм. Би google -ээс "онлайн задлагч" гэж хайсан бөгөөд https://www.javadecompilers.com/ хаягийг сонгосон. Та өмнө нь олж авсан APK -ээ байршуулах хэрэгтэй

задлахыг дарна уу. Дараа нь та зөвхөн эх сурвалжаа татаж авах хэрэгтэй.

3. Кодыг хайж инженерийг урвуу болгохыг хичээ

Төслийг нээхийн тулд танд текст засварлагч эсвэл илүү сайн IDE (хөгжлийн нэгдсэн орчин) хэрэгтэй болно. Андройд төслийн анхны IDE бол Android Studio юм (https://developer.android.com/studio). Андройд студийг суулгасны дараа төслийн хавтсыг нээнэ үү.

Манай машин bluetooth -ээр хянагддаг тул би "bluetooth" гэсэн түлхүүр үгээр кодчилсон кодоор хайлтаа эхлүүлсэн тул "BluetoothSerialService" нь харилцааны хяналтанд байсныг олж мэдсэн. Хэрэв энэ анги харилцаа холбоог зохицуулдаг бол түүнийг илгээх командын аргатай байх ёстой. Мэдээллийг bluetooth сувгаар дамжуулдаг нэг бичих арга байдаг.

нийтийн хоосон бичих (байт гарах)

Энэ бол сайн эхлэл, би.write (энэ аргыг ашиглаж байгаа бөгөөд манай "BluetoothSerialService" -г өргөтгөсөн "ZenWheelsMicrocar" ангилал байдаг. Энэ ангид бидний Bluetooth -ээр харилцах логикийн ихэнх хэсэг багтсан болно. логик нь хянагчдад байдаг: BaseController ба StandardController.

BaseController дээр бид үйлчилгээгээ эхлүүлэх, жолоодлогын болон тохируулагч сувгуудын тодорхойлолттой байдаг.

хамгаалагдсан ZenWheelsMicrocar микрокар = шинэ ZenWheelsMicrocar (энэ, энэ. btHandler);

хамгаалагдсан ChannelOutput гаралт = {шинэ TrimChannelOutput (ZenWheelsMicrocar. STEERING_CHANNEL), шинэ TrimChannelOutput (ZenWheelsMicrocar. THROTTLE_CHANNEL)};

StandardController -д жолоодлогыг дараахь байдлаар зохицуулдаг.

нийтийн хоосон бариулын удирдлага (TouchEvent touchEvent) {

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

Аргад дүн шинжилгээ хийхдээ steeringOutput.channel нь 129 (жолоодлогын суваг), steeringOutput.resolveValue () нь -90-90 хооронд байж болно. Сувгийн утгыг (129) шууд илгээж, жолооны утгыг өөрчилнө. bitwise үйлдлүүдийг ашигласнаар:

хувийн эцсийн int value_convert_out (int утга) {

логик сөрөг = худал; if (утга <0) {сөрөг = f6D; } int утга2 = утга & 63; if (сөрөг) {буцаах утга2 | 64; } буцаах утга2; }

StandardController дээр ижил төстэй арга байдаг

нийтийн хоосон бариул Тохируулагч (TouchEvent touchEvent)

Алхам 3: бүрэлдэхүүн хэсгүүд

Эд анги:

1. Arduino pro mini 328p 2 $

2. Талхны самбар

3. MPU6050 гироскоп 1.2 $

4. HC-05 мастер-боол 6 зүү модуль 3 $

5. 4 батерейтай 4 x АА батерейны багц

6. U хэлбэрийн холбогч кабель (заавал биш). Би эдгээр холбогч кабелийг талхны самбар дээр илүү сайн хардаг тул ледүүд ийм байдлаар илүү тод харагддаг тул ашигладаг байсан. Хэрэв танд эдгээр кабель байхгүй бол тэдгээрийг дюпон утсаар сольж болно.

Дээрх үнийг eBay дээрээс авсан болно.

Хэрэгсэл:

1. Arduino pro mini -ийг програмчлах USB FTDI адаптер FT232RL руу USB

2. Arduino IDE

3. Android Studio (хэрэв та өөрөө урвуу инженерчлэхийг хүсвэл заавал биш)

Алхам 4: угсрах

Чуулган
Чуулган

Угсралт нь маш энгийн, учир нь бид үүнийг самбар дээр хийж байна:)

- эхлээд бид бүрэлдэхүүн хэсгүүдийг талхны самбар дээр байрлуулна: микроконтроллер, bluetooth модуль, гироскоп

- HC-05 bluetooth RX ба TX зүүг arduino 10 ба 11 зүү рүү холбоно уу. Гироскоп SDA ба SCL нь arduino A4 ба A5 зүүтэй холбогдсон байх ёстой

- цахилгаан зүүг bluetooth, gyro, arduino руу холбоно уу. тээглүүрийг талхны тал дээр байгаа + ба - -тай холбох ёстой

- Хамгийн сүүлд цахилгаан тэжээлийг (3.3V -аас 5V хүртэл) талханд холбоно уу, би жижиг LiPo нэг эсийн батерей ашигласан боловч цахилгаан эрчим хүчний хязгаарт байгаа бол үүнийг хийх болно.

Дэлгэрэнгүй мэдээллийг дээрх зургуудаас үзнэ үү

Алхам 5: HC-05 Bluetooth-ийг микро машинтай холбоно уу

HC-05 Bluetooth-ийг Microcar-тэй холбоно уу
HC-05 Bluetooth-ийг Microcar-тэй холбоно уу
HC-05 Bluetooth-ийг Microcar-тэй холбоно уу
HC-05 Bluetooth-ийг Microcar-тэй холбоно уу
HC-05 Bluetooth-ийг Microcar-тэй холбоно уу
HC-05 Bluetooth-ийг Microcar-тэй холбоно уу

Үүний тулд танд Андройд утас, bluetooth HC-05 модуль, утастай FTDI серийн адаптер хэрэгтэй болно. Мөн бид bluetooth модультай холбогдохын тулд Arduino IDE -ийг ашиглах болно.

Эхлээд бид микро машины bluetooth хаягийг олж мэдэх хэрэгтэй.

- утсан дээрээ bluetooth -ийг идэвхжүүлэх

- машинаа асаагаад Андройдын тохиргооны bluetooth хэсэгт очно уу

- шинэ төхөөрөмж хайх ба "Microcar" нэртэй төхөөрөмж гарч ирэх ёстой

- энэ төхөөрөмжтэй хослуулах

- Дараа нь bluetooth MAC -ийг задлахын тулд би энэ програмыг google play -ийн Цуваа Bluetooth Терминалаас ашигласан болно

Энэ програмыг суулгасны дараа цэс -> төхөөрөмжүүд рүү очоод тэнд бүх bluetooth -тэй хосолсон төхөөрөмжүүдийн жагсаалтыг харах болно. Бид зөвхөн "Microcar" уурхайн доорх кодыг сонирхож байна: 00: 06: 66: 49: A0: 4B

Дараа нь FTDI адаптерийг bluetooth модульд холбоно уу. Эхлээд VCC ба GROUND зүү, дараа нь bluetooth TX руу FTDI RX, bluetooth RX руу FTDI TX хийнэ. Мөн Bluetooth модуль дээр VCC -тэй холбогдох зүү байх ёстой. Үүнийг хийснээр bluetooth модуль нь "програмчлагдах горимд" ордог. Миний модуль нь VCC -ийг тэр тусгай зүүтэй холбосон товчлууртай. Та FTDI -ийг USB -д залгахдаа энэ тусгай програмчлагдах горимд орохын тулд зүү / товчлуурыг дарсан байх ёстой. Bluetooth нь 2 секунд тутамд аажмаар анивчих замаар энэ горимд орохыг баталгаажуулдаг.

Arduino IDE дээр цуваа портыг сонгоод дараа нь цуваа дэлгэцийг нээнэ үү (NL ба CR хоёулаа 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 горимд орвол (аажмаар анивчдаг), гэхдээ энэ нь тушаалд хариу өгөхгүй байгаа бөгөөд танд BOTH 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 "#clude" SoftwareSerial.h"

const int MAX_ANGLE = 45;

const байтын тушаалStering = 129; const байтын тушаалSpeed = 130;

bool эхлүүлэх = худал; // DMP init амжилттай болсон бол үнэн гэж тохируулна уу

uint8_t mpuIntStatus; // MPU uint8_t devStatus -ийн бодит тасалдлын статусын байтыг агуулдаг; // төхөөрөмжийн үйлдэл бүрийн дараа статусыг буцаана (0 = амжилт,! 0 = алдаа) uint16_t packetSize; // хүлээгдэж буй DMP пакетийн хэмжээ (анхдагч нь 42 байт) uint16_t fifoCount; // одоо FIFO -д байгаа бүх байтын тоо uint8_t fifoBuffer [64]; // FIFO хадгалах буфер Quaternion q; // [w, x, y, z] quaternion контейнер VectorFloat таталцал; // [x, y, z] таталцлын вектор float ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll контейнер ба хүндийн хүчний вектор дэгдэмхий bool mpuInterrupt = false; // нь MPU тасалдлын зүү өндөр болсон эсэхийг заана

гарын үсэг зураагүй long lastPrintTime, lastMoveTime = 0;

SoftwareSerial BTserial (10, 11);

MPU6050 мегапиксел;

хүчингүй тохиргоо ()

{Serial.begin (9600); BTserial.begin (38400); Serial.println ("Хөтөлбөр эхэлсэн"); эхлүүлэх = эхлүүлэхGyroscope (); }

void loop () {

if (! эхлүүлэх) {буцах; } mpuInterrupt = худал; 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 нь хамгийн их зүүн, 180 нь хамгийн их нь баруун талынх юм millis () - lastMoveTime = 90) {resultAngle = map (өнцөг, 91, 180, 1, 60); } else if (өнцөг 0) {resultSpeed = газрын зураг (хурд, 0, 90, 0, 60); } if if (speed <0) {resultSpeed = map (speed, 0, -90, 120, 60); } Serial.print ("actualAngle ="); Serial.print (өнцөг); Serial.print (";"); Serial.print ("actualSpeed ="); Serial.print (resultSpeed); Serial.println (";"); BTserial.write (commandStering); BTserial.write (resultAngle); BTserial.write (commandSpeed); BTserial.write ((байт) resultSpeed); lastMoveTime = millis (); }

хүчингүй жолоодлого (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 хурд = газрын зураг (z, -MAX_ANGLE, MAX_ANGLE, 90, -90); printDebug (x, y, z, өнцөг, хурд); moveZwheelsCar (өнцөг, хурд); }

хоосон хэвлэх Debug (int x, int y, int z, int өнцөг, int хурд)

{if (millis () - lastPrintTime <1000) {буцах; } 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 ("өнцөг ="); Serial.print (өнцөг); Serial.print (";"); Serial.print ("speed ="); Serial.print (speed); Serial.println (";"); lastPrintTime = millis (); }

bool эхлүүлэхGyroscope ()

{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); false return;} mpu.setDMPEnabled (true); Serial.println (F ("Идэвхжүүлэх тасалдал илрүүлэх (Arduino гадаад тасалдал 0)… ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP бэлэн! Эхний тасалдлыг хүлээж байна … ")); packetSize = mpu.dmpGetFIFOPacketSize (); үнэн буцаах;}

void dmpDataReady ()

{mpuInterrupt = үнэн; }

boolean hasFifoOverflown (int mpuIntStatus, int fifoCount)

{буцах mpuIntStatus & 0x10 || fifoCount == 1024; }

FTDI адаптер ашиглан кодыг arduino руу оруулаад дараа нь батерейг холбоно уу.

Алсын удирдлага ашиглан:

Arduino -ийг асаасны дараа мөн машинаа асаагаарай. HC-05 модуль нь машинд холбогдох ёстой бөгөөд ийм тохиолдолд машин дуугарах болно. Хэрэв энэ нь ажиллахгүй бол өмнөх алхам болон алдааг олж засварлах хэсгийг шалгана уу.

Хэрэв та талхны хавтанг урагш чиглүүлж байвал машин урагш, баруун, машин баруун тийш явах ёстой. Энэ нь бага зэрэг урагшлах, бага зэрэг зүүн тийш хазайх гэх мэт аажмаар аажмаар хөдөлгөөн хийдэг бөгөөд энэ тохиолдолд машин аажмаар зүүн тийш явах болно.

Хэрэв талх налуу үед машин өөр замаар явж байвал талхны самбарыг өөр өөр чиглэлд барь.

Хэрхэн ажилладаг:

Ноорог нь гироскопын координатыг 100 мс тутамд авч, тооцоолол хийж, дараа нь машины тушаалыг bluetooth -ээр дамжуулдаг. Эхлээд түүхий x, y, z өнцгөөр дууддаг "жолоодлогын" арга бий. Энэ арга нь жолоодлогыг 0-180 градус, хурдыг -90-90 хооронд өөрчилдөг. Энэ аргыг дууддаг

void moveZwheelsCar (байтын өнцөг, int хурд) нь жолоодлого, хурдатгалыг ZenWheels -ийн техникийн үзүүлэлт болгон хөрвүүлж, дараа нь bluetooth ашиглан командыг дамжуулдаг.

Би өөрчлөлтийг хоёр алхамаар хийсэн шалтгаан нь дахин ашиглах боломжтой юм. Хэрэв би энэ эскизийг өөр төхөөрөмжид алсын удирдлагад тохируулах шаардлагатай бол хурд, жолоодлогыг аль хэдийн ашигтай утгаар нь харуулсан "удирдах" үндсэн аргаас эхлэх болно.

Алхам 7: Альтернатив хувилбарууд

"Урвуу инженерчлэл" -ийн өөр хувилбар. Андройд аппликейшнээс эхлэн төслийг хэрхэн яаж урвуу инженерчлэх талаар би ярьсан. Гэхдээ үүнээс өөр сонголт бол та FTDI + bluetooth цуваа боолыг тохируулах боломжтой (мастер тохиргоог зааж өгөхгүйгээр ердийн HC-05). Дараа нь ZenWheels програмаас "микрокар" биш харин HC-05 руу холбогдоно уу.

Командыг декодлохын тулд та жолооны хүрдийг ямар нэгэн байрлалд барьж, дараа нь питон скрипт ашиглан цуваа холболтыг шинжлэх хэрэгтэй. Хэвлэх боломжгүй тэмдэгтүүд байгаа тул би python скрипт санал болгож байна, Arduino IDE нь үүнд тохиромжгүй юм. Хэрэв та дугуйг нэг байрлалд барьсан бол апп нь ижил хоёр байтыг тогтмол дамжуулах болно гэдгийг та анзаарах болно. Хэрэв та дугуйны байрлалыг өөрчилвөл нударга байт хэвээр байх болно, хоёр дахь нь өөрчлөгдөх болно. Олон туршилтын дараа та жолооны алгоритм, дараа нь урвуу инженерийн тохируулагч гэх мэтийг гаргаж ирж болно.

Arduino дээр суурилсан удирдлагын өөр хувилбар нь RaspberryPi алсын удирдлага байх болно. Бөөрөлзгөнө pi нь bluetooth модулийг суулгасан бөгөөд үүнийг "мастер" горимд тохируулах нь өвдөлтгүй бөгөөд bluetooth -ийн питон номын сан нь сэтгэл татам мэт ажилладаг. Мөн Alexa echo ашиглан машинаа удирдах гэх мэт өөр сонирхолтой төслүүд боломжтой.:)

Төсөл танд таалагдсан гэж найдаж байна, доор сэтгэгдлээ үлдээнэ үү!

Зөвлөмж болгож буй: