Orodha ya maudhui:

Udhibiti wa Kijijini wa Hackable kwa ZenWheels Microcar: Hatua 7
Udhibiti wa Kijijini wa Hackable kwa ZenWheels Microcar: Hatua 7

Video: Udhibiti wa Kijijini wa Hackable kwa ZenWheels Microcar: Hatua 7

Video: Udhibiti wa Kijijini wa Hackable kwa ZenWheels Microcar: Hatua 7
Video: 🟡 POCO X5 PRO - САМЫЙ ДЕТАЛЬНЫЙ ОБЗОР и ТЕСТЫ 2024, Novemba
Anonim
Image
Image
Mkutano
Mkutano

Katika mafunzo haya tutaunda udhibiti maalum wa kijijini kwa microcar ya ZenWheels. ZenWheels microcar ni gari la kuchezea la sentimita 5 linaloweza kudhibitiwa kupitia programu ya Android au Iphone. Nitaonyesha jinsi ya kubadilisha uhandisi programu tumizi ya Android ili kujua kuhusu itifaki ya mawasiliano na jinsi unavyoweza kuunda udhibiti wa kijijini ukitumia arduino na gyroscope.

Hatua ya 1: Vipengele na Zana

Sehemu:

1. Microcar ya ZenWheels

2. Arduino pro mini 328p

3. Bodi ya mkate

4. MPU6050 gyroscope

5. chanzo cha nguvu <= 5 v (betri fulani ambayo tunaweza kuambatisha kwenye ubao wa mkate)

6. Kamba za jumper za umbo la U (hiari). Nimetumia nyaya hizi za kuruka kwa sababu zinaonekana vizuri kwenye ubao wa mkate. Kamba za jumper za kawaida zinaweza kutumika badala yake

7. Moduli ya Bluetooth ya HC-05 (na kitufe cha kuingiza hali ya AT)

Zana:

1. USB kwa adapta ya serial FTDI FT232RL kupanga programu ya Arduino pro mini

2. Arduino IDE

3. Simu ya Android

4. Studio ya Android [Si lazima]

Hatua ya 2: Kubadilisha Uhandisi Zombi ya Android ya ZenWheels [hiari]

Ujuzi fulani wa Java na Android unahitajika kuelewa sehemu hii.

Lengo la mradi ni kudhibiti microcar kutumia gyroscope. Kwa hili tunahitaji kujua zaidi juu ya mawasiliano ya Bluetooth kati ya toy hii na programu ya android.

Katika hatua hii nitaelezea jinsi ya kubadilisha mhandisi itifaki ya mawasiliano kati ya microcar na programu ya android. Ikiwa unataka tu kujenga kijijini hatua hii sio lazima. Njia moja ya kugundua itifaki ni kuangalia nambari ya chanzo. Hmm lakini hii sio moja kwa moja mbele, programu za android zimekusanywa na mtu anaweza kusakinisha apk kupitia google play.

Kwa hivyo nimefanya mwongozo wa kimsingi wa kufanya hivi:

1. Pakua APK. Kifaa cha Kifurushi cha Android (APK kwa kifupi) ni fomati ya faili ya kifurushi inayotumiwa na mfumo wa uendeshaji wa Android kwa usambazaji na usanikishaji wa programu za rununu

Kwanza tafuta programu kwenye duka la kucheza la google, kwa upande wetu tafuta "zenwheels" na utapata kiunga cha programu

Kisha utafute kwenye google upate "downloader apk mkondoni" na utumie moja kupakua apk. Kawaida watauliza kiunga cha programu (ambayo tumepata mapema), kisha tutabonyeza kitufe cha kupakua na kuihifadhi kwenye kompyuta yetu.

2. Tenganisha APK. Mchanganyiko katika hali yetu ni zana ambayo inachukua APK na kutoa nambari ya chanzo ya Java.

Suluhisho rahisi ni kutumia mtengano wa mkondoni kufanya kazi hiyo. Nimetafuta google kwa "online decompliler" na nimechagua https://www.javadecompilers.com/. Unahitaji tu kupakia APK uliyopata mapema na

bonyeza kuoza. Kisha unapakua tu vyanzo.

3. Jaribu kubadilisha mhandisi akiangalia kupitia nambari hiyo

