Table of Contents

Corina MARIN (78318) - Dancing Cube

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul de față constă în realizarea unui cub format din led-uri. Funcția lui specială va fi reprezentată de opțiunea acestuia de a <fc #008080>reda o melodie</fc> și <fc #008080>de a ilumina în funcție de notele muzicale</fc> ale sunetelor.

S-a pornit de la ideea că tot ce luminează în culori diferite este frumos și am considerat că muzica poate reprezenta un punct în plus, care să transforme un simplu cub iluminat în ceva mult mai interesant ^_^. Obiectul prezentat, poate fi considerat atât o jucărie, cât și un obiect decorativ.

Descriere generală

Proiectul se va baza pe schema block prezentă mai jos.
Acesta va folosi:

Modul de funcționare

1. Utilizatorul va apăsa butonul de START și se va aprinde astfel cubul format din leduri.
2. Se va citi prima melodie din cardul SD și difuzorul va începe să redea sunetele de pe acesta, în timp ce ledurile aferente cubului se vor aprinde în ritmul tonurilor muzicale.
3. Dacă utilizatorul va apăsa din nou pe butonul de start, melodia și iluminarea ledurilor se vor opri.
4. Dacă va apăsa pe cel de RESET, melodia curentă va începe de la capăt.

Hardware Design

Listă de piese

Componentă Cantitate Preț
Placa de bază cu toate componentele acesteia 1
Led albastru 64 31 RON
Rezistor 220Ω 16 1.6 RON
Rezistor 2.2kΩ 4 0.4 RON
Placa de test universala 120×180 mm 1 5 RON
Fire mamă-mamă 5 20 RON
Tranzistor NPN BC337 4 1.3 RON
Header de pini (40p) 1 1 RON
Buzzer activ de 5V 1 2 RON
Condensator electrolitic 100uF 35V 1 0.5 RON
Modul buzzer 1 6 RON
Butoane 2 2 RON
Cablu USB 1

Scheme electrice


Cubul de led-uri și buzzer-ul

Card MicroSD

Construirea cubului de leduri

În realizarea proiectului, am urmat o serie de pași în construirea cubului de leduri.

  1. Mi-am construit un suport din carton pentru a crea legătura mai ușor între leduri.
  2. Pentru acesta, la crearea unui nivel de leduri am conectat pe orizontală catozii între ei.
  3. La unirea mai multor nivele de leduri, am conectat între ei anozii, iar la final am făcut legătura acestora cu cei 16 pini.

Software Design

Mediu de dezvoltare

Biblioteci utilizate

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/wdt.h>

#include <util/delay.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

Structura proiect

Proiectul de față conține 3 fișiere, dintre care 2 sunt headere iar unul este cel în care s-au realizat implementările necesare. Pentru a ușura structura cubului, cei 16 pini folosiți pentru leduri sunt:

int pins[16] = {
	PC3, PC2, PC1, PC0,
	PC7, PC6, PC5, PC4,
	PA3, PA2, PA1, PA0,
	PA7, PA6, PA5, PA4
	};

iar fiecare linie din cub reprezină unul din layerele:

#define LAYER1 PD0
#define LAYER2 PD1
#define LAYER3 PD4
#define LAYER4 PD7
int layers[4] = {LAYER1, LAYER2, LAYER3, LAYER4};

Astfel, proiectul este structurat în 5 părți:

  1. Inițializarea butoanelor, ledurilor, melodiei de pe fundal.
    void IO_init(void); // inițializarea cubului de leduri
    void IO_music_init(void); // inițializarea melodiei 
    void activate_buttons(); //actviarea butoanelor
         
  2. Aprinderea ledurilor: s-au efectuat implementările de bază pentru aprinderea ledurilor dintr-un cub.
    void fill_cube(void); // aprinderea totală a cubului
    void clear_cube(void); // stingerea cubului de leduri
    
    void layer_on(int); // aprinderea unui layer de leduri
    void layer_off(int); // stingerea unui layer de leduri
    
    void line_on(int); // aprinderea unei linii de leduri
    void line_off(int); //stingerea unei linii de leduri
           
    void turn_on_in_cube(void); // aprinderea cubului din interior
    void turn_off_in_cube(void); // stingerea cubului din interior
           
    void turn_on_out_cube(void); // aprinderea cubului exterior
    void turn_off_out_cube(void); // stingerea cubului exterior
         
  3. Implementarea efectelor “speciale” de aprindere ale cubului.
    // efectul de picătură de ploaie
    void drop(int p); 
    void rain_effect(int iterations);
    
    // efectul de bătaie a inimii
    void heartbeat(int n);
    
    // model de smiley face
    void smiley_face(void);
    
    // linii care se mută sus/jos și stânga/dreapta
    void moving_lines(int direction);
  4. Aprinderea ledurilor în funcție de melodie. Pentru că nu am reușit să conectez și să fac funcționabil modulul de card, am ales să pun o singură melodie - Mario și să luminez ledurile în funcție de aceasta. Notele pentru melodia aleasă și toate informațiile legate de durata acesteia se regăsesc în fișierul mario.h.
    void init_timer(); // inițializarea timer-ului pentru întreruperi
    void melody_model(int model_number); // modul în care se aprind ledurile în funcție de melodie
  5. Apelarea efectvă a metodelor implementate - main.

Rezultate Obţinute

Efectele create de cub se regăsesc AICI, unde se pot admira în toată splendoarea lor.

Concluzii

Probleme întâmpinate

Download

Jurnal

Bibliografie/Resurse