A/2

En aquesta activitat, farem que al girar el potenciòmetre soni una nota o una altra segons la posició.

Veurem primer com llegir el valor analògic del potenciòmetre i veure’l el seu valor des de l’IDE d’Arduino.

En segon lloc veurem com transformem el valor del potenciòmetre en un so.

En tercer lloc descobrirem la funció map() que transforma un rang de valors en un altre.

I per últim farem que soni a cada posició del potenciòmetre la nota que escollim.

Material necessari

1 Arduino UNO

1 Protoboard

1 Altaveu piezoelèctric

3 Potenciòmetres

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

1 Resistència elèctrica de 230 Ohms

1 Connector jack de 3.5mm per a protoboard

Diversos cables (mascle – mascle)

 

Pas a pas

A2.1 Un potenciòmetre: Modificar el tempo o la tonalitat de les notes

Videotutorial on s’explica:

· Com connectar el potenciòmetre.

· Com visualitzar el valor analògic del potenciòmetre des de l’ordinador.

· Modificar el programa per fer que el tempo entre notes augmenti o disminueixi.

· Modificar el programa per fer que el potenciòmetre canviï la nota que sona.

A2.1 Esquema connectar un potenciòmetre

Esquema on es mostra com connectar el  nou potenciòmetre.

· 1 Arduino UNO

· 1 Protoboard

· 1 Connector jack de 3.5mm per a protoboard

· 1 LED

· Varis Cables mascle a mascle

· 2 Potenciòmetres

· 1 Resistència elèctrica de 230 Ohms

A2.2 Programació: "Mapejar" un valor

Videotutorial que explica que fa la funció map().

Aquesta s’utilitza per determinar un conjunt de notes concretes dins els 1024 valors possibles del potenciòmetre.

A2.3 Dos potenciòmetres

Videotutorial on s’explica com connectar un segon potenciòmetre per recollir un altre valor analògic.

Amb aquest valor modifiquem el programa per tal que un potenciòmetre modifiqui les notes i l’altre el tempo.

A2.3 Esquema de com connectar dos potenciòmetres

Esquema on es mostra com connectar el  nou potenciòmetre. Els components que hi ha són:

· 1 Arduino UNO

· 1 Protoboard

· 1 Connector jack de 3.5mm per a protoboard

· 1 LED

· Varis Cables mascle a mascle

· 3 Potenciòmetres

· 1 Resistència elèctrica de 230 Ohms

A2.4 Programació: Treballar amb llistes

Videotutorial on s’explica com crea i utilitzar les llistes a la programació de l’Arduino per tal de tenir la freqüència de les notes sempre disponible.

Codi

// Manual Instròniks
// A2.11 Un potenciòmetre per modificar el tempo
// NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi

int tempo = 200;
// Variable de tipus enter pote1 on desar el valor que marqui el potenciòmetre
int pote1 = 0;

void setup() {
  pinMode(3, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  // Indicar que el pin A0 serà d'entrada d'informació
  pinMode(A0, INPUT);
  // Activa la comunicació pel port sèrie a 9600bps
  Serial.begin(9600);
}

void loop() {
  // Llegir el valor de l'entrada A0 i la guarda a la variable pote1
  pote1 = analogRead(A0);
  // Escriu pel port sèrie el valor que té la variable pote1 
  Serial.println(pote1);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  tone(3, 400, 20);
  // El valor que tingui pote1 és el valor que esperem
  delay(pote1);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  tone(3, 4000, 20);
  // El valor que tingui pote1 és el valor que esperem
  delay(pote1);
}
        

Codi

// Manual Instròniks
// A2.12 Un potenciòmetre per modificar la nota
// NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi

int tempo = 200;
// Variable de tipus enter pote1 on desar el valor que marqui el potenciòmetre
int pote1 = 0;

void setup() {
  pinMode(3, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  // Indicar que el pin A0 serà d'entrada d'informació
  pinMode(A0, INPUT);
  // Activa la comunicació pel port sèrie a 9600bps
  Serial.begin(9600);
}

void loop() {
  // Llegir el valor de l'entrada A0 i la guarda a la variable pote1
  pote1 = analogRead(A0);
  // Escriu pel port sèrie el valor que té la variable pote1 
  Serial.println(pote1);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  tone(3, 400, 20);
  delay(tempo);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  // El valor que tingui pote1 serà el valor de la freqüència de la nota
  tone(3, pote1, 20);
  delay(tempo);
}
        

Codi

// Manual Instròniks
// A2.2 Mapejar un valor
// NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi

int tempo = 200;
int pote1 = 0;
// Variable per desar el valor del mapeig del potenciòmetre
int valor = 0;
// Variable per assignar una nota depenent del que valgui valor 
int nota  = 0; 
// Variables de tipus enter per desar el valor de la freqüència de cada nota
int do4 = 264;
int re4 = 297;
int mi4 = 330;
int fa4 = 352;
int sl4 = 396;
int la4 = 440;
int si4 = 495;
int do5 = 528;

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

void loop() {
  pote1 = analogRead(A0); 
  // El valor de pote1 que es rep, s'indica que va entre 0 i 1023 
  // i que es vol transformara a un valor entre 0 i 3
  valor = map(pote1, 0, 1023, 0, 3);
  Serial.println(valor);
  // Condicional que segons la condició que hi ha dins dels () fa el codi que hi ha dins {}
  // Si el valor es 0
  if(valor == 0) {
    nota = do4;
  }
  else if(valor == 1) {
    nota = mi4;
  }
  else if(valor == 2) {
    nota = sl4;
  }
  else if(valor == 3) {
    nota = do5;
  } 
  // si no es cap dels valors anteriors
  else {
    nota = re4;
  }
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  // Es fa sonar la freqüència de la variable do4
  tone(3, do4, 20);
  delay(tempo);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  // Es fa sonara la freqüència de la nota calculaadaa
  tone(3, nota, 20); //el nou valor de la nota
  delay(tempo);
}
        

Codi

// Manual Instròniks
// A2.3 Dos potenciòmetres
// NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi

int tempo = 200;
int pote1 = 0;
//valor del nou potenciòmetre(A1)
int pote2 = 0; 
int valor = 0; 
int nota  = 0; 

int do4 = 264;
int re4 = 297;
int mi4 = 330;
int fa4 = 352;
int sl4 = 396;
int la4 = 440;
int si4 = 495;
int do5 = 528;

void setup() {
  pinMode(3, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A0,  INPUT);
  // Indicar que el pin A1 serà d'entrada d'informació
  pinMode(A1,  INPUT);
  Serial.begin(9600);
}

void loop() {
  pote1 = analogRead(A0);
  // Llegir el valor de l'entrada A1 i la guarda a la variable pote2
  pote2 = analogRead(A1); 
  valor = map(pote1, 0, 1023, 0, 3); 
  Serial.println(valor);
  if(valor =  = 0) {
    nota = do4;
  }
  else if(valor == 1) {
    nota = mi4;
  }
  else if(valor == 2) {
    nota = sl4;
  }
  else if(valor == 3) {
    nota = do5;
  } 
  else {
    nota = re4;
  }
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  tone(3, do4, 20);
  // Esperar el temps del valor pote2 + 10 milisegons
  delay(pote2+10);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  tone(3, nota, 20); //el nou valor de la nota
  // Esperra el temps del valor pote2 + 10 milisegons
  delay(pote2+10);
}
        

Codi

// Manual Instròniks
// A2.4 Treballar amb llistes.
// NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi

int tempo = 200;
int pote1 = 0;
//valor del nou potenciòmetre(A1)
int pote2 = 0; 
int p = 0; 
int nota  = 0;

// Es fa servir un array o llista per desar les notes
// Posicio     0    1    2    3    4    5    6    7
// Nota        do4  re4  mi4  fa4  sl4  la4  si4  do5
int notes[] = {264, 297, 330, 352, 396, 440, 495, 528}

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

void loop() {
  pote1 = analogRead(A0);
  pote2 = analogRead(A1); 
  p = map(pote1, 0, 1023, 0, 3);
  Serial.println(posicio);
  // Es posa com a nota la freqüència que hi ha dins de la posicio p dins de notes
  // Per exemple si p hagués estat 2 a nota s'hi hagués posat un 330
  nota = notes[p]; 
  Serial.println(nota);
  
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  tone(3, do4, 20);
  delay(pote2+10);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  tone(3, nota, 20); 
  delay(pote2+10);
}
        

Idees per a completar l'activitat

A. Sabries posar un tercer potenciòmetre?

B. Sabries fer que la llista només tingues les notes de l’escala pentatònica en DO?

Comparteix que has fet aquesta activitat a twitter. La teva opinió es mostrarà dins d’aquesta activitat.

 

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

Que diuen a twitter d'aquesta activitat

+ activitats