ESC vagy kattintás a bezáráshoz

Saját
Projektek

Iskolai és szabadidős projektek — 3D nyomtatástól az elektronikán át a programozásig. Minden projekt saját ötlet, tervezés és kivitelezés.

3D Nyomtatás Solid Edge Raspberry Pi Python LED + Szervó PLA Filament
scroll
01
// 01

Projekt 1: Squid Game Baba

A Squid Game sorozatból ismert ikonikus baba 1:1 arányú mása — teljesen 3D nyomtatva PLA filamentből. Az alkatrészek külön-külön lettek tervezve és nyomtatva, majd összeszerelve alkotnak egy komplett animatronik figurát.

Egy lapon áll az összes alkatrész, mögötte a filmből ismert fa is megjelenik. A szervómotor 180 fokos fordulattal forgatja a fejet, a piros LED-ek villognak a fordulat pillanatában — pont mint az eredetiben.

5+ nyomtatási óra
6 STL alkatrész
180° szervó forgás
// Projekt specs
AnyagPLA Filament
TechnológiaFDM 3D Nyomtatás
VezérlőRaspberry Pi
MotorSzervómotor
Fény2× Piros LED
HangJack → Hangszóró
KódPython / pygame
InspirációSquid Game (Netflix)
02
// 02

STL Modellek

Az összes alkatrész külön STL fájlban lett megtervezve — így minden rész egyedileg nyomtatható és cserélhető. A modelleket Solid Edge-ben terveztem, majd STL formátumban exportáltam a szeletelőbe.

// STL alkatrészek
fej.stlBaba feje + szemfoglalat
test-elol.stlTest — elülső rész
test-hatul.stlTest — hátsó rész
kez-bal.stlBal kéz / végtagok
lab-bal.stlBal láb
tengely.stlSzervó tengely adapter
Fej STL
fej.stl
Test elöl STL
test-elol.stl
Test hátul STL
test-hatul.stl
Végtagok STL
végtagok.stl
Tengely STL
tengely.stl
Fa STL
fa.stl

// KATTINTS A KÉPEKRE A NAGYÍTÁSHOZ

03
// 03

Elektronika

A baba működéséhez egy Raspberry Pi gondoskodik a vezérlésről. A szervómotor a tengely alkatrészen keresztül forgatja a fejet pontosan 180 fokkal — ugyanúgy, mint a sorozatban. A két piros LED ellenállással sorosan van bekötve a fejben.

Raspberry Pi
Vezérlő egység — GPIO, hang lejátszás Jack kimeneten
Szervómotor
GPIO 18-as pin — 0°→180° fordulat pigpio PWM vezérléssel
2× Piros LED
GPIO 6-os pin — ellenállással sorosan, szinkron villogás
Hangszóró
Jack kábellel csatlakoztatva — pygame zenelejátszás
// GPIO kiosztás
GPIO 18Szervómotor PWM
GPIO 6LED kimenet
3.3V / 5VTápfeszültség
GNDKözös föld
Jack 3.5mmAudio kimenet
// Szervó paraméterek
Min szög
Max szög180°
Min pulzus0.5 ms
Max pulzus2.4 ms
LED villogás6× (0.2s ON / 0.2s OFF)
04
// 04

Python Kód

A Raspberry Pi Python programja a gpiozero és pygame könyvtárakat használja. A logika egyszerű: a zene elindul, 5 másodperc után a szervó megfordul 180 fokra, a LED-ek villognak hatszor, majd minden visszaáll — 20 másodperces szünet után újraindul a ciklus.

// 01 — INIT
Inicializálás
pygame audio beállítás, pigpio factory, szervó és LED objektumok létrehozása
// 02 — ZENE
Zene lejátszás
SquidZene.mp3 betöltése és lejátszása — 5 másodperces várakozás
// 03 — FORDULAT
180° fordulat
servo.angle = 180 — a baba feje megfordul, 0.5s várakozás
// 04 — LED
Szemvillogás
6× on/off ciklus (0.2s időzítéssel) — piros LED-ek villognak
// 05 — RESET
Visszaállás + szünet
servo.angle = 0, zene végig lejátszik, majd 20s szünet — újraindulás
// baba.py — Raspberry Pi vezérlő Python
1  from gpiozero import AngularServo, LED
2  from gpiozero.pins.pigpio import PiGPIOFactory
3  from time import sleep, time
4  import pygame
 
5  pygame.mixer.pre_init(frequency=44100,
       size=-16, channels=2, buffer=2048)
