Tesla Coil Muzical

Introducere

Daca Elon Musk a reusit sa devina bogat de pe urma numelui marelui inovator Nikola Tesla, poate voi reusi sa iau si eu o nota de trecere la PM cu acest proiect. Proiectul consta intr o bobina tesla care prin efectul corona si descarcari electrice la diferite frecvente produce sunete. Aceste sunete, ordonate si organizate produc muzica. Edit: Mi au ars laborantii bobina Tesla asa ca am fost nevoit sa improvizez. Proiectul a devenit un mp3 player: citeste de pe un card Sd niste piese, si , controlat printr un senzor infrarosu, navighez, pun pauza la piese. De asemenea, afisez numele piesei asa cum se afla pe cardul SD

Descriere generală

Am avut nevoie de 2 placi ARDUINO UNO (vedeti la slideul “Blestemele mele”), un senzor infrarosu cu o telecomanda, un OLED I2C pentru afisare, un buton cu o rezistenta, un modul micro SD , un speaker, o bobina tesla (RIP) si un modul jack. O placa (Sender) citeste de pe cardul microSD,si cu ajutorul unei biblioteci TMRpcm este scos un semnal PWM pe pinul 9 (muzica) care este conectat la un speaker. Cu ajutorul unui button si o rezistenta de pullup conectat la pinul 2, transmit o intrerupere care imi porneste muzica si dupa , la o alta apasare succesiva, imi revine la prima melodie a playlistului. Senzorul infrarosu este conectat la pinul 3 si in functie de codificarile primite de la senzor, pun pauza, maresc volumul,schimb piesa. Cealalta placa Arduino (Receiver) primeste prin UART de la Arduinoul Sender un array cu numele melodiei sa fie afisat pe OLED I2C Piesele de cardul MicroSD trebuie sa fie intr un format anume ca biblioteca sa le poata folosi, si anume 8 bit, 16-24khz mono , fisierul fiind de tip .wav . A trebuit sa convertesc audioul de la stereo la mono si de la 32bit+ , 32khz+ la acest format si astfel, calitatea rezultatului din pacate este mai slaba.( nu am putut face rost de softwareuri dedicate pentru editare de muzica) (se aude un zgomot rezultat din conversie, insa acest zgomot provine de le piesa si nu de la redarea muzicii de pe placa)

Hardware Design

Dupa cum veti putea observa in schemele date, nu am reusit sa gasesc un model pentru modulul microSD, sau pentru OLED; acestia au fost inlocuiti cu: Un LCD I2C in locul OLEDului I2C iar pentru modulul micro sd, am inlocuit pinii cu niste rezistente pe care le am botezat cu tipul pinului de pe modulul microSD. Atentie! in circuit nu exista rezistente intre conexiunea dintre modul si placa arduino, rezistentele fiind puse doar simbolic sa inlocuiasca niste pini. Componentele utilizate:

  1. 2 placi arduino UNO
  2. un buton
  3. o rezistenta de 220ohmi
  4. un senzor infrarosu si o telecomanda
  5. un modul microSD
  6. un speaker/un modul jack + casti
  7. display OLED 0.96” I2C iic albastru
  8. bobina tesla (RIP)

Software Design

Software utilizat : Arduino IDE

Pentru Arduinoul Sender:

Am folosit bibliotecile: “SD.h”, “TMRpcm.h” si “SPI.h” pentru citirea cardului SD si transmiterea unui semnal PWM pe pinul 9. “IRremote.h” pentru decodificarea valorilor citite de pe senzorul infrarosu,dupa trimiterea semnalelor de la telecomanda.

Functia button_ISR este apelata in momentul in care exista o intrerupere pe pinul 2. Am setat cu pinmode si attachInterrupt ca in momentul in care pe pinul 2 este LOW, atunci se realizeaza intreruperea.Cu millis si un if , am avut grija sa ignor apasarile rapide ( in cazulul unui buton defectuos). Functia apelata cu success opreste muzica daca se canta, seteaza nr.cantecului la 1 si apeleaza playsong(1).

Functia playsong deschide directorul music de pe cardul sd parcurge un numar pana la nr. cantecului dorit. Se trimite Serial (UART) la Arduinoul Receiver dupa care se apeleaza functia bibliotecii tmrpcm pentru redarea muzicii.

In setup, setez modul butonului, care pin va fi outul muzicii (pentru UNO, este obligatoriu 9) ,dau enable pentru senzorul infrarosu. Cat timp nu reusesc sa citesc de pe cardul SD , se trimite mesajul “SD fail” si se reincearca.

In loop se afla decodificari pentru senzorul infrarosu.

Pentru Arduinoul Receiver:

Am folosit bibliotecile: <Adafruit_GFX.h>, <Adafruit_SSD1306.h> pentru scrierea pe OLED.

In setup sunt setate niste valori pentru display. In loop, cat timp am ceva pe serial primit, scriu intr un array. In momentul in care nu mai am , ies si scriu pe display.

Rezultate Obţinute

Concluzii

Acest proiect mi a mancat zilele. M a invatat sa am enorm de multa rabdare. Sincer, acum am un mod de a asculta muzica bulgara.

