Portfólió

Motorvezérlő és diagnosztikai rendszer

Arduino és Python alapú kétcsatornás DC motor vezérlés, automatikus teszteléssel és adatnaplózással.

Arduino Python Serial SQLite MySQL phpMyAdmin

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

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

GUI főablak

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)

PWM vezérlés

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

Log

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

adatok

Az adatbázis egy test_runs nevű táblát tartalmaz, amely minden egyes teszt futás eredményét eltárolja.

MySQL import (phpMyAdmin)

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

sql-fajl

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)

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

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