6  pygame.mixer.init()
 
7  factory = PiGPIOFactory()
8  servo = AngularServo(18,
       min_angle=0, max_angle=180,
       min_pulse_width=0.5/1000,
       max_pulse_width=2.4/1000,
       pin_factory=factory)
9  led = LED(6)
 
10 while True:
       servo.angle = 0// visszaállás
       sleep(1)
       pygame.mixer.music.load(…)
       pygame.mixer.music.play()
       // 5s várakozás…
       servo.angle = 180// 180° fordulat
       sleep(0.5)
       for _ in range(6):// LED villog 6×
           led.on(); sleep(0.2)
           led.off(); sleep(0.2)
       servo.angle = 0
       // zene vége + 20s szünet
       sleep(20)
05
// 05

Fejlesztési Fázisok

A projekt két nagyobb fázison ment keresztül — az első verzióban Arduino vezérelte a szervót és a LED-eket, de hang lejátszásra nem volt alkalmas. A végső verzióban Raspberry Pi-re váltottam, ami egyidejűleg tudja vezérelni a motort és lejátszani a zenét.

// Verzió összehasonlítás
Arduino (v1)Hang: ✗
Raspberry Pi (v2)Hang: ✓ Jack
SzinkronZene + motor szinkron
Audio libpygame.mixer
GPIO libgpiozero + pigpio
// Miért Raspberry Pi?
ArduinoNem tud MP3-t lejátszani
RPi + JackDirekt hangszóró kimenet
pigpioPontos PWM szervóvezérlés
pygameEgyszerű audio API
Szinkrontime() alapú időzítés
// Tanulság

Ha hanglejátszás is kell a projekthez, Arduino helyett érdemes rögtön Raspberry Pi-vel kezdeni — sokkal rugalmasabb és nem kell külön DAC modul sem.

06
// 06

Videók

A baba működés közben — először az Arduino-s teszt verzió, majd a végleges Raspberry Pi-s változat hanggal.

// V1 — Arduino teszt
// TESZT VERZIÓ
⤢ TELJES KÉPERNYŐ

Első verzió — szervó és LED működik, hang nincs. Arduino vezérlés.

// V2 — Végleges (hang + motor)
// VÉGLEGES VERZIÓ
⤢ TELJES KÉPERNYŐ

Végleges verzió — Raspberry Pi, szinkron zene + szervó + LED villogás.

02
// 02

Projekt 2: Jarvis AI

A Marvel vasemberes Jarvis ihlette saját, teljesen magyar nyelvű beszélgető AI asszisztens — valódi hangklónozással, mesterséges intelligenciával és fizikai eszközvezérléssel. A projekt célja egy olyan rendszer volt, ami nemcsak válaszol, hanem cselekszik is.

A Jarvis hangját a filmből vágtam ki — körülbelül 1.5-2 perc magyar szinkronos hanganyagból, mivel az eredeti angol hang nem volt megfelelő. Az ElevenLabs fizetős csomagja kellett a megfelelő minőséghez és a klónozás pontosságához.

Az AI agya a Google Gemini 2.5 Flash — ez felelős a természetes válaszokért. A kettő összekapcsolása az ElevenLabs Conversational AI API-n keresztül történik, ami egyszerre kezeli a hangot és az intelligenciát. A rendszer TCP socket szerveren figyel — egy „TAPS” jelre ébred fel, majd 10 másodperc inaktivitás után visszaalszik.

A végső verzióban Jarvis már a WiZ okos izzómat is vezérli — ha azt mondom neki hogy kapcsolja fel vagy le a lámpát, a Python kód értelmezi a parancsot és azonnal végrehajtja a pywizlight könyvtáron keresztül, hálózaton át.

// Projekt specs
Hang motorElevenLabs (fizetős)
AI modellGemini 2.5 Flash
Hangklónozás~1.5-2 perc filmhang
Hang nyelveMagyar szinkron
VezérlőRaspberry Pi
IoT eszközWiZ okos izzó
ProtokollTCP Socket (port 5000)
Aktiválás„TAPS” TCP jel
Standby limit10 másodperc
Könyvtárakpywizlight, elevenlabs
// Hogyan működik?
1. ÉbredésTCP „TAPS” jel érkezik
2. HallgatásMikrofon bekapcsol
3. ÉrtelmezésGemini 2.5 Flash feldolgoz
4. VálaszJarvis hangján megszólal
5. ParancsKulcsszó → WiZ izzó BE/KI
6. Alvás10mp inaktivitás → standby
2.5Gemini Flash
~2′hangklón alap
10sstandby limit
// Képek & Videók
Jarvis teszt
// TESZT KÉPERNYŐKÉP
// V1 — TESZT

