Motorvezérlő és diagnosztikai rendszer
Arduino és Python alapú kétcsatornás DC motor vezérlés, automatikus teszteléssel és adatnaplózással.
Projekt célja
A projekt célja egy olyan rendszer fejlesztése volt, amely képes két DC motor vezérlésére számítógépről, valamint a működés tesztelésére és naplózására.
A rendszer nem csak vezérli a motorokat, hanem képes ellenőrizni a kommunikációt, mérni a válaszidőt és eltárolni az adatokat.
Hardver felépítés
- Arduino UNO
- Motor shield
- 2 db DC motor
- Propellerek
- Akkumulátor
- Kapcsoló
Fizikai megvalósítás
A rendszer fő alkatrészei külön: Arduino, motorok, tápegység és vezérlő modul.
Az összeszerelt rendszer működés közben PWM vezérléssel szabályozza a motorok sebességét.
Grafikus felhasználói felület (GUI)
A rendszer vezérlésére egy Python alapú grafikus felület készült, amely lehetővé teszi a motorok irányítását, tesztelését és az eredmények megjelenítését.
Fő kezelőfelület
A főablakban megadható a kommunikációs port és a baud rate, valamint elindítható a teszt és az adat export.
Motor vezérlés (PWM)
A csúszkák segítségével a két motor sebessége külön-külön állítható 0–255 tartományban.
Motor indítás és leállítás
A START gomb elindítja a motorokat a beállított értékekkel, míg a STOP gomb azonnal leállítja őket.
Adatbázis lekérdezés
A felhasználó különböző szűrésekkel kérdezheti le a korábbi tesztek eredményeit.
Log rendszer
A log ablak valós időben mutatja a kommunikációt és a rendszer működését, így segít a hibák azonosításában.
GUI megvalósítás (Python)
root = tk.Tk()
root.title("VDiagnosticapp v0.5")
root.geometry("820x620")
self.m1_scale = ttk.Scale(root, from_=0, to=255,
orient="horizontal")
def on_start_fan(self):
self.send_cmd(f"SET 1 {v1}")
self.send_cmd(f"SET 2 {v2}")
self.send_cmd("START")
Arduino firmware
Az Arduino soros porton keresztül fogad parancsokat, és ezek alapján vezérli a motorokat.
PING kommunikáció
if (cmd == "PING") {
Serial.println("PONG");
}
Ez a legegyszerűbb ellenőrzés, hogy működik-e a kapcsolat.
PWM vezérlés
else if (cmd.startsWith("SET 1 ")) {
int v = cmd.substring(6).toInt();
pwm1 = constrain(v, 0, 255);
Serial.println("OK");
}
Python alkalmazás
A Python program biztosítja a felhasználói felületet és a kommunikációt.
Serial kommunikáció
ser.write((cmd + "\n").encode())
response = ser.readline().decode().strip()
Adatbázis mentés
cur.execute("""
INSERT INTO test_runs (
ts, pwm1, pwm2, duration_ms, passed
)
VALUES (?, ?, ?, ?, ?)
""")
Automatikus teszt
A rendszer egy előre definiált tesztet futtat:
STOP
PING
SET
START
WAIT
STOP
GET
A teszt végén eldönti, hogy a működés sikeres volt-e.
Adatkezelés és adatbázis
A rendszer működése során keletkező adatokat SQLite adatbázisban tároltam, majd ezeket MySQL formátumba exportáltam, hogy webes környezetben is feldolgozhatók legyenek.
Adatbázis szerkezet
Az adatbázis egy test_runs nevű táblát tartalmaz, amely minden egyes teszt futás eredményét eltárolja.
- ts – időbélyeg
- pwm1, pwm2 – motor sebességek
- duration_ms – futási idő
- passed – teszt eredménye (PASS / FAIL)
- ping_ms – válaszidő
- log_json – teljes kommunikáció log
MySQL import (phpMyAdmin)
Az exportált SQL fájlt phpMyAdmin segítségével importáltam. Az import után a tábla és az adatok automatikusan létrejöttek.
SQL export fájl
A Python alkalmazás képes SQL dump fájlt generálni, amely tartalmazza a tábla létrehozását és az adatokat is.
CREATE TABLE test_runs (
id BIGINT AUTO_INCREMENT,
ts DATETIME,
pwm1 INT,
pwm2 INT,
duration_ms INT,
passed TINYINT(1),
PRIMARY KEY (id)
);
Szerver környezet (XAMPP)
A MySQL adatbázis kezeléséhez XAMPP környezetet használtam, amely biztosítja az Apache és MySQL szolgáltatásokat.
Adatok megjelenítése
Az import után az adatok phpMyAdmin felületen lekérdezhetők és ellenőrizhetők. Minden sor egy teszt futást reprezentál.
A rendszer így képes a tesztek hosszú távú tárolására, visszakeresésére és elemzésére.
Alkalmazási lehetőségek
- robotika alap
- motor tesztelés
- oktatási cél
- debug rendszer