This is an old revision of the document!


Disco Car

Introducere

Prezentarea pe scurt a proiectului: Proiectul consta intr-o masinuta controlata cu ajutorul placutei Arduino, care, la apasarea unui buton, declanșeaza mai multe semnale acustice si luminoase, in timp ce masina se misca. Scopul principal al proiectului este realizarea unui sistem integrat de divertisment. Am pornit de la ideea de a imbina notiunile invatate pe parcursul laboratoarelor de PM cu creativitatea. Astfel proiectul este util ca exemplu de combinare a elementelor de hardware cu sofware dar de asemenea este util si ca mijloc de divertisment.

Descriere generală

Switch On/Off

  • Comută alimentarea plăcii Arduino şi activează starea de “ready”.

Butoane

  • Buton LED: aprinde toate LED-urile.
  • Buton Display: activează afișajul pe LCD.
  • Buton Start: porneşte redarea audio pe buzzer şi motoarele DC.

Arduino UNO R3 (ATmega328P + ATmega16U2)

  • Primeşte semnale de la switch şi butoane.
  • Generează semnale PWM pentru buzzer şi motoare, şi comandă LED-urile pe GPIO.
  • Comunică cu display-ul pe I2C.

LCD Display (I2C)

  • Afișează mesaje.
  • Foloseşte I2C.

LED-uri

  • Indicatoare luminoase.
  • Controlate direct de Arduino prin GPIO.

Buzzer

  • Redă muzică.
  • Controlat prin PWM.

L298N Driver

  • Traduce semnalele PWM de la Arduino în curent pentru motoarele DC.
  • Oferă protecție la suprasarcină și alimentare separată pentru logică și motoare.

Motoare DC

  • Propulsia maşinuței: 6–12 V, conectate la ieșirile driverului.
  • Permit deplasarea masinutei.

Hardware Design

Componente folosite:

  • Arduino Uno
  • Motoare DC
  • Buzzer
  • Display
  • Butoane
  • LED-uri
  • Driver motoare L298N

Pini folositi:

Buzzer (HONK_PIN)

  • signal: D3
  • GND: GND Arduino
  • VCC: — buzzer pasiv nu are alimentare separată (folosește pin digital 3 pentru semnal)

Buton pentru buzzer (NITRO_BUTTON_PIN)

  • Pin semnal buton: D12
  • Celălalt picior: GND Arduino

Buton pentru LED-uri (LED_BUTTON_PIN)

  • Pin semnal buton: D2
  • Celălalt picior: GND Arduino

Buton pentru display (LCD_SWITCH_PIN)

  • Pin semnal buton: A3 (pin analogic folosit ca digital)
  • Celălalt picior: GND Arduino

LED verde (LED_GREEN_PIN)

  • Pin: D4
  • GND: prin rezistență către GND breadboard/Arduino

LED roșu (LED_RED_PIN)

  • Pin: D5
  • GND: prin rezistență către GND

LED1 verde (LED1_G)

  • Pin: D6
  • GND: prin rezistență către GND

LED1 roșu (LED1_R)

  • Pin: D7
  • GND: prin rezistență către GND

Motoare (control driver L298N) - pini de control IN1..IN4

  • IN1 (motor stânga) → D8
  • IN2 (motor stânga) → D9
  • IN3 (motor dreapta) → D10
  • IN4 (motor dreapta) → D11
  • ENA, ENB → Jumper (alimentați permanent pe driver)

Display LCD I2C

  • VCC → 5V
  • GND → GND
  • SDA → A4
  • SCL → A5

Implementare Hardware

Software Design

Mediu de dezvoltare: PlatformIO

Microcontroler: Arduino Uno

Cod scris în limbaj C++ cu utilizarea librăriilor Arduino.

Librării utilizate:

  • Arduino.h – bibliotecă de bază pentru funcționalități fundamentale: control pini, temporizări, comunicare serială.
  • Wire.h (implicit în LiquidCrystal_I2C) – pentru comunicarea I2C (folosită de LCD-ul I2C).
  • LiquidCrystal_I2C.h – pentru controlul afișajului LCD cu interfață I2C.

Funcții principale:

  • playmusic() – Redă melodia pe buzzerul conectat la pinul 3, folosind funcția tone().
  • switchNitro() – Interrupere pe pinul 2 pentru comutarea stării nitro.
  • setup() – Inițializează toate pinii (input cu pull-up pentru butoane, output pentru LED-uri și motoare), initializează LCD-ul, configurează întreruperi.
  • loop() – care detectează apăsările de butoane și comută stări (mod LED-uri, pornire/oprire buzzer), controlează modurile LED-urilor (normal sau intermitent - police), controlează pornirea/oprirea melodiilor pe buzzer la apăsarea butonului, controlează motoarele pe baza comenzilor primite (din serial sau variabilă cmd).

Logica butoanelor și stărilor:

  • Butonul buzzer (pin 12) comută o variabilă booleană buzzerOn.

Dacă buzzerOn == true, se pornește melodia, altfel se oprește.

  • Butonul LED-uri (pin 2) comută între moduri de iluminare a LED-urilor.
  • Butonul LCD (pin A3) comută backlight-ul LCD-ului.
  • Motoarele sunt controlate prin comenzi (valori cmd între 5 și 9) primite de la serial sau din altă sursă (nu este clar în cod cum anume se modifică cmd).

Pattern-uri de design: Debounce simplificat butoane: verificare stare anterioară și stare curentă pentru detectarea apăsărilor (flanc descendent).

State machine simplificată: LED-urile au moduri NORMAL și POLICE care schimbă comportamentul în funcție de ledMode.

Event-driven buzzer: pornirea/oprirea buzzerului este controlată doar la apăsarea butonului (nu permanent).

Rezultate Obţinute

În urma implementării și testării proiectului, am reușit să dezvolt un sistem funcțional cu următoarele caracteristici:

  • Controlul motorului: Motoarele s-au putut porni și opri corect folosind comenzile implementate, iar direcția de deplasare (înainte, înapoi, stânga, dreapta) a fost controlată cu succes
  • Butoanele: au fost corect integrate, permițând schimbarea modurilor LED-urilor și controlul buzzerului si al display-ului
  • Buzzerul și melodia: Buzzerul a redat corect melodia la apăsarea butonului, iar oprirea melodiei la a doua apăsare s-a realizat fără probleme.
  • LED-urile: LED-urile s-au aprins în modurile programate (normal și intermitent).
  • Afișajul LCD: Display-ul LCD a afișat mesajele corespunzătoare

Concluzii

  • Acesta a fost primul meu proiect hardware-software cu Arduino, iar experiența a fost foarte interesanta. Am învățat să controlez motoare, LED-uri, buzzer și LCD, iar sistemul funcționează conform așteptărilor.

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Bibliografie/Resurse

pm/prj2025/atoader/alexia_maria.rat.1748431013.txt.gz · Last modified: 2025/05/28 14:16 by alexia_maria.rat
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