Első teszt — alap hang + válasz

// V2 — VÉGLEGES

Végleges — WiZ izzóvezérléssel

// jarvis.py — teljes forráskód
// jarvis.pyPython
import socket, time, threading, sys, asyncio
from pywizlight import wizlight, PilotBuilder
from elevenlabs.client import ElevenLabs
from elevenlabs.conversational_ai.conversation import Conversation
from elevenlabs.conversational_ai.default_audio_interface import DefaultAudioInterface
 
// — KONFIGURÁCIÓ —
API_KEY = „sk_65c5…”
AGENT_ID = „agent_04…”
BULB_IP = „192.168.1.160”// WiZ izzó IP
client = ElevenLabs(api_key=API_KEY)
is_conversation_active = False
last_interaction_time = 0
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
 
async def set_light_async(state):
  try:
    light = wizlight(BULB_IP)
    if state: await light.turn_on(PilotBuilder(brightness=255))
    else: await light.turn_off()
  except Exception as e: print(f”WiZ hiba: {e}”)
 
def execute_command(text):
  t = text.lower()
  ignore = [„itt vagyok”, „hallasz”, „folytassa”]
  if any(p in t for p in ignore): return
  words = t.replace(„.”,„”).replace(„,”,„”).split()
  on_t = [„fel”, „be”, „világos”, „fény”, „felkapcsolom”]
  off_t = [„le”, „ki”, „sötét”, „oltsd”, „lekapcsolom”]
  conf = [„azonnal”, „természetesen”, „máris”, „parancsára”]
  if any(w in t for w in [„lámpa”, „világítás”, „fény”]) \
    or any(w in words for w in conf):
    if any(w in words for w in off_t):
      loop.run_until_complete(set_light_async(False))
    elif any(w in words for w in on_t):
      loop.run_until_complete(set_light_async(True))
 
def update_timer(text):
  global last_interaction_time
  if not any(p in text.lower() for p in [„itt vagyok”, „nem válaszol”]):
    print(f”Jarvis: {text}”)
    last_interaction_time = time.time()
    execute_command(text)
 
def run_jarvis():
  global is_conversation_active, last_interaction_time
  if is_conversation_active: return
  is_conversation_active = True
  last_interaction_time = time.time()
  print(„[!] JARVIS ÉBRED…”)
  try:
    conversation = Conversation(
      client, AGENT_ID, requires_auth=False,
      audio_interface=DefaultAudioInterface(),
      callback_agent_response=lambda t: update_timer(t),
    )
    conversation.start_session()
    while is_conversation_active:
      if time.time() – last_interaction_time > 10:
        conversation.end_session()
        is_conversation_active = False
      time.sleep(1)
  except Exception as e:
    print(f”Hiba: {e}”)
    is_conversation_active = False
 
def start_server():
  srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  srv.bind((‘0.0.0.0’, 5000))
  srv.listen(1)
  srv.settimeout(1.0)
  print(„— Jarvis Készenlétben! —„)
  while True:
    try:
      conn, addr = srv.accept()
      if „TAPS” in conn.recv(1024).decode():
        threading.Thread(target=run_jarvis, daemon=True).start()
      conn.close()
    except socket.timeout: continue
    except KeyboardInterrupt: break
 
if __name__ == „__main__”:
  try: start_server()
  except KeyboardInterrupt: sys.exit(0)
// Kódmagyarázat
// Import könyvtárak
socketTCP szerver — ébredési jel
asyncioAszinkron WiZ vezérlés
threadingPárhuzamos futás
pywizlightWiZ izzó Python API
ElevenLabsHang + Conversational AI
DefaultAudioInterfaceMikrofon / hangszóró
// Kulcsfüggvények
set_light_async()Izzó BE/KI aszinkron
execute_command()Kulcsszó értelmező
update_timer()Aktivitás időzítő
run_jarvis()Fő beszélgetés session
start_server()TCP szerver port 5000
// Hangklónozás folyamata

A filmből kivágott ~1.5-2 perc Jarvis hanganyagot feltöltöttem az ElevenLabs platformra. A rendszer ebből megtanulta a hang jellegzetességeit — a tonust, a ritmust, a magyar szinkronos kiejtést. Az ingyenes csomag nem volt elég pontos, ezért a fizetős verzióra váltottam a jobb minőség érdekében.