User Tools

Site Tools


projektas_nr.9

Čia yra sena dokumento versija!


Projektas Nr. 9. Muzika – Pjezo signalizatoriai

Ką darome? Šiuo metu mes jau kontroliuojame šviesas, judesį ir elektronus. Galime pereiti prie garso. Bet garsas yra analoginis reiškinys, kaip su juo susidoros skaitmeninis Arduino? Mes vėl remsimės jo neįtikėtinu greičiu, kuris leis ją imituoti analoginiu elgesiu. Norėdami tai padaryti, mes pridėsime piezo elementą į vieną iš minėtųjų Arduino skaitmeninių kaiščių. Piezo elementas daro spragtelėjimą kiekvieną kartą, kai jis gauna srovės impulsą. Jei mes duosime jam impulsą tinkamu dažnumu (pvz. 440 kartų per sekundę sukurti užrašo vidurį A) šie paspaudimai bus paleisti kartu, siekiant parengti pastabas. Eksperimentuokite su juo ir gaukite savo Arduino muziką „Twinkle Twinkle Little Star“.

Grandinės dalys:

  • CIRC-06 Montavimo plokštė x1
  • 2 Pino galvutė x4
  • Piezo Elementasx1
  • Laidas x4

Grandininė schema

Grandinės šablonas

Surinkta grandinė

Šaltiniai Plokštės maketas Surinkimo video

Programos kodas (nereikia visko perrašyti) Atsisiųsti programos kodą: http://ardx.org/CODE06 (Nukopijuoti tekstą ir įklijuoti į tuščia Arduino langą)

/* Melodija
 * (peskelta) 2005 D. Cuartielles iš K3
 *
 * Šis pavyzdys naudoja Piezo garsiakalbį groti melodijai. Jis siunčia kvadratines bangas atitinkamu dažnumu piezo, kad jis generuotų atitinkamus tonus.
 *
 * Tonų apskaičiavimas yra padaromas remiantis sekančiomis matematinėmis funkcijomis:
 *
 *       timeHigh = period / 2 = 1 / (2 * tono dažnumas)
 *
 * kur skirting tonai yra apibūdinami kaip lentelėje:
 *
 * pažymimas dažnumo periodas  timeHigh
 * c          261 Hz          3830  1915
 * d          294 Hz          3400  1700
 * e          329 Hz          3038  1519
 * f          349 Hz          2864  1432
 * g          392 Hz          2550  1275
 * a          440 Hz          2272  1136
 * b          493 Hz          2028  1014
 * C          523 Hz          1912   956
 *
 * http://www.arduino.cc/en/Tutorial/Melody
 */

int speakerPin = 9;

int length = 15; // numerio pažymėjimas
char notes[] = "ccggaagffeeddc ";  //tarpas pateikia pauzę
int beats[] = { 1,1,1,1,1,1,2,1,1,1,1,1,1,2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
       digitalWrite(speakerPin, HIGH);
       delayMicroseconds(tone);
       digitalWrite(speakerPin, LOW);
       delayMicroseconds(tone);
   }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

// groti toną atitinkantƳ užraso pavadinimą
for (int i = 0; i < 8; i++) {
  if (names[i] == note) {
    playTone(tones[i], duration);
  }
 }
}

void setup() {
  pinMode(speakerPin, OUTPUT);
}

void loop() {
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo); // rest
    } else {
      playNote(notes[i], beats[i] * tempo);
    }
    
    // pause tarp užrašų    delay(tempo / 2);
  }
}

Neveikia? (trys dalykai kuriuos galime padaryti)

Nėra garso Atsižvelgiant į tai, dydį ir formąpiezo elementai lengvai praleidžia tinkamas skyles ant breadboard. Išbandykite, ar dvigubus patikrinimus jo vietoje.

Negali galvoti kol groja melodija? Ištraukite piezo elementus kol galvojate, pakraukite savo programą ir vėl juos įkiškite.

Pavargai nuo 'Mirganti mirganti maža žvaigždutė'? Kodas yra parašytas, todėl tu gali lengvai pridėti savo dainų, patikrink žemiau esantį kodą pradėdamas.

Argi negeriau?

Žaidimas su greičiu: Kiekvieno užrašo laikas skaičiuojamas remiantis kintamuoju, kaip, pavyzdžiui, mes galime įgnybti kiekvieno pranešimo garsą ar laiką. Norėdami pakeisti melodiją turime keisti tik vienos eilutės greitį.

 int tempas = 300; ---> Int tempas = (naujas #)

Pakeisti didesnio numerio melodijąƳ lėtesnę ar mažesnio numerio melodijąƳ greitesnę.

Užrašų nustatymai: Jei esate susirūpinę pastabomis čia yra naudingos informacijos. Pastabos buvo apskaičiuotos remiantis formule į komentaro bloką programos viršuje. Bet komponuoti atskirus užrašus galite tiesiog keisdami savo tonų vertes. [] masyvas aukštyn arba žemyn, kol jie skambės gerai. (kiekviena nata yra suderinta jo pavadinimo pavadinimuose [] (masyvas ty. c = 1915)

 char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
 int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

Komponuokite savo melodijas: Programa yra iš anksto nustatyti groti „Mirganti Mirganti Maža Žvaigždute“, tačiau, kaip ji yra užprogramuota, tai suteikia galimybę ją lengvai keisti. Kiekviena daina yra apibrėžiama vienu int ir dviem masyvų, int ilgis apibrėžia užrašų skaičių, pirmieji masyvo pastabos [] apibrėžia kiekvieną pastabą, antroji plaka [] apibrėžia, kiek laiko kiekvienas pastaba yra grojama. Kai kurie pavyzdžiai:

Mirganti Mirganti Maža Žveigždutė

int length = 15;
  char notes[] = "ccggaagffeeddc ";
  int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
                1, 1, 2, 4 };
   Happy Birthday (pirma linija)
  int length = 13;
    char notes[] = "ccdcfeccdcgf ";
    int beats[] = {1,1,1,1,1,2,1,1,1,1,1,2,4};
    

Kitas projektas. Sintezatorius su potenciometru.

Atgal į projektus

projektas_nr.9.1449257357.txt.gz · Keista: 2015/12/04 21:29 vartotojo 78.58.178.236