miércoles, 15 de junio de 2011

EJERCICIO Nº 5: Timbres y zumbadores electrónicos

Los timbres emiten un sonido cuando están conectados a una fuente de alimentación. Este sonido normalmente es “fijo” a una frecuencia determinada; así, los timbres sólo pueden emitir un solo “tono”. Los zumbadores electrónicos usan un tipo de sistema diferente para emitir sonidos y pueden ser utilizados para emitir sonidos en diferentes tonos al proveerlos de una salida “pulsada”.


Para probar este programa se debe instalas un zumbador electrónico (SPE002) en el tablero tutorial. Para hacer esto, se instalan los conectores del zumbador, en la entrada marcada con la palabra PIEZO, ubicada aproximadamente en el centro del tablero tutorial. Luego, se suelda el cable rojo en el agujero marcado “+” y el cable negro en el agujero marcado con “-”.
El sistema PICAXE puede crear automáticamente sonidos de diferentes frecuencias utilizando el comando sound.


main:

sound 6, (50,100) `emitir un sonido en salida 6 con tono 50 y duración 100
sound 6, (100,100) `emitir un sonido en salida 6 con
sound 6, (120,100) `emitir un sonido en sali

pause 1000 `esperar 1 segundo
goto main `saltar al inicio del programa (main)

En el programa, el primer número indica el número de pin (en el tablero tutorial el pin de salida 6 es el utilizado). El siguiente número es el tono, seguido por último de la duración del sonido. Mientras más alto sea el número de tono, mayor será la “altura tonal” del sonido (hay que tener precaución porque algunos zumbadores no pueden reproducir sonidos mayores de 127 y puede que no sean escuchados).
El siguiente programa utiliza un bucle for…next para producir 120 sonidos diferentes.

main:

for b0 = 1 to 120 `iniciar un bucle for.next

sound 6, (b0,50) `emitir sonido en la salida 6 con tono b0 y duración 50

next b0 `siguiente b0

end

El número almacenado en la variable b0 aumenta 1 unidad en cada bucle (1-2-3, etc.). Por consiguiente, al utilizar la variable b0 para asignar el tono, el mismo puede ser cambiado en cada bucle.
El siguiente programa realiza la misma función pero cambiando el tono en orden descendente, es decir de 120 a 1.

main:

for b0 = 120 to 1 step -1 `iniciar bucle for.next (en cuenta regresiva)

sound 6, (b0,50) `emitir sonido salida 6 (tonob0- durac.50)

next b0 `siguiente b0

end

El siguiente programa emite todos los 256 sonidos posibles:

main:

sound 6, (b0,50) `emitir sonido en la salida 6

let b0 = b0 + 1 `sumar 1 al valor de la variable b0

goto main `ir a inicio del programa (main)

En este último caso el programa es ejecutado indefinidamente. Sin embargo, es importante comprender como el PICAXE ejecuta las operaciones matemáticas.
El PICAXE sólo interpreta números bytes, o sea números enteros del 0 al 255. No pude interpretar fracciones, ni números negativos, ni números mayores de 255. Así, si se trata de sumar 1 a 255, el PICAXE saltará de nuevo a 0. Por consiguiente, en el programa anterior, el valor de la variable b0 se comportará de la siguiente manera mientras el programa se ejecuta: …252-253-254-255-0-1-2-etc.

EJERCICIO Nº 4: Controlando la velocidad de un motor

Debido a que el sistema PICAXE opera muy rápidamente, es posible controlar la velocidad de motores, encendiéndolos y apagándolos muy rápidamente. Este tipo de control se conoce como PWM (Pulse Width Modulation- Modulación de la anchura del impulso). La PWM es una buena técnica de control ya que permite a los motores operar a bajas velocidades manteniendo un alto par motor (fuerza de giro). La PWM se utiliza con frecuencia en muchas aplicaciones, por ejemplo, para controlar la velocidad de taladros y destornilladores eléctricos. Para que la PWM funcione correctamente, se necesitan motores de alta calidad. Los programas aquí mostrados están diseñados para motores solares y pueda que no funcionen correctamente si se utilizan con motores de juguetes baratos.




symbol mark1 = b6 `renombrar variables
symbol space1 = b7
symbol mark2 = b8
symbol space2 = b9

let mark1 = 2 `precargar mark1/space1 relación 2:10 (1:5)
let space1 = 10

let mark 2 = 20 `precargar mark2/space2 relación 20:10 (2:1)
let space 2 = 10

main:
for b2 = 1 to 200 `iniciar un bucle for.next
high 0 `encender motor
pause mark1 `esperar timepo indicado por mark1
low 0 `apagar motor
pause space1 `esperar tiempo indicado por space1
next b2 `siguiente b2
pause 2000 `detener motor por 2 segundos
for b2 = 1 to 200 `iniciar un bucle for.next
high 0 `encender motor
pause mark2 `esperar tiempo indicado por mark2
low 0 `apagar motor
next b2 `siguiente b2
pause 2000 `detener motor por 2 segundos
goto main