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:

  • 2 butoane: unul de Start/Stop și altul de Reset.
  • un card SD care va conține o melodie a cărei tonalitate va fi redată prin leduri.
  • un microcontroller pe 8 biți ATmega324.
  • un difuzor prin intermediul căruia se va reda sunetul muzical.
  • 64 de leduri ce vor forma cubul.

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

  • Sistem de operare: Windows
  • Editare: Programmer's Notepad

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.
  • Se activează butoanele, se inițializează ledurile.
  • Cubul funcționează pe baza celor 2 butoane conectate, astfel că, atunci când niciun buton nu este apăsat, se afișează un :-) pe acesta.
  • La apăsarea primului buton, cubul începe să realizeze 3 efecte “speciale”: rain_effect, heartbeat și moving_lines.
  • La apăsarea celuilalt buton, se activează întreruperile, pinul la care este buzzerul se activează și o versiune de Mario începe să se audă pe fundal. Pe parcurs se modifică modelul de luminare a ledurilor.
  • La o altă apăsare a aceluiași buton, melodia se oprește, pinul la care este conectat buzzer-ul de dezactivează și modelul revine la :-).
  • Din acest punct, procesul se repetă.

Rezultate Obţinute

  • Din păcate nu am reușit să folosesc modulul de card și să redau un joc de lumini în funcție de ascultată.:-(
  • De asemenea, o coloană de leduri refuză cu înverșunare să se aprindă. :-(
  • Pentru ca scopul proiectului să fie atins și al meu cub să danseze, am găsit o alternativă în folosirea și redarea lui Mario, pe baza a cărui note cubul începe să efectueze o serie de efecte.
  • Cubul are 3 efecte speciale: picăturile de ploaie, sus-jos/stânga-dreapta și heartbeat.

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

Concluzii

  • Deși nu am mai avut experiențe cu lipitul componentelor pe o plăcuță, pot spune că mi-a plăcut :-) destul de mult să fac asta.
  • A fost destul de dificil să fac cubul și mai ales să îl pun pe plăcuța de test pentru că eu nu am RĂBDARE.
  • Îmi pare rău că nu am reușit să îi adaug muzică efectiv, de pe un card SD.
  • Rezultatul final este aici.
  • Mi s-a părut o experiență foarte interesantă - unul dintre cele mai interesante proiecte din facultate, din care am avut multe de învățat, pentru că te trecea prin tot procesul de creare a unui produs efectiv, de la hard și până la soft.

Probleme întâmpinate

  • Nu am reușit să conectez modulul de card și să funcționeze corect.
  • Am schimbat buzzer-ul pentru că cel inițial se juca cu mine m(.
  • Nu mi se aprinde o coloană de leduri. :-\

Download

Jurnal

  • 21 aprilie 2018 - Alegere temă proiect, scurtă descriere, schemă bloc și adăugarea unei liste de piese.
  • 30 aprilie 2018 - Achiziționarea unei părți din piesele folosite.
  • 3 mai 2018 - Actualizare listă de piese cu componente necesare plăcii de test.
  • 4 mai 2018 - Finalizarea plăcii de bază.8-)
  • 5 mai 2018 - Adăugare scheme electrice (secțiunile Hardware Design și Download) pentru implementarea proiectului.
  • 17 - 21 mai 2018 - Realizarea părții de Hardware a proiectului. =)
  • 21 - 23 mai 2018 - Implementarea funționalităților pentru proiect.
  • 23 mai 2018 - Finalizarea documentației prezente și încărcarea acesteia pe moodle.8-)

Bibliografie/Resurse

pm/prj2018/adraghici/corina-marin.txt · Last modified: 2021/04/14 17:07 (external edit)
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