Download

Jurnal / Blestemele mele

In acest slide va voi prezenta peripetiile mele pe parcursul realizarii acestui proiect si va voi ruga pe Dumneavoastra sa judecati daca la finalul acestui proiect, eu sunt aceeasi persoana ca la inceput. Am cumparat bobina Tesla. Dupa lipire,am observat ca este defectuoasa. Am adus o la laborator unde, printr un miracol, a decis sa mearga. Am adus o inapoi acasa unde evident nu a mai mers. Mai mult, am reusit sa o scap ,dezlipind bobina de pe placa si firul atasat de ea. Am readus o inapoi la facultate, unde dupa ce a fost lipita la loc, am reusit sa depistam problema: cablul jack posibil stricat. Initial proiectul era destul de simplu:placa scoate muzica, si bobina primeste pe mufa jack. In schimb, modulul microSD, dupa ce a fost conectat de 12 ori, a refuzat sa mearga.A 13a incercare a fost cu succes. Dupa conectarea unui speaker la pinul 9 (muzica) si ground, am sesizat ca nu merge. In schimb un buzzer, conectat in acelasi mod mergea. M am gandit ca semnalul e prea slab asa ca am decis sa iau un amplificator audio.Dupa conectarea amplificatorului audio la o baterie de 9V ca sursa tot nu mergea. Am revenit la facultate pentru depanare, unde am sesizat ca bateria s a descarcat foarte repede .Am conectat amplificatorul la o sursa de laborator si astfel speakerul , primind audioul amplificat functiona. Am decis sa legam bobina la inputul audio si din pacate nu mers;mai mult, multumita unei utilizari iresponsabile , bobina tesla si a dat duhul. M am dus acasa mahnit si suparat. Trebuia sa imi schimb proiectul, nemaiavand timp sa iau alta bobina( era scumpa oricum). Am decis sa fac un mp3 player. Din pura curiozitate, am legat speakerul direct la pinul 9 , eliminand amplificatorul. Evident, mergea. Amplificatorul astfel a fost luat degeaba. Am adaugat la circuit un senzor infrarosu, cu care planuiam sa controlez piesele muzicale. Dupa 12 incercari am reusit sa primesc date de la senzor, insa ,la aceeasi apasare de buton, primeam date diferite. Dupa testarea fiecarui semnal si tot decodificand, am reusit sa controlez muzica cum imi doream. Fericit ( mare greseala) m am dus sa ma culc. Dimineata, acelasi circuit neatins nu mai mergea. Am vorbit cu un coleg si m am imprumutat cu un alt senzor infrarosu. Am conectat noul senzor si nici acesta nu mergea. M am dus mahnit (alegere corecta) sa mananc sarmale. Cand m am intors, circuitul meu mergea. Din pura curiozitate, am repus senzorul meu pe care l consideram stricat in circuit. Si el mergea.Ultima parte era sa adaug un LCD pentru afisarea numelui melodiei. Am incercat sa conectez un LCD 16×2 insa pe ecran imi apareau dreptunghiuri, nu mergea.Dupa un timp , ecranul si a pierdut mult din luminozitate, in ciuda faptului ca circuitul era conectat corect (am verificat de 13 ori).Nu stiu din ce motiv, dar in momentul in care mi am comandat piesele, am luat si un OLED . Am decis sa inlocuiesc LCD ul cu acest OLED. Acesta ,conectat la arduino fara circuitul pentru redarea muzicii, functiona, insa in momentul in care conectam totul, primeam eroare de la Arduino IDE: sketch too big. Bibliotecile folosite erau prea mari. A trebuit sa tai si sa optimizez mult din cod. Dupa ce am reusit sa reduc sub pragul de 98% din memorie, fericit (inca o data: greseala) am zis ca am terminat , codul si circuitul pentru OLED fiind destul de simplu. Nu mergea, nici muzica, nici displayul.Ori memoria era prea plina, ori niste parametrii din bibliotecile folosite se bateau cap in cap.Din pura intamplare , aveam un Arduino in plus si m am gandit asa: pot pune un Arduino sa redea muzica si in acelasi timp,sa i trimita celuilalt Arduino numele melodiei pe care sa l afiseze pe OLED. Insa nu puteam sa folosesc SPI fiind folosit de modulul microSD si nici I2C , existand sansa sa patesc peripetiile cu microSD si OLED conectat la acelasi Arduino.Singura optiune era sa trimit prin UART. Am inceput sa testez modul UART ,sa vad cum pot transmite un array.Din motive necunoscute, transmiterea era eronata: fie primeam prea putine caractere, fie prea multe, fie lipseau caractere, fie arrayul era trimis corect primele 2 dati dupa care era trimis prost. Dupa 8 ore de depanare, nu am reusit sa fac sa mearga. Mi am facut cruce (varianta corecta) si am adaugat codul pentru trimiterea numelui la codul cu redarea muzicii. A mers. Tin sa multumesc nimanui pentru reusitele acestui proiect.

Bibliografie/Resurse

pm/prj2023/iotelea/teslacoil.txt · Last modified: 2023/05/30 01:30 by dragos.odobescu
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