Android okostelefonnal irányított RC autó

írta: y@g4n, 3 éve

Eredetileg egy egyetemi tárgyra készült el egy elég kezdetleges kis cucc, tudott előre és hátrafelé menni, de nem volt elég kraftos, így összeraktam hogy tudjam kormányozni is.

Szinte mindenhol kész komponenseket használok:

ESP32: a mikrokontroller és a wifimodul szerepét tölti be
L298N: a motor driver, pwm-mel megy
PCA9685: a szervó driver, szintén pwm-mel megy
külső akksi: az ESP-nek biztosít tápellátást
totálisan biztonságos 18650 cellák: tápellátás a szervó és a motor drivereknek
MG996R: ez az eredeti kormányzó szerkezet helyére került be

A működése eléggé fapados, az ESP-nek hotspottal osztok wifit, ezután az ESP szerver üzemmódba kapcsol (van egy tök jó kis WiFi.h ilyenekre), a telefon pedig kliensként funkcionál, socketen keresztül kommunikálnak.
Találtam egy nagyon jó kis okosságot javában, a sendUrgentData metódust, ami egy bájtnyi adatot instant kiküld, és lényegében ez minden utasításnak (előre, hátra, balra, jobbra, stb.) a működési elve. Pl. "előre" esetén kiküldi az 'F' és a 'W' karaktereket ascii decimálisban, az ardunio a vevő oldalon pedig erre azt reagája hogy elindítja a motort.

Jó darabig az volt a fejemben hogy az lesz a jó ötlet, hogy amikor a telefonon lenyomva tartom az előre gombot, akkor folyamatosan küldi ki az "előre" parancsot sokszor, ('F', 'W'), így arduino oldalon lévő "forwardAcceleration()" (amivel megyek előre) hívódik meg sokszor, azaz motor bekapcs, megy kb 100ms-ig, majd motor kikapcs; motor be, 100ms pwm, motor ki...

Nem jött be, nem volt egyenletes a motor futása, lassította a ciklust, és bekavart a kanyarodásba teljesen,
majd jött az ötlet hogy amikor lenyom a gombot, akkor egyszer kiküldöm hogy ('F', 'W'), és az előző megoldással ellentétben a forwardAcceleration() nem kapcsolja ki a motort, hanem hagyha futni, kikapcsolni pedig akkor fog, amikor elemelem az ujjamat a gombról (ezt androidban lehet figyelni MotionEvent-ekkel).
Kiderült hogy ez teljesen oksán működik, a kanyarodást is átalakítottam így.

Meglepően jól irányítható ilyen módon, a parancsok nem szólnak bele egymásba.

Kódilag a működőképesség vezérelt elsősorban, és nem a szépség.

vidi:

kód:
[link]

Boncasztalon:

Precizíós összeszerelt állapotban:

További terv innen, hogy egy Jetson Nano által irányítható legyen, egyszerű sávkövetés a cél.
A Nano-ra kapcsolt kamera képét feldolgozza a Nano, majd a neurális háló kiköp egy sebességet, egy kanyarodási irányt, és hogy az adott irányba mekkora szögben forduljon el a kerék.