drti

Prvi koraki v Arduino – nastavljiva frekvenca zvoka in melodija pesmi

 

Milan Gaberšek in Slavko Kocijančič , članek v reviji TIM, številka 7, letnik 2019/20

 

V tokratnem prispevku na temo prvih korakov v Arduino bomo krmilnik uporabili za predvajanje različnih tonov glede njihove frekvence in trajanja. Za oddajanje zvoka rabimo le mini piezo zvočnik. Ker želimo vplivati na frekvenco zvoka bomo vezali še potenciometer. Seveda moramo na krmilnik naložiti tudi ustrezen program.

 

Programske kode za vse štiri perograme si lahko preko kopiraj/prilepi prenesete v Arduino IDE, da vam ne bo treba pretipkavati.  

 

 



//
// Program Arduino - Zvok 1.
//

// Zvočnik bomo priklopili na D3
const int pinZvocnik = 3;
// Začetno trajenje lege membrane 
// bo 1 ms (tj. 1 milisekunda)
const int trajZvocnik = 1;

void setup() {
  // Zvočnik bo priklopljen na 
  // digitalni izhod
  pinMode(pinZvocnik, OUTPUT);
}

void loop() {
    digitalWrite(pinZvocnik, HIGH);
    delay(trajZvocnik);
    digitalWrite(pinZvocnik, LOW);
    delay(trajZvocnik);
}

//
// Program Arduino - Kuza pazi
//

// Zvočnik bomo priklopili na D3
const int pinZvocnik = 3;
// Frekvence za posamezne note, več not na
// na https://www.arduino.cc/en/Tutorial/toneMelody
const int notaC = 262; // tudi C4
const int notaD = 294; // tudi D4 
const int notaE = 330; // tudi E4
const int trajanje = 300;
int pavza = trajanje * 1.30;
    
// Ker bi radi le eno izvedbo,
// je že v setup(){} celotni program
void setup() {
  // Uporabimo ukaz tone za predvajanje
  // tona frekvence dolocene note ter počakamo
  tone(pinZvocnik, notaC, trajanje); delay(pavza);
  tone(pinZvocnik, notaC, trajanje); delay(pavza);
  tone(pinZvocnik, notaC, trajanje); delay(pavza);
  tone(pinZvocnik, notaC, trajanje); delay(pavza);
  tone(pinZvocnik, notaD, trajanje); delay(pavza);
  tone(pinZvocnik, notaD, trajanje); delay(pavza);
  tone(pinZvocnik, notaD, trajanje); delay(pavza);
  tone(pinZvocnik, notaD, trajanje); delay(pavza);
  tone(pinZvocnik, notaE, trajanje); delay(pavza);
  tone(pinZvocnik, notaE, trajanje); delay(pavza);
  tone(pinZvocnik, notaD, trajanje); delay(pavza);
  tone(pinZvocnik, notaD, trajanje); delay(pavza);
  tone(pinZvocnik, notaC, trajanje); delay(pavza);
  tone(pinZvocnik, notaC, trajanje); delay(pavza);
  tone(pinZvocnik, notaC, trajanje); delay(pavza);
}

void loop() {
}

// 
// Program Arduino - potenciometer 
// 
 
const int pinPotenciometer = A0;
// Vrednost iz potenciometra 
// kot delilnika napetosti bomo 
// shranjevali v spremenljivko 
int potVrednost = 0;
 
void setup() {
  // Branje podatkov preko 
  // serijskega vmesnika USB 
  Serial.begin(9600);
}
 
void loop() {
  // Z ukazom analogRead preberemo vrednost  
  // in jo shranimo v spremenljivko 
  potVrednost = analogRead(pinPotenciometer);
  // Dobljeni podatek izpišemo na zaslon 
  Serial.println(potVrednost);

}

 


//
// Program Arduino - potenciometer in zvok
//

const int pinPotenciometer = A0;
int vrednostHz = 0;
const int pinZvocnik = 3;

void setup() {
  // tokrat ni potrebno nič vnaprej
  // nastavljati
}

void loop() {
  // Z ukazom analogRead preberemo vrednost 
  // iz potenciometra kot delilnika napetosti,
  // jo shranimo v spremenljivko in nato
  // z njo nastavimo frekvenco tona na zvočniku
  vrednostHz = analogRead(pinPotenciometer) * 10;
  tone(pinZvocnik, vrednostHz);
}