Fez Cerbuino Bee – Algo sobre los pinouts, haciendo música « Devthisblog

Devthisblog Desarrollo .net, Diseño Web, Seguridad… Y todo lo que se me vaya ocurriendo…

agosto 5, 2014

Fez Cerbuino Bee – Algo sobre los pinouts, haciendo música

Filed under: .net,Awesome,Curso C#,Programación — Etiquetas: , , , , — jnavero @ 10:01 pm

Bueno, hace mucho tiempo escribí un post sobre este producto que me está resultando entretenido estos últimos días.
He de decir, que la documentación al lado de la cantidad de cosas que hay para arduino es realmente poca por no decir que lo que hay de esta placa está en su propia pagina web.
Es decir una @###@@@##@#** ^_^
pero, bueno es lo que tengo y es con lo que estoy jugando.

En el post inicial di una referencia de una web escrita por gente de Microsoft dejo aquí la referencia:

* Configuración del entorno de trabajo y hola mundo

creo que esta lectura es imprescindible para comenzar.

En esta ocasión voy a hablar un poco de las posibilidades que tiene y voy a describir un proyecto pequeño que he desarrollado con la ayuda de la documentación.

En la web del fabricante podemos ver esto que sin duda es muy interesante para familiarizarnos con nuestra placa.

* Developer Guide

Ahora bien, según entramos, vemos mogollón de información, de parámetros, los pinouts y todo, pero, a mi criterio, lo veo todo mal explicado un poco pobre y el ejemplo la verdad, no me gusta para comenzar.

En fin, comenzaré comentando un poco el Pin Enumeration Helper Class

que está definido en dicha página web.

podemos ver claramente varias clases de tipo enumerado, con esto podríamos decir que tenemos  diferentes salidas descritas que son:

  •  Pin
    • Digital
  • Gadgeteer
    • Socket1
    • Socket2
    • Socket3
  • PWM
  • AnalogIn

Según está puesto aquí, no parece que exista ningún problema. El problema viene cuando buscamos las clases que nos vemos (al menos yo)  negros para encontrar donde están las cosas que buscamos.

Por no decir, que encontramos cosas como AnalogOut que no está descrita en esa documentación (en fin un poco desastre).

Paso a explicar que es cada cosa:

Los pines Digitales (entrada / salida): Puedes enviar una señal, es decir un uno o un cero (pasa corriente o no pasa), si vemos la clase encontramos algo así:

/// <summary>Digital I/O.</summary>
public const Cpu.Pin D9 = GHI.Hardware.FEZCerb.Pin.PA9;

Si miramos nuestra placa, en el socket de arduino vemos que están numeradas los pines desde D0 hasta D9 (desde el 10 al 13 supongo que por espacio no han puesto la D).

Hasta aquí todo bien y perfecto. La teoría nos dice que si tenemos una clase estática  llamada FEZCerbuino y que dentro existen enumeraciones para los pins pues perfecto. El problema que he tenido, es que no he visto ni rastro de esa clase. No la he encontrado por ninguna parte. así que yo he recurrido al origen y es llamar a GHI.Hardware.FEZCerb.Pin.PA9 para referirme al ¿D9? Por que se llama PA9? y bueno, este puede ser hasta orientativo por que si quiero ver el Pin D11 de la placa…

Ok, lanzo la pregunta y Kudos a quien acierte…  ¿Cómo se llamará el Pin D11 de nuestra placa? pues no, no es PA11 es PB5, algo totalmente “intuitivo” como podemos ver.

Ironías a parte, sigo con las explicaciones y he de decir, que esto no funciona si no importáis la referencia a la librería GHI.Hardware.FEZCerb (Ya sabéis, referencias, añadir nueva referencia) y listo.

Los pins de Gadgeteer: Una cosa chula que tiene esta placa son la conexiones y la cantidad de tonterías que se pueden comprar. Además existen los módulos “prefabricados” y la verdad son un gran atractivo y muy chulos.

No he probado cosas con esto por que no tengo nada mas que el modulo Ethernet que de momento no lo quiero para nada. Lo que si he visto es que el Socket 3 tiene pines analógicos y PWM. Quizá algún día me anime a hacer algo con esto, quien sabe.

Pines PWM: Estos si que son interesantes de verdad. PWM es el acrónimo de Pulse with Modulation. Con estos pines podemos enviar señales que pueden variar, estas señales son digitales pero las variamos para simular (por así decirlo) una señal analógica.

* Wikipedia PWN

Por ultimo los tenemos los analógicos que en teoría se les puede pasar el voltaje que queramos y como queramos, pero, en esta placa aun no me quedan claro…

Voy a crear un programa con los pines PWM que toca la banda sonora de la cucaracha, la he modificado ligeramente para no tener problemas de derechos de autor (la verdad es que soy mal músico).

Para este ejemplo se necesita un Buzzer o altavoz pequeño (yo se lo he quitado a mi pc de sobremesa.

Además he cogido cable rígido y lo he pelado por las puntas para poder hacer las conexiones y no tener que soldar nada.

Aquí podemos ver la foto del material usado:

Arduino

y por supuesto el código fuente que he empleado para esto es el siguiente:

 C | 
 
 copy code |
?

01
02
        const int NOTE_C = 261;
03
        const int NOTE_D = 294;
04
        const int NOTE_E = 330;
05
        const int NOTE_F = 349;
06
        const int NOTE_G = 392;
07
        const int NOTE_A = 440;
08
        const int NOTE_B = 493;
09
 
10
        private void ProgramStarted()
11
        {
12
            Debug.Print("Program Started");
13
            PlayMelody();
14
        }
15
 
16
        private void PlayMelody()
17
        {
18
            bool ledState = true;
19
            Mainboard.SetDebugLED(ledState);
20
 
21
            var myPwm = new PWM(Cpu.PWMChannel.PWM_3, 261, 0.50, false);
22
 
23
            while (true)
24
            {
25
                music(myPwm);
26
                Thread.Sleep(300);
27
                ledState = !ledState;
28
                Mainboard.SetDebugLED(ledState);
29
            }            
30
        }
31
 
32
        private void music(PWM myPwm)
33
        {
34
            beep(myPwm, NOTE_D, 150);
35
            beep(myPwm, NOTE_D, 150);
36
            beep(myPwm, NOTE_D, 150);
37
            beep(myPwm, NOTE_G, 150);
38
            beep(myPwm, NOTE_B, 300);
39
            Thread.Sleep(250);
40
            beep(myPwm, NOTE_D, 300);
41
            beep(myPwm, NOTE_D, 150);
42
            beep(myPwm, NOTE_D, 150);
43
            beep(myPwm, NOTE_G, 150);
44
            beep(myPwm, NOTE_B, 150);
45
            Thread.Sleep(250);
46
            beep(myPwm, NOTE_G, 300);
47
            beep(myPwm, NOTE_G, 300);
48
            beep(myPwm, NOTE_F, 150);
49
            beep(myPwm, NOTE_F, 150);
50
            beep(myPwm, NOTE_E, 150);
51
            beep(myPwm, NOTE_E, 150);
52
            beep(myPwm, NOTE_D, 150);
53
            Thread.Sleep(250);
54
            beep(myPwm, NOTE_D, 150);
55
            beep(myPwm, NOTE_D, 150);
56
            beep(myPwm, NOTE_D, 300);
57
            beep(myPwm, NOTE_F, 150);
58
            beep(myPwm, NOTE_A, 150);
59
            Thread.Sleep(250);
60
            beep(myPwm, NOTE_D, 150);
61
            beep(myPwm, NOTE_D, 150);
62
            beep(myPwm, NOTE_D, 300);
63
            beep(myPwm, NOTE_F, 300);
64
            beep(myPwm, NOTE_A, 150);
65
            Thread.Sleep(250);
66
            beep(myPwm, NOTE_D, 150);
67
            beep(myPwm, NOTE_E, 150);
68
            beep(myPwm, NOTE_D, 150);
69
            beep(myPwm, NOTE_C, 300);
70
            beep(myPwm, NOTE_B, 300);
71
            beep(myPwm, NOTE_A, 150);
72
            beep(myPwm, NOTE_G, 150);
73
            Thread.Sleep(250);
74
        }
75
 
76
        private void beep(PWM myPwm, int note, int duration)
77
        {
78
            myPwm.Stop();
79
            myPwm.Frequency = note;
80
            myPwm.Start();
81
            Thread.Sleep(duration);
82
        }
83
 
84

Para poder utilizar la clase PWM, necesitáis importar la referencia Microsoft.SPOT.Hardware.PWM además de añadir el using correspondiente
using Microsoft.SPOT.Hardware.PWM;

Ahh!!!, antes de que se me olvide este ejemplo está creado para el pin Cpu.PWMChannel.PWM_3 o lo que es lo mismo el pin D5.
Así que el altavoz debe ir enganchado Rojo en el D5 y negro en Masa

Aquí os dejo la imagen del montaje…

arduino2

Nota: El código está inspirado en proyectos similares de arduino, adaptado a cerbuino para que funcione correctamente.

Hasta pronto.

No hay comentarios »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress