Disco Lights

Autor

Nume: Popescu Vlad Cristian
Grupa: 336CA

Introducere

Am ales acest tip de proiect pentru pentru că dorește să îmbine concepte și idei ale proiectelor care sunt posibile cu un Arduino Uno. Astfel, am ales să îmbin dorința de învățare cu nevoile mele prin realizarea unui sistem de redare audio prin intermediul unei boxe a unei melodii la alegere, încărcată pe un SD card, la care se adaugă luminile LED care se vor anima în funcție de semnalele melodiei. Alegerea unui astfel de sistem se leagă și de faptul că biroul de acasă avea o astfel de instalație și de când sunt la facultate am simțit lipsa unei astfel de facilități, adăugând și plăcutul în acest proiect.

Descriere generală

Schema bloc este compusă din următoarele părți: Arduino Uno, senzor de sunet, SD card, bandă LED și boxa (sau boxele). Pe partea de input, SD card-ul are rolul de a reține melodiile in memorie pentru ca, în urma pornirii uneia dintre ele, senzorul de sunet să capteze semnalele către Arduino. Aici intră în rol piesele pentru output: semnalele audio sunt redate prin boxa și astfel începe jocul benzii LED. Pașii logici ai sistemului sunt reprezentați mai jos:

Hardware Design

Lista de piese folosite:

  • Arduino Uno
  • Modul SD card compatibil cu Arduino Uno
  • Senzor de sunet
  • LED Strip
  • Boxa
  • Fire
  • Butoane
  • Breadboard
  • Baterie externă pentru alimentare

Piesele au fost conectate astfel:

Senzor sunet:

  • G → GND
  • + → 5V
  • D0 → D3

Modul Micro SD Card:

  • CS → D4
  • SCK → D13
  • MOSI → D11
  • MISO → D12
  • VCC → 5V
  • GND → GND

Led strip WS2812B:

  • +5V → 5V
  • GND → GND
  • Din → D8

Pentru butoane am folosit pinii D7, D6, D5. Setul de boxe este conectat la alimentare prin USB si la montaj printr-un adaptor la GND si D9.

Cuplajul final:

Software Design

Descrierea codului aplicaţiei:

Implementare:

Pentru inceput, am definit cateva variabile global, cu scopul de configura pinii specifici pentru cele 3 butoane (play/pause, next, previous), pentru boxa si pentru banda LED WS2812B. De asemenea, am setat nivelul de “brightness” si am definit setul de culori folosite(disponibil in biblioteca utilizata). Totodata, am configurat pinii utilizati de catre modulul de Micro SD Card.

Pe parte de setup, initializez tipul de lumina si caracteristicile jocului de lumini prin functiile din FastLED.h (FastLED.addLeds(), FastLED.setBrightness() ). Apoi, pentru cele 3 butoane, atribui rezistentele de PullUp din cadrul placutei Arduino. Mai departe, cu functiile din TMRpcm intializez obiectul folosit pentru redarea sunetului (adica boxa), setez prima melodie care sa inceapa la pornirea placutei si volumul sunetului generat (evident, boxa are propriul sau buton de volum).

Functia ChangePalettePeriodically() are rolul de a modifica periodic culorile prezente pe banda in momentul difuzarii unei melodii prin boxa. In interior, se calculeaza o valoare in milisecunde si in functie de restul unei impartiri cu o valoare setata inainte se vor modifica culorile pe banda LED. Cateva dintre culorile (in combinatie) aflate in cod: makeLedsOff(), SetupPurpleAndGreenPalette(), SetupTotallyRandomPalette(), SetupBlackAndWhiteStripedPalette(), dar si functii predefinite in biblioteca: CloudColors_p, RainbowStripeColors_p etc.).

Functia song() are rolul de a lua contorul de apasari al butonului de next si de a folosi functia tmrpcm.play(song) pentru a reda prin boxa sunetul dorit. Contorul este folosit in loop() si se incrementeaza variabila prin care gestionam playlist-ul de pe SD card. La ultima melodie din lista se trece din nou la prima si se reia acelasi proces mai departe.

Atunci cand o melodie este redata, se pot actiona butoanele pentru a merge la urmatoarea melodie sau cea precedenta sau sa se puna o pauza. Astfel se tot mareste un contor in care tin minte cate apasari de buton de pause/play au avut loc, lucru ce foloseste in oprirea si pornirea benzii LED atunci cand muzica este oprita.

Pe parcursul implementarii am folosit protocoalele USART, pentru partea de debugging (in special prin afisare in Serial Monitor), SPI, care este utilizat in comunicarea modului de SD card cu Arduino, dar si I2C in realizarea culorilor si a benzii LED.

Referitor la modul in care au fost incarcate melodiile redate de sistem, a trebuit sa folosesc melodii cu extensia ”.wav” pentru ca acestea erau suportate de biblioteca folosita. Astfel, melodiile au urmatoarele caracteristici:

  • bit resolution: 8 Bit
  • sampling rate: 16000 Hz
  • audio channels: mono
  • PCM format: PCM unsigned 8-bit

Rezultate Obţinute

Rezultatul obtinut se poate observa in clipul filmat drept demo care se poate gasi pe acest link: https://drive.google.com/file/d/10QJ-5Sx9h02OD4ZhIKPsUaVi59u9taMg/view?usp=drive_link

Concluzii

Ca si concluzie pot afirma ca realizarea acestui proiect a fost o experienta destul de noua pentru mine. Eu unul nu sunt un pasionat al acestui domeniu si, astfel, am intampinat greutati in puncte precum alegerea temei de proiect (nefiind pasionat, am pus in practica ideea care mi-a venit la un moment dat) sau aspecte legate de realizarea schemei fizice, din cauza faptului ca aveam nevoie de mai mult curent, placuta Arduino avand rezistentele sale interne care nu te lasa sa depasesti cu mai mult de 5V.

Pot spune, insa, ca am reusit sa duc la bun sfarsit aceasta provocare si sa implementez un sistem audio folosind o boxa cu jack si alimentare, nu un buzzer, avand astfel mediul de a reda melodii in format decent. De asemenea, banda LED a fost o provocare foarte mare din cauza nevoilor sale pe care, in final, am reusit sa le depasesc si sa livrez acest produs.

Download

Arhiva proiectului se poate gasi aici: proiect_pm_popescu_vlad_cristian.zip

Jurnal

  • 7 Mai 2023: M1 - Introducere, Descriere generală, Schemă bloc, Listă componente hardware
  • 14 Mai 2023: M2 - Hardware Design
  • 28 Mai 2023: M3 - Implementare software, Software design
  • 29 Mai 2023: Rezultate obținute

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware:

Export to PDF

pm/prj2023/alexau/disco_lights.txt · Last modified: 2023/05/29 02:14 by vlad.popescu2409
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