Cov txheej txheem:

Hackable Chaw Taws Teeb rau ZenWheels Microcar: 7 Kauj Ruam
Hackable Chaw Taws Teeb rau ZenWheels Microcar: 7 Kauj Ruam

Video: Hackable Chaw Taws Teeb rau ZenWheels Microcar: 7 Kauj Ruam

Video: Hackable Chaw Taws Teeb rau ZenWheels Microcar: 7 Kauj Ruam
Video: QHIA QHOV TSEEB - KUB VAJ LOOG TSUA NEW MUSIC VIDEO 2022 2024, Lub rau hli ntuj
Anonim
Image
Image
Los ua ke
Los ua ke

Hauv qhov kev qhia no peb yuav tsim kev tswj chaw taws teeb rau ZenWheels microcar. ZenWheels microcar yog lub tsheb me me 5 cm uas tuaj yeem tswj tau los ntawm daim ntawv thov Android lossis Iphone. Kuv yuav qhia koj yuav ua li cas thim rov qab tus kws tshaj lij Android daim ntawv thov kom paub txog cov txheej txheem kev sib txuas lus thiab koj tuaj yeem tsim kev tswj chaw taws teeb siv arduino thiab lub gyroscope.

Kauj Ruam 1: Cheeb Tsam & Cov Cuab Yeej

Qhov:

1. Lub ZenWheels microcar

2. Arduino pro mini 328p

3. Cov qhob cij

4. MPU6050 gyroscope

5. lub zog siv hluav taws xob <= 5 v (qee lub roj teeb uas peb tuaj yeem txuas rau lub khob cij)

6. U-puab jumper cables (yeem). Kuv tau siv cov jumper cables vim tias lawv zoo dua ntawm daim ntawv tais. Cov hlua txuas txuas tsis tu ncua tuaj yeem siv tau dua

7. HC-05 bluetooth module (nrog lub pob nkag rau hom AT)

Cov Cuab Yeej:

1. USB rau txuas FTDI adapter FT232RL rau programm Arduino pro mini

2. Arduino IDE

3. Android Xov Tooj

4. Android Studio [Tsis teb los tau]

Kauj Ruam 2: Rov Ua Haujlwm Engineering ZenWheels Android Application [yeem]

Qee qhov kev paub txog Java thiab Android yuav tsum nkag siab qhov no.

Lub hom phiaj ntawm txoj haujlwm yog tswj hwm lub microcar siv lub gyroscope. Txog qhov no peb yuav tsum nrhiav kom paub ntau ntxiv txog kev sib txuas lus bluetooth ntawm cov khoom ua si no thiab hauv app.

Hauv theem no kuv yuav piav qhia yuav ua li cas thim rov qab tus kws tsim txuj ci kev sib txuas lus ntawm lub microcar thiab hauv app. Yog tias koj tsuas xav tsim lub chaw taws teeb no cov kauj ruam no tsis tsim nyog. Ib txoj hauv kev kom pom cov txheej txheem yog saib lub hauv paus chaws. Hmm tab sis qhov no tsis yog ncaj nraim rau hauv, cov ntawv thov hauv Android tau muab tso ua ke thiab ib tus tuaj yeem nruab apk los ntawm google ua si.

Yog li kuv tau ua phau ntawv qhia yooj yim rau ua qhov no:

1. Rub tawm APK. Cov Khoom Siv Hauv Pob (APK rau luv luv) yog pob ntawv ua hom ntawv siv los ntawm Android ua haujlwm rau kev faib khoom thiab teeb tsa ntawm mobile apps

Ua ntej tshawb nrhiav daim ntawv thov hauv google play store, hauv peb qhov kev tshawb nrhiav "zenwheels" thiab koj yuav tau txais daim ntawv thov txuas

Tom qab ntawd tshawb hauv google rau "online apk downloader" thiab siv ib qho los rub lub apk. Feem ntau lawv yuav thov rau daim ntawv thov txuas (qhov peb tau txais ua ntej), tom qab ntawd peb yuav nyem lub pob rub tawm thiab khaws nws hauv peb lub computer.

