Hice un piano con android-arduino-bluetooth

Hice un piano con android-arduino-bluetooth

Antes de comenzar:





 Les enseñarles lo más básico con mis propias palabras  
 Les dejaré algo de información en línea para que investiguen más  
 Les daré dejaré un proyecto que hice con bluetooth-android-arduino  



tecnologia

Escuchen este tema antes de iniciar el post


 

Bluetooth

Red



Introducción


Para comenzar, tendrán preguntas de: ¿qué es arduino?, ¿qué es la electrónica digital?, ¿por qué son dos electrónicas?, etc. Bueno, comencemos. 

Todo lo que vemos o sentimos, son señales analógas, es decir, temperatura, presión, sonido, etc. y varian con el tiempo. El tipo de señales que se usan en electrónica analóga son éstas, varian con el tiempo (a menos de que lo controles) y por lo general presentan ruido (señal indeseable), bueno, la electrónica digital recibe estas señales analogicas y es capaz de convertirlas a ceros y unos para mayor comodidad. 

La electrónica es un sistema discreto, es decir, podemos tener una señal en un tiempo determinado que, a diferencia de lo analogo, esta no varia con el tiempo. Maneja valores entre cero y uno, es decir, números binarios. El sistema númerico binario es de base dos, normalmente es usado en todas las máquinas como computadoras, es el lenguaje madre de la tecnología actual. El cero representa el apagado, el uno el encendido, es decir, arduino y cualquier máquina maneja esos digitos. Los números binarios estan regidos por el 2 a la n(2^n). 

Las operaciones matemáticas que realiza internamente, son sumas, restas, multiplicaciones y divisiones, a continuación les dejo algo de material para que sepan realizar esto ya que en la electrónica digital es muy importante. 

Explicación de números binarios:
 

 


Operaciones básicas con números binarios:
 

 


Conversión de número digital a binario:
 

 

Conversión de binario a hexadecimal




A partir de aquí, se empezará a ver lo que compone el arduino.
 

Digital


¿Qué es arduino y que fue lo que hice?


Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares. 

El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida.4 Los microcontroladores más usados son el Atmega168, Atmega328, Atmega1280, ATmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque que es ejecutado en la placa. 

Arduino puede tomar información del entorno a través de sus entradas analógicas y digitales, y controlar luces, motores y otros actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un computador. 



Android 

arduino 

Hice un piano con android-arduino-bluetooth 


El arduino uno r-3, fue el que use para este proyecto, este cuenta con 13 entradas/salidas digitales y 6 analogas, también cuenta con un reset, su propia fuente y su oscilador. 

electronica 

tecnologia
Bluetooth

Red 

Y ahora se preguntarán... ¿qué carajo tiene que ver lo de los números binarios con arduino ?. Bueno, ya que arduino o más bien la placa contiene el microcontrolador atmega328, este internamente realiza calculos en binario. Hay dos formas de programar arduino: 

-La forma fácil, es decir, por funciones, actualmente arduino es desarrollado por muchas personas ya que es libre por así decirlo y para facilitar el uso a los demás, se crearon funciones muy básicas que pueden resolver casi todo. 

Digital 

Android 

arduino 



-La forma "difícil" es usar registros, es decir, "nos adentramos" en lo más profundo del arduino a nivel de unos y ceros utilizando las funciones principales de los microcontroladores atmega328. Arduino cuentra con tres puertos de entradas y salidas (B,C,D), tres registros en timer, registros de ADC's, etc. 

Hice un piano con android-arduino-bluetooth 

electronica

tecnologia 



En fin, lo que querian escuchar: 

Lo que utilice para este proyecto fueron los registros del timer del arduino. 

El registro TIMSK1, es decir, el registro de las interrupciones lo deshabilite. Cada cierto tiempo (4.096 milisegundos), la interrupción del timer se desborda y lo vuelve a resetear, el oscilador interno es de 16 MHz es decir, hace 16 millones de operaciones en 1 segundo. El contador del timer1 es de 16 bits por lo tanto, para calcular los pulsos que genera hacemos lo siguiente 2^n donde n son 16 bits y el dos son los estados (0 y 1), al elevar esto, nos de una cantidad de 65536 y si lo multiplicaos por 1/16MHz, nos da los 4.096 ms del desborde del timer 1. 

Pero en este caso, solo nos da una sola frecuencia de 122 Hz, lo que queremos es una frecuencia variable y para eso usamos el modo 4 del timer1 del arduino, es decir, el ctc (clear timer compare). 

Cada vez que el OCR1A, es decir, nuestro registro o el numero de pulsos que queremos, sea igual al contador, este genera una frecuencia variable, es decir, si cambiamos el valor del OCR1A obtendremos lo que queremos. 

Para generar las notas que queremos, cada una de ellas tiene una frecuencia, por ejemplo la nota LA tiene como frecuencia 440 Hz, la formula que nos dice cual es el valor de la frecuencia generada por el OCR1A deseado es la siguiente: 

