Discoteca da polso con sensore di movimento

24 Gennaio 2020

Scroll

concert-336695_1920

Discoteca da polso con sensore di movimento

This page is also available in English English

Licenza Creative Commons
Braccia-LED of Riccardo Schifaudo is distributed under licence Creative Commons Attribution-NonCommercial 4.0 International.
Based on a work at https://www.the-shinobi-arts-of-eccentricity.com/blog/en/braccialed-discotheque-bracelet-with-sensor-of-motion/.
For furthermore permissions contacts the Author https://www.the-shinobi-arts-of-eccentricity.com/blog/en/contacts/.

Da dove nasce l’idea della discoteca da polso con sensore di movimento?

Questo progetto di discoteca da polso con sensore di movimento era un esame creato per il laboratorio di Physical Computing quando ero studente dell’Accademia ITS di Torino nel corso di Mobile App Design per il FabLab di Torino;


Che cos’è il BracciaLED?
Descrizione del progetto della Discoteca da Polso con Sensore di Movimento

Il progetto realizzato consiste in un braccialetto da discoteca composto da tre strisce led da 12 volt che riproducano vari effetti luminosi in base al movimento del polso rilevato da un accelerometro.

Il bracciale dispone di due modalità luminose:

  • Funzione “Move”:
    In questa modalità i Led riproducono un “effetto sinusoide” che pulsa più o meno veloce a secondo del movimento del polso.
  • Funzione “Random”:
    In modalità Random i Led si accendono seguendo una sequenza casuale determinata dallo sketch.

Il sistema si spegne per mezzo di un interruttore che toglie corrente ad Arduino Micro or Nano bloccando l’alimentazione da 5/6 Volt.

Mentre le strisce led pur rimanendo collegate alla seconda alimentazione da 12 volt sono isolati dai Transistor MOS FET.


Lista Componenti
per realizzare il BracciaLED

Per realizzarlo ti serviranno i seguenti componenti:

  • 1 Arduino Micro o Nano;
  • 3 Micro strisce led da 12 Volt ;
  • 3 Resistenze ad impasto da 100 Ohm;
  • 4 Resistenze ad impasto da 220 Ohm;
  • 1 Pulsante;
  • 1 Interruttore;
  • 3 Transistor MOS FET a canale N;
  • Ponticelli elettrici per breadbord da saldare;
  • 6 Batterie Bottone da 3 Volt con abbastanza amperaggio per creare doppia alimentazione (una alimentazione da 12 volt per alimentare i led e 6 volt per alimentare Arduino Micro);
  • Un rotolo di cartone scotch largo da pacchi da utilizzare come struttura del “Braccia-LED” (Potete utilizzare anche materiali alternativi a vostra discrezione);
  • Accelerometro Tinker Kit a 2/3 Assi T000020 compatibile con Arduino;
  • 2 Cavetti del Tinker Kit;
  • Scotch di carta per fissare i componenti attorno al rotolo di cartone;
  • Stoffa da cucire all’esterno del Braccia-LED per coprire il circuito;
  • Filo da saldatura di stagno per fissare i componenti;

Schema di Montaggio del Circuito Finale Braccia-LED

Questo è il circuito di montaggio finale del Braccia-LED che andrà in seguito montato sul rotolo di cartone e realizzare cosi il nostro braccialetto da discoteca.

Per praticità si adoperano batterie standard per il prototipo sulla breadbord.

Purtroppo per questioni di spazio sul bracciale le abbiamo sostituite in seguito con batterie bottone.


Procedimento di assemblaggio del circuito della Discoteca da Polso

Il progetto verrà realizzato suddividendolo nelle seguenti parti:

  • Configurazione del sensore come accelerometro a 2 assi X/Y:

    Determinare la soglia di escursione minima e massima dei valori dell’acceloremetro.

    Questo servirà per determinare quando cambiare la funzione dello sketch Arduino.
  • Montaggio circuito di comando delle strisce LED:

    Montaggio sulla breadboard del circuito che permette l’accensione e la regolazione della luminosità delle 3 strisce – LED.
  • Codifica dello Sketch da caricare su Arduino Micro:

    Sviluppare il codice di funzionamento del Braccia-LED riportato in seguito e modificato eventualmente secondo le vostre esigenze da caricare su Arduino Micro.
  • Assemblaggio di Prova e Trasferimento sul Braccia-LED:

    Montaggio del circuito di comando LED, dell’accelerometro e bottoni/pulsanti di comando ad Arduino Micro, verificarne il suo funzionamento.

    Infine trasferire il progetto sul rotolo di cartone/barra come struttura base del braccialetto.

FASE 1
Configurazione del sensore
come accelerometro a 2 assi X/Y

Schema di Montaggio Configurazione Accelerometro per lettura dei valori di movimento sui due assi X e Y.

Questa è la prima fase una delle più delicata del progetto.