Ili kufungua mradi unahitaji mhariri wa maandishi au bora IDE (mazingira jumuishi ya maendeleo). IDE chaguo-msingi ya Miradi ya Android ni Studio ya Android (https://developer.android.com/studio). Baada ya kusanidi Android Studio kufungua folda ya mradi.

Kwa sababu gari letu linadhibitiwa na bluetooth nilianza utaftaji wangu kwenye nambari iliyoharibika na neno kuu "bluetooth", kutoka kwa matukio ambayo nimepata "BluetoothSerialService" ndiyo iliyokuwa ikishughulikia mawasiliano. Ikiwa darasa hili linashughulikia mawasiliano basi lazima iwe na njia ya kutuma amri. Inageuka kuwa kuna njia moja ya kuandika inayotuma data kupitia kituo cha Bluetooth:

kuandika utupu wa umma (byte nje)

Huu ni mwanzo mzuri, nimetafuta.write (njia inatumiwa na kuna darasa "ZenWheelsMicrocar" ambayo inaongeza "Huduma ya BluetoothSerialService". Darasa hili lina mantiki ya mawasiliano yetu juu ya Bluetooth. Sehemu nyingine ya mantiki iko katika watawala: BaseController na StandardController.

Katika BaseController tuna uanzishaji wa huduma, na pia ufafanuzi wa njia za usukani na kaba, vituo kwa kweli vinaamuru viambishi kutaja kwamba aina ya amri itafuata:

kulindwa ZenWheelsMicrocar microcar = mpya ZenWheelsMicrocar (this, this.btHandler);

kulindwa ChannelOutput matokeo = {mpya TrimChannelOutput (ZenWheelsMicrocar. STEERING_CHANNEL), TrimChannelOutput mpya (ZenWheelsMicrocar. THROTTLE_CHANNEL)};

Katika StandardController uendeshaji unashughulikiwa katika:

kushughulikia batili ya ummaSteering (TouchEvent touchEvent) {

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

Inachanganua njia, kituo cha steeringOutput.ch kina thamani ya 129 (kituo kinachotumika kwa uendeshaji) na steeringOutput.resolveValue () inaweza kuwa na thamani kati ya -90 na 90. Thamani ya kituo (129) inatumwa moja kwa moja, na dhamana ya uendeshaji imebadilishwa kwa kutumia operesheni kidogo:

faragha ya mwisho ya thamani_convert_out (thamani ya int) {

boolean hasi = uwongo; ikiwa (thamani <0) {hasi = f6D; } int thamani2 = thamani & 63; ikiwa (hasi) {kurudi thamani2 | 64; } kurudi thamani2; }

Kuna njia sawa katika StandardController inayoitwa

kushughulikia batili ya ummaThrottle (TouchEvent touchEvent)

Hatua ya 3: Vipengele

Sehemu:

1. Arduino pro mini 328p 2 $

2. Bodi ya mkate

3. MPU6050 gyroscope 1.2 $

4. HC-05 bwana-mtumwa 6 pini moduli 3 $

5. 4 x AA pakiti ya betri na betri 4

6. Kamba za jumper za umbo la U (hiari). Nimetumia nyaya hizi za kuruka kwa sababu zinaonekana vizuri kwenye ubao wa mkate, na viongo vinaonekana zaidi kwa njia hii. Ikiwa hauna nyaya hizi unaweza kuzibadilisha na waya za dupont.

Bei zilizo hapo juu zinachukuliwa kutoka eBay.

Zana:

1. USB kwa adapta ya serial FTDI FT232RL kupanga mpango wa arduino pro mini

2. Arduino IDE

3. Studio ya Android (hiari ikiwa unataka kujirekebisha mwenyewe)

Hatua ya 4: Mkutano

Mkutano
Mkutano

Mkutano ni rahisi sana kwa sababu tunaifanya kwenye ubao wa mkate:)

- kwanza tunaweka vifaa vyetu kwenye ubao wa mkate: microcontroller, moduli ya bluetooth na gyroscope

- unganisha HC-05 bluetooth RX na TX pini kwa arduino 10 na 11 pini. Gyroscope SDA na SCL inapaswa kushikamana na pini za arduino A4 na A5

- unganisha pini za umeme na bluetooth, gyro na arduino. pini zinapaswa kushikamana na + na - upande wa ubao wa mkate

- mwisho unganisha usambazaji wa umeme (kati ya 3.3V hadi 5V) kwenye ubao wa mkate, nimetumia betri ndogo ya seli ya LiPo lakini yoyote itafanya kwa muda mrefu ikiwa iko katika anuwai ya umeme

Tafadhali angalia picha hapo juu kwa maelezo zaidi

Hatua ya 5: Onyesha HC-05 Bluetooth kwa Microcar

Ongeza HC-05 Bluetooth kwa Microcar
Ongeza HC-05 Bluetooth kwa Microcar
Ongeza HC-05 Bluetooth kwa Microcar
Ongeza HC-05 Bluetooth kwa Microcar
Ongeza HC-05 Bluetooth kwa Microcar
Ongeza HC-05 Bluetooth kwa Microcar

Kwa hili utahitaji simu ya Android, moduli ya Bluetooth HC-05 na adapta ya serial FTDI na waya. Pia tutatumia Arduino IDE kuwasiliana na moduli ya bluetooth.

Kwanza tunahitaji kujua anwani ya bluetooth ya microcar:

- wezesha bluetooth kwenye simu yako

- nguvu kwenye gari na nenda kwenye sehemu ya Bluetooth ya mipangilio yako kwenye Android

- tafuta vifaa vipya na kifaa kingine kinachoitwa "Microcar" kinapaswa kuonekana

- jozi na kifaa hiki

- kisha kutoa MAC ya Bluetooth, nimetumia programu hii kutoka google kucheza Terminal Bluetooth Terminal

Baada ya kusanikisha programu hii, nenda kwenye menyu -> vifaa na hapo utakuwa na orodha na vitambulisho vyote vilivyooanishwa vya Bluetooth. Tunavutiwa tu na nambari iliyo chini ya mgodi wa "Microcar" ni 00: 06: 66: 49: A0: 4B

Ifuatayo unganisha adapta ya FTDI kwenye moduli ya Bluetooth. Kwanza VCC na GROUND pini na kisha FTDI RX kwa Bluetooth TX na FTDI TX kwa RX ya Bluetooth. Pia inapaswa kuwe na pini kwenye moduli ya Bluetooth ambayo inapaswa kushikamana na VCC. Kufanya hivi moduli ya bluetooth inaingia "mode inayoweza kusanidiwa". Moduli yangu ina kitufe kinachounganisha VCC na pini hiyo maalum. Unapoingiza FTDI kwenye USB inapaswa kuwa na pini iliyounganishwa / kitufe kilichobanwa kuingia katika hali hii maalum inayopangwa. Bluetooth inathibitisha kuingia katika hali hii ya utendaji kwa kupepesa polepole kila sekunde 2.

Katika Arduino IDE chagua bandari ya serial, kisha ufungue mfuatiliaji wa serial (Wote NL na CR na kiwango cha baud 9600). Andika AT na moduli inapaswa kuthibitisha na "Sawa".

Andika "AT + ROLE = 1" kuweka moduli katika hali kuu. Ili jozi na moduli yako ya bluetooh andika: "AT + BIND = 0006, 66, 49A04B", Angalia jinsi "00: 06: 66: 49: A0: 4B" yetu inabadilishwa kuwa "0006, 66, 49A04B". Vizuri unapaswa kufanya mabadiliko sawa kwa MAC yako ya bluetooh.

Sasa nguvu kwenye gari la Zenwheels kisha ondoa FTDI na uiunganishe tena bila kitufe kilichobanwa / pini maalum iliyounganishwa. Baada ya muda inapaswa kuungana na gari na utaona gari ikifanya muunganisho maalum sauti ya mafanikio.

Utatuzi wa shida:

- Niligundua kuwa kutoka kwa moduli zote za Bluetooth nilizokuwa nazo, ile tu iliyo na kitufe ilifanya kazi kama bwana!

- hakikisha gari imeshtakiwa kikamilifu

- hakikisha gari halijaunganishwa na simu

- ikiwa Bluetooth inaingia katika hali ya AT (inaangaza mwangaza polepole) lakini haijibu amri kuagiza kuwa una NL & CR ZOTE, na pia ujaribu viwango vingine vya BAUD

- angalia mara mbili RX imeunganishwa na TX na kinyume chake

- jaribu mafunzo haya

Hatua ya 6: Kanuni na Matumizi

Kwanza unahitaji kupakua na kusanikisha maktaba mbili:

1. Maktaba ya MPU6050 kwa gyroscope

2. Chanzo cha maktaba ya I2CDev

Kisha pakua na usakinishe maktaba yangu kutoka hapa au unakili kutoka hapa chini:

/ ** * Maktaba: * https://github.com/jrowberg/i2cdevlib * https://github.com/jrowberg/i2cdevlib * / # pamoja na "I2Cdev.h" # pamoja na "MPU6050_6Axis_MotionApps20.h" # pamoja na "Waya.h "# pamoja na" SoftwareSerial.h"

const int MAX_ANGLE = 45;

amri ya const byteStering = 129; amri ya const byte Kasi = 130;

uanzishaji wa bool = uwongo; // kuweka kweli ikiwa init ya DMP ilifanikiwa

uint8_t mpuIntStatus; // inashikilia hali halisi ya usumbufu kutoka kwa MPU uint8_t devStatus; // hali ya kurudi baada ya kila operesheni ya kifaa (0 = mafanikio,! 0 = kosa) uint16_t packetSize; // ukubwa wa pakiti ya DMP inayotarajiwa (chaguo-msingi ni ka 42) uint16_t fifoCount; // hesabu ya ka zote zilizo katika FIFO uint8_t fifoBuffer [64]; // bafa ya kuhifadhi FIFO Quaternion q; // [w, x, y, z] chombo cha quaternion mvuto wa VectorFloat; // [x, y, z] vector ya mvuto kuelea ypr [3]; // [yaw, lami, roll] yaw / lami / chombo na roll ya mvuto bool tete boat mpuInterrupt = uongo; // inaonyesha ikiwa pini ya kukatiza ya MPU imepanda juu

unsigned long lastPrintTime, lastMoveTime = 0;

SoftwareSerial BTserial (10, 11);

MPU6050 mpu;

kuanzisha batili ()

{Serial.begin (9600); Kuanza kwa BTserial (38400); Serial.println ("Programu imeanza"); kuanzisha = kuanzishaGyroscope (); }

kitanzi batili () {

ikiwa (! uanzishaji) {kurudi; } mpuInterrupt = uongo; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); ikiwa (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); kurudi; } ikiwa (mpuIntStatus & 0x02) {wakati (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, pakitiSize); fifoCount - = pakitiSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpPata Uzito (& mvuto, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & mvuto); Bad (ypr [0] * 180 / M_PI, ypr [1] * 180 / M_PI, ypr [2] * 180 / M_PI); }}