Frecuencia del OCR1A = (16x10^6)/(2*OCR1A) 

Si despejamos la formula para obtener el OCR1A deseado, quedaría de la siguiente manera: 

OCR1A= (16x10^6)/(2*Frecuencia del OCR1A) 


En nuestro caso, si queremos la nota LA, usamos la formula que tenemos. Nota: el valor de 16x10^6 son los 16MHz del oscilador del arduino. 

OCR1A= (16Mhz)/(2*440Hz)= 18181.81 

Ese valor lo ingresamos y obtenemos la nota. En la siguiente tabla observaremos las frecuencias que se utilizaron en el código. 

Bluetooth 

Red

Digital 





Antes que nada, la configuración que hice para activar el modo ctc del arduino: del registro TCCR1A active el toggle o conmutador del OCR1A es decir TCCR1A= 0x40 y del TCCR1B =0x09, active el WGM12 y el CS10, es decir, el preescaler está en 1 o sea, lo deje como estaba y active el modo ctc del comparador. Nota: los valores 0x40 y 0x09 están en hexadecimal. 

Android 

arduino
Hice un piano con android-arduino-bluetooth
electronica
tecnologia 

Bluetooth 



Después de configurar, ahora se hizo un código en base a esto y se utilizó la comunicación serial. 


Red


Implementación y resultados



Una vez que definimos la configuración, se implemento en el programa para programar el arduino. El puerto B (pin 9 del arduino) se habilito como salida, esta salida genera la onda deseada y posteriormente se calculo el valor del OCR1A para las demás notas con sus frecuencias correspondientes. Luego, se utilizo la comunicación serial para recibir y enviar los valores por medio del bluetooth. 

La letra 'a' es do, la 's' es re, la 'd' es mi, la 'f' es fa, la 'g' es sol, la 'h' la, la 'j' es si y con cualquiera se apaga. 



String readString;  
void setup ()  
  
{  
  cli();  
  Serial.begin(9600);  
  DDRB|=0x02;//portob.0 as output (OC1A).  
  TIMSK1|=0x00;//Enable output compare interrupt A  
  TCCR1A=0x40;  
  TCCR1B=0x09;//timer 1 (mode 4) with non prescaling  
  sei();  
}  
void loop ()  
{  
  while(1)  
  {  
    while (Serial.available()) {  
      delay(10);  
      if (Serial.available() >0) {  
        char c = Serial.read();  
        readString += c;  
      }  
    }  
    if (readString.length() >0) {  
  
      //Se recibe la información y se cierran o abren las puertas  
      TCCR1B=0x09;  
      if(readString == "a") {  
        OCR1A=30651.341;  
        Serial.println("Do");  
      }  
      else if(readString == "s") {  
        OCR1A=27210.88435;  
        Serial.println("Re");  
      }  
      else if(readString == "d") {  
        OCR1A=24242.42424;  
        Serial.println("Mi");  
      }  
      else if(readString == "f") {  
        OCR1A=22922.6361;  
        Serial.println("Fa");  
      }  
      else if(readString == "g") {  
        OCR1A=20408.16327;  
        Serial.println("Sol");  
      }  
      else if(readString == "h") {  
        OCR1A=18181.81818;  
        Serial.println("La");  
      }  
      else if(readString == "j") {  
        OCR1A=16194.33198;  
        Serial.println("Si");  
      }  
      else  
      {  
        OCR1A=0x0000;  
        TCCR1B=0x00;  
  
      }  
      readString="";  
    }  
  }  
  
}  



Mientras tanto, el modelo esquemático se compone de la siguiente forma: 

Digital 

Android

arduino 


Los materiales que se usaron fueron: 1 transistor 2n2222a, una resistencia de 10k, unas bocinas, un modulo de bluetooth HC-06 y un dispositivo con bluetooth. 

Yo desarrollé una interfaz en appinventor para hacer las notas del piano, a continuación les muestro una captura. 

Hice un piano con android-arduino-bluetooth 

electronica 
tecnologia 

Bluetooth 


Y lo que me muestra por medio del monitor serial de mi computadora al presionar las teclas del piano: 


Red 

Digital 

Android 


El hardware físico: 

arduino 

Hice un piano con android-arduino-bluetooth
electronica

tecnologia 



Y el resultado final: 




Como pueden ver, el piano funcionó a la perfección, y además la aplicación en android estuvo excelente. 




Aviso: 

Pueden encontrar más información en la página oficial de arduino. La interfaz la hice yo y es gratis para ustedes. 
APK: http://sourceforge.net/projects/bluetootharduino/files/piano.apk/download 

AIA (interfaz gráfica de app inventor, pueden cambiarle si gustan)http://sourceforge.net/projects/bluetootharduino/files/piano.aia/download 

That's all folks. 

Leave a Reply