Il codice qui illustrato andrà compilato e caricato sulla scheda Arduino dopo che si sarà collegato l’accelerometro, affinché si possano leggere i valori rilevati dal sensore.

I valori saranno letti sulla schermata della porta seriale dell’ IDE Arduino(ambiente di sviluppo dello sketch).

//declaration pins axis
const int accX=A0;
const int accY=A1;

//declaration variables of memories axis position
int X=0;
int Y=0;
int maxX=0;
int maxY=0;
int minX=0;
int minY=0;
int conta=0;
void setup() {                
  //declaration serial port
  Serial.begin(9600);

  //settings input axes accelerometer
  pinMode(accX,INPUT);
  pinMode(accY,INPUT);
  
}

//this cycle loop every 10 second there are 30 values are read 
//by accelerometer sensor
void loop(){
        
  //this cycle give me countdown about start accelerometer readings
        if(conta==0){
        Serial.println("tra 10 secondi avverrà la rilevazione delle misure!");
        for(int j=9;j>0;j--){
        Serial.print(j);  
        Serial.println(" secondi"); 
        delay(1000);
        }
  
        //read accelerometer values 30 times
        for(int i=0;i<30;i++){  

        X = analogRead(accX);
        Y = analogRead(accY); 
        
        
        Serial.print("posizione asse X:");
        Serial.println(X);
        Serial.print("posizione asse Y:");
        Serial.println(Y);

        }
        //change counter state, so I can read measures without loop reading 
        conta=1;
        }
        else{
         //there are no instructions so accelerometer don't read values 
         //and you can check the minimum and maximum on serial port monitor
        }
}

DOWNLOAD


I valori rilevati durante la taratura variano da un minimo di 500 a un massimo di 1100.

Ovviamente i valori variano in base al tipo di accelerometro , al numero di assi utilizzati (nel nostro caso solamente gli assi X e Y).

Ci sono altri fattori come la tolleranza del sensore, il range massimo di valori letti e altri fattori.

Perciò le misure che rileverete saranno diverse da progetto a progetto.

I valori rilevati sono serviti per determinare le soglie entro il quale lo sketch deve aumentare o diminuire la frequenza nel tempo della sinusoide luminosa.

Le rilevazioni dell’accelerometro vengono eseguite quando si passa in modalità “Move”.

I collegamenti relativi alla alimentazione del sensore provengono dal pin dei 5 Volt e GND.

I collegamenti degli assi verranno collegati agli ingressi analogici A0 per l’asse X e A1 per l’asse Y.


FASE 2
Montaggio circuito di comando
per strisce LED con Transistor MOS FET

In questa fase realizzeremo il circuito che permetterà l’accensione/spegnimento e regolazione della luminosità dei LED.

Questo per ricreare l’effetto sinusoide luminosa.

Questo circuito riporta l’esempio con una sola striscia LED.

Ovviamente potete replicare i collegamenti in base a quante strisce led volete utilizzare nel vostro BracciaLED.

Nel nostro caso i collegamenti che attivano i MOS FET e permettono l’accensione dei led sono stati collegati a pin 3,4 e 5.


FASE 3
Codifica dello sketch da compilare e caricare su Arduino Micro

Siamo giunti al punto di sviluppo del codice di funzionamento del nostro braccialetto da discoteca.

Qui riportato lo sketch che andrà caricato su Arduino, il quale permetterà di controllare il circuito di comando MOS FET realizzato in precedenza.

In questo modo potrà cambiare la modalità di funzionamento del “BracciaLED”.

Sarà così rilevare i cambiamenti di accelerazione del sensore, riproducendo un determinato effetto luminoso.


Codice di funzionamento del BracciaLED o Discoteca da Polso con Sensore di Movimento

//declaration array variable 
int led[]={
  3,4,5};

//declaration axis accelerometer
int accX=A0;
int accY=A1;

//declaration memories of axis positions
int X=0;
int Y=0;

//declaration park variables
int tempo=0;
int w=0;
int value=0;
int scelta=0;

//declaration button for changing state
int button=10;

//declaration state variables
int buttonState=0;
int conta=0;

void setup(){

  //Open serial port
  Serial.begin(9600);

  //settings input button
  pinMode(button,INPUT);

  //settings accelerometer axis as inputs
  pinMode(accX,INPUT);
  pinMode(accY,INPUT);

  //settings output array led
  for(int thisPin=0;thisPin<3;thisPin++)
    pinMode(led[thisPin],OUTPUT);

  //interrupt with press of button
  attachInterrupt(2,inc,CHANGE);

}//close function setup 





void loop(){

  // FUNCTION "MOVE"
  if(conta%2==0){
    for(int i=0;i<729;i++){

      //read values of accelerometer
      X = analogRead(accX);
      Y = analogRead(accY); 

      //if give a specific value of time 
      //in based the axis'acceleration 
      if(X>600||Y>600)
        tempo=50;

      if(X>700||Y>700)
        tempo=30;

      if(X>800||Y>800)
        tempo=10;

      if(X>900||Y>900)
        tempo=3;

      if(X>1000||Y>1000)
        tempo=1;    

      //this if put on zero the park variable 
      //that select array memory and turn on led
      if(i%3==0)
        w=0;




      //this function reproduce sinusoidal effect
      float something = millis()/1000.0;
      int value = 128.0 + 128 * sin( something * 2.0 * 255  );
      analogWrite(led[w],value);
      delay(tempo);   

      w++;

    }//close cicle for

  }//close if(conta%2==0)


  else{
    // FUNCTION "RANDOM"-Pulsar effect
    for(int i=0;i<5;i++){
      int value=0;
      //cycle of increasing light intensity of LEDs
      for(int i=0;i<15;i++){

        analogWrite(led[0],value);
        analogWrite(led[1],value);
        analogWrite(led[2],value);
        delay(30);
        value=value+15;
      }

      delay(200);

      //cycle of decreasing light intensity of LEDs
      for(int i=0;i<15;i++){

        analogWrite(led[0],value);
        analogWrite(led[1],value);
        analogWrite(led[2],value);
        delay(30);
        value=value-15;
      }




    }//close cycle for that reproducing pulsar effect

    //FUNCTION "RANDOM"-Casual Mode

    for(int j=0;j<30;j++){
      scelta=random(0,3);
      analogWrite(led[scelta],255);
      delay(100);
      scelta=random(0,3);
      analogWrite(led[scelta],0); 
      delay(100); 

    }//close cycle for casual effect


  }//close else


}//close function loop()


//this function is recalled by attachInterrupt and 
//increase the counter for changing sketch
void inc() {
  conta++;
}

DOWNLOAD


Spiegazione dello sketch o codice sorgente del BracciaLED

Per cambiare l'effetto luminoso delle strisce led attraverso un bottone, abbiamo utilizzato la funzione di “attachInterrupt()”.

Il compito di questa funzione consiste nell'utilizzo d'interruzioni hardware che vanno a incrementare una variabile contatore all'interno dello sketch indipendentemente dal suo stato di esecuzioni.

Cosi facendo si evita di utilizzare specifiche istruzioni di lettura degli input mentre sono in esecuzioni determinati cicli d'istruzioni.

L'intero codice è composto da una grande "if" la cui condizione corrisponde al modulo della variabile contatore.

Ogni volta che si preme il bottone, interviene l'interrupt esterno che incrementa il contatore.

Quando il modulo 2 del contatore dà come risultato zero, lo sketch esegue la funzione “MOVE”.

Quando il risultato del contatore da diverso di zero esegue la funzione “RANDOM” pulsante e casuale.


FASE 4
Assemblaggio di Prova e Trasferimento sul Braccia-LED

Dopo la codifica della scheda Arduino e delle fasi precedenti, si è giunti alla fase finale in cui si trasferirà il prototipo del circuito finale sul rotolo di cartone.

Per completare il circuito si collegherà il bottone per cambiare gli sketch al pin 2 dell'Arduino Micro per utilizzare l'interrupt esterno collegando una resistenza da 220 Ohm di PULL-DOWN.

L'interruttore di alimentazione andrà collegato al +Vcc dell'alimentazione dei 6 volt che accende Arduino (vedi circuito finale).

Si procederà alla saldatura dei componenti cercando di alloggiarli attorno al rotolo di cartone in modo tale che occupino meno spazio possibile.

Per bloccarli al cartone utilizzeremo dello scotch di carta affinché sia facilmente rimovibile nel caso di modifiche.

Inizialmente abbiamo pensato d'inserire tutta la circuiteria del braccialetto tra due strisce di cartone cosicché rimanesse tutto nascosto all'interno.

Per questioni di spazio relative alla disposizione delle batterie bottone ci si limita a ricoprire il "bracciale" cucendo esternamente della stoffa colorata.

Questo a scopo decorativo e di protezione lasciando in rilievo solo l'interruttore ON/OFF.

Da quel bottone si attiverà per il cambio sketch mentre il jack micro-USB servirà per riprogrammare casomai Arduino Micro.

Download degli schemi elettrici per assemblaggio dei circuiti elettronici

Questo è il circuito trasferito sul rotolo ancora in fase di completamento.

Come potete osservare ci sono 4 batterie a bottone che sono state saldate fra loro rispettando le loro polarità e isolate con del nastro da pacchi.

Questa batterie creano una alimentazione da 12 Volt, che serve per fare accendere le strisce led che vedete in figura.

Gli effetti luminosi vengono gestiti da Arduino Micro che in quel momento era alimentato dal computer.

Nel progetto finale la scheda elettronica verrà alimentata da un'altra alimentazione da 6 Volt originata con altre 2 batterie a Bottone.

Affianco alla striscia led superiore è posizionato l'accelerometro che rileva i movimenti del polso.

DOWNLOAD


Link utili per reperire i materiali per la realizzazione del progetto

Do you like the Article?


Prev Post
Next Post
Copied!