arduino,cursos,guias,manuales,tutoriales,ejemplos,ejercicios,codigos,electronica,circuitos,montajes,placas,componentes,noticias,actualidad,libros,descargas,pruebas,courses, guides,manuals,tutorials,examples,exercises,code,electronic,circuits,assemblies,boards,components,news, books,downloads,tests.

No puedo continuar con este proyecto

Supongo que muchos ya os habréis dado cuenta de que este blog está desactualizado desde hace unos años. No puedo seguir con el por muchos motivos, entre ellos, que ha pasado tanto tiempo que no toco arduino y la electronica que los pocos conocimientos que tenía los he ido olvidando. El trabajo y los estudios me tienen demasiado ocupado como para ponerme a montar circuitos y dedicar horas a diseñar lo que tenía en mente. No digo que lo deje para siempre, porque en el fondo me gustaría mucho terminar este proyecto, pero por el momento va a ser imposible. Dejo el blog en linea para aquellos que estáis empezando con arduino, pues creo que las pocas explicaciones que pude poner hace 2 años pueden servir de guía para empezar con esta maravillosa placa. Si algún día puedo retomar este proyecto, tener por seguro que lo pondré en este blog.

Saludos a todos/as.

Edito y agrego:

Gracias a la web de Taringa, un portal de compartir, se me han terminado de quitar las ganas que tenía de continuar con este proyecto. Si al poco tiempo que tengo le sumamos que un portal que no me merece respeto ninguno, se dedica a copiar el trabajo de los demás y si le pides que los borres te mandan a contactar con una empresa para que presentes pruebas de derechos de copyright, comprenderéis que a uno se le bajen los ánimos. Un visitante copió todas las páginas del blog y las subió al portal mencionado anteriormente. Ahora sale en Google la página de Taringa que contiene el contenido de mi blog en primera posición pasando el blog original a los últimos resultados de la primera página o a la segunda página. Una cosa es compartir y otra cosa es robar contenidos. Puedo comprender y comprendo que hay mucha gente que necesita software o libros para poder formarse, para avanzar en este mundo de la informática y pagar todas las licencias es difícil, por lo que puedo comprender que algunos usuarios pirateen. No es mi caso, pues siempre he comprado lo que he necesitado, aunque algunas veces haya descargado algún libro de internet, pero después he ido a la tienda y he comprado el libro cuanto que he tenido dinero. Ahora tengo una buena colección de libros y todo el software de mi ordenador legal, pues gracias al software libre no tengo necesidad de usar programas de pago y como el sistema operativo viene incluido en el ordenador puedo usar Windows. Volviendo al tema de lo que ha sucedido, me parece vergonzoso que un usuario se dedique a copiar una información de un lugar de libre acceso y la copie en Taringa con el descaro de decir en los comentarios que estaba cansado de hacer tutoriales de arduino toda la tarde, como diciendo que los había escrito el. Desde aquí un saludo al usuario, a Taringa y a todos los familiares de los mismos.

Ahora si puedo afirmar que no voy a continuar con el proyecto. Disculpar las molestias.

A LA IZQUIERDA DE LA PAGINA ESTAN TODOS LOS ENLACES QUE FORMAN ESTE BLOG PARA FACILITAR LA NAVEGACION


Buscar en este blog

lunes, 31 de agosto de 2009

4 - AMPLIANDO LOS PINES ANALOGICOS DE ARDUINO (DOS POTENCIOMETROS A TRAVES DE UN MULTIPLEXOR 4051 CON 8 ENTRADAS)

Ufff, ya está listo el tutorial del multiplexor.

NOSOTROS VAMOS A UTILIZAR EN PRINCIPIO UN MULTIPLEXOR 4051 PARA CONVERTIR EL PIN 0 ANALOGICO EN 8 PINES. ESTE NO ES EL LIMITE, EN PRINCIPIO VAMOS A EMPEZAR POR ESTO, UTILIZANDO SOLO 2 ENTRADAS, PERO SI LEES BIEN EL TUTORIAL SABRAS QUE ES MUY SENCILLO CONECTAR 8 POTENCIOMETROS EN UN SOLO PIN. MAS ADELANTE UTILIZAREMOS DE NUEVO 2 POTENCIOMETROS PERO UTILIZANDO 3 MULTIPLEXORES, DE MODO QUE A TRAVES DE 6 BITS PODEMOS CONTROLAR PERFECTAMENTE 64 POTENCIOMETROS. Y POR ULTIMO TERMINANDO CON ESTE TEMA UTILIZAREMOS MULTIPLEXORES DE 16 ENTRADAS Y 4 BITS DE CONTROL CADA UNO PARA LOGRAR LOS 132 PINES QUE YO NECESITO PARA MI MESA DE MEZCLAS MIDI.

POR EL MOMENTO TENEMOS QUE IR POCO A POCO. HOY VOY A SUBIR EL TUTORIAL PARA CONECTAR DOS POTENCIOMETROS A TRAVES DE UN MULTIPLEXOR A UN SOLO PIN ANALOGICO DE ARDUINO. YO CREO QUE NO ES MUY DIFICIL SABER COMO CONECTAR EL RESTO DE POTENCIOMETROS, PERO DE TODOS MODOS, PROXIMAMENTE PONDRE EL CIRCUITO Y CODIGO DE 8 POTENCIOMETROS.