2. Decompile APK. Tus decompiler hauv peb qhov xwm txheej yog cov cuab yeej siv APK thiab tsim Java cov cai.

Qhov kev daws teeb meem yooj yim tshaj plaws yog siv decompiler online los ua txoj haujlwm. Kuv tau tshawb google rau "online decompliler" thiab kuv tau xaiv https://www.javadecompilers.com/. Koj tsuas yog yuav tsum rub tawm APK koj tau txais ua ntej thiab

nias lub decompile. Tom qab ntawd koj tsuas yog rub tawm cov peev txheej.

3. Sim thim rov qab engineer saib los ntawm txoj cai

Txhawm rau qhib qhov haujlwm koj xav tau tus kws kho ntawv lossis zoo dua IDE (ib puag ncig kev txhim kho ib puag ncig). Lub hauv paus IDE rau Android Cov Haujlwm yog Android Studio (https://developer.android.com/studio). Tom qab koj tau teeb tsa Android Studio qhib lub phiaj xwm phiaj xwm.

Vim tias peb lub tsheb tau tswj hwm los ntawm bluetooth kuv pib kuv tshawb nrhiav hauv cov lej sib cais nrog lo lus tseem ceeb "bluetooth", los ntawm qhov tshwm sim kuv tau pom "BluetoothSerialService" tau tuav ntawm kev sib txuas lus. Yog tias chav kawm no ua haujlwm sib txuas lus ces nws yuav tsum muaj txoj hauv kev xa cov lus txib. Hloov tawm muaj ib txoj hauv kev sau uas xa cov ntaub ntawv los ntawm bluetooth channel:

pej xeem void sau (byte tawm)

Nov yog qhov pib zoo, kuv tau tshawb nrhiav.write (siv txoj hauv kev thiab muaj chav kawm "ZenWheelsMicrocar" uas txuas ntxiv peb "BluetoothSerialService". Cov chav kawm no muaj feem ntau ntawm cov laj thawj ntawm peb kev sib txuas lus dhau Bluetooth. cov laj thawj yog nyob hauv cov tswj: BaseController thiab StandardController.

Hauv BaseController peb muaj qhov pib ua haujlwm, thiab tseem txhais cov ntsiab lus ntawm lub kauj thiab lub qhov ncauj, cov channel yog qhov tseeb hais ua ntej ua ntej kom qhia meej tias qee hom kev hais kom ua yuav ua raws:

tiv thaiv ZenWheelsMicrocar microcar = tshiab ZenWheelsMicrocar (qhov no, this.btHandler);

tiv thaiv ChannelOutput cov txiaj ntsig = {TrimChannelOutput tshiab (ZenWheelsMicrocar. STEERING_CHANNEL), TrimChannelOutput tshiab (ZenWheelsMicrocar. THROTTLE_CHANNEL)};

Hauv StandardController lub kauj yog ua haujlwm hauv:

pej xeem tsis muaj nuj nqis handleSteering (TouchEvent touchEvent) {

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

Txheeb xyuas tus txheej txheem, tus tswj hwmOutput.channel muaj tus nqi 129 (channel siv rau lub luag haujlwm) thiab steeringOutput.resolveValue () yuav muaj tus nqi nruab nrab ntawm -90 thiab 90. Tus nqi channel (129) raug xa ncaj qha, thiab tus nqi hloov pauv los ntawm kev thov ua haujlwm me ntsis:

tus kheej kawg int tus nqi_convert_out (tus nqi) {

boolean tsis zoo = tsis tseeb; yog (tus nqi <0) {tsis zoo = f6D; } int tus nqi 2 = tus nqi & 63; yog (tsis zoo) {rov qab tus nqi 2 | 64; } rov qab tus nqi 2; }

Muaj ib txoj hauv kev zoo sib xws hauv StandardController hu ua

pej xeem tsis muaj nuj nqis handleThrottle (TouchEvent touchEvent)

Kauj Ruam 3: Cheebtsam

Qhov:

1. Arduino pro mini 328p 2 $

2. Cov qhob cij

3. MPU6050 gyroscope 1.2 $

4. HC-05 tus tswv-qhev 6 tus lej module 3 $

5. 4 x AA roj teeb pob nrog 4 roj teeb

6. U-puab jumper cables (yeem). Kuv tau siv cov jumper cables vim tias lawv saib zoo dua ntawm lub khob cij, thiab cov leds pom ntau dua li no. Yog tias koj tsis muaj cov kab no koj tuaj yeem hloov lawv nrog dupont xov hlau.

Tus nqi saum toj no tau coj los ntawm eBay.

Cov Cuab Yeej:

1. USB rau serial FTDI adapter FT232RL rau program arduino pro mini

2. Arduino IDE

3. Android Studio (yeem yog tias koj xav thim rov qab tus kheej tus kheej)

Kauj ruam 4: Sib dhos

Los ua ke
Los ua ke

Kev sib dhos yog yooj yim heev vim tias peb tab tom ua nws ntawm lub khob cij:)

- ua ntej peb tso peb cov khoom siv rau ntawm lub khob cij: lub microcontroller, bluetooth module thiab gyroscope

- txuas HC-05 bluetooth RX thiab TX pins rau arduino 10 thiab 11 tus pin. Lub gyroscope SDA thiab SCL yuav tsum txuas nrog rau arduino A4 thiab A5 pins

- txuas lub hwj huam txuas rau bluetooth, gyro thiab arduino. cov pins yuav tsum txuas nrog lub + thiab - ntawm sab ntawm lub khob cij

- kawg txuas lub zog siv hluav taws xob (nruab nrab ntawm 3.3V txog 5V) rau lub khob cij, kuv tau siv LiPo me me ib lub roj teeb ntawm tes tab sis ib qho yuav ua ntev li nws nyob hauv lub zog ntau

Thov kos cov duab saum toj no kom paub meej ntxiv

Kauj Ruam 5: Pair HC-05 Bluetooth rau Microcar

Pair HC-05 Bluetooth rau Microcar
Pair HC-05 Bluetooth rau Microcar
Pair HC-05 Bluetooth rau Microcar
Pair HC-05 Bluetooth rau Microcar
Pair HC-05 Bluetooth rau Microcar
Pair HC-05 Bluetooth rau Microcar

Txog qhov no koj yuav xav tau lub xov tooj Android, bluetooth HC-05 module thiab cov txuas FTDI txuas nrog cov xov hlau. Tsis tas li peb yuav siv Arduino IDE los tham nrog lub bluetooth module.

Ua ntej peb yuav tsum nrhiav qhov chaw nyob microcar bluetooth:

- qhib bluetooth ntawm koj lub xov tooj

- fais fab ntawm lub tsheb thiab mus rau ntu bluetooth ntawm koj qhov chaw hauv Android

- tshawb nrhiav cov cuab yeej tshiab thiab qee lub cuab yeej hu ua "Microcar" yuav tsum tshwm sim

- khub nrog cov cuab yeej no

- tom qab ntawd txhawm rau rho tawm bluetooth MAC, kuv tau siv daim ntawv thov no los ntawm google ua si Serial Bluetooth Terminal

Tom qab teeb tsa lub app no, mus rau cov ntawv qhia zaub mov -> cov cuab yeej thiab nyob ntawd koj yuav muaj cov npe nrog txhua lub bluetooth ua ke deveices. Peb tsuas yog xav paub tus lej hauv qab no "Microcar" mine yog 00: 06: 66: 49: A0: 4B

Tom ntej txuas FTDI adapter rau bluetooth module. Thawj VCC thiab GROUND pins thiab tom qab ntawd FTDI RX rau bluetooth TX thiab FTDI TX rau bluetooth RX. Tsis tas li yuav tsum muaj tus pin ntawm bluetooth module uas yuav tsum txuas nrog VCC. Ua qhov no bluetooth module nkag mus rau "hom programmable". Kuv tus qauv muaj lub pob uas txuas VCC rau tus pin tshwj xeeb ntawd. Thaum koj ntsaws FTDI rau hauv USB nws yuav tsum nrog tus pin txuas nrog / khawm nias kom nkag mus rau hauv qhov tshwj xeeb programmable hom. Lub bluetooth lees paub tias nkag mus rau hom kev ua haujlwm no los ntawm kev ntsais muag qeeb txhua txhua 2 vib nas this.

Hauv Arduino IDE xaiv qhov chaw nres nkoj txuas, tom qab ntawd qhib lub ntsuas saib (Ob qho NL thiab CR nrog 9600 baud tus nqi). Ntaus AT thiab tus qauv yuav tsum lees paub nrog "OK".

Ntaus "AT+ROLE = 1" txhawm rau muab tus qauv ua tus tswv hom. Txhawm rau ua ke nrog koj tus qauv bluetooh sau: "AT+BIND = 0006, 66, 49A04B", Pom zoo li cas peb "00: 06: 66: 49: A0: 4B" tau hloov pauv mus rau "0006, 66, 49A04B". Zoo koj yuav tsum ua tib qho kev hloov pauv rau koj bluetooh MAC.

Tam sim no lub zog ntawm Zenwheels lub tsheb tom qab ntawd tshem lub FTDI thiab txuas nws dua nws yam tsis muaj lub pob nyem / tus pin tshwj xeeb txuas nrog. Tom qab ib ntus nws yuav tsum txuas mus rau lub tsheb thiab koj yuav pom tias lub tsheb ua lub suab sib txuas tshwj xeeb ua tiav.

Teeb meem:

- Kuv pom tias los ntawm txhua tus qauv Bluetooth kuv muaj, tsuas yog ib lub khawm ua haujlwm ua tus tswv!

- xyuas kom lub tsheb tau them tag nrho

- xyuas kom lub tsheb tsis txuas nrog lub xov tooj

- yog tias Bluetooth nkag mus rau hauv AT hom (ntsais ntsais maj mam) tab sis nws tsis teb cov lus txib kom ntseeg tau tias koj muaj ob qho NL & CR, thiab tseem sim nrog lwm tus nqi BAUD

- ob zaug txheeb xyuas RX txuas nrog TX thiab rov ua dua

- sim qhov kev qhia no

Kauj Ruam 6: Txoj Cai & Siv

Ua ntej koj yuav tsum rub tawm thiab teeb tsa ob lub tsev qiv ntawv:

1. MPU6050 lub tsev qiv ntawv rau lub gyroscope

2. I2CDev lub tsev qiv ntawv qhov chaw

Tom qab ntawd rub tawm thiab teeb tsa kuv lub tsev qiv ntawv los ntawm no lossis luam nws los ntawm hauv qab no:

/** * Cov tsev qiv ntawv: * 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 = tsis tseeb; // teeb tsa tseeb yog tias DMP pib ua tiav

uint8_t mpuIntStatus; // tuav qhov xwm txheej cuam tshuam los ntawm MPU uint8_t devStatus; // rov qab xwm txheej tom qab txhua lub cuab yeej ua haujlwm (0 = ua tiav,! 0 = yuam kev) uint16_t packetSize; // xav tias DMP pob ntawv loj (lub neej ntawd yog 42 bytes) uint16_t fifoCount; // suav ntawm txhua bytes tam sim no hauv FIFO uint8_t fifoBuffer [64]; // FIFO cia tsis Quaternion q; // [w, x, y, z] quaternion ntim VectorFloat lub ntiajteb txawj nqus; // [x, y, z] lub ntiajteb txawj nqus vector ntab ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector volatile bool mpuInterrupt = cuav; // qhia seb MPU cuam tshuam tus pin tau nce siab

unsigned ntev lastPrintTime, lastMoveTime = 0;

SoftwareSerial BTserial (10, 11);

MPU6050 mpu;

void teeb tsa ()

{Serial.begin (9600); BTserial.begin (38400); Serial.println ("Pib qhov program"); initialization = initializeGyroscope (); }

void voj () {

yog (! initialization) {rov qab; } mpuInterrupt = tsis tseeb; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); yog (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); rov qab; } yog (mpuIntStatus & 0x02) {thaum (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& lub ntiajteb txawj nqus, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & lub ntiajteb txawj nqus); steer (ypr [0] * 180/M_PI, ypr [1] * 180/M_PI, ypr [2] * 180/M_PI); }}

/*

* Tau txais lub kaum sab xis ntawm 0 txog 180 qhov twg 0 yog sab laug sab laug thiab 180 yog txoj cai siab tshaj plaws * Tau txais nrawm los ntawm -90 txog 90 qhov twg -90 yog qhov siab tshaj plaws rov qab thiab 90 yog qhov siab tshaj plaws rau pem hauv ntej */ tsis muaj kev txav mus ZwheelsCar (byte kaum sab xis, int nrawm) {yog (millis () - lastMoveTime = 90) {resultAngle = daim ntawv qhia (kaum, 91, 180, 1, 60); } lwm yog (lub kaum sab xis 0) {resultSpeed = daim ntawv qhia (nrawm, 0, 90, 0, 60); } lwm qhov yog (nrawm <0) {resultSpeed = daim ntawv qhia (nrawm, 0, -90, 120, 60); } Serial.print ("actualAngle ="); Serial.print (lub kaum sab xis); Serial.print (";"); Serial.print ("qhov tseebSpeed ="); 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 = txwv (x, -1 * MAX_ANGLE, MAX_ANGLE); y = txwv (y, -1 * MAX_ANGLE, MAX_ANGLE); z = txwv (z, -MAX_ANGLE, MAX_ANGLE); int kaum = daim ntawv qhia (y, -MAX_ANGLE, MAX_ANGLE, 0, 180); int ceev = daim ntawv qhia (z, -MAX_ANGLE, MAX_ANGLE, 90, -90); printDebug (x, y, z, lub kaum ntse ntse, nrawm); txav ZwheelsCar (lub kaum ntse ntse, nrawm); }

void printDebug (int x, int y, int z, int lub kaum ntse ntse, int ceev)

{yog (millis () - lastPrintTime <1000) {rov; } 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 ("lub kaum ="); Serial.print (lub kaum sab xis); Serial.print (";"); Serial.print ("nrawm ="); Serial.print (nrawm); Serial.println (";"); lastPrintTime = millis (); }

bool initializeGyroscope ()

{Wire.begin (); mpu.initialize (); Serial.println (mpu.testConnection ()? F ("MPU6050 kev sib txuas ua tiav"): F ("MPU6050 kev sib txuas tsis tau tiav")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); yog (devStatus! = 0) {Serial.print (F ("DMP Initialization ua tsis tau tejyam (code"))); Serial.println (devStatus); rov qab tsis tseeb;} mpu.setDMPEnabled (tseeb); Serial.println (F ("Enabling cuam tshuam kev txheeb xyuas (Arduino sab nraud cuam tshuam 0)… ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP npaj tau! Tos thawj qhov cuam tshuam … ")); packetSize = mpu.dmpGetFIFOPacketSize (); rov tseeb;}

tsis muaj dab tsi dmpDataReady ()

{mpuInterrupt = tseeb; }

boolean hasFifoOverflown (int mpuIntStatus, int fifoCount)

{rov qab mpuIntStatus & 0x10 || fifoCount == 1024; }

Tshaj tawm cov cai siv FTDI adapter mus rau arduino ces txuas lub roj teeb.

Siv cov chaw taws teeb:

Tom qab lub arduino tau siv hluav taws xob, tseem muaj hwj chim ntawm lub tsheb. HC-05 tus qauv yuav tsum txuas rau lub tsheb, thaum qhov ntawd tshwm sim lub tsheb yuav tawm suab. Yog tias nws tsis ua haujlwm thov txheeb xyuas cov kauj ruam dhau los thiab ntu kev daws teeb meem.

Yog tias koj ntxeev daim phiaj rau tom hauv ntej lub tsheb yuav tsum txav mus rau tom ntej, sab xis thiab lub tsheb yuav tsum txav mus sab xis. Nws kuj tseem ua ntau qhov kev txav mus zoo li inclining me ntsis rau pem hauv ntej thiab sab laug me ntsis hauv qhov no lub tsheb yuav qeeb mus rau sab laug.

Yog tias lub tsheb mus rau qee txoj kev sib txawv thaum suav nrog lub khob cij ua ntej tuav lub khob cij rau hauv cov lus qhia sib txawv.

Nws ua haujlwm li cas:

Cov duab kos tau txais lub gyroscope tswj hwm txhua 100 ms, ua cov lus suav thiab tom qab ntawd xa hla bluetooth lub tsheb txib. Ua ntej muaj "txoj cai" txoj hauv kev uas tau hu nrog cov ny x, y thiab z cov ces kaum. Txoj kev no hloov pauv txoj hlua ntawm 0 thiab 180 degrees thiab kev nrawm ntawm -90 thiab 90. Txoj kev no hu

void moveZwheelsCar (byte angle, int speed) uas hloov lub kauj thiab nrawm mus rau ZenWheels cov lus qhia tshwj xeeb thiab tom qab ntawd xa cov lus txib siv bluetooth.

Qhov laj thawj kuv tau ua qhov hloov pauv hauv ob kauj ruam, yog rov siv tau. yog tias kuv xav tau hloov kho qhov kev kos duab no rau kev tswj chaw taws teeb qee qhov lwm yam cuab yeej kuv yuav pib los ntawm cov hauv paus txheej txheem "steer" uas twb tau qhia txog qhov nrawm thiab coj mus rau qee qhov txiaj ntsig.

Kauj Ruam 7: Kev Xaiv

Lwm txoj hauv kev rau "thim rov qab engineering". Kuv tau tham txog yuav ua li cas thim rov qab tus tsim txoj haujlwm los ntawm kev pib nrog Android daim ntawv thov. Tab sis muaj lwm txoj hauv kev rau qhov no koj tuaj yeem teeb tsa tus lej FTDI + bluetooth qhev (ib txwm HC-05 yam tsis tau hais qhia tus tswv teeb tsa). Tom qab ntawd los ntawm ZenWheels app txuas rau HC-05 hloov qhov "microcar".

Txhawm rau txiav txim siab cov lus txib koj yuav tsum tau tuav lub kauj hauv qee txoj haujlwm, tom qab ntawd siv cov ntawv nab nab los txheeb xyuas kev sib txuas lus. Kuv tab tom qhia tsab ntawv nab nab vim tias tsis muaj cov cim luam tawm thiab Arduino IDE nws tsis haum rau qhov ntawd. Koj yuav pom tias yog tias koj tuav lub log nyob hauv ib txoj haujlwm app yuav xa mus tas li tib ob bytes. Yog tias koj hloov lub log txoj haujlwm lub nrig byte yuav zoo ib yam zaum ob yuav hloov. Tom qab ntau qhov kev sim siab koj tuaj yeem tuaj yeem ua raws txoj kev ua haujlwm, tom qab ntawd thim rov qab tus kws tsim hluav taws xob thiab lwm yam.

Lwm txoj hauv kev rau arduino raws cov chaw taws teeb yuav yog RaspberryPi chaw taws teeb. Raspberry pi muaj cov qauv siv bluetooth uas tsis muaj teeb meem teeb tsa hauv "tus tswv" hom thiab cov nab kuab bluetooth tsev qiv ntawv ua haujlwm zoo li ntxim nyiam. Tsis tas li qee qhov haujlwm txaus nyiam tuaj yeem ua tau xws li tswj lub tsheb siv Alexa ncho:)

Kuv vam tias koj txaus siab rau txoj haujlwm thiab thov tawm lus hauv qab no!

Pom zoo: