Masina Funky De Petreceri

Nume: Huzum Petrisor

Grupa: 331CB

Introducere

Proiectul este o masinuta cu telecomanda, dar telecomanda nu e o telecomanda fizica, ci o pagina web care ruleaza direct in browserul telefonului. Te conectezi la WiFi-ul masinii, deschizi Safari si ai pe ecran un joystick, butoane pentru lumini, semnalizatoare, girofare si claxon, plus un camp unde scrii orice text si masina il spune cu voce tare prin difuzorul ei (text-to-speech sintetizat local).

Ideea a pornit de la mai multe lucruri puse cap la cap. In primul rand, voiam sa fac ceva care sa nu fie inca o jucarie de pus pe raft dupa prezentare, ci ceva cu care sa ma joc efectiv. In al doilea rand, mi s-a parut interesant sa scap de telecomanda dedicata si sa folosesc telefonul, fiindca oricine poate sa il scoata din buzunar si sa controleze masina fara sa instaleze nimic. In final, partea de sonorizare cu TTS face din proiect ceva amuzant la petreceri, de unde si numele.

Utilitatea practica e mai mult de partea entertainment-ului, dar pe partea tehnica acopera o gama larga de subiecte din curs si laboratoare: UART pentru comunicatie intre microcontrollere, PWM pentru motoare si lumini, intreruperi pentru semnalizatoare si girofare, audio prin PWM pentru claxon si voce, plus integrarea unui modul WiFi extern.

Descriere generala

Sistemul are doua microcontrollere care lucreaza impreuna. ATmega328P-ul de pe placa Xplained Mini este creierul masinii: controleaza motoarele prin PWM hardware, gestioneaza luminile (faruri, stop-uri, semnalizatoare, girofare) printr-o masina de stari rulata pe intreruperi de timer, citeste eventualii senzori si redirectioneaza audio-ul catre difuzor. ESP32-ul are rolul de “punte” intre telefon si masina: ruleaza in mod Access Point, serveste pagina web statica si o conexiune WebSocket prin care primeste comenzile de la telefon. Comenzile primite sunt traduse intr-un protocol text simplu si trimise catre ATmega prin UART.

Pentru audio sunt doua moduri. Pentru claxon si fraze pre-inregistrate, ESP32 trimite un sample WAV stocat in memorie catre ATmega, care il reda prin PWM pe Timer2 filtrat printr-un RC trecere-jos si amplificat de un PAM8403. Pentru text-to-speech, ESP32 sintetizeaza local cu libraria ESP8266SAM (un port al sintetizatorului SAM din 1982), iar audio-ul rezultat trece pe acelasi lant. Voce robotica intentionata, cu vibe Speak & Spell.

Schema bloc:

  • Telefon iPhone se conecteaza la WiFi-ul ESP32 si deschide pagina web servita de acesta
  • ESP32 primeste comenzile prin WebSocket si le retrimite pe UART catre ATmega328P
  • ATmega328P controleaza motoarele, luminile si redarea audio
  • Driver TB6612FNG primeste semnale PWM + directie de la ATmega si conduce motoarele
  • Modulul audio (PAM8403 + difuzor) este alimentat de un pin PWM al ATmega prin filtru RC
  • Bateriile 18650 alimenteaza motoarele direct, iar logica printr-un buck converter la 5V

Schema bloc

Schema de mai sus reprezinta arhitectura initiala, planificata in faza de documentare. E posibil ca pe parcursul implementarii sa modific anumite alegeri (modul de alimentare, librariile folosite pentru ESP32, formatul protocolului UART), in functie de ce probleme apar la testare. Modificarile finale vor fi reflectate in versiunile actualizate ale schemei si in sectiunea de Software Design.

Hardware Design

Lista de piese

  • ATmega328P Xplained Mini (placa de la facultate)
  • ESP32 DevKit V1 (modul WiFi + server webapp + TTS local)
  • Sasiu masinuta 2WD cu motoare DC si roti
  • Driver de motoare TB6612FNG
  • Amplificator audio PAM8403
  • Difuzor 3W 4Ohm
  • 2 x acumulator Li-Ion 18650 + suport
  • Buck converter LM2596 (5V iesire)
  • 8 LED-uri: 2 albe (faruri), 2 rosii (stop-uri), 2 galbene (semnalizatoare), 1 rosu + 1 albastru (girofar)
  • Tranzistoare MOSFET 2N7000 pentru lumini
  • Rezistoare diverse (220, 330, 1k, 2k, 10k)
  • Rezistoare divizor pentru level shifting UART (5V la 3.3V)
  • Breadboard si fire dupont
  • Placa perforata pentru varianta finala

Pinout ATmega328P

Schema arata alocarea pinilor pentru toate perifericele. Toate cele 3 timere ale ATmega-ului sunt folosite: Timer0 pentru cele doua motoare (PWM hardware pe OC0A si OC0B), Timer1 pentru lumini fata-spate (faruri pe OC1A, stop-uri pe OC1B), iar Timer2 pentru audio (PWM rapid pe OC2A, filtrat printr-un RC trecere-jos). Semnalizatoarele si girofarele functioneaza pe software timing dintr-un singur ISR de 10ms care multiplexeaza toate clipirile.

Mentiune importanta: pinout-ul de mai sus reflecta planul initial. E foarte probabil sa il modific pe parcurs, fie din motive practice (conflicte intre periferice care nu erau evidente la inceput, alocari de timer mai bune pentru audio sau motoare), fie pentru ca apar componente extra (senzori, OLED) care cer pini suplimentari. Voi actualiza schema si tabelul pinilor cand sunt sigur de varianta finala.

Cateva puncte importante de hardware care apar in schema:

  • Pe linia ATmega TX (5V) catre ESP32 RX (3.3V) trebuie un divizor rezistiv (1k + 2k), altfel risc sa ard ESP-ul
  • Motoarele se alimenteaza direct din baterii (7.4V), nu prin placa, fiindca siguranta USB se taie la 500mA
  • LED-urile se controleaza prin tranzistoare 2N7000 ca sa nu trag prea mult curent direct din pinii ATmega
  • Toate GND-urile (baterii, ATmega, ESP32, driver, audio) trebuie sa fie comune pentru ca semnalele sa aiba referinta corecta

Schema electrica

(in lucru)

Software Design

Mediu de dezvoltare:

  • ATmega328P: Microchip Studio cu cod scris la nivel de registre (fara Arduino HAL)
  • ESP32: PlatformIO cu framework Arduino-ESP32, pentru WebServer, WebSocket si ESP8266SAM
  • Webapp: Probabil React

Librarii planificate pentru ESP32:

  • ESPAsyncWebServer (server HTTP + WebSocket)
  • ESP8266Audio (redare WAV din SPIFFS)
  • ESP8266SAM (text-to-speech local)

Pe partea de ATmega nu folosesc librarii externe, totul scris pe registre conform laboratoarelor 0-6.

Flux comenzi

Diagrama arata drumul unei comenzi de la apasarea unui buton in webapp pana la actiunea fizica (motor, LED, difuzor) si telemetria de raspuns. Latenta totala simtita de utilizator este sub 100ms in conditii normale de WiFi.

Protocol UART

Comenzile circula intre ESP32 si ATmega ca text simplu, terminat cu newline. Format ales pentru ca e usor de debug-uit cu un terminal serial conectat in paralel.

Comenzi de la ESP32 catre ATmega:

  • M<v_stg>:<v_dr> - viteza fiecarui motor (-255 la +255)
  • S - stop instant + lumini stop ON
  • F<nivel> - faruri (0=off, 1=faza scurta, 2=faza lunga)
  • T<L/R/0> - semnalizator stanga / dreapta / off
  • G<0/1> - girofar toggle
  • C<id> - reda sample-ul WAV cu indexul dat
  • A<lungime> - urmeaza un sample audio raw (TTS)
  • H - heartbeat (la fiecare 500ms)

Telemetrie de la ATmega catre ESP32:

  • B<procent> - status baterie 0-100%
  • D<cm> - distanta obstacol (daca am HC-SR04)
  • K<litera> - confirmare ultima comanda
  • E<cod> - cod eroare

Reguli de safety in firmware:

  • Daca nu primesc heartbeat 1 secunda, opresc motoarele automat
  • Apasarea butonului de panic stop intrerupe instant tot prin INT0
  • Daca bateria scade sub 20%, webapp-ul se face rosu si claxonul beepuie periodic
  • Sub 10%, opresc motoarele dar las luminile pornite ca sa pot gasi masina

Rezultate Obtinute

(sectiune completata la final)

Concluzii

(sectiune completata la final)

Download

(arhiva cu sursele se va incarca aici la final)

Jurnal

  • Saptamana 1: documentare, alegere arhitectura, comanda piese
  • Saptamana 2: scriere pagina wiki, schema bloc, planificare pinout
  • (continua pe masura ce avansez cu proiectul)

Bibliografie/Resurse

pm/prj2026/victor.stoica0203/petrisor.huzum.txt · Last modified: 2026/05/09 23:29 by petrisor.huzum
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0