Comenzamos por definir un multiplexor:

Un multiplexor es un circuito integrado (una pastilla con patas) que nos permite utilizar múltiples entradas, seleccionando cada una de ellas a través de unos pines que, en este caso son 3: A, B y C; con los que indicamos cual es la entrada de datos que queremos utilizar.

En este primer caso vamos a utilizar un solo multiplexor para entender su funcionamiento. Tengo que confesar que he tenido que hacer muchas pruebas, aun conociendo este componente mas que de sobra, porque yo en vez de montarlos en una placa utilizo "Multisim", un programa de simulación de circuitos reconocido internacionalmente como uno de los mejores. El caso es que muchas veces lo que montaba no funcionaba bien y después se me metió en la cabeza que teniendo 3 cables para seleccionar las entradas, lo mas que podría hacer es poner 4 multiplexores, con lo que tendría 8x4=32 entradas. Después leí por la red algo de conectar multiplexores en cascada y no conseguía entender como se hace. Estaba hechandome para atrás, porque yo necesito 132 entradas analógicas para potenciometros y pulsadores. De buenas a primera, cuando volví de jugar unas partidas al billar de carambolas para relajarme, se me vino a la cabeza el circuito necesario para poder manejar 9 o mas multiplexores de 16 entradas, con lo que consigo las que necesito e incluso me sobran. Pero eso lo veremos en el siguiente ejercicio, que desde luego, no va a tardar tanto como este. Tenéis que disculparme un poco porque estoy saturado de trabajo y apenas tengo un rato libre. Vamos al lío.


El multiplexor que vamos a utilizar es el HEF4051BP, que proporciona 8 entradas.
Podéis descargar el datasheet en pdf desde aquí: http://pdf1.alldatasheet.com/datasheet-pdf/view/173652/UTC/4051/++043WWFuPPzZ-Jt-++/datasheet.pdf

Está en ingles y en ese documento está toda la información del integrado, aunque quizás no entiendas muchas cosas en el.

Nosotros vamos a seguir con lo nuestro. A la hora de conectar el circuito integrado debemos tener en cuenta que tiene una mueca en uno de los extremos. Esa mueca se utiliza para saber cual es el pin numero 1 del circuito integrado (en adelante solo diré integrado). Podéis ver la numeración de las patillas en el siguiente dibujo:


En el dibujo podemos ver que es cada patilla. Podemos ver que tenemos en la patilla 1 -> X4. Esto significa que esa es la entrada numero 4, de modo que tenemos la siguiente estructura:

Patilla Entrada
13 x0
14 x1
15 x2
12 x3
1 x4
5 x5
2 x6
4 x7

Después tenemos en la patilla 16 -> VDD. Esta patilla tiene que ir siempre a 5 Voltios, porque es la que alimenta al integrado.

Las patillas 6 -> INH, 7 -> VEE, 8 -> VSS serán conectadas a GND o masa.

La patilla 3 -> X es la patilla donde obtenemos el valor dependiendo de la selección que tengamos hecha.

Por ultimo, las patillas 11 -> A, 10, -> B, 9 -> C son las que se utilizan para seleccionar la entrada.

Situarse del siguiente modo: En cada patilla de entrada X0...X7, conectamos el cursor de un potenciometro, es decir, la patilla central. En un extremo conectamos 5V y el otro extremo lo conectamos a masa. Cada potenciometro enviá un valor a una de las 8 entradas y, con A,B,C, que son como interruptores, seleccionamos la entrada que vamos a usar, colocando cada una de estas letras en tensión alta (5V) o tensión baja (Gnd).

Voy a poneros la tabla de verdad a continuación y después os comento lo que significa cada cosa, aunque estoy seguro de que tu mismo puedes entenderlo sin que te lo explique:

|A| |B| |C| |X|

|0| |0| |0| |0|

|0| |0| |1| |4|

|0| |1| |0| |2|

|0| |1| |1| |6|

|1| |0| |0| |1|

|1| |0| |1| |5|

|1| |1| |0| |3|

|1| |1| |1| |7|

A, B y C pueden tener dos estados: 0 y 1. El primero es cuando lo conectamos a GND o masa. Valdrá 1 cuando lo conectemos a 5 Voltios, ¿sencillo no?. Ahora fijate otra vez en la tabla. Si coloco A, B y C a GND o masa le estaría indicando al multiplexor que la entrada que voy a utilizar es la entrada x0.

Ahora tu solo, piensa que combinación seria necesaria para utilizar la entrada x1.

Efectivamente, tendríamos que poner A -> 5V, B -> GND, C -> GND. ¿Lo habrás hecho bien no?, es muy importante que comprendas esto.

En este tutorial vamos a utilizar solamente las entradas X0 y X1. Por esto, voy a poner el circuito final, pero solo con dos entradas, para evitar tener que poner tantos cables que no vamos a utilizar y cargar el dibujo de lineas que acabarían por ser medio incomprensibles. El resto de patillas no las he conectado a ningún sitio, las he dejado sin conectar. Si alguien cree que esto es un error que comente y lo cambio, pero a mi así me va perfecto.


Recordar que cuando un cable pasa por encima de otro se puede observar que hay un arco. De todos modos ningún cable está cruzado con ninguno.

Después tenemos que subir el siguiente código a la placa de arduino:

int bitA = 2;
int bitB = 3;
int bitC = 4;
int analogPin = 0;

int midiChannel0 = 1;
int lastAnalog0 = 0;
int analogSmooth0 = 6;

int midiChannel1 = 1;
int lastAnalog1 = 0;
int analogSmooth1 = 6;

void setup()
{
Serial.begin(115200);
pinMode(bitA,OUTPUT);
pinMode(bitB,OUTPUT);
pinMode(bitC,OUTPUT);
}

void loop()
{
/* CODIGO PARA ENTRADA 0 */
digitalWrite(bitA,LOW);
digitalWrite(bitB,LOW);
digitalWrite(bitC,LOW);

int reading0 = 0;
reading0 = analogRead(analogPin)/8;
if (abs(reading0-lastAnalog0) > analogSmooth0)
{
lastAnalog0 = reading0;
controlChange(midiChannel0,10,reading0);
}

/* CODIGO PARA ENTRADA 1 */
digitalWrite(bitA,HIGH);
digitalWrite(bitB,LOW);
digitalWrite(bitC,LOW);

int reading1 = 0;
reading1 = analogRead(analogPin)/8;
if (abs(reading1-lastAnalog1) > analogSmooth1)
{
lastAnalog1 = reading1;
controlChange(midiChannel1,127,reading1);
}
}

void controlChange(byte channel, byte controller, byte value)
{
midiMsg(channel+0xB0, controller, value);
}

void midiMsg(byte cmd, byte data1, byte data2)
{
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}


RECUERDA, EN EL S2MIDI HAY QUE INDICARLE LA VELOCIDAD EN BAUDIOS, QUE EN ESTE EJEMPLO ESTAMOS PONIENDOLA A 115200.


¿Quillo ke has hesho aki?

Tranquilo, no es complicado.

En las primeras cuatro lineas declaro 3 variables para indicarle a la placa cuales son los pines de A, B y C, que son 2, 3 y 4 (digitales) respectivamente. Después declaro otra variable donde le diré a la placa que el pin 0 (analógico) es donde vamos a colocar el valor de cada potenciometro.

Después vienen otras 6 variables, que ya deberías conocer de anteriores códigos. midiChannel0 para indicar el canal midi donde trabaja el potenciometro 0 (canal 1), lastAnalog0 que almacena el ultimo valor que daba el potenciometro 0 y después analogSmooth0 que es el que usamos para comprobar la diferencia del valor anterior con el valor nuevo y detectar el cambio. Esto mismo lo aplicamos a midiChannel1, lastAnalog1 y analogSmooth1.

Después viene la función setup() en la que indicamos la velocidad de envío de los datos al puerto usb e indicamos a la placa arduino que ponga los pines bitA, bitB y bitC como salida, porque poniéndolos como HIGH o LOW indicaremos si se trata de un 1 o un 0.

Llegamos al loop() y aquí viene lo complicado, aunque no es muy difícil de comprender. las 3 primeras ordenes ponen el pin A, B y C a LOW, o lo que es lo mismo, pone A = 0, B = 0 y C = 0. A continuación tenemos el trozo de código que coge el valor que hay en la variable analogPin (pin analógico 0) y comprueba si ha variado en 6 unidades (según analogSmooth0). Si varia entra dentro de la condición if para poner el nuevo valor a la variable lastAnalog0 y enviar los datos a través de la función controlChange al ordenador.

Si no hubiera una diferencia de 6 unidades se saltaría el if y seguiría con la segunda parte, que no la voy a explicar porque es igual que la primera parte del loop() solo que los nombres de las variables cambian de terminar en 0 a terminar en uno.

Solo diré que en a partir de donde pone /* CODIGO PARA ENTRADA 1 */, en las 3 primeras lineas indicamos a la placa de arduino que ponga A = 1, B = 0 y C = 0, con lo que estaríamos indicando al multiplexor que ahora debe leer la entrada 1, que es donde tenemos conectado el otro potenciometro.

Una vez terminado de hacer todo esto, como siempre, el loop() se repetiría hasta que quitáramos la placa del puerto usb.

Nada mas. Siento haber tardado tantísimo en actualizar. He estado trabajando un tiempo y apenas he tenido un rato para hacer pruebas. El siguiente tutorial no tardara en venir. En el vamos a utilizar 3 multiplexores 4051 de modo que tengamos 64 entradas analógicas. Para ello conectaremos las salidas de 2 de ellos a 2 entradas del tercer multiplexor y utilizaremos 6 opciones para seleccionar la entrada que queramos.

Como siempre os ruego que si hay algún error podéis comentarlo y se corregirá. Ademas, como siempre digo, me vienen bien los comentarios para saber que hay alguien en el otro extremo de mi conexión. Saludos.