A/4

Aquesta activitat explica l’esquema de components i com carregar el programa del Polcatrònik a l’Arduino.
Un cop carregat ja pots practicar amb el teu polcatrònik, funciona així:
– El potenciòmetre 1 regula la primera nota entre DO, DO#, RE, RE#, … i SI
– El potenciòmetre 2 regula la distància entre la primera i la segona nota.
Així si la primera nota és un DO, la segona pot variar entre: DO3, MI3, SOL3, DO4, MI4, SOL4 O DO5
– El potenciòmetre 3 regula el temps que hi ha entre les dues notes.
– El polsador fa sonar una nota aleatòria de la tonalitat.

Material necessari

1 Arduino UNO

1 Protoboard

2 Díodes emissors de llum o díode LED

3 Resistències elèctriques de 230 Ohms

1 Connector jack de 3.5mm per a protoboard

1 Polsador

1 Interruptor

3 Potenciòmetres

Diversos cables (mascle – mascle)

1 Auricular o altaveu per sentir el so que surt del jack

Pas a pas

A4.1 Crea el teu propi instrument: el Polcatrònik

Explicació de les connexions i demostració de com funciona el Polcatrònik

A4.1. Polcatrònik. Com connectar els components

Esquema de com connectar els components per tal de crear el Polcatrònik

A4.2 Com soldar i posar els components a una capsa

Videotutorial que explica com soldar i posar els components dins d’una capsa, per tal de construir el Polcatrònik

Codi

// Manual Instròniks
// Crea el teu pròpi instrument
/*
 * Aquest és l'últim codi del manual instròniks
 * Un cop carregat a l'Arduino, permet controlar el polcatrònik
 * Funcionament:
 * - El potenciòmetre 1 regula la primerar nota entre DO, DO#, RE, RE#, ... i SI
 * - El potenciòmetre 2 regula la distància entre la primera i la segona nota.
 *   Així si la primera nota és un DO la segona pot variar entre: DO3, MI3, SOL3, DO4, MI4, SOL4 O DO5
 * - El potenciòmetre 3 regula el temps que hi ha entre les dues notes.
 * - El pulsador fa sonar una nota aleatoria de la tonalitat. 
 */

// definim totes les notes amb el valor de la seva freqüència
int NOTE_B0 = 31;
int NOTE_C1 = 33;
int NOTE_CS1 = 35;
int NOTE_D1 = 37;
int NOTE_DS1 = 39;
int NOTE_E1 = 41;
int NOTE_F1 = 44;
int NOTE_FS1 = 46;
int NOTE_G1 = 49;
int NOTE_GS1 = 52;
int NOTE_A1 = 55;
int NOTE_AS1 = 58;
int NOTE_B1 = 62;
int NOTE_C2 = 65;
int NOTE_CS2 = 69;   
int NOTE_D2 = 73;
int NOTE_DS2 = 78;
int NOTE_E2 = 82;
int NOTE_F2 = 87;
int NOTE_FS2 = 93;
int NOTE_G2 = 98;
int NOTE_GS2 = 104;
int NOTE_A2 = 110;
int NOTE_AS2 = 117;
int NOTE_B2 = 123;
int NOTE_C3 = 131;
int NOTE_CS3 = 139;
int NOTE_D3 = 147;
int NOTE_DS3 = 156;
int NOTE_E3 = 165;
int NOTE_F3 = 175;
int NOTE_FS3 = 185;
int NOTE_G3 = 196;
int NOTE_GS3 = 208;
int NOTE_A3 = 220;
int NOTE_AS3 = 233;
int NOTE_B3 = 247;
int NOTE_C4 = 262;
int NOTE_CS4 = 277;
int NOTE_D4 = 294;
int NOTE_DS4 = 311;
int NOTE_E4 = 330;
int NOTE_F4 = 349;
int NOTE_FS4 = 370;
int NOTE_G4 = 392;
int NOTE_GS4 = 415;
int NOTE_A4 = 440;
int NOTE_AS4 = 466;
int NOTE_B4 = 494;
int NOTE_C5 = 523;
int NOTE_CS5 = 554;
int NOTE_D5 = 587;
int NOTE_DS5 = 622;
int NOTE_E5 = 659;
int NOTE_F5 = 698;
int NOTE_FS5 = 740;
int NOTE_G5 = 784;
int NOTE_GS5 = 831;
int NOTE_A5 = 880;
int NOTE_AS5 = 932;
int NOTE_B5 = 988;
int NOTE_C6 = 1047;
int NOTE_CS6 = 1109;
int NOTE_D6 = 1175;
int NOTE_DS6 = 1245;
int NOTE_E6 = 1319;
int NOTE_F6 = 1397;
int NOTE_FS6 = 1480;
int NOTE_G6 = 1568;
int NOTE_GS6 = 1661;
int NOTE_A6 = 1760;
int NOTE_AS6 = 1865;
int NOTE_B6 = 1976;
int NOTE_C7 = 2093;
int NOTE_CS7 = 2217;
int NOTE_D7 = 2349;
int NOTE_DS7 = 2489;
int NOTE_E7 = 2637;
int NOTE_F7 = 2794;
int NOTE_FS7 = 2960;
int NOTE_G7 = 3136;
int NOTE_GS7 = 3322;
int NOTE_A7 = 3520;
int NOTE_AS7 = 3729;
int NOTE_B7 = 3951;
int NOTE_C8 = 4186;
int NOTE_CS8 = 4435;
int NOTE_D8 = 4699;
int NOTE_DS8 = 4978;

// Vector per totes les notes
int notes[] = {
  NOTE_C3, NOTE_CS3, NOTE_D3, NOTE_DS3, NOTE_E3, NOTE_F3, NOTE_FS3, NOTE_G3, NOTE_GS3, NOTE_A3, NOTE_AS3, NOTE_B3, 
  NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4, 
  NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5
};

int escala[] = {0,4,7,12,16,19,24};
int tempos[] = {200,300,500,700};

// Variables pels valors dels potenciòmetres
int pote1 = 0;
int pote2 = 0;
int pote3 = 0;

// Variables per recollir valors del pulsador i de l'interruptor
int pul1 = 0;
int int1 = 0;

// Variables per les notes i pel tempo
int notafinal1 = 0;
int notafinal2 = 0;
int tempo = 0;
int limit = 0;

// Variable per saber si l'interruptor està sent apretat
boolean apretat = false;

// Variables per a calcular el tempo, per alternar notes i pel valor aleatori
int beat = 0;
int a = 0;
int aleatori = 0;

// Variable per saber quina nota sona
int quinaNotaSona = 0;

// Variable per desar els milisegons que han passat
unsigned long tempsActual = 0;
// Variable per desar el moment que ha de sonar la proxima nota
unsigned long tempsProperaNota = 0;

// Funcio per escriure pel port sèrie els valors de les variables
void mostraVariables() {
  Serial.print(pote1);
  Serial.print(" - ");
  Serial.print(pote2);
  Serial.print(" - ");
  Serial.print(pote3);
  Serial.print(" - ");
  Serial.print(notafinal1);
  Serial.print(" - ");
  Serial.print(notafinal2);
  Serial.print(" - ");
  Serial.print(tempo);
  Serial.print(" - ");
  Serial.print(pul1);
  Serial.print(" - ");
  Serial.print(int1);
  Serial.print(" - b:");
  Serial.print(beat);
  Serial.print(" - tp:");
  Serial.print(tempsProperaNota);
  Serial.print(" - ta:");
  Serial.print(tempsActual);
  Serial.print(" - limit:");
  Serial.println(limit);
}

void setup() {
  pinMode(3,OUTPUT);
  pinMode(4,INPUT);
  pinMode(5,INPUT);
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
  pinMode(A2,INPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // Capturar el temps que ha passat des de que ha arrencat Arduino
  tempsActual = millis();

  // Recuperar l'estat dels INPUTS i desar a variables
  pul1 = digitalRead(4);
  int1 = digitalRead(5);
  pote1 = analogRead(A0);
  pote2 = analogRead(A1);
  pote3 = analogRead(A2);
  notafinal1 = map(pote1, 0, 1023, 0, 12);
  notafinal2 = notafinal1 + escala[ map(pote2, 0, 1023, 0, 7) ];
  
  // Agafem el temp de la llista que indiqui el pote3
  beat = map(pote3, 0, 1023, 0, 4);
  tempo = tempos[beat];
  // Cridem que s'executi la funcio que mostra variables al port sèrie
  mostraVariables();

  // Si el pulsador està apretat
  if( pul1 == HIGH  ) {
    // Si encara no sabiem que estava apretat
    if( !apretat ) {
      // Indicar que s'està apretant el botó
      apretat = true;
      // Fer sonar una nota aleatoria
      aleatori = escala[random(0, 7)];
      tone(3, notes[notafinal1 + aleatori], 50);
    }
  } else { // Si el pulsador no esta apretat
    apretat = false;
  }
    
  // Si l'interruptor està OFF
  if (int1 == LOW) { 
    // Indicar quin és el pròxim temps que sonarà una nota 
    tempsProperaNota = tempsActual + tempo;
    a = 0;
    digitalWrite(12,LOW);
    digitalWrite(13,LOW);
  } else { // Si interruptor està a ON
    limit = tempsActual - tempsProperaNota;
    // Si s'ha arribat al temps de que ha de sonar una nota
    if (limit >= 0) {
      // Indicar quin es el pròxim temps que sonarà una nota  
      tempsProperaNota = tempsActual + tempo;
      // si a val 0
      if (a == 0) { 
        // Activar LED 13 i desactivar LED 12
        digitalWrite(12,LOW);
        digitalWrite(13,HIGH);
        tone(3, notes[notafinal1], 20);
      } else { // si a val 1 
        // Activar LED 12 i desactivar LED 13
        digitalWrite(12,HIGH);
        digitalWrite(13,LOW);
        tone(3, notes[notafinal2], 20);
      }
      // Incrementem a. Si a >= 2 posar a 0 quedant 0 i 1 com valors possibles
      a = (a + 1) % 2;
    }
  }
}
        

Idees per a completar l'activitat

A. Mmmmm… ara ens hem fixat que el codi que us hem donat, no fa el mateix que el videotutorial A4.1. Que sabries modificar el codi i fer que fes el mateix que fa el videotutorial?

Algunes preguntes de música que el Polcatrònik et pot ajudar a entendre.

B. Què és el ritme?

C. Què és el tempo?

D. Què és la tonalitat?

E. Què són la dominant la tercera i la quinta en música?

F. Què és l’escala pentatònica?

G. Com podem lligar les matemàtiques i la música?

 

NOTA: Si tens resposta a alguna d’aquestes preguntes, o alguna observació, la pots compartir per Twitter.
Etiqueta la resposta amb el hashtag: #instroniks_a4 i @instroniks
Així la podrem veure dins d’aquesta activitat.

Que diuen a twitter d'aquesta activitat

+ activitats