/*

* Hupokea pembe kutoka 0 hadi 180 ambapo 0 kushoto max na 180 kulia max * Inapokea kasi kutoka -90 hadi 90 ambapo -90 ni max nyuma na 90 ni max mbele * / batili moveZwheelsCar (byte angle, int speed) {if (millis () - mwishoMoveTime = 90) {matokeoAngle = ramani (pembe, 91, 180, 1, 60); } mwingine ikiwa (angle 0) {resultSpeed = ramani (kasi, 0, 90, 0, 60); } mwingine ikiwa (kasi <0) {resultSpeed = ramani (kasi, 0, -90, 120, 60); } Serial.print ("actualAngle ="); Serial.print (angle); Serial.print (";"); Serial.print ("realSpeed ="); Serial.print (matokeoSpeed); Serial.println (";"); Andika BTserial (commandStering); Andika BTserial (matokeoAngle); Andika BTserial (commandSpeed); BTserial.write ((byte) matokeoSpeed); lastMoveTime = milimita (); }

Bad utupu (int x, int y, int z)

{x = kubana (x, -1 * MAX_ANGLE, MAX_ANGLE); y = kubana (y, -1 * MAX_ANGLE, MAX_ANGLE); z = kubana (z, -MAX_ANGLE, MAX_ANGLE); int angle = ramani (y, -MAX_ANGLE, MAX_ANGLE, 0, 180); kasi ya kasi = ramani (z, -MAX_ANGLE, MAX_ANGLE, 90, -90); magazetiDebug (x, y, z, angle, kasi); songaZwheelsCar (pembe, kasi); }

uchapishaji batili Suluhisha (int x, int y, int z, int angle, int kasi)

{if (millis () - lastPrintTime <1000) {kurudi; } 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 (kasi); Serial.println (";"); mwishoPrintTime = millis (); }

kuanzisha boolGyroscope ()

{Wire.anza (); mpu kuanzisha (); Serial.println (mpu.testConnection () F? devStatus = mpu.dmp Anzisha (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); ikiwa (devStatus! = 0) {Serial.print (F ("Uanzishaji wa DMP umeshindwa (msimbo")); Serial.println (devStatus); kurudi uwongo;} mpu.setDMPEnabled (kweli); kukatiza kugundua (Arduino nje kukatiza 0)… ")); ambatanishaInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP iko tayari! Inangojea usumbufu wa kwanza… ")); pakitiSize = mpu.dmpGetFIFOPacketSize (); kurudi kweli;}

batili dmpDataReady ()

{mpuInterrupt = kweli; }

boolean hasFifoOverflown (int mpuIntStatus, int fifoCount)

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

Pakia nambari kwa kutumia adapta ya FTDI kwa arduino kisha unganisha betri.

Kutumia kijijini:

Baada ya kuwashwa kwa arduino, pia nguvu kwenye gari. Moduli ya HC-05 inapaswa kuungana na gari, wakati hiyo itatokea gari itatoa sauti. Ikiwa haifanyi kazi tafadhali angalia hatua ya awali na sehemu ya utatuzi.

Ikiwa unaelekeza ubao wa mkate mbele gari inapaswa kusonga mbele, kulia na gari inapaswa kusonga kulia. Pia hufanya harakati za taratibu zaidi kama kuelekeza mbele kidogo na kushoto kidogo katika kesi hii gari ingeenda polepole kushoto.

Ikiwa gari huenda kwa njia tofauti wakati wa kutega ubao wa mkate kwanza shika ubao wa mkate kwa mwelekeo tofauti.

Inavyofanya kazi:

Mchoro hupata uratibu wa gyroscope kila ms 100, hufanya hesabu na kisha kusambaza juu ya bluetooth maagizo ya gari. Kwanza kuna njia ya "Bad" ambayo huitwa na pembe mbichi za x, y na z. Njia hii inabadilisha uendeshaji kati ya digrii 0 hadi 180 na kuongeza kasi kati ya -90 na 90. Njia hii inaita

batili moveZwheelsCar (byte angle, int speed) ambayo hubadilisha usukani na kuongeza kasi kwa vipimo vya ZenWheels na kisha kusambaza amri kwa kutumia Bluetooth.

Sababu nimefanya mabadiliko katika hatua mbili, ni reusability. ikiwa ningehitaji kurekebisha mchoro huu kwa kudhibiti kijijini kifaa kingine ningeanza kutoka kwa njia ya msingi "Bad" ambayo tayari inachora kasi na uendeshaji kwa maadili kadhaa muhimu.

Hatua ya 7: Njia mbadala

Njia mbadala ya "uhandisi wa nyuma". Nimezungumza juu ya jinsi ya kubadilisha mradi kwa kuanza na programu tumizi ya Android. Lakini kuna njia mbadala ya hii unaweza kusanidi mtumwa wa bluetooth FTDI + (HC-05 ya kawaida bila kutaja mipangilio ya bwana). Kisha kutoka kwa programu ya ZenWheels unganisha kwa HC-05 badala ya "microcar".

Kuamua amri utahitaji kushikilia usukani katika nafasi fulani, kisha kutumia hati ya chatu kuchambua mawasiliano ya mfululizo. Ninapendekeza hati ya chatu kwa sababu kuna herufi zisizoweza kuchapishwa na Arduino IDE haifai hiyo. Utagundua kuwa ikiwa unashikilia gurudumu katika nafasi moja programu itasambaza mara kwa mara kaiti mbili zile zile. Ukibadilisha msimamo wa gurudumu baiti ya ngumi itabaki vile vile pili itabadilika. Baada ya majaribio mengi unaweza kuja na algorithm ya uendeshaji, halafu ubadilishe kiboreshaji cha mhandisi nk.

Njia mbadala ya kijijini cha arduino itakuwa kijijini cha RaspberryPi. Pi ya raspberry ina moduli ya bluetooth iliyoingia ambayo haina uchungu kuweka katika "master" mode na maktaba ya bluetooth ya chatu inafanya kazi kama hirizi. Pia miradi mingine ya kupendeza inawezekana kama kudhibiti gari kwa kutumia Alexa echo:)

Natumai ulifurahiya mradi huo na tafadhali acha maoni hapa chini!

Ilipendekeza: